Ví dụ về chuyển hướng đầu vào đầu ra trong Linux/Unix
⚡ Tóm tắt thông minh
Trong Linux và Unix, chuyển hướng (redirection) thay đổi nơi một lệnh đọc đầu vào hoặc gửi đầu ra, hoán đổi (swap).ping Bàn phím và màn hình dành cho các tệp hoặc thiết bị sử dụng các toán tử như dấu lớn hơn, dấu nhỏ hơn và toán tử nối thêm.

Chuyển hướng là một trong những tính năng hữu ích nhất của Linux và shell Unix, vì nó cho phép bạn quyết định nơi một lệnh đọc đầu vào và gửi đầu ra. Trang này giải thích về chuyển hướng đầu ra, đầu vào và lỗi với các ví dụ minh họa.
Chuyển hướng là gì?
Chuyển hướng là một tính năng trong Linux cho phép bạn thay đổi thiết bị đầu vào và đầu ra chuẩn khi thực thi một lệnh. Quy trình làm việc cơ bản của bất kỳ hệ điều hành nào đều dựa trên tính năng này. Lệnh Linux Đó là việc nó nhận đầu vào và cho 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 tính năng chuyển hướng, đầu vào và đầu ra tiêu chuẩn ở trên có thể được thay đổi.
Chuyển hướng đầu ra
Hình ảnh bên dưới đánh dấu sự bắt đầu của các ví dụ về chuyển hướng đầu ra.
Ký hiệu '>' được sử dụng để chuyển hướng đầu ra (STDOUT).
Ví dụ:
ls -al > listings
Ở đây, kết quả của lệnh `ls -al` được chuyển hướng đến tệp "listings" thay vì hiển thị trên màn hình của bạn. Ảnh chụp màn hình bên dưới cho thấy kết quả.
Lưu ý: Hãy sử dụng tên tệp chính xác khi chuyển hướng đầu ra lệnh đến một tệp. Nếu tệp có cùng tên đã tồn tại, lệnh được chuyển hướng sẽ xóa nội dung của tệp đó và ghi đè lên.
Nếu bạn không muốn ghi đè lên một tập tin nhưng muốn thêm nội dung vào tập tin hiện có, hãy sử dụng toán tử '>>'. Ảnh chụp màn hình bên dưới hiển thị nội dung được thêm vào bằng '>>'.
Bạn có thể chuyển hướng đầu ra chuẩn không chỉ đến các tệp mà còn đến các thiết bị.
$ cat music.mp3 > /dev/audio
Lệnh cat đọc tập tin music.mp3 và gửi tín hiệu đầu ra đến /dev/audio, là thiết bị âm thanh. Nếu cấu hình âm thanh trên máy tính của bạn chính xác, lệnh này sẽ phát tệp nhạc.mp3.
Chuyển hướng đầu vào
Hình ảnh bên dưới minh họa việc chuyển hướng đầu vào.
Ký hiệu '<' được sử dụng để chuyển hướng đầu vào (STDIN).
Ví dụ: Chương trình thư điện tử trong Linux có thể giúp bạn gửi email từ thiết bị đầu cuối.
Bạn có thể nhập nội dung email bằng bàn phím, thiết bị nhập liệu tiêu 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 nhập liệu theo định dạng sau.
mail -s "Subject" to-address < Filename
Ảnh chụp màn hình bên dưới cho thấy lệnh mail đang đọc một tệp làm đầu vào.
Thao tác này sẽ đính kèm tệp vào email và gửi đến người nhận.
Các ví dụ trên khá đơn giản. Bây giờ hãy xem xét một số kỹ thuật chuyển hướng nâng cao sử dụng bộ mô tả tệp.
Tập tin Descriptors (FD)
Trong Linux và Unix, mọi thứ đều là tập tin. Các tập tin thông thường, thư mục, và thậm chí cả thiết bị đều là tập tin. Mỗi tập tin đều có một số liên kết được gọi là bộ mô tả tập tin (FD).
Sơ đồ bên dưới minh họa các luồng chuẩn và các bộ mô tả tệp của chúng.
Màn hình của bạn cũng có một bộ mô tả tệp. Khi một chương trình được thực thi, đầu ra được gửi đến bộ mô tả tệp của màn hình, và bạn thấy đầu ra của chương trình trên màn hình của mình. Nếu đầu ra được gửi đến bộ mô tả tệp của máy in, đầu ra của chương trình sẽ được in ra.
Chuyển hướng lỗi
Mỗi khi bạn thực thi một chương trình hoặc lệnh tại thiết bị đầu cuối, ba tệp luôn được mở, đó là tệp đầu vào chuẩn, tệp đầu ra chuẩn và tệp lỗi chuẩn.
Các tập tin này luôn hiện diện mỗi khi một chương trình chạy. Như đã giải thích trước đó, mỗi tập tin này đều được liên kết với một bộ mô tả tập tin.
| 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 sẽ chuyển các lỗi đến một tệp khác thay vì hiển thị trên màn hình.
Tại sao chuyển hướng lỗi?
Chuyển hướng lỗi là một trong những tính năng rất phổ biến của Unix và Linux.
Những người dùng Unix thường xuyên sẽ biết rằng nhiều lệnh thường gây ra rất nhiều lỗi. Ví dụ, khi tìm kiếm tệp, người ta thường nhận được cho phép Các lỗi bị từ chối thường không giúp ích gì cho người đang tìm kiếm một tập tin cụ thể. 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 rối loạn đầu ra chương trình thông thường.
Giải pháp là chuyển hướng các thông báo lỗi vào một tệp.
Ví dụ 1
$ myprogram 2>errorsfile
Ảnh chụp màn hình bên dưới hiển thị lệnh này trong cửa sổ dòng lệnh.
Ở trên, chúng ta đang thực thi một chương trình có tên là myprogram. Bộ mô tả tệp cho lỗi chuẩn là 2. Sử dụng “2>”, chúng ta chuyển hướng đầu ra lỗi đến một tệp có tên là “errorsfile”. Do đó, đầu ra của chương trình không bị quá tải bở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 ta tìm kiếm trong thư mục hiện tại “.” một tệp có tên bắt đầu bằng “my”, và chuyển mọi lỗi đến error.log.
Ví dụ 3: Chúng ta hãy xem xét 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 cả lỗi lẫn đầu ra chuẩn vào một tệp, để có thể xử lý sau này. Đây là lệnh.
ls Documents ABC> dirlist 2>&1
Sơ đồ bên dưới cho thấy cả hai luồng dữ liệu được ghi lại trong cùng một tệp.
Đây:
- 2>&1 có nghĩa là STDERR được chuyển hướng đến cùng một đích với STDOUT (đó là danh sách thư mục tệp).
- Thông báo lỗi được chuyển hướng đến đầu ra chuẩn, sau đó được chuyển hướng đến danh sách thư mục tệp. Do đó, cả hai luồng đều được ghi vào danh sách thư mục tệp.
Sơ đồ dưới đây tóm tắt cách thức hoạt động phối hợp giữa đầu vào, đầu ra và chuyển hướng lỗi.






.png)