- Classic SysAdmin: Viewing Linux Logs from the Command Line
- /var/log
- Viewing logs with less
- Viewing logs with dmesg
- Viewing logs with tail
- There are other tools
- Команда tail
- Синтаксис
- Опции
- Примеры использования команды tail
- Вывод последних строк файла на экран
- Вывод нескольких последних байт файла
- Вывод последних строк из нескольких файлов
- Использование tail для печати последних строк вывода другой команды
- Отслеживание изменений в файлах логов
- Как использовать команду tail для мониторинга логов Linux.
- Смотрите также
Classic SysAdmin: Viewing Linux Logs from the Command Line
This is a classic article written by Jack Wallen from the Linux.com archives. For more great SysAdmin tips and techniques check out our free intro to Linux course.
At some point in your career as a Linux administrator, you are going to have to view log files. After all, they are there for one very important reason…to help you troubleshoot an issue. In fact, every seasoned administrator will immediately tell you that the first thing to be done, when a problem arises, is to view the logs.
And there are plenty of logs to be found: logs for the system, logs for the kernel, for package managers, for Xorg, for the boot process, for Apache, for MySQL… For nearly anything you can think of, there is a log file.
Most log files can be found in one convenient location: /var/log. These are all system and service logs, those which you will lean on heavily when there is an issue with your operating system or one of the major services. For desktop app-specific issues, log files will be written to different locations (e.g., Thunderbird writes crash reports to ‘~/.thunderbird/Crash Reports’). Where a desktop application will write logs will depend upon the developer and if the app allows for custom log configuration.
We are going to be focus on system logs, as that is where the heart of Linux troubleshooting lies. And the key issue here is, how do you view those log files?
Fortunately there are numerous ways in which you can view your system logs, all quite simply executed from the command line.
/var/log
This is such a crucial folder on your Linux systems. Open up a terminal window and issue the command cd /var/log. Now issue the command ls and you will see the logs housed within this directory (Figure 1).
Now, let’s take a peek into one of those logs.
Viewing logs with less
One of the most important logs contained within /var/log is syslog. This particular log file logs everything except auth-related messages. Say you want to view the contents of that particular log file. To do that, you could quickly issue the command less /var/log/syslog. This command will open the syslog log file to the top. You can then use the arrow keys to scroll down one line at a time, the spacebar to scroll down one page at a time, or the mouse wheel to easily scroll through the file.
The one problem with this method is that syslog can grow fairly large; and, considering what you’re looking for will most likely be at or near the bottom, you might not want to spend the time scrolling line or page at a time to reach that end. Will syslog open in the less command, you could also hit the [Shift]+[g] combination to immediately go to the end of the log file. The end will be denoted by (END). You can then scroll up with the arrow keys or the scroll wheel to find exactly what you want.
This, of course, isn’t terribly efficient.
Viewing logs with dmesg
The dmesg command prints the kernel ring buffer. By default, the command will display all messages from the kernel ring buffer. From the terminal window, issue the command dmesg and the entire kernel ring buffer will print out (Figure 2).
Fortunately, there is a built-in control mechanism that allows you to print out only certain facilities (such as daemon).
Say you want to view log entries for the user facility. To do this, issue the command dmesg –facility=user. If anything has been logged to that facility, it will print out.
Unlike the less command, issuing dmesg will display the full contents of the log and send you to the end of the file. You can always use your scroll wheel to browse through the buffer of your terminal window (if applicable). Instead, you’ll want to pipe the output of dmesg to the less command like so:
The above command will print out the contents of dmesg and allow you to scroll through the output just as you did viewing a standard log with the less command.
Viewing logs with tail
The tail command is probably one of the single most handy tools you have at your disposal for the viewing of log files. What tail does is output the last part of files. So, if you issue the command tail /var/log/syslog, it will print out only the last few lines of the syslog file.
But wait, the fun doesn’t end there. The tail command has a very important trick up its sleeve, by way of the -f option. When you issue the command tail -f /var/log/syslog, tail will continue watching the log file and print out the next line written to the file. This means you can follow what is written to syslog, as it happens, within your terminal window (Figure 3).
Using tail in this manner is invaluable for troubleshooting issues.
To escape the tail command (when following a file), hit the [Ctrl]+[x] combination.
You can also instruct tail to only follow a specific amount of lines. Say you only want to view the last five lines written to syslog; for that you could issue the command:
The above command would follow input to syslog and only print out the most recent five lines. As soon as a new line is written to syslog, it would remove the oldest from the top. This is a great way to make the process of following a log file even easier. I strongly recommend not using this to view anything less than four or five lines, as you’ll wind up getting input cut off and won’t get the full details of the entry.
There are other tools
You’ll find plenty of other commands (and even a few decent GUI tools) to enable the viewing of log files. Look to more, grep, head, cat, multitail, and System Log Viewer to aid you in your quest to troubleshooting systems via log files.
Advance your career with Linux system administration skills. Check out the Essentials of System Administration course from The Linux Foundation.
Команда tail
Печатает последние 10 строк файла или последние 10 строк вывода другой команды. Количество печатаемых строк можно изменить. Поддерживает отслеживание изменения содержимого файла.
Синтаксис
ФАЙЛ — это один или несколько файлов, записанных через через пробел, строки которых необходимо вывести.
Если указывается несколько файлов, то выводится последние N строк из каждого файла. Перед началом вывода строк каждого файла выводится имя файла.
Опции
Задает количество строк, которое необходимо вывести.
LINES — количество первых строк из файла, которое нужно вывести.
Если перед LINES указан знак + , то выводится все содержимое файла, кроме первых N-1 строк (где N= LINES ), то есть начиная со строки с номером N.
Задает количество байт, которое необходимо вывести.
BYTES — количество последних байт из файла, которое нужно вывести.
Если перед значением BYTES указан знак + , то выводится все содержимое файла, кроме первых N-1 байт (где N= BYTES ), то есть начиная с байта с номером N.
Значение BYTES можно указать с суффиксом: b (512 байт), kB (1000 байт), MB (1000*1000), M (1024*1024), GB (1000*1000*1000), G (1024*1024*1024), T, P, E, Z, Y.
Также можно использовать двоичные приставки: KiB=K, MiB=M и так далее.
Отслеживать появление новых строк в файле. Выводить последние строки файла по мере их появления.
По умолчанию tails следит за дескриптором файла (—follow=descriptor), то есть, например, если во время отслеживания файл будет переименован, то это не повлияет на выполнение команды.
Пытаться открыть файл, если он недоступен. Опция используется только при отслеживании файла, то есть совместно с опцией -f или —follow=
Опцию удобно использовать при отслеживании файлов логов, которые могут ротироваться, то есть отслеживаемый файл периодически может быть недоступен.
То же самое, что и —follow=name —retry. Отслеживать файл по имени; пытаться открыть, если недоступен.
Используется совместно с опцией —follow=name. Повторно открывает файл, размер которого не изменился после N проверок (по умолчанию 5), чтобы проверить был ли файл переименован (например, это ротируемый файл логов) или выполнен unlink.
Прекратить отслеживание, если процесс с идентификатором PID умирает. Используется совместно с опцией -f.
Делать паузу примерно N секунд (по умолчанию 1) между проверками файла. Используется совместно с опцией -f. При inotify и —pid=PID выполнять проверку процесса PID минимум один раз в N секунд.
Не печатать имена файлов.
Примечание: Имена файлов печатаются, если указано несколько файлов. Если данная опция установлена, то имена файлов не печатаются, и между содержимым разных файлов не добавляется пустая строка.
Примеры использования команды tail
Рассмотрим несколько примеров использования команды tail в Linux.
Вывод последних строк файла на экран
Вывести последние 10 строк файла:
Вывести последние 25 строк файла:
Вывод нескольких последних байт файла
Вывести содержимое последних 100 байт файла:
Вывести содержимое последнего мегабайта файла (здесь используется суффикс M):
Вывод последних строк из нескольких файлов
Вывести последние 3 строки из каждого файла:
tail -n3 myfile.txt myfile2.txt
Использование tail для печати последних строк вывода другой команды
Команду tail можно использовать для того, чтобы напечатать последние N строк вывода другой команды.
Выполнить команду ls -t и вывести только последние 5 строк. Команда ls -t выводит на экран список файлов в директории и сортирует их по времени изменения (так как указан ключ -t). В данном примере будут выведены не все файлы, а только последние 5.
Вывести содержимое файла командой cat, но напечатать только последние 12 строк:
cat /var/log/Xorg.0.log | tail -n12
Отслеживание изменений в файлах логов
Команда tail может использоваться для отслеживания изменений в файлах логов (или любых других), в которые периодически могут добавляться новые строки.
Отслеживать появление новых строк в файле /var/log/messages и выводить последние 20 строк файла:
tail -n20 -F /var/log/messages
Предыдущая команда имеет особенность, заключающуюся в том, что, например, если во время отслеживания файл будет очищен или заменен другим файлом, то после этого команда tail напечатает все содержимое файла. Если такое поведение неприемлемо, то можно воспользоваться командой watch совместно с tail. Выводить последние 20 строк файла раз в 2 секунды:
watch -n2 tail -n20 myfile.txt
Как использовать команду tail для мониторинга логов Linux.
Всем привет! После почти двух лет молчания вновь возникло желание делиться житейским опытом админских будней.
Анализ посещаемости сайта показал, что наиболее востребованными темами являются темы про Mac и Linux для начинающих, так что пожалуй на них и сделаю акцент в ближайших выпусках.
Сегодня я расскажу о команде tail, которую большинство практикующих администраторов активно используют, но как показал опрос среди коллег, многие даже не догадываются, что она более гибка, чем кажется на первый взгляд.
Согласно философии Linux, команда выполняет одно предназначение — выдачу хвостовой части файла. То есть начиная с указанного места, копирует файл на стандартный вывод. Выполним команду применительно к syslog:
В выдаче мы получим 10 последних строк syslog, после чего команда завершит свою работу. Мы можем регулировать количество строк для выдачи через ключ —n:
Теперь мы видим последние 20 строк. Так-же мы можем выводить последние n байт с помощью ключа —c:
Отличительной чертой команды tail является ее возможность не завершаться по достижении конца вывода, а ожидать появления новых данных. Для этого добавим ключ —f:
В любом из режимов она прекрасно сочетается с grep, так что мы можем выбирать только те строки, которые нужны:
Ключ —s позволит изменить время между итерациями проверки новых данных с ключом —f. Это существенно облегчает задачу чтения логов при больших потоках данных:
При чтении логов с ротацией, полезно будет открывать файл заново , если за последние n итераций не было изменений. Достигается это ключом —max-unchanged-stat:
Встречается ситуация, когда отлаживается запуск софта и можно долго ждать новых логов, а сама программа, чьи логи мы читаем уже успешно терминировалась. Тут на помощь приходит ключ —pid, который при импользовании ключа -f позволяет завершать работу tail при завершении работы приложения:
Как только процесс с PID 1705 завершится, tail последует за ним.
А вот теперь расскажу про одну штуку с tail, про которую не знал ни один из опрошенных мной администраторов.
Tail умеет работать с несколькими файлами, достаточно указать их через пробел. Очень полезная штука при использовании сразу нескольких логов. Обычно люди открывают несколько консолей, а тут все красиво и из коробки!
tail -f /var/log/Xorg.0.log /var/log/syslog
Если мы захотим видеть все без разделителей с именами файлов, достаточно добавить ключ —q:
tail -q -f /var/log/Xorg.0.log /var/log/syslog
Только не забывайте, что сначала отобразятся первые 10 строк одного файла, а потом 10 строк другого.
На этом на сегодня все, спасибо за внимание!