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.