Команда tail в windows

Обновлено: 05.07.2024

Есть ли способ имитировать команду * nix tail в командной строке Windows? У меня есть файл, и я хочу, чтобы отрывать первые n строки текста. Например:

Нет точного эквивалента. Однако существует собственная команда DOS «more» с опцией + n, которая начнет вывод файла после n-й строки:

Приведенная выше команда выведет все после первых 2 строк.
На самом деле это инверсия Unix head :

Приведенная выше команда напечатает только первые 2 строки файла.

ЕСЛИ у вас есть Windows PowerShell установлен (я думаю, что он включен с XP), вы можете просто запустить из cmd.exe:

или непосредственно из PowerShell:

Обновить

В PowerShell 3.0 (Windows 8 и выше) добавлена ​​команда Tail с псевдонимом Last . Head и псевдонимы First к TotalCount .

Таким образом, команды могут быть переписаны как

где n = количество строк для отображения. Работает быстро и точно так же, как команда head .

Вы можете получить CoreUtils из GnuWin32 , который представляет собой набор стандартных инструментов Unix, портированных на Windows.

Он, кроме всего прочего, содержит голову.

При использовании более + n, о которых уже упоминал Мэтт, чтобы избежать пауз в длинных файлах, попробуйте следующее:

больше +1 myfile.txt> con

Ну, это будет делать это, но это примерно так же быстро, как выглядит (примерно O (n * m), где n - количество отображаемых строк, а m - общее количество строк в файле):

Где «10» - это количество строк, которые вы хотите напечатать, а «filename» - это имя файла.

Get-content -Tail n file.txt с powershell - единственное, что близко к tail в linux.

Предложенный выше Get-Content *filename* | Select-Object -last *n* загружает/анализирует все это. Излишне говорить, что мой файл журнала объемом 10 ГБ был недоволен . Параметр -Tail запускается с конца файла.

вы также можете использовать Git Bash , где эмулируются также голова и хвост

Утилита tail идеально подходит для просмотра в реальном времени (с опцией -f) живых логов сетевого оборудования, серверов, а также логов отлаживаемых программ. В среде Linux и FreeBSD с этой утилитой проблем нет, она всегда под рукой, но как быть на платформе Windows?

Здесь опишу несколько альтернативных вариантов замены tail, которые можно установить и использовать на Windows.

[MinGW]

Это набор утилит Unix, перенесенных в среду Windows [1]. Установка вопросов не возникает, все происходит как обычно. После установки в переменной %Path% автоматом прописывается путь до бинарных файлов утилит, среди которых находится и tail.exe, так что теперь Вы можете пользоваться этой утилитой без проблем.

Можно также скачать и установить утилиту tail отдельно [2]. Поместите файлы *.dll и tail.exe архива в папку system32 (cd %SystemRoot%\system32), и Вы также сможете запускать tail из любого каталога.

C:\temp>tail --help
Использование: tail [OPTION]. [FILE].
Печатает последние 10 строк каждого файла FILE в стандартный вывод. Когда указано больше одного FILE, выводу каждого файла предшествует заголовок из имени файла. Если FILE не указан, или когда FILE указан как -, то для чтения используется стандартный ввод.

Можно использовать как длинные опции командной строки, так и короткие.

-c, --bytes=K выводятся последние K байт; альтернативно используйте -c +K для вывода байт, начиная с K-того байта в каждом файле.
-f, --follow[=] вывод добавляемых данных по мере того, как файл растет (отслеживание содержимого файла в реальном времени). Опции -f, --follow, и --follow=descriptor эквивалентны друг другу. -F работает так же, как и --follow=name --retry.
-n, --lines=K выводит последние K строк, вместо того чтобы вывести последние 10 строк. Можете также использовать -n +K для вывода строк, начиная со строки K.
--max-unchanged-stats=N с опцией --follow=name заново открывает FILE, который не изменялся после N (по умолчанию 5) итераций - чтобы посмотреть, был ли он удален или переименован (это обычно используется для ротации лог-файлов). С появлением inotify эта опция стала мало полезна и используется редко.
--pid=PID с опцией -f прервать вывод после того, как завершится процесс с идентификатором ID, т. е. тут указан PID завершения.
-q, --quiet, --silent никогда не выводить заголовки, в которых указаны имена файлов.
--retry пытаться открыть файл даже если он стал недоступен; полезно, когда используется опция следования за файлом, например --follow=name.
-s, --sleep-interval=N с опцией -f указывает засыпать примерно на N секунд (по умолчанию 1.0) между отдельными итерациями. Вместе с inotify и --pid=P процесс P проверяется как минимум каждые N секунд.
-v, --verbose всегда выводить заголовки, в которых указано имя файла.
--help отобразить подсказку по командной строке и выйти.
--version отобразить информацию о версии и выйти.

Если первый символ K (количество байт или строк) является символом +, выведутся строки начиная с K-той от начала каждого файла, иначе будут выводиться последние K элементов файла. K может иметь суффикс множителя *, например:
b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024, GB 1000*1000*1000, G 1024*1024*1024, и так далее для T, P, E, Z, Y.

С опцией --follow (-f), tail по умолчанию следует за дескриптором файла. Это подразумевает, что даже если файл, отслеживаемый в настоящий момент tail, был переименован, то tail все равно продолжит его отслеживание его конца. Это поведение по умолчанию не желательно, когда Вы на самом деле вместо дескриптора хотите отслеживать файл под своим настоящим именем (например, это может быть при ротации лога). Тогда используйте опцию --follow=name. Это приведет к тому, что tail будет отслеживать именованный файл по его полному пути, отражающему переименование, удаление и создание файла.

[Tail для Win32]

Tail for Win32 - специальная версия UNIX-утилиты tail для Windows. Она может использоваться по своему обычному назначению, для мониторинга изменения содержимого файлов. Утилита распространяется в скомпилированном виде и с открытым исходным кодом, и снабжена архитектурой плагинов, которая позволяет выдавать оповещения при появлении в отслеживаемых файлов определенных ключевых слов. В настоящий момент доступен плагин MAPI, и ведутся работы по созданию версии SMTP. Утилита имеет следующие возможности:

• Можно сразу отслеживать содержимое нескольких файлов в реальном времени.
• Можно детектировать появление ключевых слов и подсвечивать их.
• Можно отправлять оповещение через SMTP или MAPI о появлении ключевых слов.
• Архитектура плагинов позволит Вам написать специализированные обработчики отслеживаемых логов.
• Можно обрабатывать файлы любого размера на всех типах носителей (расположенных как локально, так и в сети).

Подробнее информацию см. на страничке проекта [3].

[Другие варианты замены tail на платформах Windows и Unix]

Powershell - наверное самый мощный инструмент на платформе Windows, однако его часто почему-то оставляют без внимания. Хотя использование Powershell для целей tail не дает никаких дополнительных функций, но это хороший способ быстрого использования командной строки в целях слежения за состоянием файла. Используйте следующий простой синтаксис, чтобы отобразить хвост файла, и отслеживать его состояние в реальном времени:

Вы можете также отфильтровать лог, если укажете справа в командной строке регулярное выражение:

Особенности использования Powershell для целей tail:

• Быстрое и простое использование.
• Практически нулевые затраты времени на обучение.
• На новых системах Windows не требуется делать никаких инсталляций (PowerShell доступен на всех версиях Windows начиная с Windows XP SP2 и SP3).
• Медленно работает с большими файлами.
• Имеет только базовый функционал, однако есть сторонние расширения. Например, с ними можно отслеживать одновременно несколько файлов.

По умолчанию система PowerShell не установлена на Windows XP, однако есть возможность её установить на Windows XP SP3 вместе с пакетом обновления KB968930 Windows Management Framework Core [5]. Также можно установить PowerShell вместе с KB968930 на операционных системах Windows Server 2003 (x86 и x64), Windows Server 2008 (x86 и x64), Windows Vista (x86 и x64).

Утилита Stackify предоставляет все, что нужно для поддержки Ваших приложений. Встроен простой, основанный на WEB доступ к просмотру файлов, а также их окончаний (tail).

Stackify-vim plugin

• Можно просматривать файлы лога удаленно, подключаясь к WEB-серверу через сеть, прямо в WEB-браузере.
• Можно осуществлять поиск по файлам лога.
• Поддерживаются системы Windows и Linux.
• Распространяется на условиях Free trial, малая месячная оплата.

Этот плагин был разработан Martin Krischik. Наверное, это самый лучший плагин для Vim, который можно получить для функционала tail. Особенности:

• Вы можете прямо в своем любимом редакторе Vim отслеживать файлы лога, не покидая редактор.
• С использованием закладок можно отслеживать несколько файлов одновременно.
• Окно предпросмотра "Preview" обновляется в соответствии с использованием Vim.
• Перед установкой прочтите информацию об открытых багах (open issues) на Google Code.

Чтобы отслеживать хвост файла в Emacs, нажмите M-x (нажатые вместе кнопки Alt и x), и введите tail-file. Затем введите имя файла, который должен отслеживаться. В результате будет порожден процесс tail -f. Утилита MultiTail была разработана Folkert van Heusden. Возможно, что это самая полная реализация функционала tail на платформах UNIX. Особенности:

• Все еще находится в активной разработке (на момент написания статьи последняя версия была выпущена 4 недели назад).
• Можно использовать маски wildcard для имен файлов. Это позволяет отслеживать только что появляющиеся файлы лога.
• Для фильтрации можно использовать регулярные выражения.
• Исходный код доступен для закачки из публичного репозитория SVN.
• Поддерживаются все основные платформы UNIX.

Утилита BareTail разработана компанией Bare Metal Software. Фича программы - цветовая маркировка, которая наносится в GUI интерфейсе при просмотре файлов.

Особенности программы BareTail:

• Разработана для Windows.
• Позволяет отслеживать несколько файлов с использованием закладок.
• Конфигурируемая подсветка.
• Позволяет делать немедленный скроллинг в любую точку файла, что работает даже на больших файлах.
• Распространяется на условиях Free demo. Стоимость лицензии $25.

Разработка John Walker из Fourmilab. Эта утилита давно не обновлялась (на сайте указан 1997 год), поэтому возможно она не будет хорошо работать на последних дистрибутивах Unix. Особенности:

• Можно отслеживать сразу несколько файлов, расположенных на разных серверах.
• Автоматически проверяет запуск нужного процесса и обновляет файл лога, подстраивая соответственно просмотр.
• Скрипт старый (1997 года), и может не работать на новых дистрибутивах Unix и патчах Perl (скрипт основан на Perl 4.0, патч уровня 36).
• Работает только в UNIX.

TraceTool

Разработано SnakeNest. Особенности:

• Малые затраты памяти и малая нагрузка на CPU при работе даже с большими файлами.
• Настраиваемые горячие клавиши для быстрого перемещения по файлам.
• Может делать tail-отслеживание директории логов, где сохраняются последние файлы лога.
• Работает только на Windows.

SnakeTail Main Window

Мне больше всего понравилась именно эта утилита. Для просмотра текста в кодировке UTF-8 (кириллица ANSI) следует открыть настроку опций через меню Edit -> View Options. -> закладка Log File -> в выпадающем списке выберите System.Text.UTF8Encoding. После этого нажмите кнопку Apply to All (применится ко всем открытым логам, если их несколько) и Save as default (сохранение текущей настройки как настройки по умолчанию).

SnakeTail Options

Фанаты текстового редактора Notepad++ оценят возможность функционала tail с новым плагином Document Monitor. Теперь можно отслеживать файлы, не покидая Notepad++. Чтобы воспользоваться этим плагином, выполните следующие шаги:

1. Запустите Notepad++, выберите в меню Plugins -> Plugin Manager -> Show Plugin Manager, поставьте галочку на плагине "Document Monitor", и кликните "Install".
2. Notepad++ предложит Вам перезапустить программу, перезапустите Notepad++ (без перезапуска компьютера).
3. Как только Notepad++ откроется снова, выберите "Plugins", и Вы должны теперь увидеть опцию "Document Monitor -> Start to monitor". Это приведет к обновлению вида Вашего документа каждые 3 секунды.

Notepad-pp-tail

Разработано Tobias Klauser. Базовый инструмент с минимальными опциями - если сравнивать с другими вариантами. Особенности:

• Доступен в репозиториях Git и Github.
• Использует inotify API, чтобы определить, нужно или нет перечитать отслеживаемый файл.

[PowerShell: отображение текста в правильной кодировке]

Иногда команда powershell Get-Content дает отображение русского кракозябрами. Причина в том, что текст не воспринимается в правильной кодировке. Пример вывода кракозябрами лог-файла в кодировке UTF8:

Есть ли способ имитировать команду * nix tail в командной строке Windows? У меня есть файл, и мне нужен способ вырезать первые n строк текста. Например:

Не head показывает только первые n строк вместо их пропуска? Пожалуйста, Крис рассмотрите новые ответы с 2009 года, а точнее ответ Амита Портного . Поскольку ваш вопрос является общим, многие пользователи могут найти эту веб-страницу. И они могут перестать читать ответы после первого: ответа, который вы приняли. Вы можете изменить ответ, который вы приняли, на другой, более обновленный до современных возможностей. Cheers;) Я немного запутался. Первоначальный вопрос касался head команды стиля Unix , но желаемый результат выглядел так, как будто его не хватало tail . Похоже ответы о том, head а не о tail . @blakeoft исходный вопрос спрашивал о поведении tail , однако в названии говорилось head

Нет точного эквивалента. Однако существует собственная команда DOS "more", у которой есть опция + n, которая начнет вывод файла после n-й строки:

Приведенная выше команда выведет все после первых двух строк.
На самом деле это обратная голова Unix :

Вышеупомянутая команда напечатает только первые 2 строки файла.

Нет, это не то же самое. tail начинает отсчет с конца файла. Итак, tail -2 напечатаем две последние строчки. @ADTC (моя версия) tail не поддерживает негативы. only head does (gnuwin32) @ nl-x -2 не является отрицательным. Это просто сокращенная версия -n 2 (количество строк). К сожалению, слишком много реализаций tail не поддерживают -2 , что делает его очень несовместимым с сопутствующими head реализациями, которые поддерживают. Меня это слишком много раз раздражало. @ADTC Извините. Меня смутило, head -n -2 что отличается от head -n 2 . А вот с хвостом последнего не существует.

ЕСЛИ у вас установлена Windows PowerShell (я думаю, что она включена с XP), вы можете просто запустить cmd.exe:

или прямо из PowerShell:


Обновить

В PowerShell 3.0 (Windows 8 и выше) добавлена Tail команда с псевдонимом Last . Head и First псевдонимы для TotalCount .

Итак, команды можно переписать как

@blakeoft да . Я обновил свой ответ. Удивительно, что потребовалось 2 года и 17 голосов, прежде чем кто-то прокомментировал это. @AmitPortnoy Я нашел еще один ответ где-то на этом обмене стеками, в котором говорится, что Get-Content теперь есть хвостовая команда. Например, Get-content -Tail 5 file.txt напечатает последние пять строк файла file.txt. Кстати, спасибо за обновление вашего ответа. каким-либо способом использовать его как фильтр? (например, чтение stdin вместо файла)

где n = количество отображаемых строк. Работает быстро и в точности как head команда.

Такие команды, как P, S и т. Д., Могут вводиться только пользователем в командной строке. Их нельзя передать команде more. Таким образом, приведенный выше пример не работает

Вы можете получить CoreUtils из GnuWin32 , который представляет собой набор стандартных инструментов unix, перенесенных на Windows.

В нем, помимо прочего, находится голова.

Что ж, это сделает это, но это примерно так же быстро, как кажется (примерно O (n * m), где n - количество отображаемых строк, а m - общее количество строк в файле):

Где «10» - это количество строк, которые вы хотите напечатать, а «filename» - это имя файла.

+1 за решение, на ввод которого у вас ушло больше времени, чем на загрузку порта head . Примечание: заключите это выражение в скобки - (expr) > out.txt - при отправке результатов в файл, иначе вы получите только последнюю строку. Или добавьте - expr >> out.txt . Это правильный ответ, актуальный и актуальный (в отличие от cmd). Спасибо.

При использовании more + n, о котором уже упоминал Мэтт, чтобы избежать пауз в длинных файлах, попробуйте следующее:

еще +1 myfile.txt> con

Админу на заметку - 26. Как просматривать лог-файл в режиме реального времени в Windows и Linux

Любая диагностика или наблюдение за состоянием системы начинается с изучения логов. При этом бывают ситуации, когда логи хотелось бы видеть в режиме реального времени, что позволит лучше понять причинно-следственные связи и увидеть реакцию системы на выполняемые действия. То, о чем мы расскажем в данной заметке - известно многим, но, как показывает практика, многие начинающие не знают этих способов, поэтому не будет лишним в очередной раз обратиться к этой теме.

Linux

В Linux подавляющее большинство логов являются обычным текстом, что делает работу с ними возможной при помощи широкого спектра утилит. Одна из них - это tail (англ. хвост), по умолчанию она выводит 10 последних строк указанного текстового файла. А еще она умеет выводить на экран последние строки по мере их добавления. Это как раз то, что нам нужно. Допустим мы хотим видеть в реальном времени лог доступа к сайту:

После чего вы сразу увидите на экране 10 последних строк лог-файла и все добавляемые позже в режиме реального времени.

logfile-tail-001.jpg

Это удобно, теперь мы можем в одном окне выполнять какие-либо действия, а во втором сразу видеть реакцию на них.

На экране теперь строки лога появляться не будут, они будут записаны в файл my_log.log в домашней директории. После чего выполните с системой необходимые действия, результат которых должен попасть в лог, прервите действие команды по Ctrl+C и можете смело описывать проблему коллегам, не забыв приложить полученный файл.

Здесь мы перенаправили выходной поток от tail на вход команды grep, которая выберет только те строки, в которых присутствует искомый адрес. Подобную конструкцию можно использовать и при интерактивном выводе на экран.

Windows

Системные логи Windows хранятся в Журналах событий, которые имеют специализированный формат и хранятся в файлах .evt и .evtx, которые просмотреть подобным образом не удастся, но логи многих системных служб и приложений используют простой текстовый формат, а следовательно дают возможность работать с ними интерактивно.

В качестве аналога команды tail используем один из командлетов PowerShell:

Данная команда выведет на экран весь лог и продолжит отображать новые строки. Если лог большой, то это может быть неудобно, поэтому добавим в команду еще один параметр, в котором укажем какое количество последних строк мы хотим видеть, допустим пять:

Или выполнить отбор по интересующему нас вхождению используя возможности РowerShell, например отберем только события AUTH_FAILED, включив в отбор также последние сто строк лога:

logfile-tail-003.jpg

В данной заметке мы не претендовали на всестороннее освещение затронутой темы, а всего лишь хотели напомнить о существовании удобных инструментов для интерактивной работы с текстовыми логами. Надеемся данный материал окажется вам полезен.

Читайте также: