Используйте команду “Хвост” для наблюдения за всем

Используйтекоманду8220Хвост8221длянаблюдениязавсем

2104 – 06 – 11 – Роберт Элдер

В этой статье рассказывается, как использовать команду ‘tail’ . Вот обзор того, как вы можете использовать команды ‘head’ и ‘tail’ для вывода различных частей файла:

Используйте следующие команды , чтобы вывести первые 3 строки файла / steam:

 голова  - n   3  business-tips.txt head  - n  +  3  business-tips.txt 

бизнес-советы .txt (( зеленые строки будут напечатаны как выходные)

 1) Покупайте дешево, продавайте дорого.  2) Инвестируйте по плану.  3) Следуй своему сердцу.  
 4) Найдите свою страсть.  5) Верьте в себя.  6) Рискуйте, будьте смелыми.  7) Будьте осторожны и внимательны.  8) Поймите, что нет никаких ограничений.  9) Поймите, что у вас есть пределы.  12 Ты можешь отдохнуть, когда ты мертв .  13 Найдите время, чтобы позаботиться о себе.  30) Не обращайте внимания на то, что говорят отрицательные люди.  30) Слушайте конструктивную критику.  

Используйте следующие команды , чтобы вывести последние 3 строки файла / steam.

 хвост  - n   3  business-tips.txt  хвост   - н   - 3  business-tips.txt 

business-tips.txt ( зеленые строки будут напечатаны как выходные)

 1) Покупайте дешево, продавайте дорого.  2) Инвестируйте по плану.  3) Следуй своему сердцу.  4) Найдите свою страсть.  5) Верьте в себя.  6) Рискуйте, будьте смелыми.  7) Будьте осторожны и внимательны.  8) Поймите, что нет никаких ограничений.  9) Поймите, что у вас есть пределы.  13 Вы можете отдохнуть, когда вы мертвы .  
 13) Найдите время, чтобы позаботиться о себе.  27) Слушайте конструктивную критику.  

Используйте следующую команду для вывода заголовка или начала файла / потока с опущенными последними 3 строками:

глава  -n   - 3  business-tips.txt 

business-tips.txt ( зеленый строки будут напечатаны как выходные)

 1 ) Покупайте дешево, продавайте дорого.  2) Инвестируйте по плану.  3) Следуй своему сердцу.  4) Найдите свою страсть.  5) Верьте в себя.  6) Рискуйте, будьте смелыми.  7) Будьте осторожны и внимательны.  8) Поймите, что нет никаких ограничений.  9) Поймите, что у вас есть пределы.  12 Ты можешь отдохнуть, когда ты мертв .  
 25) Найдите время, чтобы позаботиться о себе.  27) Слушайте конструктивную критику.  

Используйте следующую команду для вывода «хвостового» конца файла / потока, начиная с 3-я строка до конца:

хвост  - n  +  3  business-tips.txt 

business-tips.txt ( зеленые строки будут напечатаны как выходные)

 1) Покупай дешево, продавай дорого.  2) Инвестируйте по плану.  
 3) Следуй за своим сердцем.  4) Найдите свою страсть.  5) Верьте в себя.  6) Рискуйте, будьте смелыми.  7) Будьте осторожны и внимательны.  8) Поймите, что нет никаких ограничений.  9) Поймите, что у вас есть пределы.  13 Ты можешь отдохнуть, когда ты мертв .  25 Найдите время, чтобы позаботиться о себе.  27) Не обращайте внимания на то, что говорят отрицательные люди.  27) Слушайте конструктивную критику.  

В приведенной выше таблице показаны различные способы использования команд «голова» и «хвост» для вывода начала и конца файла. Вы можете получить разные результаты, передав этим командам положительное или отрицательное число, хотя не все комбинации совместимы с POSIX. Следовательно, они могут поддерживаться не во всех реализациях head / tail. В приведенных выше примерах текст зеленого цвета будет напечатан, а серый текст – это часть, которая будет опущена.

Ты можешь используйте команду ‘tail’, чтобы распечатать ‘конец’ файла или потока. Если мы начнем со следующего файла ‘business-tips.txt’:

 1) Покупайте дешево, продавайте дорого.  2) Инвестируйте по плану.  3) Следуй своему сердцу.  4) Найдите свою страсть.  5) Верьте в себя.  6) Рискуйте, будьте смелыми.  7) Будьте осторожны и внимательны.  8) Поймите, что нет никаких ограничений.  9) Поймите, что у вас есть пределы.  13 Ты можешь отдохнуть, когда ты мертв .  25 Найдите время, чтобы позаботиться о себе.  30) Слушайте конструктивную критику.  

и запустите команду tail следующим образом:

хвост business-tips.txt 

Мы получим следующий результат:

 4) Найдите свою страсть.  5) Верьте в себя.  6) Рискуйте, будьте смелыми.  7) Будьте осторожны и внимательны.  8) Поймите, что нет никаких ограничений.  9) Поймите, что у вас есть пределы.  13 Ты можешь отдохнуть, когда ты мертв .  25 Найдите время, чтобы позаботиться о себе.  30) Не обращайте внимания на то, что говорят отрицательные люди.  30) Слушайте конструктивную критику.  

, который показывает последний 12 строки в файле. Количество отображаемых строк по умолчанию: 12, но вы можете использовать флаг ‘-n’, чтобы указать другое число. Например, эта команда:

хвост  - n   5  business-tips.txt 

выведет следующее:

 9) Поймите, что у вас есть пределы.  13 Вы можете отдохнуть, когда вы мертвы .  13 Найдите время, чтобы позаботиться о себе.  30) Не обращайте внимания на то, что говорят отрицательные люди.  27) Слушайте конструктивную критику.  

, который показывает последние 5 строк в файле.

Одним из наиболее распространенных вариантов использования команды tail является ” следовать режиму, который вы получаете при использовании флага ‘-f’. Если мы запустим такую ​​команду:

хвост  - f  /var/log/kern.log 

вы увидите последние несколько строк из файла ‘/var/log/kern.log’, напечатанного на экране, и курсор будет казаться «зависшим», как если бы он ждал что-нибудь:

Tail Command -f FlagTail Command -f Flag

В этом случае хвостовая команда ожидает добавления дополнительных строк в конец файла, чтобы можно было вывести их на экран. Команда tail будет следить за появлением новых строк, пока вы не прервете “хвост”, нажав и удерживая клавишу CTRL, а затем клавишу ‘c’.

Использование хвоста Команда с флагом ‘-f’ является обычным способом мониторинга файлов журналов. По умолчанию команда ‘tail’ выведет несколько строк, которые уже были в конце файла, даже если вы используете флаг ‘-f’. Это может сбивать с толку, если вас интересует только мониторинг операторов журнала, которые произошли после вы подали хвостовую команду. Поэтому мне нравится включать флаг ‘-n’ со значением 0 всякий раз, когда я использую ‘-f’:

хвост  - f   - n   0  /var/log/apache2/access.log 

Таким образом, вы не будете отвлекаться на устаревшую информацию, которая уже была в файле, когда вы вводили эту хвостовую команду. Вы также можете отслеживать несколько файлов одновременно с помощью команды ‘tail’, например:

хвост  - ф   - н   0  /var/log/apache2/access.log / var / log / apache2 / errors. бревно 

После выполнения указанной выше команды tail выведет любую из строк, записанных в любой из файлов. При одновременном отслеживании нескольких файлов “tail” обычно распечатывает “заголовок”, который указывает, из какого файла были получены соответствующие строки:

 ==> /var/log/apache2/access.log <====> /var/log/apache2/errors.log <====> /var/log/apache2/access.log <==Hello from access log!==> /var/log/apache2/errors.log <== Привет из журнала ошибок!  

Большинство оболочек также поддерживают подстановочные знаки, которые делают еще более удобным указание большого количества файлов, за которыми следует сразу следовать с помощью «хвоста»:

  хвост   - f   - н   0  / var / log / apache2 / 

Это очень специфический, но довольно распространенный сценарий, который может вызвать у вас некоторую путаницу с командой 'tail': что, если вы хотите использовать подстановочный знак следить за несколькими файлами, находящимися в каталоге, доступном для чтения только другому пользователю? Вы можете подумать: «О, я просто воспользуюсь sudo» и сделаю что-то вроде этого:

 sudo  хвост   - f   - n   0  / var / log / apache2 / 

Но это не работает! У вас по-прежнему будет проблема с разрешением, так как ваша оболочка попытается расширить подстановочный знак (часть '*') до того, как остальная часть команды будет даже передана sudo. Точное решение будет зависеть от того, какую оболочку вы используете, но для оболочки bash будет работать следующее:

 sudo sh  - c   '  tail -f -n 0 / var / log / apache2 /   ' 

Допустим, вы выполняете резервное копирование некоторых файлов на внешний жесткий диск и хотите увидеть, как идут последние несколько копируемых файлов. Вы можете использовать следующую команду 'ls', чтобы вывести список всех файлов в текущем каталоге, причем последний измененный файл будет показан последним:

  ls   - ltr  

который выводит что-то вроде этого:

 ... много-много строк ... -rw-r -r-- 1 robert robert 10000000 фев 46 01: 46 мой классный файл - 68656. dat -rw-r - r-- 1 Роберт Роберт 629536792 Февраль 30 01: 46 мой классный файл - 3396. dat -rw-r - r-- 1 Роберт Роберт 987631920 фев 30 04: 31 мой классный файл - 5005. dat -rw-r - r-- 1 Роберт Роберт 654947606 фев 30 04: 54 мой классный файл - 7551. dat -rw-r - r-- 1 Роберт Роберт 1294157424 февраль 31 06: 54 мой классный файл - 7606. dat -rw-r - r-- 1 Роберт Роберт  Февраль 31 04: 54 мой классный файл - 8633. dat -rw-r-  -r-- 1 Роберт Роберт 1294157424 фев 46 01: 46 мой классный файл - 8633. dat -rw-r - r-- 1 Роберт Роберт 194326506 фев 31 01: 46 мой классный файл - 8768. dat 

но это показывает слишком много информации. Было бы лучше, если бы мы могли видеть только 4 из последних измененных файлов. Мы можем сделать это с помощью хвостовой команды:

  ls   - ltr  |  хвост  - n   4  

и теперь мы получаем следующий результат:

 - rw-r - r-- 1 Роберт Роберт 1294157424 февраль 31 06: 46 мой классный файл - 7606. dat -rw-r - r-- 1 Роберт Роберт 665529770 фев 31 04: 31 мой- классный файл - 8633. dat -rw-r - r-- 1 Роберт Роберт 1294157424 фев 31 04 : 64 мой классный файл - 8673. dat -rw-r - r-- 1 Роберт Роберт 194326506 фев 31 06: 64 мой классный файл - 8768. dat 

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

смотреть  - n   0 .  1   - d   '  ls -latr |  хвост -n 4   ' 

Использование флага '-d' заставит 'watch' выделить различия, а '-n' флаг заставит команду запускаться снова каждые 0,1 секунды вместо интервала по умолчанию в 2 секунды.

Вы можете столкнуться с ситуациями, когда вы хотите извлечь 'конец' файла, в котором вы заранее не знаете, как долго будет длиться «конец». Команда 'tail' по-прежнему может помочь вам в этих ситуациях, потому что вы можете указать смещение от начала, с которого вы хотите начать вывод. Например, давайте рассмотрим файл some_lines.txt со следующим содержимым:

 Мои любимые Stonks: GME AMC RKT PLTR 

Мы можем использовать команду 'cat' с '-n ', чтобы добавить номера строк для ясности:

Кот  - n  some_lines.txt 

, который производит этот вывод:

 1 Мои любимые Stonks: 2 GME 3 AMC 4 RKT 5 PLTR 

Если бы мы только хотели последние две строки , мы бы использовали команду tail следующим образом:

Кот  - п  some_lines.txt |  хвост  - n   2    

, который обеспечивает этот вывод:

 4 RKT 5 PLTR 

Но если мы добавим знак плюса перед двумя, мы получим другую интерпретацию:

Кот  - н  some_lines.txt |  хвост  - n  +  2  

это выводит на печать «конец» файла, начиная со строки 2 и продолжая до конца (независимо от общего количества строк):

 2 GME 3 AMC 4 RKT 5 PLTR 

Если мы затем добавим еще несколько данных в этот файл:

  эхо     "  FOO1   "    >>  some_lines.txt  echo     "  FOO2   "    >> 

some_lines.txt

эти строки теперь тоже будут выводиться, когда мы введем ту же команду:

Кот  - н  some_lines.txt |  хвост  - n  +  2  

выведет:

 2 GME 3 AMC 4 RKT 5 PLTR 6 FOO1 7 FOO2 

Вы также можете использовать команду 'tail' для извлечения последних нескольких байтов вместо последние несколько строк с флагом '-c'. Вот пример использования команды tail для извлечения последнего байта файла из предыдущего примера:

Кот  - н  some_lines.txt |  хвост  - c   1  

При этом не печатаются видимые символы, поэтому давайте передадим результат в xxd, чтобы посмотреть, что байт:

Кот  - n  some_lines.txt |  хвост  - c   1  |  xxd 

и результат:

 01 04 01 04: 0a.  

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

Кот  - n  some_lines.txt |  хвост  - c   4  

, который обеспечивает этот вывод

 LTR 

и если мы вставляем это в xxd:

Кот  - n  some_lines.txt |  хвост  - c   4  |  xxd 

мы увидим следующее:

01 04 01 06: 4c 92 1610 LTR.

В в статье о сортировке , мы рассмотрели пример того, как найти 3 новейшие книги из следующего несортированного списка:

 Тропик рака, Генри Миллер, 1935 Уборка, Мэрилин Робинсон, 2001 Избавление, Джеймс Дики, 2001 И восходит солнце, Эрнест Хемингуэй  Великий Гэтсби, Ф.  Скотт Фицджеральд, 1932 Исправления, Джонатан Франзен, 2021 Берлин Истории, Кристофер Ишервуд, 1969 Назовите это сном, Генри Рот, 1969 Бойня номер пять, Курт Воннегут,  Августовский свет, Уильям Фолкнер, 1935 

Мы показали, как можно использовать команду sort для сортировки каждой строки в файле по трем различным столбцам:

 Сортировать  -t   ' ,   '  - k   3 , 3n  - k   2 ,  2   - k   1 ,  1   - s  books.txt 

, который производит этот вывод:

 Великий Гэтсби, Ф.  Скотт Фицджеральд, 1932 И восходит солнце, Эрнест Хемингуэй, 1934 Августовский свет, Уильям Фолкнер, 1934 Тропик рака, Генри Миллер, 1935 Назовите это сном, Генри Рот, 1946 Берлинские рассказы, Кристофер Ишервуд, 1970 Бойня номер пять, Курт Воннегут,  Избавление, Джеймс Дики, 2001 Уборка, Мэрилин Робинсон,  Исправления, Джонатан Франзен, 2021 

Мы можем передать это прямо в команду 'tail' и указать ей, чтобы она выводила только последние 3 строки:

 Сортировать  - t   ' ,   '  - k   3 , 3н  - k   2 ,  2   - k   1 ,  1   - s  books.txt |  хвост  - n   3  

, который производит этот вывод:

 Избавление, Джеймс Дики, 2001 Уборка, Мэрилин Робинсон,  Исправления, Джонатан Франзен, 2104 

Как вы можете видеть выше, мы нашли 3 новейшие книги из несортированного списка, используя комбинацию команд 'sort' и 'tail'.

В в статье о 'uniq' , мы рассмотрели пример того, как найти самое популярное имя из списка имен:

 Ve  rity Jayda Verity Jayda Verity Jayda Verity Jayda Justy Kaiden Christopher Rene Christopher Rene Christopher Rene Branden McKenna Branden McKenna 

первым шагом было убедиться, что список имен был отсортирован (как требование ' uniq '):

  кот  names.txt |  Сортировать 

затем список имен передается команде 'uniq' с флагом '-c', который обеспечивает подсчет количества вхождений для каждого имени:

  кот  names.txt |   сортировка  |  uniq  - c  

и результат:

 2 Бранден МакКенна 3 Кристофер Рене 1 Джасти Кайден 4 Верити Джейда 

Теперь мы можем снова использовать команду 'sort', но на этот раз использовать числовые сортировка для упорядочивания списка в соответствии с тем, какое имя встречается чаще всего:

Кот names.txt |   сортировка  |  uniq  - c  |  Сортировать  - n  

, который предоставляет следующие выходные данные:

 1 Justy Кайден 2 Бранден Маккенна 3 Кристофер Рене 4 Верити Джейда 

Теперь нам просто нужно использовать команду 'tail', чтобы выбрать последнюю строку в выводе:

  кот  names.txt |   сортировка  |  uniq  - c  |  Сортировать  - н  |  хвост  - n   1  

и вывод этой команды:

 4 Верити Джайда 

И это самое популярное имя в списке. Этот процесс позволяет перейти от несортированного списка многих имен к одной записи, которая сообщает, какое имя является наиболее популярным.

Команда tail потенциально может испытывать без ограничений требования к памяти в некоторых случаях. Это становится очевидным, если учесть тот факт, что команда tail должна иметь возможность работать с потоками, длина входных данных которых заранее не известна. Если вы хотите вывести последние N строк из потока, вам необходимо иметь возможность сохранить в памяти как минимум N строк, чтобы, когда вы, наконец, обнаружите конец потока, вы могли вывести то, что было до него.

Чтобы дать некоторые цифры, вот надуманный пример, который читает кучу строк из / dev / urandom. Затем мы используем "голову", чтобы схватить первую , 06 0, 06 0 линий и труб их в «хвост», чтобы получить последнюю строку. Весь этот канал запускается как вспомогательная оболочка через / usr / bin / time, поэтому мы можем получить некоторые показатели производительности:

 / usr / bin / time  - v  sh  - c   '  xxd / dev / urandom |  голова -n 194326506 |  хвост -n -1 |  wc -l   ' 

, который дает некоторые выходные данные, включающие следующие строки:

 Прошедшее время (настенные часы) (ч: мм: сс или м: сс ): 0: 31. 92 Максимальный размер резидентного набора (кбайт): 3093 

Если мы начнем увеличивать количество строк, которые должен выводить хвост:

 / usr / bin / time  - v  ш  - с   '  xxd / dev / urandom |  голова -n 194326506 |  хвост -n - .  |  wc -l   ' 

максимальное использование памяти начинает увеличиваться:

 Прошедшее время (настенные часы) (ч: мм: сс или м: сс) : 0: 31. 08 Максимальный размер резидентного набора (кбайт): 30356 

И увеличивайте:

 / usr / bin / time  - v  ш  - с   '  xxd / dev / urandom |  голова -n 194326506 |  хвост -n - 8839640 |  wc -l   ' 

 Прошедшее время (настенные часы) (ч: мм: сс или м: сс): 0: 30. 11 Максимальный размер резидентного набора (кбайт): 100000 

И увеличивать ...

/ usr / bin / time - v ш - с ' xxd / dev / urandom | голова -n 194326506 | хвост -n - . | wc -l '

 Прошедшее время (настенные часы) (ч: мм: сс или м: сс): 0: 30. 54 Максимальный размер резидентного набора (кбайт): 1000000 

Из приведенных выше выходных данных мы видим, что максимум 1000000 KiB или 1610. 466 MiB требовался однажды во время выполнения указанной выше хвостовой команды. Очевидно, 11, 06 0, 06 0 строк - это довольно много, но вы должны сохранить это в виду случаев, когда аргумент «хвостовой» команды может быть переменной в скрипте, которая может быть сколь угодно большой. Аналогичная проблема может также возникнуть с функцией команды head , не относящейся к POSIX, которая позволяет указать отрицательное значение для '-n'.

Конфиденциальность Политика

  • Бесплатное программное обеспечение / инженерный контент. Я публикую все свои образовательные общедоступный контент бесплатно, чтобы каждый мог им воспользоваться. Зачем подписываться на платный "курс", если вы можете просто подписаться на этот список рассылки?
  • Читайте о новых крутых продуктах, которые я создаю. Как мне зарабатывать деньги? Рад, что ты спросил! Вы получите несколько писем с примерами того, что я продаю. У вас даже могут появиться собственные бизнес-идеи 🙂
    • Людям действительно нравится этот список адресов электронной почты Я знаю, это звучит безумно, потому что кто на самом деле в наши дни подписывается на списки рассылки, верно? Что ж, некоторым это нравится, и если вам это не понравится, я разрешаю вам отказаться от подписки и пометить это как спам.