Linux上的日志文件可以提供有关系统上发生的事情的大量有用信息。 以下命令可以帮助您对数据进行排序并查明问题。
Linux系统维护相当多的日志文件,其中许多您可能很少想要查看。不过,其中一些日志文件非常有价值,探索它们的选项可能比您想象的更有趣、更多样化。让我们看看一些系统日志,并了解一些更容易探测日志数据的方法。
日志文件轮换
首先,存在日志轮换的问题。一些Linux日志文件是“rotated”。换句话说,系统存储这些文件的多个“generation”,主要是为了防止它们使用太多的磁盘空间。然后压缩较旧的日志,但保留一段时间。最终,一系列旋转日志文件中最早的日志文件将在日志轮换过程中自动删除,但您仍然可以访问许多较旧的日志,以便您可以检查过去几天添加的日志条目或几周,如果您需要进一步回顾一些您正在追踪的问题。
要了解要保存的系统信息类型,只需转到 /var/log目录并列出其内容即可。
[linuxidc@localhost ~]$ cd /var/log
[linuxidc@localhost log]$ ls
anaconda dmesg.old mariadb secure wtmp
audit firewalld messages speech-dispatcher Xorg.0.log
boot.log gdm pluto spooler Xorg.0.log.old
btmp glusterfs ppp tallylog Xorg.9.log
chrony grubby_prune_debug qemu-ga tuned yum.log
cron lastlog rhsm vmware-vgauthsvc.log.0
cups libvirt sa vmware-vmsvc.log
dmesg maillog samba wpa_supplicant.log
[linuxidc@localhost log]$
这是相当大的日志和日志目录集合 – 在这种情况下是/var/log中的37个文件和目录,但是当您在这些目录中包含文件时有44个文件。
[linuxidc@localhost ~]$ su –
密码:
上一次登录:三 10月 17 22:25:40 CST 2018pts/1 上
[root@localhost ~]# cd /var/log
[root@localhost log]# ls | wc -l
37
[root@localhost log]# find . -type f -print | wc -l
44
[root@localhost log]#
检查日志文件时,您将清楚地看到哪些是同一基本日志的生成。 例如,其中一个主日志文件(syslog文件)分为九个单独的文件。 这些代表了基本上一周的历史数据以及当前文件。 大多数旧文件都是压缩文件以保留空间。
$ ls -l syslog*
-rw-r—– 1 syslog adm 558528 Oct 16 21:12 syslog
-rw-r—– 1 syslog adm 512815 Oct 16 00:09 syslog.1
-rw-r—– 1 syslog adm 31205 Oct 15 00:06 syslog.2.gz
-rw-r—– 1 syslog adm 33797 Oct 12 00:22 syslog.3.gz
-rw-r—– 1 syslog adm 61107 Oct 12 00:18 syslog.4.gz
-rw-r—– 1 syslog adm 35682 Oct 12 00:16 syslog.5.gz
-rw-r—– 1 syslog adm 32003 Oct 11 00:07 syslog.6.gz
-rw-r—– 1 syslog adm 32319 Oct 9 00:15 syslog.7.gz
syslog文件包含来自许多不同系统服务的消息–cron,sendmail和内核本身就是例子。 您还将看到用户会话和cron(计划任务)的证据。
多年来,大多数Linux系统不再使用旧消息和dmesg文件作为大部分系统消息的登陆位置。 相反,可以使用各种各样的文件和一些特殊命令来帮助显示可能与您要查找的内容最相关的日志信息。
根据所讨论的文件,您可能只使用more或tail命令,或者您可能使用特定于文件的命令,例如使用who命令从wtmp日志中提取用户登录数据。
[linuxidc@localhost ~]$ cd /var/log
[linuxidc@localhost log]$ who wtmp
linuxidc :0 2018-10-17 18:44 (:0)
linuxidc :0 2018-10-17 19:00 (:0)
linuxidc pts/0 2018-10-17 19:10 (:0)
linuxidc pts/0 2018-10-17 19:20 (:0)
linuxidc pts/1 2018-10-17 19:22 (:0)
linuxidc pts/0 2018-10-17 19:25 (:0)
linuxidc pts/0 2018-10-17 19:25 (:0)
linuxidc pts/1 2018-10-17 19:27 (:0)
linuxidc pts/2 2018-10-17 19:27 (:0)
linuxidc pts/0 2018-10-17 19:33 (:0)
linuxidc pts/0 2018-10-17 19:53 (:0)
linuxidc pts/0 2018-10-17 19:56 (:0)
linuxidc pts/0 2018-10-17 19:56 (:0)
linuxidc pts/0 2018-10-17 22:15 (:0)
linuxidc pts/1 2018-10-17 22:18 (:0)
linuxidc pts/1 2018-10-17 22:19 (:0)
linuxidc pts/1 2018-10-17 22:24 (:0)
linuxidc pts/2 2018-10-17 22:24 (:0)
linuxidc pts/1 2018-10-17 22:24 (:0)
linuxidc pts/0 2018-10-17 22:38 (:0)
linuxidc pts/0 2018-10-17 22:39 (:0)
linuxidc pts/0 2018-10-17 22:45 (:0)
linuxidc pts/1 2018-10-17 22:46 (:0)
[linuxidc@localhost log]$
类似地,当你运行tail faillog命令时,你可能什么也看不见,但是这样的命令显示它只是满是0:
# od -bc faillog
0000000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
*
0076600
当您试图对lastlog进行跟踪时,却发现需要使用lastlog命令来查看日志数据时,您可能看不到什么。
下面是/var/log中的日志文件列表,以及关于它们包含什么以及如何查看它们的内容的一些描述。
- alternatives.log – 来自update-alternatives的“运行”建议
- apport.log – 截获的崩溃信息
- auth.log – 使用的用户登录和身份验证机制
- boot.log – 启动时间消息
- btmp – 登录尝试失败
- dpkg.log – 有关安装或删除软件包的信息
- lastlog – 最近登录(使用lastlog命令查看
- faillog – 登录尝试失败的信息 – 如果没有发生则全部为零(使用faillog命令查看)
- kern.log – 内核日志消息
- mail.err – 有关邮件服务器检测到的错误的信息
- mail.log – 来自邮件服务器的信息
- syslog – 系统服务日志
- ufw – 防火墙日志
- wtmp – 登录记录
journalctl
除了在/var/log中维护的日志文件之外,还有systemd日志。 虽然不是通常意义上的单个日志文件的简单“日志文件”,但该日志代表了有关用户和内核活动的重要信息集合。 从系统上的各种源检索信息。
要查看已收集的信息,请使用journalctl命令。
您将看到多少信息取决于您是否是adm组的成员。 非adm用户将看到相对较少的信息,但adm组的成员将可以访问大量数据 – 如此示例所示,这仅仅向我们显示该adm组成员可以使用多少行信息。
[linuxidc@localhost log]$ journalctl | wc -l
3225
[linuxidc@localhost log]$
这超过3000行文字! 为了减少这种希望更容易消化的显示,你可能会想要使用适合你所看到的显示的参数。 journalctl提供的一些选项包括:
–utc(将时间格式更改为UTC)
-b(仅显示自上次启动后添加的记录)
-b -1(仅显示自上次启动以来添加的记录)
–since和–until(仅显示在指定时间范围内添加的记录,例如–since“2018-10-15”–until“2018-10-11 06:00”
这是一个例子:
[linuxidc@localhost log]$ journalctl –since “2018-10-17 19:28”
— Logs begin at 三 2018-10-17 18:58:40 CST, end at 三 2018-10-17 22:57:06 CST.
10月 17 19:28:00 localhost.localdomain fprintd[54748]: No devices in use, exit
10月 17 19:28:02 localhost.localdomain dbus[696]: [system] Activating via system
10月 17 19:28:02 localhost.localdomain systemd[1]: Starting Fingerprint Authenti
10月 17 19:28:02 localhost.localdomain dbus[696]: [system] Successfully activate
10月 17 19:28:02 localhost.localdomain systemd[1]: Started Fingerprint Authentic
10月 17 19:28:02 localhost.localdomain fprintd[54906]: D-Bus service launched wi
10月 17 19:28:02 localhost.localdomain fprintd[54906]: Launching FprintObject
10月 17 19:28:02 localhost.localdomain fprintd[54906]: entering main loop
10月 17 19:28:03 localhost.localdomain su[54905]: (to root) linuxidc on pts/2
10月 17 19:28:03 localhost.localdomain su[54905]: pam_unix(su-l:session): sessio
10月 17 19:28:23 localhost.localdomain su[54747]: pam_unix(su-l:session): sessio
10月 17 19:28:32 localhost.localdomain org.gnome.Shell.desktop[2251]: Window man
10月 17 19:28:32 localhost.localdomain kde4-ksnapshot.desktop[54711]: last windo
10月 17 19:28:32 localhost.localdomain fprintd[54906]: No devices in use, exit
10月 17 19:28:40 localhost.localdomain org.gnome.Shell.desktop[2251]: Window man
10月 17 19:28:40 localhost.localdomain kde4-ksnapshot.desktop[54711]: last windo
10月 17 19:28:43 localhost.localdomain org.gnome.Shell.desktop[2251]: Window man
10月 17 19:28:43 localhost.localdomain kde4-ksnapshot.desktop[54711]: last windo
10月 17 19:28:51 localhost.localdomain org.gnome.Shell.desktop[2251]: Window man
10月 17 19:28:51 localhost.localdomain kde4-ksnapshot.desktop[54711]: last windo
10月 17 19:30:01 localhost.localdomain systemd[1]: Started Session 6 of user roo
10月 17 19:30:01 localhost.localdomain systemd[1]: Starting Session 6 of user ro
10月 17 19:30:01 localhost.localdomain CROND[54998]: (root) CMD (/usr/lib64/sa/s
lines 2-24
您还可以检查某些特定���务的日志条目。 这可能是journalctl命令可以为您做的更有用的事情之一:
$ journalctl -u networking.service
— Logs begin at Mon 2018-08-14 16:16:31 EDT, end at Tue 2018-10-17 19:16:51 EDT
July 14 16:16:32 shs-Inspiron-530s systemd[1]: Starting Raise network interfaces.
July 14 16:16:42 shs-Inspiron-530s systemd[1]: Started Raise network interfaces.
July 14 16:49:38 butterfly systemd[1]: Stopping Raise network interfaces…
July 14 16:49:38 butterfly systemd[1]: Stopped Raise network interfaces.
— Reboot —
July 14 16:49:50 butterfly systemd[1]: Starting Raise network interfaces…
July 14 16:49:51 butterfly systemd[1]: Started Raise network interfaces.
— Reboot —
请注意系统重新启动如何显示在此输出中。
要获取服务列表,请尝试以下命令:
$ service –status-all | column
[ + ] acpid [ + ] network-manager
[ – ] alsa-utils [ – ] networking
[ – ] anacron [ – ] plymouth
[ + ] apparmor [ – ] plymouth-log
[ + ] apport [ – ] pppd-dns
[ + ] atd [ + ] procps
[ + ] atop [ – ] quota
[ + ] atopacct [ – ] quotarpc
[ + ] avahi-daemon [ – ] rsync
[ – ] bluetooth [ + ] rsyslog
[ – ] console-setup.sh [ – ] saned
[ + ] cron [ + ] sendmail
[ + ] cups [ + ] speech-dispatcher
[ + ] cups-browsed [ – ] spice-vdagent
[ + ] dbus [ + ] ssh
[ – ] dns-clean [ + ] sysstat
[ + ] gdm3 [ – ] thermald
[ + ] grub-common [ + ] udev
[ – ] hwclock.sh [ + ] ufw
[ + ] irqbalance [ + ] unattended-upgrades
[ + ] kerneloops [ – ] uuidd
[ – ] keyboard-setup.sh [ + ] whoopsie
[ + ] kmod [ – ] x11-common
在上面的显示中:
+ = 有效
– = 无效
? = 没有可用的状态选项
[linuxidc@localhost ~]$ journalctl –disk-usage
Archived and active journals take up 8.0M on disk.
[linuxidc@localhost ~]$
如果您想关注特定进程,可以通过提供PID(截断)来实现,如下例所示。
[linuxidc@localhost ~]$ journalctl _PID=787
— Logs begin at 三 2018-10-17 18:58:40 CST, end at 三 2018-10-17 23:07:16 CST.
10月 17 18:58:49 localhost.localdomain NetworkManager[787]: <info> [1539773929.
10月 17 18:58:49 localhost.localdomain NetworkManager[787]: <info> [1539773929.
10月 17 18:58:49 localhost.localdomain NetworkManager[787]: <info> [1539773929.
10月 17 18:58:49 localhost.localdomain NetworkManager[787]: <info> [1539773929.
10月 17 18:58:49 localhost.localdomain NetworkManager[787]: <info> [1539773929.
10月 17 18:58:49 localhost.localdomain NetworkManager[787]: <info> [1539773929.
10月 17 18:58:49 localhost.localdomain NetworkManager[787]: <info> [1539773929.
10月 17 18:58:49 localhost.localdomain NetworkManager[787]: <info> [1539773929.
10月 17 18:58:49 localhost.localdomain NetworkManager[787]: <info> [1539773929.
10月 17 18:58:49 localhost.localdomain NetworkManager[787]: <info> [1539773929.
10月 17 18:58:49 localhost.localdomain NetworkManager[787]: <info> [1539773929.
10月 17 18:58:49 localhost.localdomain NetworkManager[787]: <info> [1539773929.
10月 17 18:58:49 localhost.localdomain NetworkManager[787]: <info> [1539773929.
注意:systemd日志的配置文件是/etc/systemd/journald.conf。
总结
Linux系统上的各种日志文件有点压倒性,但发现一些可以帮助查明问题的命令可以为您节省大量的时间和压力。