Linux và chuyển hướng dòng lệnh

Ngày Đăng : Saturday, October 05, 2019 - Tác giả: guICE.org

Một trong những nguyên lý cốt lõi của Unix là các ứng dụng phần mềm phải nhỏ chỉ bao gồm những gì chúng cần để thực hiện công việc của chúng. Thay vì xây dựng các tính năng mới vào phần mềm hiện có, nên tạo một ứng dụng mới. Các ứng dụng nhỏ này thường được thiết kế để hoạt động cùng nhau, với đầu ra của một ứng dụng được sử dụng làm đầu vào cho một ứng dụng khác. Điều này vẫn đúng với hầu hết các ứng dụng dòng lệnh trên các hệ thống Unix và Linux hiện đại.

Linux và chuyển hướng dòng lệnh

Một trong các nguyên lý cốt lõi của Unix là các ứng dụng phần mềm phải nhỏ chỉ bao gồm các gì chúng cần để thực hiện công việc của chúng. Thay vì xây dựng các tính năng mới vào phần mềm hiện có, nên tạo một ứng dụng mới. Các ứng dụng nhỏ này thường được thiết kế để hoạt động cùng nhau, với đầu ra của một ứng dụng được sử dụng làm đầu vào cho một ứng dụng khác. Điều này vẫn đúng với hầu hết các ứng dụng dòng lệnh trên các hệ thống Unix và Linux hiện đại.

Thiết bị đầu vào / đầu ra

Các ứng dụng dòng lệnh thường có ba thiết bị đầu vào / đầu ra:

  • Đầu vào tiêu chuẩn (còn được gọi là STDIN) - thông thường là bàn phím của bạn.
  • Đầu ra tiêu chuẩn (STDOUT) - thường là màn hình.
  • Lỗi tiêu chuẩn (STDERR) - một lần nữa, thường là màn hình.

Khi làm việc với dòng lệnh Linux hoặc Unix, chuyển hướng là hành động thay đổi nơi ba đầu vào và đầu ra này đi.

Đường ống

Đầu tiên, và có lẽ là phổ biến nhất, là đường ống dẫn, được đánh dấu bằng cách sử dụng ký tự đường ống | | trong lệnh. Ký tự ống được sử dụng để lấy đầu ra tiêu chuẩn của một ứng dụng và đưa nó vào đầu vào tiêu chuẩn của một ứng dụng khác. Việc sử dụng các đường ống cho phép bạn kết hợp một số ứng dụng để tạo ra các công cụ phức tạp hơn nhiều để hoàn thành công việc một cách hiệu quả.

Chuyển hướng đầu ra

Tiếp theo, chúng tôi có chuyển hướng đầu ra cụ thể. Điều này đạt được bằng cách sử dụng ký tự>>. Điều này được đặt sau lệnh của ứng dụng và đối số của nó. Điều đó có nghĩa là đầu ra tiêu chuẩn sẽ được chuyển hướng đến tên tệp được đưa ra sau ký hiệu, ví dụ:

ls -l> filelist.txt

Điều này sẽ đưa đầu ra của lệnh ls -lv vào các tập tin có tên filelist.txt. Nếu nó không tồn tại, nó sẽ được tạo và nếu nó tồn tại thì mọi nội dung trong đó sẽ bị xóa và thay thế. Bất kỳ lỗi nào xảy ra vẫn sẽ xuất hiện trên màn hình vì lỗi tiêu chuẩn không được chuyển hướng.

Nhân đôi biểu tượng thực hiện cùng một nhiệm vụ chỉ khi tệp tồn tại và đã chứa dữ liệu, nó sẽ được lưu giữ và dữ liệu mới sẽ được ghi vào cuối tệp. Ví dụ:

ls -l >> filelist.txt

Bạn cũng có thể thêm tiền tố với ký hiệu dấu và để chuyển hướng cả đầu ra tiêu chuẩn và lỗi tiêu chuẩn sang tệp được cung cấp.

ls -l &> filelist.txt

Bây giờ chúng ta có một trường hợp đặc biệt hơn: ngoài các tên, mỗi đầu vào và đầu ra có một số, 0 cho stdin, 1 cho stdout và 2 cho stderr. Sử dụng các con số này, bạn cũng có thể chuyển hướng đầu ra lỗi sang đầu ra tiêu chuẩn hoặc ngược lại. Vì vậy, đôi khi bạn có thể thấy ví dụ trước đây của chúng tôi về việc viết cả đầu ra tiêu chuẩn và lỗi tiêu chuẩn vào một tệp được viết như thế này:

ls -l> filelist.txt 2> & 1

Bạn cũng có thể sử dụng các tệp khác nhau cho đầu ra và các lỗi như:

ls -l> filelist.txt 2> lỗi.txt

Trong trường hợp này, đầu ra bình thường sẽ chuyển đến filelist.txt và mọi lỗi được tạo có thể được nhìn thấy trong error.txt.

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

Cũng như chuyển hướng đầu ra, chúng ta có thể thực hiện chuyển hướng đầu vào. Tương tự như chuyển hướng đầu ra, chuyển hướng đầu vào được sử dụng để gửi nội dung của tệp đến đầu vào tiêu chuẩn của ứng dụng. Hãy xem xét ví dụ sau:

iptables-restore <iptables.rules

Lệnh iptables-restore sẽ thiết lập các quy tắc tường lửa iptables với các quy tắc được đưa ra ở đầu vào tiêu chuẩn. Chuyển hướng đầu vào cho phép nội dung của tệp iptables.rules được sử dụng làm đầu vào này, thường được kết hợp với lệnh iptables-save để lưu và khôi phục quy tắc tường lửa.

Bộ Tư lệnh Tee

Cuối cùng, chúng ta có một lệnh đặc biệt: lệnh tee. Lệnh này sẽ ghi đầu vào của nó cả vào một tệp và đầu ra tiêu chuẩn. Điều này rất hữu ích khi bạn viết một lệnh dài với một số lệnh được nối với nhau để cho bạn thấy đầu ra là gì giữa chuỗi. Bởi vì đó là một lệnh bình thường, bạn phải sử dụng đường ống trước khi sử dụng tee:

ls -l | tee filelist.txt

Bạn sẽ thấy với lệnh này rằng bạn có thể xem đầu ra trên màn hình cũng như nó được ghi vào tệp. Cùng với đó, tổng quan về chuyển hướng dòng lệnh Linux của chúng tôi đã hoàn tất. Nếu bạn đang tìm kiếm thêm thông tin, hãy đảm bảo đánh dấu blog VPS hoặc theo dõi chúng tôi trên Facebook Twitter .

Cảm ơn bạn đã đánh giá
0 Sao 0 Đánh giá
icon to top