Computer >> Máy Tính >  >> Hệ thống >> Linux

Cách sử dụng lệnh Tee trong Linux

Cách sử dụng lệnh Tee trong Linux

Nếu bạn đã từng sử dụng các đường ống và chuyển hướng trong trình bao Linux của mình, rất có thể đôi khi bạn cũng sẽ cần sử dụng tee tiện ích.

Tee làm gì?

Một lệnh chẳng hạn như

ls

sẽ hiển thị nội dung của thư mục hiện tại của bạn. Nói cách khác, nó hiển thị những nội dung này thành stdout (đầu ra tiêu chuẩn), đây thường là màn hình của bạn, hay nói chính xác hơn là màn hình đầu cuối ảo của bạn.

Một lệnh như

ls > file123

sẽ không hiển thị gì trên màn hình của bạn. Đó là vì > dấu hiệu chuyển hướng tất cả đầu ra đến một tệp thay vì hiển thị nó với stdout. file123 bây giờ sẽ được lấp đầy bằng các nội dung đã được hiển thị trước đó trên màn hình của bạn.

Để hiển thị nội dung thư mục của bạn trên màn hình và ghi nội dung này vào tệp, bạn sử dụng hai lệnh. Với tee bạn có thể làm cả hai điều này cùng một lúc.

ls | tee file123

Tại sao sử dụng Tee nếu bạn có thể chạy một lệnh tương tự hai lần?

Trong ví dụ trên, bạn rõ ràng không cần tee nếu bạn có thể thực thi ls bình thường và sau đó thực thi nó một lần nữa và chuyển hướng đầu ra thành một tệp. Tuy nhiên, bạn sẽ gặp phải những tình huống mà đầu ra sẽ là duy nhất. Hãy tưởng tượng một tình huống mà bạn cố gắng chẩn đoán một vấn đề. Bạn chạy diagnose | tee error.log . Các lỗi bạn gặp phải có thể là duy nhất. Bạn muốn chúng hiển thị trên màn hình để bạn có thể thấy những gì đang diễn ra khi bạn kiểm tra mọi thứ. Tuy nhiên, bạn cũng muốn những lỗi đó được lưu vào một tệp, vì vậy bạn có thể xem lại chúng sau này hoặc dán đầu ra vào một diễn đàn thảo luận và hỏi mọi người về nó.

Một tình huống khác, thường gặp, khi bạn có thể cần đến tee, đó là:bạn muốn ghi đầu ra của một lệnh vào một vị trí mà chỉ người dùng root mới có thể đọc hoặc ghi. Điều này sẽ không hoạt động.

/sbin/blkid > /root/somefile

Sau đó, bạn có thể nghĩ, "Tất nhiên, chỉ cần sử dụng sudo!" Và bạn sẽ ngạc nhiên rằng điều này cũng không hoạt động:

sudo blkid > /root/somefile

Đó là vì sau sudo blkid thực thi, bạn vẫn đăng nhập với tư cách là người dùng thông thường, không phải root của bạn. Và shell của bạn (thường là bash), cố gắng ghi vào /root/somefile với thông tin đăng nhập người dùng thông thường của bạn. Để giải quyết vấn đề này, bạn có thể sử dụng tee:

/sbin/blkid | sudo tee /root/somefile

Văn bản sắp xuất hiện và lỗi chuyển hướng

tee là một lệnh hữu ích nhưng đơn giản; một lệnh command | tee somefile sẽ là đủ trong hầu hết các lần. Tuy nhiên, có hai trường hợp bạn có thể gặp phải yêu cầu các mẹo này.

Điều đầu tiên cần biết là tee, theo mặc định, luôn ghi đè lên một tệp. Nếu bạn chạy

ls | tee somefile

và sau đó

ls /tmp | tee somefile

lệnh thứ hai sẽ ghi đè nội dung của somefile và bạn sẽ chỉ thấy nội dung của lệnh cuối cùng được thực thi. Để thay đổi hành vi này, bạn có thể làm cho văn bản tee thêm vào thay vì ghi đè. Để làm như vậy, chỉ cần sử dụng -a chuyển lệnh.

ls | tee -a somefile

Điều thứ hai cần biết là không phải tất cả đầu ra đều giống nhau. Các thông báo lỗi được xử lý theo cách khác nhau và mặc dù chúng xuất hiện trên màn hình nhưng chúng không được coi là lỗi sai, vì vậy chúng sẽ không bị phát hiện. (Chúng được coi là stderr.) Đây là một ví dụ về grep.

grep -r L2TP /etc | tee somefile

Nó sẽ hiển thị một cái gì đó giống như hình ảnh sau đây.

Cách sử dụng lệnh Tee trong Linux

Các thông báo bị từ chối quyền được ghi vào stderr. Điều duy nhất được viết cho stdout là văn bản được đánh dấu. Đó là lý do tại sao bạn sẽ nhận thấy rằng nội dung của "somefile" là những gì được hiển thị trong hình ảnh bên dưới.

Cách sử dụng lệnh Tee trong Linux

Trong trường hợp này, khi grep được sử dụng để tìm kiếm văn bản, sẽ rất hữu ích khi các thông báo lỗi không được chuyển hướng đến tệp. Họ sẽ chỉ lấp đầy tệp với rác không cần thiết. Bạn chỉ muốn xem kết quả tìm được. Nhưng khi bạn cần thông báo lỗi, hãy sử dụng 2>&1 , chuyển hướng stderr đến stdout.

grep -r L2TP /etc 2>&1 | tee somefile

Với lệnh này, bạn sẽ nhận thấy rằng somefile bây giờ cũng chứa các thông báo lỗi.

Kết luận

Hy vọng rằng, hướng dẫn này bao gồm mọi thứ bạn cần để sử dụng hiệu quả nhất lệnh phát bóng. Nhưng nếu bạn gặp phải trường hợp bạn gặp khó khăn với tee, hãy để lại bình luận bên dưới và chúng tôi có thể giúp bạn.