Ví dụ về chuyển hướng đầu vào đầu ra trong Linux/Unix

Chuyển hướng là gì?

Chuyển hướng là một tính năng trong Linux để khi thực hiện lệnh, bạn có thể thay đổi thiết bị đầu vào/đầu ra tiêu chuẩn. Quy trình làm việc cơ bản của bất kỳ Lệnh Linux là nó nhận đầu vào và đưa ra đầu ra.

  • Thiết bị đầu vào tiêu chuẩn (stdin) là bàn phím.
  • Thiết bị đầu ra tiêu chuẩn (stdout) là màn hình.

Với sự chuyển hướng, đầu vào/đầu ra tiêu chuẩn ở trên có thể được thay đổi.

Nhấp chuột đây nếu video không thể truy cập được

Chuyển hướng đầu ra

'>' biểu tượng được sử dụng để chuyển hướng đầu ra (STDOUT).

Chuyển hướng đầu ra

Ví dụ:

ls -al > listings

Ở đây, đầu ra của lệnh ls -al được chuyển hướng đến tập tin “danh sách” thay vì màn hình của bạn.

Chuyển hướng đầu ra

Chú thích: Sử dụng tên tệp chính xác trong khi chuyển hướng đầu ra lệnh sang một tệp. Nếu có một tệp hiện có cùng tên, lệnh chuyển hướng sẽ xóa nội dung của tệp đó và sau đó nó có thể bị ghi đè.”

Nếu bạn không muốn một file bị ghi đè mà muốn thêm nhiều nội dung hơn vào file hiện có thì bạn nên sử dụng '>>' nhà điều hành.

Chuyển hướng đầu ra

Bạn có thể chuyển hướng đầu ra tiêu chuẩn, không chỉ tới các tệp mà còn cả các thiết bị!

$ cat music.mp3 > /dev/audio

Lệnh cat đọc tệp music.mp3 và gửi đầu ra tới /dev/audio là thiết bị âm thanh. Nếu cấu hình âm thanh trong PC của bạn đúng, lệnh này sẽ phát tệp music.mp3

Chuyển hướng đầu vào

'' biểu tượng được sử dụng để chuyển hướng đầu vào (STDIN)

Chuyển hướng đầu vào

Ví dụ: Chương trình thư trong Linux có thể giúp bạn gửi email từ Terminal.

Bạn có thể nhập nội dung email bằng bàn phím thiết bị chuẩn. Nhưng nếu bạn muốn đính kèm Tệp vào email, bạn có thể sử dụng toán tử chuyển hướng đầu vào theo định dạng sau.

Mail -s "Subject" to-address < Filename

Chuyển hướng đầu vào

Thao tác này sẽ đính kèm tệp vào email và tệp sẽ được gửi đến người nhận.

Các ví dụ trên rất đơn giản. Chúng ta hãy xem xét một số kỹ thuật định hướng lại nâng cao sử dụng File Descriptcủa ors.

Tập tin Descriptors (FD)

Trong Linux/Unix, mọi thứ đều là một tệp. Tệp thông thường, Thư mục và thậm chí cả Thiết bị đều là tệp. Mỗi Tệp có một số liên kết được gọi là Tệp Descripthoặc (FD).

Màn hình của bạn cũng có File Descripthoặc. Khi một chương trình được thực thi, đầu ra sẽ được gửi đến Tệp Descripthoặc của màn hình và bạn thấy đầu ra chương trình trên màn hình của mình. Nếu đầu ra được gửi đến File Descripthoặc của máy in, đầu ra của chương trình sẽ được in.

Chuyển hướng lỗi

Bất cứ khi nào bạn thực hiện một chương trình/lệnh tại thiết bị đầu cuối, 3 tệp luôn được mở, đó là đầu vào chuẩn, đầu ra chuẩn, lỗi chuẩn.

Chuyển hướng lỗi

Những tập tin này luôn hiện diện bất cứ khi nào một chương trình được chạy. Như đã giải thích trước phần mô tả tệp, được liên kết với từng tệp này.

Tập tin Tập tin Descriptor
Đầu vào tiêu chuẩn STDIN 0
Đầu ra tiêu chuẩn STDOUT 1
Lỗi tiêu chuẩn STDERR 2

Theo mặc định, luồng lỗi được hiển thị trên màn hình. Chuyển hướng lỗi đang định tuyến các lỗi tới một tệp khác ngoài màn hình.

Tại sao chuyển hướng lỗi?

Định hướng lại lỗi là một trong những tính năng rất phổ biến của Unix / Linux.

Người dùng UNIX thường xuyên sẽ cho rằng nhiều lệnh gây ra rất nhiều lỗi.

  • Ví dụ, khi tìm kiếm tệp, người ta thường gặp lỗi từ chối cấp phép. Những lỗi này thường không giúp ích cho người tìm kiếm tệp cụ thể.
  • Trong khi thực thi các tập lệnh shell, bạn thường KHÔNG muốn các thông báo lỗi làm xáo trộn đầu ra chương trình thông thường.

Giải pháp là chuyển hướng lại các thông báo lỗi vào một tệp.

Ví dụ 1

$ myprogram 2>errorsfile

Tại sao chuyển hướng lỗi

Ở trên chúng ta đang thực thi một chương trình có tên myprogram.

Bộ mô tả tệp cho lỗi tiêu chuẩn là 2.

Bằng cách sử dụng “2>”, chúng tôi chuyển hướng đầu ra lỗi sang một tệp có tên “errorfile”

Vì vậy, đầu ra của chương trình không bị lộn xộn với các lỗi.

Ví dụ 2

Đây là một ví dụ khác sử dụng câu lệnh find –

find . -name 'my*' 2>error.log

Sử dụng lệnh “find”, chúng tôi đang tìm kiếm thư mục hiện tại “.” để tìm tệp có “name” bắt đầu bằng “my”

Tại sao chuyển hướng lỗi

Ví dụ 3: Chúng ta hãy xem một ví dụ phức tạp hơn,

Quản trị viên máy chủ thường liệt kê các thư mục và lưu trữ cả lỗi và đầu ra chuẩn vào một tệp, có thể được xử lý sau. Đây là lệnh.

ls Documents ABC> dirlist 2>&1

Ở đây,

  • ghi đầu ra từ một tệp vào đầu vào của tệp khác. 2>&1 có nghĩa là STDERR chuyển hướng đến mục tiêu của STDOUT (là danh sách thư mục tệp)
  • Chúng tôi đang chuyển hướng đầu ra lỗi sang đầu ra tiêu chuẩn, đầu ra này đang được chuyển hướng lại đến danh sách tệp dirlist. Do đó, cả đầu ra đều được ghi vào tệp dirlist

Tại sao chuyển hướng lỗi

Tổng kết

  • Mỗi file trong Linux đều có một File tương ứng Descripthoặc liên kết với nó
  • Bàn phím là thiết bị đầu vào tiêu chuẩn trong khi màn hình của bạn là thiết bị đầu ra tiêu chuẩn
  • “>” là toán tử chuyển hướng đầu ra. “>>” nối thêm đầu ra vào một tệp hiện có
  • “<” là toán tử chuyển hướng đầu vào
  • “> &” Chuyển hướng lại đầu ra của tệp này sang tệp khác.
  • Bạn có thể chuyển hướng lỗi bằng cách sử dụng Tệp tương ứng Descripthoặc 2.