Tee
nie jest bezużyteczne
Może i tak to wiedziałeś? Jeśli nie, czytaj dalej! Lub jeśli wiesz, jak to działa, ale nie wiesz, dlaczego istnieje, przejdź do końca, aby zobaczyć, jak pasuje do filozofii uniksowej.
Jaki jest cel tee
?
W najprostszym przypadku pobiera dane ze standardowego wejścia i zapisuje je na standardowym wyjściu i jednym (lub więcej) plikach. Przyrównano go do trójnika hydraulicznego w sposób, w jaki dzieli jeden wkład na dwa wyjścia (i dwa kierunki).
Przykłady
Weźmy twój pierwszy przykład:
do_something | tee -a logfile
To pobiera dane wyjściowe do_something
i dołącza je do pliku dziennika, jednocześnie wyświetlając go użytkownikowi. W rzeczywistości strona Wikipediitee
ma to jako drugi przykład:
Aby wyświetlić i dołączyć dane wyjściowe polecenia do istniejącego pliku:
lint program.c | tee -a program.lint
Wyświetla standardowe wyjście polecenia lint program.c na komputerze i jednocześnie dołącza jego kopię na końcu pliku program.lint. Jeśli plik program.lint nie istnieje, zostanie utworzony.
Następny przykład ma jeszcze inne zastosowanie: eskalacja uprawnień :
Aby umożliwić eskalację uprawnień:
cat ~/.ssh/id_rsa.pub | ssh admin@server "sudo tee -a /root/.ssh/authorized_keys2 > /dev/null"
Ten przykład pokazuje, że trójnik jest używany do ominięcia nieodłącznego ograniczenia w sudo
poleceniu. sudo
nie jest w stanie potokować standardowego wyjścia do pliku. Wrzucając do niego standardowy strumień /dev/null
wyjściowy, tłumimy również odbicie lustrzane w konsoli. Powyższe polecenie daje bieżącemu użytkownikowi root dostęp do serwera przez ssh, instalując klucz publiczny użytkownika na liście autoryzacji kluczy serwera.
A może chcesz pobrać dane wyjściowe jednego polecenia, napisać je gdzieś, a także użyć jako danych wejściowych do innego polecenia?
Możesz także użyć polecenia tee, aby zapisać dane wyjściowe polecenia w pliku i przekierować to samo wyjście jako dane wejściowe do innego polecenia.
Następujące polecenie wykona kopię zapasową wpisów crontab i przekaże wpisy crontab jako dane wejściowe do polecenia sed, które wykona zamianę. Po zamianie zostanie dodany jako nowe zadanie cron.
$ crontab -l | tee crontab-backup.txt | sed 's/old/new/' | crontab –
(uznanie za przykłady użycia poleceń Tee )
Tee
współpracuje z filozofią Unix:
Pisz programy, które robią jedną rzecz i robią to dobrze. Pisz programy do współpracy. Pisz programy do obsługi strumieni tekstowych, ponieważ jest to uniwersalny interfejs.
(Podziękowania dla Basics of the Unix Philosophy )
tee
pasuje do wszystkich:
- robi jedną rzecz: tworzy dodatkową kopię danych wejściowych
- działa z innymi programami, ponieważ jest to klej (lub element hydrauliczny „T”, jeśli wolisz), który pozwala innym programom współpracować, jak w powyższych przykładach
- robi to poprzez manipulowanie strumieniem tekstu podanym na standardowym wejściu