Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình Bash

Làm Chủ Lệnh tee Linux: Chia Đầu Ra Ra File Và Console

Lệnh tee trong Linux Shell/dòng lệnh chia đầu ra của một ứng dụng – gửi đầu ra đến cả một tệp và STDOUT (console hoặc ứng dụng khác). Đây là cách dùng nó.

Lệnh tee được đặt tên theo bộ chia hình T dùng trong ống nước – một ống dẫn chuyển hướng nước từ một nguồn duy nhất theo hai hướng.

Cú Pháp Lệnh tee

tee là một lệnh với mục đích đơn giản và cú pháp đơn giản:

tee OPTIONS FILE

Lưu ý rằng:

  • OPTIONS là danh sách tùy chọn từ bảng dưới đây
  • FILE là đường dẫn đến tệp bạn muốn đầu ra được lưu
  • Đầu vào cần được piped hoặc chuyển hướng đến tee – nếu không, nó không có gì để làm việc
    • Điều này được làm bằng cách chuyển hướng đầu vào/đầu ra chuẩn – xem ví dụ dưới đây
  • tee sẽ xuất dữ liệu được cung cấp cho nó cả đến FILE được chỉ định cũng như STDOUT (đầu ra chuẩn)
    • Mặc định này sẽ xuất ra console, nhưng cũng có thể chuyển hướng đến ứng dụng khác

Tùy Chọn

Dưới đây là các tùy chọn thường dùng nhất cho lệnh tee:

Tùy chọn Mô tả
-a, –append Nối thêm vào FILE cho trước, không ghi đè
-i, –ignore-interrupts Bỏ qua tín hiệu ngắt

Để xem thêm tùy chọn, bao gồm cách chẩn đoán lỗi, bạn có thể xem hướng dẫn sử dụng bằng cách chạy:

man tee

Ví Dụ Lệnh tee

Dưới đây là một vài ví dụ đơn giản về cách tee có thể được dùng.

Tất cả các ví dụ này dùng lệnh echo, đơn giản chỉ xuất văn bản được cung cấp cho nó.

Xem Và Lưu Đầu Ra Từ Lệnh Ra Tệp Mới

Đầu ra của lệnh echo sẽ được pipe đến tee, sẽ lưu nó vào tệp cũng như xuất ra console:

echo "hello!" | tee hello.txt

Nếu tệp hello.txt tồn tại, nó sẽ bị ghi đè.

Xem Và Lưu Đầu Ra Từ Lệnh Ra Tệp Đã Tồn Tại

Ví dụ này làm giống như trên, nhưng sẽ nối thêm vào cuối tệp đã tồn tại thay vì ghi đè nó:

echo "hello again!" | tee -a hello.txt

Lưu Hoặc Nối Đầu Ra Ra Nhiều Tệp

Nhiều tệp có thể được chỉ định, phân tách bằng dấu cách:

echo "hello several files!" | tee hello1.txt hello2.txt hello3.txt

Chuyển Hướng/Pipe Đầu Ra Của tee

Đầu ra chuẩn của tee có thể được pipe và chuyển hướng. Ví dụ dưới sẽ lưu đầu ra của echo vào hello.txt. Đầu ra sau đó sẽ được truyền cho lệnh grep thay vì xuất ra console:

echo "hello!" | tee hello.txt | grep hello

Ví dụ cho thấy, lệnh grep (dùng để tìm kiếm văn bản đầu vào) đơn giản tìm kiếm đầu ra từ tee từ "hello."

Bỏ Qua Ngắt

Bỏ qua ngắt (ví dụ nhấn CTRL + C để thoát lệnh) có thể cho đầu ra sạch hơn từ tee:

echo "hello!" | tee -i hello.txt

Dùng tee Với sudo

Lệnh sudo cho phép bạn thực thi lệnh như người dùng root mà không cần đăng nhập như root và thường được dùng.

Trong đoạn sau – sudo không cho phép bạn chuyển hướng đầu ra của lệnh, vì lệnh sudo chính nó không thực hiện chuyển hướng như nó xuất hiện trước ký hiệu chuyển hướng (>):

sudo echo "hello!" > /root/hello.txt

…sẽ thất bại với lỗi quyền vì thư mục /root đòi hỏi đặc quyền root, nhưng lệnh sudo chỉ áp dụng đặc quyền này cho lệnh echo – không phải chuyển hướng đến sau đó.

Một mẹo để vượt qua điều này là dùng lệnh tee:

echo "hello!" | sudo tee /root/hello.txt

Điều này sẽ hoạt động vì đầu ra của lệnh echo được truyền cho tee, mà là lệnh được chạy với đặc quyền quản trị qua sudo – và tee lưu đầu ra.