Tee
не марний
Може, ти це все-таки знав? Якщо ні, читайте далі! Або якщо ви знаєте, як це працює, але не знаєте, чому він існує, пропустіть до кінця, щоб побачити, як він вписується в філософію Unix.
Що це мета tee
?
Найпростіше, він приймає дані на стандартний вхід і записує їх до стандартного виводу та одного (або більше) файлів. Це було подібне до сантехнічного трійника таким чином, як він розбиває один вхід на два виходи (і два напрямки).
Приклади
Візьмемо ваш перший приклад:
do_something | tee -a logfile
Це займає вихід do_something
та додає його до журналу, а також відображає його користувачеві. Фактично, сторінка Вікіпедії наtee
цій сторінці є другим прикладом:
Щоб переглянути та додати вихід із команди до існуючого файлу:
lint program.c | tee -a program.lint
Це відображає стандартний висновок команди lint program.c на комп'ютері і одночасно додає його копію до кінця файла program.lint. Якщо файл program.lint не існує, він створюється.
Наступний приклад має ще одне використання: ескалація дозволів :
Щоб дозволити ескалацію дозволів:
cat ~/.ssh/id_rsa.pub | ssh admin@server "sudo tee -a /root/.ssh/authorized_keys2 > /dev/null"
Цей приклад показує, що трійник використовується для обходу властивого для sudo
команди обмеження . sudo
не в змозі передавати стандартний вихід у файл. Завантажуючи стандартний вихідний потік у /dev/null
, ми також пригнічуємо дзеркальний вихід у консолі. Наведена вище команда надає поточному користувачеві доступ до сервера через ssh, встановивши відкритий ключ користувача до списку авторизації ключів сервера.
Чи, можливо, ви хочете взяти висновок однієї команди, написати це десь і також використовувати це як вхід до іншої команди?
Ви також можете використовувати команду tee для збереження результату команди у файл та перенаправлення того ж виходу, що і вхід до іншої команди.
Наступна команда візьме резервну копію записів crontab і передасть записи crontab як вхід до команди sed, яка зробить заміну. Після заміни він буде доданий як нове завдання cron.
$ crontab -l | tee crontab-backup.txt | sed 's/old/new/' | crontab –
(кредит на приклади використання команд Tee )
Tee
працює з філософією Unix:
Пишіть програми, які роблять одне і роблять це добре. Напишіть програми для спільної роботи. Пишіть програми для обробки текстових потоків, тому що це універсальний інтерфейс.
(Кредит до основ філософії Unix )
tee
відповідає всім цим:
- це робить одне: створює додаткову копію введення
- він працює з іншими програмами, тому що саме клей (або сантехнічний шматок "T", якщо вам зручніше) дозволяє іншим програмам працювати разом, як у наведених вище прикладах
- це робиться шляхом маніпулювання текстовим потоком, поданим на стандартному вході