Có những lúc bạn muốn theo dõi thủ công đầu ra của một lệnh và đồng thời đảm bảo đầu ra được ghi vào một tệp để bạn có thể tham khảo sau. Nếu bạn đang tìm kiếm một công cụ Linux có thể thực hiện việc này cho mình, bạn sẽ vui mừng khi biết rằng có một lệnh tee được xây dựng cho mục đích này.
Trong hướng dẫn này, chúng ta sẽ thảo luận về những điều cơ bản của lệnh tee bằng một số ví dụ dễ hiểu. Nhưng trước khi làm điều đó, cần đề cập rằng tất cả các ví dụ được sử dụng trong bài viết này đều đã được thử nghiệm trên Ubuntu 16.04 LTS.
Và đây là cách trang hướng dẫn giải thích:
Các ví dụ theo kiểu Hỏi & Đáp sau đây sẽ giúp bạn hiểu rõ hơn về cách lệnh hoạt động.
Và điều bạn muốn là đầu ra cũng sẽ được ghi vào một tệp song song. Sau đó, đây là nơi bạn có thể sử dụng lệnh tee.
ping google.com | tee output.txt
Ảnh chụp màn hình sau đây cho thấy đầu ra đã được ghi vào tệp 'output.txt' cùng với việc được ghi trên stdout.
Vì vậy, điều đó sẽ xóa cách sử dụng cơ bản của tee.
Về cơ bản, tùy chọn -a buộc tee phải thêm thông tin vào tệp.
Ví dụ:
Trong những tình huống như thế này, bạn có thể sử dụng tee để nâng cao đặc quyền khi đang di chuyển.
:w !sudo tee %
Lệnh đã đề cập ở trên sẽ yêu cầu bạn nhập mật khẩu root, sau đó cho phép bạn lưu các thay đổi.
Điều này hữu ích khi bạn muốn tắt lệnh bằng ctrl+c nhưng muốn tee thoát một cách bình thường.
Trong hướng dẫn này, chúng ta sẽ thảo luận về những điều cơ bản của lệnh tee bằng một số ví dụ dễ hiểu. Nhưng trước khi làm điều đó, cần đề cập rằng tất cả các ví dụ được sử dụng trong bài viết này đều đã được thử nghiệm trên Ubuntu 16.04 LTS.
Lệnh tee Linux
Lệnh tee về cơ bản đọc từ đầu vào chuẩn và ghi vào đầu ra chuẩn và các tệp. Sau đây là cú pháp của lệnh:
Mã:
tee [OPTION]... [FILE]...
Mã:
Sao chép đầu vào chuẩn vào mỗi FILE và cả đầu ra chuẩn.
Câu hỏi 1. Làm thế nào để sử dụng lệnh tee trong Linux?
Giả sử bạn đang sử dụng lệnh ping vì một lý do nào đó.
Mã:
ping google.com
Và điều bạn muốn là đầu ra cũng sẽ được ghi vào một tệp song song. Sau đó, đây là nơi bạn có thể sử dụng lệnh tee.
ping google.com | tee output.txt
Ảnh chụp màn hình sau đây cho thấy đầu ra đã được ghi vào tệp 'output.txt' cùng với việc được ghi trên stdout.
Vì vậy, điều đó sẽ xóa cách sử dụng cơ bản của tee.
Câu hỏi 2. Làm thế nào để đảm bảo tee thêm thông tin vào các tệp?
Theo mặc định, lệnh tee ghi đè thông tin trong tệp khi được sử dụng lại. Tuy nhiên, nếu muốn, bạn có thể thay đổi hành vi này bằng cách sử dụng tùy chọn dòng lệnh -a.
Mã:
[command] | tee -a [file]
Câu hỏi 3. Làm thế nào để tee ghi vào nhiều tệp?
Khá dễ. Bạn chỉ cần đề cập đến tên của chúng.
Mã:
[command] | tee [file1] [file2] [file3]
Mã:
ping google.com | tee output1.txt output2.txt output3.txt
Câu hỏi 4. Làm thế nào để tee chuyển hướng đầu ra của một lệnh sang lệnh khác?
Bạn không chỉ có thể sử dụng tee để đồng thời ghi đầu ra vào các tệp mà còn có thể chuyển đầu ra thành đầu vào cho các lệnh khác. Ví dụ, lệnh sau không chỉ lưu trữ tên tệp trong 'output.txt' mà còn cho bạn biết - thông qua wc - số lượng mục nhập trong tệp output.txt.
Mã:
ls file* | tee output.txt | wc -l
Câu hỏi 5. Làm thế nào để ghi vào một tệp có đặc quyền nâng cao bằng tee?
Giả sử bạn đã mở một tệp trong trình soạn thảo Vim, thực hiện nhiều thay đổi, sau đó khi bạn thử lưu những thay đổi đó, bạn gặp phải một lỗi khiến bạn nhận ra rằng đó là tệp thuộc sở hữu của root, nghĩa là bạn cần có đặc quyền sudo để lưu những thay đổi này.Trong những tình huống như thế này, bạn có thể sử dụng tee để nâng cao đặc quyền khi đang di chuyển.
:w !sudo tee %
Lệnh đã đề cập ở trên sẽ yêu cầu bạn nhập mật khẩu root, sau đó cho phép bạn lưu các thay đổi.
Câu 6. Làm thế nào để tee bỏ qua ngắt?
Tùy chọn dòng lệnh -i cho phép tee bỏ qua tín hiệu ngắt (SIGINT
), thường được đưa ra khi bạn nhấn tổ hợp phím crl+c.
Mã:
[command] | tee -i [file]