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

Tee làm gì?

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

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 thiết bị đầu cuối ảo của bạn.

Một lệnh như

sẽ không hiển thị gì trên màn hình của bạn. Đó là vì > sign 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 với 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.

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 hiện 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 nhận được 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ứ. Nhưng 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.

Sau đó, bạn có thể nghĩ, Well, of course, just use sudo! Và bạn sẽ ngạc nhiên rằng điều này cũng không hoạt động:

Đó 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 viết thư cho /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:

Xuất hiện Văn bản và Lỗi chuyển hướng

tee là một lệnh hữu ích nhưng đơn giản; một cơ bản 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 sẽ 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

và sau đó

lệnh thứ hai sẽ ghi đè lên 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.

Đ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à thông báo lỗi, 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.

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

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 dưới đây.

Trong trường hợp này, khi grep được sử dụng để tìm kiếm văn bản, điều hữu ích là 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 thành stdout.

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.

Sự 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 tối đa lệnh phát bóng. Nhưng nếu bạn gặp phải trường hợp kẹt tee, hãy để lại bình luận bên dưới, chúng tôi có thể giúp đỡ.

Bài viết này có hữu ích không?

Previous articleCách sử dụng lệnh rsync trong Linux
Next articleCách sử dụng MacOS Terminal: Hướng dẫn cho người mới bắt đầu

LEAVE A REPLY

Please enter your comment!
Please enter your name here