Аналог tail f windows

Обновлено: 07.07.2024

Реализация UNIX команды "cat" в консоли Windows с использованием WinAPI
В консоли Linux есть команда "cat", аналог которой надо сделать под консоль Windows на языке C++.

Реализация команды "cat" в консоли Windows
В общем задание следующее: В консоли Linux есть команда "cat", аналог которой надо сделать под.

В чем разница между "Порядок выполнения программ на языке C" и "Структура программы на языке C"
в конспектах у себя не нашел, хоть и записывал все, что объяснял преподаватель. вот, собственно.

Что означают команды "fun", "my_max", "my_min" в C++?
Мне нужно защищать программу, а я писал её не сам, и в универе мы эти команды ещё не проходили, и.

Хорошо. А в чем вопрос? Позиция для чтения в файле может быть установлена любая. Соответственно, ты можешь установить ее ближе к концу, прочитать буфер, вывести строки. И так читать, двигаясь в началу файла, пока не наберешь нужное кол-во строк, либо не достигнешь конца файла. Именно, как советует nimazzzy: отобразить в память, для бинарных данных отсчитать от конца файла размер, для текстовых - обратным поиском отсчитать нужное число EOL и с этого места вывести текст. Именно, как советует nimazzzy: отобразить в память, для бинарных данных отсчитать от конца файла размер, для текстовых - обратным поиском отсчитать нужное число EOL и с этого места вывести текст

nimazzzy советовал немного другое (если я вообще правильно его понял, т.к. написано мутно). Он предлагал читать данные с конца и искать начала строк. Такой метод не будет работать (или будет работать с большим геморроем) в случаях, когда файл содержит данные в кодировке с плавающим размером символа (типа utf-8)

Твой вариант представляет собой топорное решение, которое не будет работать в случае, когда большой файл не лезет в память

Обе проблемы можно решить так. Допустим, нам надо 10 последних строк. Завожу массив из 10 элементов. Потом побайтно (построчно, не суть) читаю файл и ищу те позиции, которые соответсвуют началу строки. В 1-й элемент массива заношу позицию в файле начала 1-й строки, во 2-й элемент массива заношу позицию в файле начала 2-й строки и т.п. Когда доходим до 11-й строки, то делаю сдвиг в массиве таким образом, что 1-й элемент массива начинает содержать позицию 2-й строки, 2-й элемент массива начинает содержать позицию 3-й строки и т.п. В освободившийся 10-й элемент записываем позицию 11-й строки. И так далее. Постоянно сдвигая массив и записывая в конец позицию текущей строки мы будем иметь информацию о позициях последних 10 строк. Математически оно выглядит как постоянный сдвиг массива, но технически это будет кольцевой буфер без операций сдвига, хотя принципиально разницы не играет, т.к. основные потери времени будут в чтении файла, а вовсе не в сдвиге массива

Но лучше всего взять и разобраться с исходниками вражеского tail'а и не изобретать велосипеды

Админу на заметку - 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

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

Всё о PowerShell в Windows и на Linux. Системное администрирование Windows

Как в PowerShell передать содержимое файла в командлет

В Bash на Linux когда нужно передать данные из файла команды или работают со стандартным вводом или путь до файла указывается с помощью опции. В PowerShell командлеты также могут принимать данные из стандартного ввода, например:

Как вы уже могли понять из приведённой выше команды, аналогом cat в PowerShell является командлет Get-Content. Если нужно в опцию передать содержимое файла, то используется конструкция пример которой показан в следующей команде:

Аналог cat, tail и head в PowerShell

В Linux имеется несколько команд для чтения файла:

  • cat — считывает весь файл
  • tail — считывает указанное количество строк (по умолчанию 10) от конца файла
  • head — считывает указанное количество строк (по умолчанию 10) от начала файла

Для всего этого в PowerShell используется командлет Get-Content.

Пример считывания содержимого файла C:\PS\InstalledRoles.csv (при этом содержимое будет передано по конвейеру или если это последний командлет, то будет выведено в стандартный вывод, на экран):


Командлет Get-Content получает содержимое элемента не только файлов, но также может получить содержимое функции. Для файлов содержимое считывается по одной строке за раз и возвращает набор объектов, каждый из которых представляет собой строку содержимого.

Начиная с PowerShell 3.0, Get-Content может также получать указанное количество строк от начала или до конца элемента.

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

Как прочитать файл и сохранить его в переменной

В следующей команде будет прочитан файл current_dir.txt и его содержимое будет сохранено в переменную $dir:

Опция -Path и использование подстановочных знаков с Get-Content

Для указания файла можно использовать опцию -Path, но её можно и опускать:

Можно использовать подстановочные знаки:

Путь должен указать до элементов, но не до контейнеров. Например, можно указать путь до одного или более файлов, но не до директории.

Как прочитать определённое количество строк от начала файла

С помощью опции -TotalCount (её псевдонимы -First и -Head) вы моете указать количество строк, которое должно быть прочитано от начала файла.

Следующая команда прочитает 13 первых строк файла current_dir.txt:


Как прочитать определённое количество строк от конца файла

С помощью опции -Tail вы можете прочитать последние строки файла, например:

Как узнать, сколько строк было прочитано

Командлет Get-Content возвращает массив строк, поэтому вы можете использовать методы для массивов, например, следующие команды покажут количество строк в файле current_dir.txt:

Для подсчёта количества строк вы также можете использовать командлет Measure-Object:


Обратите внимание, что эти команды вернули разное количество строк. Первая команда вернула общее количество строк вместе с пустыми, а вторая посчитала только непустые строки.

Я ищу эквивалент команды "хвост" Unix, которая позволит мне наблюдать за выходом файла журнала во время его записи.

Я бы предложил установить что-то вроде утилиты GNU для Win32. Он имеет большинство фаворитов, в том числе хвост.

Если вы используете PowerShell, то это работает:

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

PowerShell 3 вводит параметр-Tail, чтобы включить только последние X строк

Я всегда использовал baretail с для хвостовых в Windows. Это бесплатно и довольно приятно.

Edit: для лучшего описания Baretail см. этот вопрос

вы можете получить хвост как часть Cygwin.

существует довольно много вариантов, однако все они имеют недостатки с более расширенными функциями.

на Средства Windows Server 2003 обеспечивает простой хвост, который может быть загружено с помощью набора ресурсов Tools. Он слишком ограничен во многих отношениях (блокировки следуют за файлом, не хватает многих опций, таких как --pid), однако будет делать для основной задачи отслеживания файла.

хвост GnuWin32 глючит (α β γ) - такие вещи, как-f просто не работают.

хвост UnxUtils кажется лучше (- F работает, но --pid, кажется, нет,- n, но не --lines=N терпит неудачу с-f), но кажется мертвым проектом.

Cygwin является большой уродливой кашицей, возможно, можно просто использовать DLL и пакет coreutils - но все еще есть проблемы, такие как --pid не работает с собственным win32 процессы.

кого интересует DOS хвост CMD с помощью команд пакета (см. ниже) Его не префект и линии когда-то повторяются.

использование: хвост.bat-d хвост.бат-ф-ф

я использовал Хвост Для Windows. Конечно, не так элегантно, как использование

но тогда вы используете Windows. ;)

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

Если вы не хотите ничего устанавливать, вы можете "создать свой собственный" пакетный файл, который выполняет работу из стандартных команд Windows. Вот несколько советов, как это сделать.

1) с помощью найти /c / v "" yourinput.файл, получить количество строк во входном файле. Вывод примерно такой:

2) с помощью для /f, проанализируйте этот вывод, чтобы получить число 15.

3) с помощью set / a, расчета количество заголовков, которые нужно пропустить

4) с помощью для /f "skip=n" пропустить головные линии и Эхо / обработать хвостовые линии.

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