Аналог tail в windows

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

Microsoft Windows [Version 6.3.9600]
(c) Корпорация Майкрософт (Microsoft Corporation), 2013. Все права защищены.
C:\Users\Asus>tail
"tail" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

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

[MinGW]

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

tail -f \\путь_до_файла\logfile.txt

Можно также скачать и установить утилиту 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[={name|descriptor}] вывод добавляемых данных по мере того, как файл растет (отслеживание содержимого файла в реальном времени). Опции -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 будет отслеживать именованный файл по его полному пути, отражающему переименование, удаление и создание файла.

Сообщайте об ошибках на почту bug-coreutils@gnu.org
Домашняя страница основных утилит GNU: < http://www.gnu.org/software/coreutils/>;
Информация помощи по GNU software: < http://www.gnu.org/gethelp/>;
Сообщайте от ошибках перевода на < http://translationproject.org/team/>;
Для просмотра полной документации запустите команду: info coreutils ‘tail invocation’

C:\temp>

[Tail для Win32]

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

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

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

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

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

Get-Content myTestLog.log –Wait

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

Get-Content myTestLog.log -wait | where { $_ -match “WARNING” }

Особенности использования 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:

• Можно просматривать файлы лога удаленно, подключаясь к 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.

Разработка Thierry Patent (см. CodeProject Page). Этот проект отлично поможет разработчикам .Net, которые хотели бы встроить функционал tail в свои программы. В коде заложено несколько мощных возможностей, но наверное это будет не лучший выбор, если Вам нужно просто быстро запустить tail-отслеживание файла.

Особенности:

• Мощный инструмент, который можно настроить через правку кода.
• Инструмент довольно сложен и требует время на освоение — в зависимости от того, что Вы хотите получить от TraceTool. Просмотрите скриншот «TraceTool Overview» на странице CodeProject, чтобы получить общее представление.
• Ошибки исправляются довольно медленно. Если Вам нужно просто запустить исполняемый файл, и получить простое отслеживание хвоста лога, то выберите не TraceTool, а какую-нибудь другую утилиту. Этим Вы экономите время на настройке и конфигурировании.
• Вместе с силой приходит и большая ответственность. На страничке проекта есть комментарии пользователей, которые сообщают о различных проблемах. Несмотря на наличие проблем у пользователей они все равно довольно высоко оценивают страницу проекта — средним голосованием на уровне около 4.97 (на момент написания статьи).
• Исходный код распространяется свободно и доступен для загрузки, но Вам нужно рабочее окружение разработки .Net, чтобы Вы смогли скомпилировать проект.
• Работает только на платформе Windows.

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

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

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

Фанаты текстового редактора 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 секунды.

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

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

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

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

powershell Get-Content BitBang\bin\Debug\log.txt -Wait

Для правильного отображения текста используйте опцию -Encoding:

powershell Get-Content BitBang\bin\Debug\log.txt -Wait -Encoding UTF8

Тот же текст, отображаемый в правильной кодировке:

[Ссылки]

1. MinGW MinGW | Minimalist GNU for Windows site:mingw.org.
2. 141009tail-cygwin.zip.
3. Tail for Win32 site:tailforwin32.sourceforge.net.
4. 13 Ways to Tail a Log File on Windows & Linux site:stackify.com.
5. Windows Management Framework (Windows PowerShell 2.0, WinRM 2.0 и BITS 4.0) site:support.microsoft.com.
6. 180412tail-for-Windows.zip — русские обновления KB968930 для разных версий Windows, SnakeTail, Tail for Win32.
7. Просмотр сообщений dmesg в реальном времени.

В общем-то coreutils компилируются для windows, так что вполне можете смотреть оригинальный код.

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

#include <fstream>
#include <iostream>
#include <string>

int main()
{
    std::ifstream s("test");
    while (true) {
        if (!s.eof()) {
            std::string line;
            if (std::getline(s, line)) {
                std::cout << line << '\n';
            }
        }
        else {
            s.clear();
        }
    }
}

В реальности, хорошо было бы следить за файлом, а не пытаться прочитать из него постоянно

Если вам просто нужен tail под виндовс, то воспользуйтесь tail из собранного coreutils

Содержание

Введение
Похожие статьи

Введение

Вам нужно посмотреть только конец файла по аналогии с tail в
Linux можно использовать Get-Content флагом -Tail.

Например, чтобы получить последние 100 строк файла
2025-05-06.log

Get-Content -Path «C:\logs\2025-05-06.log» -Tail 100

Если лог нужно смотреть в реальном времени — используйте флаг -Wait

Get-Content -Path «C:\logs\2025-05-06.log» -Wait

Можно совместить -Wait и -Tail и мониторить только последние строки в реальном времени

Get-Content -Path «C:\logs\2025-05-06.log» -Wait -Tail

Автор статьи: Андрей Олегович

Похожие статьи

Windows
PowerShell
Alias
Запросы к REST API
Пользователи
Сеть
Установка
Файлы
Функции
Циклы
Ошибки PowerShell

Если служба или приложение Windows пишет логи не в Event Viewer (.evt и .evtx файлы), а в текстовые лог-файлы, вам иногда необходимо выводить и отслеживать новые события в реальном времени.

В Linux, например, для вывода содержимого логов в реальном времени используется команда tail -f /var/log/syslog. Команда выводит на экран терминала любые новые записи, которые добавляются в этот файл.

В качестве аналога команды tail в Windows можно использовать командлет Get-Content.

Следующая команда выведет содержимое всего текстового лог-файла и будет выводить новые строки:

Get-Content "C:\Users\user1\AppData\Local\Temp\MicrosoftEdgeUpdate.log" -Wait

Если файл лога большой, и вы не хотите выводить его целиком на экран, можно вывести только последние 10 строк:

Get-Content "C:\Users\user1\AppData\Local\Temp\MicrosoftEdgeUpdate.log" -Wait -Tail 10

Get-Content просмотр текстового файла с логами

Можно перенаправить вывод команды в файл:

Get-Content C:\MicrosoftEdgeUpdate.log -Wait -Tail 5 > C:\PS\new_edgeupdate.log

Если вам нужно выводить на экран только строки, которые содержат ключевое слово (например, ERROR):

Get-Content C:\MicrosoftEdgeUpdate.log -Wait -Tail 100 | where { $_ -match "ERROR"}

Можно одновременно выводить логи на экран и записывать полученные строки в новый файл:

Get-Content C:\MicrosoftEdgeUpdate.log -Wait -Tail 100 | where { $_ -match "FAILED"} | Tee-Object -FilePath C:\PS\new_edgeupdate.log

📝 Blog Post: The Windows Equivalent of the Unix ‘Tail’ Command: A Log-Watcher’s Dream! 🚀

Are you a log-watcher extraordinaire longing to keep an eye on log files as they’re being written? 🕵️‍♂️ Look no further! In this blog post, we’ll unveil the 🔍 secrets of the Windows equivalent of the Unix ‘tail’ command. 🎩✨

But first, let’s understand the question at hand: 💡

<p>»I’m looking for the equivalent of the Unix ‘tail’ command that will allow me to watch the output of a log file while it is being written to.»</p>

There’s nothing more exhilarating for a log enthusiast than tracking real-time log updates, 🔄 and we couldn’t agree more! 💥💪

So here are the common issues you might encounter and the easy solutions you’ve been longing for:

Issue 1: Windows doesn’t have a built-in ‘tail’ command 🚫

Unlike Unix, Windows doesn’t have a native pre-installed ‘tail’ command. But fret not, because where there’s a will, there’s a way! 😎

Solution 1: PowerShell to the rescue! 🦸‍♀️

PowerShell is your trusty sidekick when it comes to Windows command-line fu. With a little scripting magic, you can achieve the desired ‘tail’ behavior. 🪄✨

Here’s an example of how you can do it:

Get-Content -Path "C:\path\to\your\log-file.log" -Wait

This simple one-liner leverages the ‘Get-Content’ cmdlet with the ‘-Wait’ parameter to continuously display new log entries as they’re written. 📝👀

Issue 2: Manually refreshing the command output is a hassle 😩

Keeping a sharp eye on a log file takes focus and dedication. But manually refreshing the command output is just plain tiresome. Let’s automate it!

Solution 2: TailBlazer to the rescue! 🦸‍♂️

TailBlazer, a nifty third-party tool, comes to the rescue with its refreshing display of log file updates. 🔄💼

With TailBlazer, you’ll enjoy an auto-refreshing log viewing experience without lifting a finger! Simply configure your desired log file and let the magic unfold before your very eyes. 🪄👁️

Call-to-Action: Share your log-watching stories and tips! 💌

We’d love to hear from you! Share your favorite log-watching adventures, tips, or even a tale of when things went hilariously wrong. 📣💬

Join the conversation by leaving a comment below or visiting our website. Together, let’s level up our log-watching skills! 🚀📈

So there you have it, log-watcher gurus! Windows might not have a built-in ‘tail’ command, but with PowerShell and TailBlazer, you can effortlessly stay glued to your logs. 🌟

Happy log-watching! 👀💻

PS: Don’t forget to save and share this post with your fellow log enthusiasts! Let’s spread the joy of real-time log tracking! 🌐🌟

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Канбан доска на рабочий стол windows 10
  • Прерывается звук в bluetooth наушниках windows 11
  • Some windows security settings that are required by faceit ac
  • Подготовка к сбросу windows 10 долго
  • Wallpapers windows wallpapers nature