- How to monitor only the last n lines of a log file?
- 6 Answers 6
- Linux read last log
- Примеры использования
- Вывод информации о времени открытия последних пользовательских сессий
- Вывод информации о пользовательских сессиях, открытых в прошлом
- Вывод информации о времени открытия сессии конкретного пользователя
- Как посмотреть логи в Linux
- Расположение логов по умолчанию
- Просмотр логов в Linux
How to monitor only the last n lines of a log file?
I have a growing log file for which I want to display only the last 15 lines. Here is what I know I can do:
As the log file is filled, tail appends the last lines to the display. I am looking for a solution that only displays the last 15 lines and get rid of the lines before the last 15 after it has been updated. Would you have an idea?
That’s a good question. By today’s terminology one would say you want a widget for you shell script to do something like that if you want to have it all in one script in one shell (tmux would be an option otherwise). github.com/charmbracelet/gum is building something like that, but their features are not on this level yet.
6 Answers 6
It might suffice to use watch:
$ watch tail -n 15 mylogfile.txt
Be aware that this solution doesn’t work if the file grows more than 15 lines between two watch updates. You can use -n to change this interval.
If you use watch, try the -n option to control the interval between each update.
Thus, the following would call tail every 2 seconds
$ watch -n 2 tail -n 15 mylogfile.txt
while this one polls it every 1 second
$ watch -n 1 tail -n 15 mylogfile.txt
You could stream the logfile running less and pressing SHIFT + F that will stream the file using less. $ less mylogfile.txt Then just press SHIFT + F and it will stream. I think it is convenient for monitoring log files that update.
Indeed, not what I was looking for but close. You should also be able to use less +F mylogfile.txt as the manual says it it is similar in behavior to tail -f. If you, dear comment reader haven’t used less +G mylogfile.txt yet, then you now know how to immediately jump to the end of a log file. A useful and great time saver on old an poorly maintained systems.
Maybe you find the -d param handy.
-d Highlight the differences between successive updates. Option will read optional argument that changes highlight to be permanent, allowing to see what has changed at least once since first iteration.
In Solaris, AIX or HPUX or UNIX-like (including Linux) you can use scripts to monitoring logs or anything like that:
while true; clear; do date; echo ; echo "MONITORING LOG IN "/path/to/file.log": "; echo "Obs.: Last 20 lines of a logfile: echo ; tail -20 /path/to/file.log; echo ; sleep 5; done
Old question, but I’ve decided to write myself a bash function that does exactly that. Pasting the script here for those who want it. » ntail » preserves the last N lines and has a timeout before updating the screen to minimize flickering effects when stdout updates too often.
You can try it out with the following example command, for which the screen updates should preserve the «date», but render a scrolling effect on the stdout of the for loop:
date; for i in $(seq 1 2000); do echo $i; sleep 0.03; done | ntail 10
#!/bin/bash # Display last N lines of input like tail, but cleaning the screen before every update. # Example: date; for i in $(seq 1 2000); do echo $i; sleep 0.03; done | ntail 10 function ntail < # default to 10 lines of tail output NUM_LINES=$# gets the current time in milliseconds function mstime() < date +%s%3N >LAST_UPDATE=$(mstime) # last time the screen was updated NEEDS_REFRESH=false # whether to refresh the screen SCREEN_BUFFER_SIZE=0 # number of lines on the screen while IFS= read -r NEW_LINE; do # concatenate new the new line to the buffer TAIL_BUFFER="$TAIL_BUFFER$NEW_LINE"$'\n' # if last update is greater than 100ms, refresh screen if [ $(($(mstime) - LAST_UPDATE)) -gt 100 ]; then NEEDS_REFRESH=true fi # refresh screen if needed if [ "$NEEDS_REFRESH" = true ]; then # reduce buffer size to last NUM_LINES lines TAIL_BUFFER=$(echo "$TAIL_BUFFER" | tail -n "$NUM_LINES")$'\n' # clear the last SCREEN_BUFFER_SIZE lines, preserving the stdout above that for _ in $(seq 1 "$SCREEN_BUFFER_SIZE"); do printf "\033[1A\033[2K" done # print the new buffer printf "%s" "$TAIL_BUFFER" SCREEN_BUFFER_SIZE=$(echo "$TAIL_BUFFER" | wc -l) SCREEN_BUFFER_SIZE=$((SCREEN_BUFFER_SIZE - 1)) LAST_UPDATE=$(mstime) NEEDS_REFRESH=false fi done < /dev/stdin >ntail "$@"
Linux read last log
Команда lastlog позволяет задействовать одноименную утилиту, предназначенную для получения информации о времени открытия последних пользовательских сессий. Утилита читает бинарный файл журнала /var/log/lastlog и выводит информацию о времени создания сессии каждым из пользователей системы, используемых для работы терминалах, а также некоторых других менее важных аспектах. Она может оказаться крайне полезной в случаях несанкционированного доступа к вашей системе.
Базовый синтаксис команды выглядит следующим образом:
Утилита поддерживает ограниченное количество параметров. Наиболее важными из них являются параметр -u, позволяющий задать имя интересующего пользователя и параметр -t, позволяющий указать интересующий интервал времени в днях. Параметр -t имеет приоритет по отношению к параметру -u. В том случае, если пользователем не было инициировано сессий (в том числе, в течение указанного промежутка времени), выводится соответствующее сообщение: «**Никогда не входил в систему**».
Примеры использования
Вывод информации о времени открытия последних пользовательских сессий
Для вывода информации о времени открытия последних пользовательских сессий достаточно использовать утилиту без каких-либо дополнительных параметров:
$ lastlog
Пользователь Порт С Последний раз
root **Никогда не входил в систему**
daemon **Никогда не входил в систему**
.
gnome-initial-setup **Никогда не входил в систему**
gdm **Никогда не входил в систему**
alex tty2 Пн ноя 2 15:45:36 +0300 2020
systemd-coredump **Никогда не входил в систему**
lxd **Никогда не входил в систему**
tcpdump **Никогда не входил в систему**
_flatpak **Никогда не входил в систему**
tss **Никогда не входил в систему**
root **Никогда не входил в систему**
nobody **Никогда не входил в систему**
В результате будет выведена информация о времени открытия последних пользовательских сессий для всех пользователей системы. Разумеется, в типичной системе присутствует достаточно большое количество системных пользовательских учетных записей, которые предназначены для системных служб и не используются для открытия пользовательских сессий.
Вывод информации о пользовательских сессиях, открытых в прошлом
Для указания интервала времени, пользовательские сессии из которого вас интересуют, следует использовать параметр -t. Например, посмотрим информацию о пользовательских сессиях, открытых вчера (используем значение 1, то есть один день назад):
Так как со вчерашнего дня открытых пользовательских сессий не сохранилось, утилита ничего не выведет.
Вывод информации о времени открытия сессии конкретного пользователя
Для вывода информации о времени открытия сессии конкретного пользователя достаточно использовать параметр -u и указать после него имя интересующего пользователя:
$ lastlog -u alex
Пользователь Порт С Последний раз
alex tty2 Пн ноя 2 15:45:36 +0300 2020
В принципе, эту же информацию можно получить с помощью фильтра grep:
$ lastlog | grep alex
alex tty2 Пн ноя 2 15:45:36 +0300 2020
Но если утилита предоставляет готовый инструментарий, то грех им не пользоваться.
Как посмотреть логи в Linux
Системные администраторы, да и обычные пользователи Linux, часто должны смотреть лог файлы для устранения неполадок. На самом деле, это первое, что должен сделать любой сисадмин при возникновении любой ошибки в системе.
Сама операционная система Linux и работающие приложения генерируют различные типы сообщений, которые регистрируются в различных файлах журналов. В Linux используются специальное программное обеспечение, файлы и директории для хранения лог файлов. Знание в каких файлах находятся логи каких программ поможет вам сэкономить время и быстрее решить проблему. В этой статье мы рассмотрим основные части системы логирования в Linux, файлы логов, а также утилиты, с помощью которых можно посмотреть логи Linux.
Расположение логов по умолчанию
Большинство файлов логов Linux находятся в папке /var/log/ вы можете список файлов логов для вашей системы с помощью команды ls:
Ниже мы рассмотрим 20 различных файлов логов Linux, размещенных в каталоге /var/log/. Некоторые из этих логов встречаются только в определенных дистрибутивах, например, dpkg.log встречается только в системах, основанных на Debian.
- /var/log/messages — содержит глобальные системные логи Linux, в том числе те, которые регистрируются при запуске системы. В этот лог записываются несколько типов сообщений: это почта, cron, различные сервисы, ядро, аутентификация и другие.
- /var/log/dmesg — содержит сообщения, полученные от ядра. Регистрирует много сообщений еще на этапе загрузки, в них отображается информация об аппаратных устройствах, которые инициализируются в процессе загрузки. Можно сказать это еще один лог системы Linux. Количество сообщений в логе ограничено, и когда файл будет переполнен, с каждым новым сообщением старые будут перезаписаны. Вы также можете посмотреть сообщения из этого лога с помощью команды dmseg.
- /var/log/auth.log — содержит информацию об авторизации пользователей в системе, включая пользовательские логины и механизмы аутентификации, которые были использованы.
- /var/log/boot.log — Содержит информацию, которая регистрируется при загрузке системы.
- /var/log/daemon.log — Включает сообщения от различных фоновых демонов
- /var/log/kern.log — Тоже содержит сообщения от ядра, полезны при устранении ошибок пользовательских модулей, встроенных в ядро.
- /var/log/lastlog — Отображает информацию о последней сессии всех пользователей. Это нетекстовый файл, для его просмотра необходимо использовать команду lastlog.
- /var/log/maillog /var/log/mail.log — журналы сервера электронной почты, запущенного в системе.
- /var/log/user.log — Информация из всех журналов на уровне пользователей.
- /var/log/Xorg.x.log — Лог сообщений Х сервера.
- /var/log/alternatives.log — Информация о работе программы update-alternatives. Это символические ссылки на команды или библиотеки по умолчанию.
- /var/log/btmp — лог файл Linux содержит информацию о неудачных попытках входа. Для просмотра файла удобно использовать команду last -f /var/log/btmp
- /var/log/cups — Все сообщения, связанные с печатью и принтерами.
- /var/log/anaconda.log — все сообщения, зарегистрированные при установке сохраняются в этом файле
- /var/log/yum.log — регистрирует всю информацию об установке пакетов с помощью Yum.
- /var/log/cron — Всякий раз когда демон Cron запускает выполнения программы, он записывает отчет и сообщения самой программы в этом файле.
- /var/log/secure — содержит информацию, относящуюся к аутентификации и авторизации. Например, SSHd регистрирует здесь все, в том числе неудачные попытки входа в систему.
- /var/log/wtmp или /var/log/utmp — системные логи Linux, содержат журнал входов пользователей в систему. С помощью команды wtmp вы можете узнать кто и когда вошел в систему.
- /var/log/faillog — лог системы linux, содержит неудачные попытки входа в систему. Используйте команду faillog, чтобы отобразить содержимое этого файла.
- /var/log/mysqld.log — файлы логов Linux от сервера баз данных MySQL.
- /var/log/httpd/ или /var/log/apache2 — лог файлы linux11 веб-сервера Apache. Логи доступа находятся в файле access_log, а ошибок в error_log
- /var/log/lighttpd/ — логи linux веб-сервера lighttpd
- /var/log/conman/ — файлы логов клиента ConMan,
- /var/log/mail/ — в этом каталоге содержатся дополнительные логи почтового сервера
- /var/log/prelink/ — Программа Prelink связывает библиотеки и исполняемые файлы, чтобы ускорить процесс их загрузки. /var/log/prelink/prelink.log содержит информацию о .so файлах, которые были изменены программой.
- /var/log/audit/— Содержит информацию, созданную демоном аудита auditd.
- /var/log/setroubleshoot/ — SE Linux использует демон setroubleshootd (SE Trouble Shoot Daemon) для уведомления о проблемах с безопасностью. В этом журнале находятся сообщения этой программы.
- /var/log/samba/ — содержит информацию и журналы файлового сервера Samba, который используется для подключения к общим папкам Windows.
- /var/log/sa/ — Содержит .cap файлы, собранные пакетом Sysstat.
- /var/log/sssd/ — Используется системным демоном безопасности, который управляет удаленным доступом к каталогам и механизмами аутентификации.
Просмотр логов в Linux
Чтобы посмотреть логи на Linux удобно использовать несколько утилит командной строки Linux. Это может быть любой текстовый редактор, или специальная утилита. Скорее всего, вам понадобятся права суперпользователя для того чтобы посмотреть логи в Linux. Вот команды, которые чаще всего используются для этих целей:
Я не буду останавливаться подробно на каждой из этих команд, поскольку большинство из них уже подробно рассмотрены на нашем сайте. Но приведу несколько примеров. Просмотр логов Linux выполняется очень просто:
Смотрим лог /var/log/dmesg, с возможностью прокрутки: