Tee
không vô dụng
Có lẽ bạn biết điều đó không? Nếu không, hãy đọc tiếp! Hoặc nếu bạn biết nó hoạt động như thế nào, nhưng không chắc tại sao nó tồn tại, hãy bỏ qua đến cuối để xem nó phù hợp với triết lý Unix như thế nào.
Có gì là mục đích tee
?
Đơn giản nhất, nó lấy dữ liệu về đầu vào tiêu chuẩn và ghi nó vào đầu ra tiêu chuẩn và một (hoặc nhiều) tệp. Nó đã được ví như một mảnh tee ống nước theo cách nó chia một đầu vào thành hai đầu ra (và hai hướng).
Ví dụ
Hãy lấy ví dụ đầu tiên của bạn:
do_something | tee -a logfile
Điều này nhận đầu ra do_something
và nối nó vào logfile, đồng thời hiển thị nó cho người dùng. Trên thực tế, trang Wikipedia trêntee
có ví dụ thứ hai:
Để xem và nối đầu ra từ một lệnh vào một tệp hiện có:
lint program.c | tee -a program.lint
Điều này sẽ hiển thị đầu ra tiêu chuẩn của lệnh lint program.c tại máy tính và đồng thời nối thêm một bản sao của nó vào cuối tệp chương trình.lint. Nếu tệp chương trình.lint không tồn tại, nó được tạo.
Ví dụ tiếp theo có một cách sử dụng khác: leo thang quyền :
Để cho phép leo thang quyền:
cat ~/.ssh/id_rsa.pub | ssh admin@server "sudo tee -a /root/.ssh/authorized_keys2 > /dev/null"
Ví dụ này cho thấy tee được sử dụng để vượt qua giới hạn vốn có trong sudo
lệnh. sudo
không thể dẫn đầu ra tiêu chuẩn vào một tập tin. Bằng cách bỏ luồng tiêu chuẩn ra /dev/null
, chúng tôi cũng triệt tiêu đầu ra được nhân đôi trong bảng điều khiển. Lệnh trên cho phép người dùng hiện tại truy cập vào máy chủ qua ssh, bằng cách cài đặt khóa chung của người dùng vào danh sách ủy quyền khóa của máy chủ.
Hoặc có lẽ bạn muốn lấy đầu ra của một lệnh, viết nó ở đâu đó và cũng sử dụng nó làm đầu vào cho một lệnh khác?
Bạn cũng có thể sử dụng lệnh tee để lưu trữ đầu ra của lệnh vào một tệp và chuyển hướng đầu ra tương tự như đầu vào sang một lệnh khác.
Lệnh sau đây sẽ sao lưu các mục crontab và chuyển các mục crontab làm đầu vào cho lệnh sed sẽ thực hiện thay thế. Sau khi thay thế, nó sẽ được thêm vào như một công việc định kỳ mới.
$ crontab -l | tee crontab-backup.txt | sed 's/old/new/' | crontab –
(tín dụng cho các ví dụ sử dụng lệnh Tee )
Tee
hoạt động với triết lý Unix:
Viết chương trình làm một việc và làm tốt. Viết chương trình để làm việc cùng nhau. Viết chương trình để xử lý các luồng văn bản, bởi vì đó là một giao diện phổ quát.
(Tín dụng cho những điều cơ bản của triết lý Unix )
tee
phù hợp với tất cả những điều này:
- nó làm một việc: tạo thêm một bản sao đầu vào
- nó hoạt động với các chương trình khác bởi vì nó là chất keo (hoặc một ống nước 'T' nếu bạn thích) cho phép các chương trình khác hoạt động cùng nhau như trong các ví dụ trên
- nó thực hiện điều này bằng cách thao tác một luồng văn bản được cung cấp trên đầu vào tiêu chuẩn