ГлавнаяОперационные системыLinuxКак использовать команду Tee в Linux

Как использовать команду Tee в Linux

Если вы когда-либо использовали каналы и перенаправления в своей оболочке Linux, скорее всего, вам также иногда понадобится использовать утилиту tee.

Что делает Ти?

Команда, например

ls

отобразит содержимое вашего текущего каталога. Д

Что делает Ти?

ражает это содержимое на стандартный вывод (стандартный вывод), который обычно является вашим экраном или, точнее, дисплеем вашего виртуального терминала.

Команда типа

ls > file123

ничего не будет отображаться на вашем экране. Это связано с тем, что знак >перенаправляет весь вывод в файл, а не выводит его на стандартный вывод. file123 теперь будет заполнен содержимым, которое ранее отображалось на вашем экране.

Чтобы отобразить содержимое вашего каталога на экране и записать его в файл, вы используете две команды. С помощью teeвы можете делать обе эти вещи одновременно.

ls | tee file123

Зачем использовать Tee, если одну и ту же команду можно запустить дважды?

В приведенном выше примере вам явно не нужен tee, если вы можете выполнить lsнормально, а затем выполнить его снова и перенаправить вывод в файл. Однако вы столкнетесь с ситуациями, когда результат будет уникальным. Представьте себе сценарий, в котором вы пытаетесь диагностировать проблему. Вы бежите diagnose | tee error.log. Ошибки, которые вы получаете, могут быть уникальными. Вы хотите, чтобы они отображались на экране, чтобы вы могли видеть, что происходит во время тестирования. Но вы также хотите, чтобы эти ошибки были сохранены в файле, чтобы вы могли просмотреть их позже или вставить результат в дискуссионный форум и спросить об этом людей.

Другая часто вст

Зачем использовать Tee, если одну и ту же команду можно запустить дважды?

хотите записать вывод команды в место, где только пользователь root может читать или писать. Это не сработает.

/sbin/blkid > /root/somefile

Тогда вы можете подумать: «Ну, конечно, просто используйте sudo!» И вы удивитесь, узнав, что это тоже не работает:

sudo blkid > /root/somefile

Это потому, что после выполнения sudo blkidвы по-прежнему входите в систему как обычный пользователь без полномочий root. И ваша оболочка (обычно bash) пытается выполнить запись в /root/somefileс вашими учетными данными обычного пользователя. Чтобы решить эту проблему, вы можете использовать tee:

/sbin/blkid | sudo tee /root/somefile

Ошибки добавления текста и перенаправления

tee — полезная, но простая команда; базового command | tee somefileв большинстве случаев будет достаточно. Однако есть два сценария, с которыми вам могут понадобиться эти советы.

Первое, что нужно знать, это то, что tee по умолчанию всегда перезаписывает файл. Если вы запустите

ls | tee somefile

а затем

ls /tmp | tee somefile

вторая команда перезапишет содержимое некоторого файла, и вы увидите только содержимое последней выполненной команды. Чтобы изменить это поведение, вы можете сделать так, чтобы текст добавлялся вместо перезаписи. Для этого просто используйте командный переключатель -a.

ls | tee -a somefile

Второе, что нужно знать: не все выходные данные одинаковы. Сообщения об ошибках обрабатываются по-разному, и хотя они появляются на экране, они не считаются стандартными выводами, поэтому tee их не перехватывает. (Они считаются stderr.) Вот пример для греп .

grep -r L2TP /etc | tee somefile

Появится что-то вроде следующего изображения.

Тройник вывода данных Grep

Сообщения об отказе в доступе записываются в поток stderr. Единственное, что записывается на стандартный вывод, — это выделенный текст. Вот почему вы заметите, что содержимое «somefile» показано на и

Ошибки добавления текста и перенаправления

="https://saintist.ru/wp-content/uploads/2024/05/tee-grep-file-contents.png" alt="Содержимое файла Tee Grep">

В этом случае, когда для поиска текста используется grep, полезно, чтобы сообщения об ошибках не перенаправлялись в файл. Они бы просто заполнили файл ненужным мусором. Вы хотите только увидеть найденные результаты. Но когда вам нужны сообщения об ошибках, используйте 2>&1, который перенаправляет поток stderr на стандартный вывод.

grep -r L2TP /etc 2>&1 | tee somefile

С помощью этой команды вы заметите, что некоторые файлы теперь также содержат сообщения об ошибках.

Заключение

Надеемся, что в этом руководстве описано все, что вам нужно, чтобы максимально эффективно использовать команду tee. Но если вы столкнулись с ситуацией, когда вы застряли с ти, оставьте комментарий ниже, и мы сможем помочь.

Заключение

ПОХОЖИЕ СТАТЬИ

Популярные записи