
Bài viết này sẽ hướng dẫn bạn cách Chuyển Hướng Dữ Liệu Trong Quá Trình Hoạt Động Process Trên Linux (Standard input – Standard output – Standard error). Nếu bạn cần hỗ trợ, xin vui lòng liên hệ VinaHost qua Hotline 1900 6046 ext.3, email về support@vinahost.vn hoặc chat với VinaHost qua livechat https://livechat.vinahost.vn/chat.php.
IO của một process trên Linux
Đối với mỗi process thực thi trên hệ điều hành linux, luôn tồn tại các kênh (channel) được đánh số mặc định đển quản lý quá trình hoạt động của process gọi là (file descriptor).
Các process khi hoạt động luôn mặc định tồn tại các channel để kết nối đến file nhằm thực hiện việc lấy dữ liệu (input), trả về dữ liệu (output) phục vụ quá trình hoạt động của process. Trong đó có 3 channel thường được sử dụng mà ta cần nhắc tới là 0,1 và 2 thường được nhắc đến như standard input (stdin), standard output (stdout) và standard error (stderr). Các kênh có số từ 3+ được process dùng để kế nối đến các file liên quan khác trong quá trình hoạt động.
Các kênh của một process (file descriptor)
Number | Chanel name | Description | Default connection | Usage |
0 | stdin | Standard input | Keyboard | read only |
1 | stdout | Standard output | Terminal | write only |
2 | stderr | Standard error | Terminal | write only |
3+ | filename | Other files | none | read and/or write |
–Source: RH124-RHEL7–
Điều hướng output cho process
Chuyển hướng output channel của một process là việc thay đổi file kết nối mặc định (default connection) của channel đó. Bằng việc sử dụng chuyển hướng output channel, ta có thể thực hiện việc ghi lại dữ liệu output, error của một process thành file hoặc đơn giản là loại bỏ khỏi màn hình hiên thị (terminal).
Mỗi channel chỉ tồn tại duy nhất một file connections. Do vậy khi chuyển hướng dữ liệu đến file connections khác, dữ liệu output của channel này sẽ không còn được ghi ở file default nữa. Ví dụ: “Khi chuyển hướng stdout đến 1 file (new file destination) cố định, dữ liệu stdout sẽ không được hiển thị trên terminal nữa (default connection) nhưng với dữ liệu thuộc channel stderr vẫn được hiển thị tại terminal”.
Trên hệ thống linux, tồn tại đặc biệt một file /dev/null. Khi channel output được chuyển hướng đến file này sẽ bị hủy bỏ mà không thực hiện lệnh ghi.
Thực thi chuyển hướng dữ liệu channel
Usage | Explaination |
>file | chuyển hướng dữ liệu stdout chanel đến <file> (ghi đè dữ liệu sẵn có) |
>>file | chuyển hướng dữ liệu stdout chanel đến <file> (ghi tiếp tục vào file) |
2>file | Chyển hướng dữ liệu stderr chanel đến <file> (ghi đè dữ liệu) |
2>/dev/null | Loại bỏ output của chanel stderr khỏi terminal |
&>file | Chuyển hướng dữ liệu của cả stdout và stderr chanel đến <file> (ghi đè dữ liệu) |
>>file 2>&1 | Chuyển hướng dữ liệu của cả stdout và stderr chanel đến <file> (ghi tiếp tục vào file) |
Điều hướng output sử dụng piplines và tee.
Điều hướng output với piplines
Điều hướng Input-Output (IO) cho phép chuyển hướng dữ liệu output của các chanel ra file cố định. Nhưng với piplines, cho phép ta sử dụng dữ liệu output của channel để làm dữ liệu đầu vào(stdin) cho 1 process khác.
Minh họa điều hướng output bằng pipline – Source: thegeeksearch.com-
- Ví dụ:
Để đếm tổng file và directory trong /etc ta có thể dùng piplines.
[john@vps001 IOE]$ ls /etc | wc -l
Điều hướng output với tee
Lênh tee cho phép ta tạo nhánh cho chanel output và thường được sử dụng cùng với piping để đồng thời xuất dữ liệu ra process khác và ghi lại trên file hoặc hiển thị ra terminal.
Minh họa điều hướng output dùng tee – Source: thegeeksearch.com-
- Ví dụ:
+ Để đồng thời liệt kê file và thư mục trong /etc xuất ra terminal và ghi lại output thành file etc.output
[john@vps001 IOE]$ ls /etc | tee etc.output
+ Để kiểm tra 10 file được thay đổi trong thời gian mới nhất trong /etc và xuất ra file
[john@vps001 IOE]$ ls -lt /etc | head -n 10 | tee last_change_file.output
+ Để redirect output file nén rar qua ssh trong quá trình nén.
[john@vps001 IOE]$ tar -cvzf – wordpress | ssh john@103.153.254.29 “cat > /home/john/Documents/wordpress.tar.gz
THAM KHẢO CÁC DỊCH VỤ TẠI VINAHOST:
>> SERVER – COLOCATION – CDN
>> HOSTING
>> WEBSITE
>> TÊN MIỀN