Hướng Dẫn Chuyển Hướng I/O Trong Linux: Tìm Hiểu và Áp Dụng Hiệu Quả

Hướng Dẫn Chuyển Hướng I/O Trong Linux

Các công cụ chuyển hướng tích hợp sẵn trong Linux cung cấp cho bạn một bộ công cụ mạnh mẽ để tối ưu hóa các quy trình làm việc. Triết lý “Unix” trong phát triển phần mềm nhấn mạnh việc tạo ra những công cụ đơn giản, mỗi công cụ làm tốt một nhiệm vụ cụ thể. Triết lý này được truyền tải qua các công cụ dòng lệnh hiện đại, vốn mạnh mẽ khi sử dụng riêng lẻ, và còn trở nên hiệu quả hơn khi kết hợp với nhau. Cho dù bạn đang phát triển phần mềm phức tạp hay chỉ làm việc trên dòng lệnh, việc hiểu và sử dụng các luồng I/O khác nhau trong môi trường của bạn sẽ giúp tăng cường hiệu suất làm việc đáng kể.

Bạn muốn nâng cao kỹ năng quản trị Linux? Hiểu rõ chuyển hướng I/O là bước đầu tiên. Để thực hành hiệu quả, hãy mua VPS chất lượng cao tại DataOnline. Với hạ tầng mạnh mẽ, bạn dễ dàng triển khai và tối ưu hệ thống Linux theo nhu cầu.

Yêu cầu tiên quyết

Để theo dõi hướng dẫn này, bạn cần có quyền truy cập vào một máy chủ Linux.

Các luồng

Dữ liệu đầu vào và đầu ra trong môi trường Linux được phân phối qua ba luồng. Các luồng này là:

  • standard input (stdin)

  • standard output (stdout)

  • standard error (stderr)

Các luồng cũng được đánh số:

  • stdin (0)

  • stdout (1)

  • stderr (2)

Trong các tương tác tiêu chuẩn giữa người dùng và terminal, standard input đến từ bàn phím của người dùng. Standard output và standard error được hiển thị trên terminal dưới dạng văn bản. Tập hợp ba luồng này được gọi chung là các luồng tiêu chuẩn.

Standard input

Luồng standard input thường truyền dữ liệu từ người dùng đến một chương trình. Các chương trình mong đợi đầu vào tiêu chuẩn thường nhận dữ liệu từ một thiết bị, chẳng hạn như bàn phím. Trong phần sau của hướng dẫn này, bạn sẽ thấy các ví dụ về việc sử dụng đầu ra của một chương trình làm đầu vào cho chương trình khác.

Standard output

Standard output là đầu ra được tạo ra bởi một chương trình. Khi luồng standard output không được chuyển hướng, nó sẽ xuất văn bản trực tiếp ra terminal. Hãy thử xuất một số văn bản tùy ý bằng cách sử dụng lệnh echo:

echo Sent to the terminal

Output

Sent to the terminal

Khi sử dụng mà không có bất kỳ tùy chọn bổ sung nào, lệnh echo sẽ xuất ra bất kỳ đối số nào được truyền vào trên dòng lệnh.

Chạy lệnh echo mà không có đối số:

echo

Lệnh này sẽ trả về một dòng trống. Một số chương trình sẽ không thực hiện gì nếu không có đối số được cung cấp.

Standard error

Standard error chứa các lỗi được tạo ra bởi một chương trình khi nó gặp sự cố. Giống như standard output, đích mặc định cho luồng này là màn hình terminal.

Hãy xem một ví dụ cơ bản về standard error sử dụng lệnh ls. Lệnh ls liệt kê nội dung của một thư mục.

Khi chạy mà không có đối số, ls liệt kê nội dung trong thư mục hiện tại. Nếu chạy ls với một thư mục được cung cấp làm đối số, nó sẽ liệt kê nội dung của thư mục đó.

ls %

% không phải là một thư mục tồn tại, lệnh này sẽ gửi văn bản sau đến standard error:

Output

ls: cannot access %: No such file or directory

Một chương trình không nhất thiết phải bị lỗi hoặc kết thúc chạy để tạo ra standard error, và việc một đầu ra được gửi đến standard output hay standard error phụ thuộc vào hành vi của chương trình. Về kỹ thuật, hai luồng này không khác biệt nhau – chỉ có chỗ rằng một luồng được dành riêng cho thông báo lỗi, và một số công cụ sẽ giả định rằng việc standard error trống nghĩa là chương trình đã chạy thành công. Một số chương trình thậm chí sẽ xuất ra các lỗi nhỏ qua standard error mà không gây ra sự cố hay làm gián đoạn đầu ra dự kiến.

Chuyển hướng luồng

Linux bao gồm các lệnh chuyển hướng cho từng luồng. Các lệnh này có thể được sử dụng để ghi standard output hoặc standard error vào một tệp. Nếu bạn ghi vào một tệp chưa tồn tại, một tệp mới có tên đó sẽ được tạo ra trước khi ghi.

Các lệnh với dấu ngoặc đơn đơn (single bracket) sẽ ghi đè nội dung hiện có của đích đến.

Ghi đè

  • > – standard output

  • < – standard input

  • 2> – standard error

Các lệnh với dấu ngoặc kép kép (double bracket) sẽ không ghi đè nội dung hiện có của đích đến.

Nối tiếp

  • >> – standard output

  • << – standard input

  • 2>> – standard error

Pipes

Pipes được sử dụng để chuyển hướng một luồng từ một chương trình sang chương trình khác. Khi standard output của một chương trình được chuyển qua pipe cho chương trình khác, đầu ra của chương trình đầu tiên sẽ được sử dụng làm đầu vào cho chương trình thứ hai, thay vì được in ra terminal. Chỉ có dữ liệu trả về từ chương trình thứ hai được hiển thị.

Ký hiệu của pipe trong Linux là dấu gạch đứng: |

Dưới đây là một ví dụ về lệnh sử dụng pipe:

ls | less

Lệnh trên lấy đầu ra của ls, lệnh liệt kê nội dung của thư mục hiện tại, và chuyển nó qua chương trình less. Lệnh less hiển thị dữ liệu được gửi đến theo từng dòng.

Thông thường, ls hiển thị nội dung thư mục theo nhiều hàng. Khi chạy qua less, mỗi mục được đặt trên một dòng mới.

Mặc dù chức năng của pipe có vẻ tương tự như >>>, sự khác biệt là pipe chuyển hướng dữ liệu từ một lệnh sang lệnh khác, trong khi >>> chỉ được sử dụng để chuyển hướng đến các tệp.

Bộ lọc

Bộ lọc là một lớp các chương trình thường được sử dụng với đầu ra được chuyển qua pipe từ một chương trình khác. Nhiều chương trình trong số đó cũng có ích khi sử dụng độc lập, nhưng chúng minh họa rõ ràng hành vi của pipe.

  • find – trả về các tệp có tên khớp với đối số được truyền cho find.

  • grep – trả về văn bản khớp với mẫu chuỗi được truyền cho grep.

  • tee – chuyển hướng standard input sang cả standard output và một hoặc nhiều tệp.

  • tr – tìm và thay thế một chuỗi bằng chuỗi khác.

  • wc – đếm số ký tự, dòng và từ.

Ví dụ

Bây giờ, khi bạn đã được giới thiệu về chuyển hướng, pipe và các bộ lọc cơ bản, hãy cùng xem xét một số mẫu chuyển hướng thông dụng và ví dụ.

Lệnh theo mẫu > file chuyển hướng standard output của một lệnh sang một tệp.

ls ~ > root_dir_contents.txt

Lệnh trên lấy nội dung của thư mục chính (~) làm đầu ra và ghi đầu ra đó vào tệp có tên root_dir_contents.txt. Nó sẽ xóa mọi nội dung cũ trong tệp vì đây là lệnh sử dụng dấu ngoặc đơn đơn.

Lệnh theo mẫu > /dev/null chuyển hướng standard output đến hư không. /dev/null là một tệp đặc biệt được sử dụng để loại bỏ bất kỳ dữ liệu nào được chuyển hướng đến nó. Nó được dùng để loại bỏ đầu ra không cần thiết, có thể gây cản trở chức năng của lệnh hoặc script. Bất kỳ đầu ra nào được gửi tới /dev/null đều sẽ bị loại bỏ.

ls > /dev/null

Lệnh này loại bỏ standard output trả về từ lệnh ls bằng cách chuyển hướng nó đến /dev/null.

Lệnh theo mẫu 2> file chuyển hướng standard error của một lệnh sang một tệp, ghi đè nội dung đã có.

mkdir '' 2> mkdir_log.txt

Lệnh trên chuyển hướng lỗi do tên thư mục không hợp lệ ('') và ghi lỗi đó vào tệp mkdir_log.txt. Lưu ý rằng lỗi vẫn được gửi ra terminal và hiển thị dưới dạng văn bản.

Lệnh theo mẫu >> file chuyển hướng standard output của một lệnh sang một tệp mà không ghi đè nội dung đã có.

echo Written to a new file > data.txt
echo Appended content to an existing file >> data.txt

Cặp lệnh trên đầu tiên chuyển hướng văn bản được nhập bởi lệnh echo vào một tệp mới. Sau đó, lệnh echo thứ hai nối thêm văn bản vào tệp đã có mà không ghi đè nội dung của nó.

Lệnh theo mẫu 2>> file chuyển hướng standard error của một lệnh sang một tệp mà không ghi đè nội dung đã có. Mẫu này hữu ích để tạo file log lỗi cho một chương trình hoặc dịch vụ, vì tệp log sẽ không bị xóa nội dung cũ mỗi khi ghi mới.

find '' 2> stderr_log.txt
wc '' 2>> stderr_log.txt

Lệnh trên chuyển hướng thông báo lỗi do đối số không hợp lệ của lệnh find sang tệp stderr_log.txt, sau đó nối tiếp thông báo lỗi do đối số không hợp lệ của lệnh wc vào cùng tệp.

Lệnh theo mẫu | command chuyển hướng standard output của lệnh đầu tiên thành standard input của lệnh thứ hai.

find /var lib | grep deb

Lệnh trên tìm kiếm trong thư mục /var và các thư mục con các tên tệp hoặc phần mở rộng khớp với chuỗi deb, và trả về đường dẫn của các tệp với phần khớp được đánh dấu màu đỏ.

Lệnh theo mẫu | tee file (bao gồm lệnh tee) chuyển hướng standard output của một lệnh sang một tệp và ghi đè nội dung của tệp đó. Sau đó, nó hiển thị đầu ra đã chuyển hướng trên terminal. Nếu tệp không tồn tại, nó sẽ tạo một tệp mới.

Trong ngữ cảnh mẫu này, lệnh tee thường được sử dụng để xem đầu ra của một chương trình trong khi đồng thời lưu nó vào tệp.

wc /etc/magic | tee magic_count.txt

Lệnh trên chuyển hướng kết quả đếm số ký tự, dòng và từ của tệp /etc/magic (được shell Linux sử dụng để xác định loại tệp) sang lệnh tee, lệnh này sau đó chia đầu ra của wc theo hai hướng: hiển thị trên terminal và ghi vào tệp magic_count.txt. Hãy hình dung lệnh tee như hình chữ T: phần dưới của chữ T là dữ liệu ban đầu, và phần trên là dữ liệu được chia theo hai hướng (standard output và terminal).

Nhiều pipe có thể được sử dụng để chuyển hướng đầu ra qua nhiều lệnh và/hoặc bộ lọc khác nhau.

Kết luận

Việc học cách sử dụng các khả năng chuyển hướng tích hợp sẵn trong dòng lệnh Linux là một kỹ năng quan trọng giúp tối ưu hóa quy trình làm việc của bạn. Khi đã hiểu cơ bản về cách hoạt động của chuyển hướng và pipe, bạn có thể bắt đầu khám phá thế giới shell scripting – nơi các chương trình và mẫu lệnh này thường xuyên được áp dụng.

Khi áp dụng chuyển hướng I/O trên Linux, một môi trường ổn định là yếu tố then chốt. Hãy thử thuê VPS giá rẻ từ DataOnline. Hiệu năng cao, hỗ trợ 24/7 giúp bạn học và thử nghiệm Linux dễ dàng.

Ngoài ra, tìm kiếm các lệnh cụ thể hoặc các thao tác bạn muốn thực hiện trên dòng lệnh (ví dụ: “xóa tất cả các tệp trong thư mục bắt đầu bằng chữ in hoa”) sẽ giúp bạn tiết kiệm thời gian và hoàn thành nhiệm vụ một cách hiệu quả.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *