Linux 日志文件位置以及如何在 Linux 上查看日志文件?
在 Linux 上,几乎所有日志文件都位于/var/log目录及其子目录下。您可以使用 cd 命令切换到此目录。当然,您需要成为 root 用户才能在 Linux 或类 Unix 操作系统上访问日志文件。您可以使用以下命令查看文本格式的日志文件:
教程详细信息 | |
---|---|
难度等级 | 简单的 |
Root 权限 | 是的 |
要求 | Linux 终端 |
类别 | 系统管理 |
操作系统兼容性 | Alma • Alpine • Amazon Linux • Arch • CentOS • Debian • Fedora • Linux • Mint • openSUSE • Pop!_OS • RHEL • Rocky • Stream • SUSE • Ubuntu • WSL |
预计阅读时间 | 7 分钟 |
如何查看 Linux 上的日志文件?
打开终端或使用 ssh 命令以 root 用户身份登录。使用以下 cd 命令转到 /var/log 目录:
# cd /var/log
要列出文件,请使用以下 ls 命令:
# ls
RHEL 6.x 服务器的示例输出:
anaconda.ifcfg.log boot.log-20111225 cron-20131110.gz maillog-20111218 messages-20131103.gz secure-20131027.gz spooler-20131117.gz up2date-20131117.gz anaconda.log btmp cron-20131117.gz maillog-20111225 messages-20131110.gz secure-20131103.gz squid uptrack.log anaconda.program.log btmp-20120101 cups maillog-20120101 messages-20131117.gz secure-20131110.gz swinstall.d uptrack.log.1 anaconda.storage.log btmp-20131101.gz dkms_autoinstaller maillog-20131027.gz mysqld.log secure-20131117.gz tallylog uptrack.log.2 anaconda.syslog collectl dmesg maillog-20131103.gz ntpstats setroubleshoot UcliEvt.log varnish anaconda.yum.log ConsoleKit dmesg.old maillog-20131110.gz prelink spooler up2date wtmp arcconfig.xml cron dracut.log maillog-20131117.gz rhsm spooler-20111211 up2date-20111211 yum.log atop cron-20111211 dracut.log-20120101 messages sa spooler-20111218 up2date-20111218 yum.log-20120101 audit cron-20111218 dracut.log-20130101.gz messages-20111211 secure spooler-20111225 up2date-20111225 yum.log-20130101.gz boot.log cron-20111225 httpd messages-20111218 secure-20111211 spooler-20120101 up2date-20120101 boot.log-20111204 cron-20120101 lastlog messages-20111225 secure-20111218 spooler-20131027.gz up2date-20131027.gz boot.log-20111211 cron-20131027.gz maillog messages-20120101 secure-20111225 spooler-20131103.gz up2date-20131103.gz boot.log-20111218 cron-20131103.gz maillog-20111211 messages-20131027.gz secure-20120101 spooler-20131110.gz up2date-20131110.gz
要查看名为 /var/log/messages 的常见日志文件,请使用以下任一命令:
这是我所看到的:
# less /var/log/messages
# more -f /var/log/messages
# cat /var/log/messages
# tail -f /var/log/messages
# grep -i error /var/log/messages
Jul 17 22:04:25 router dnsprobe[276]: dns query failed Jul 17 22:04:29 router last message repeated 2 times Jul 17 22:04:29 router dnsprobe[276]: Primary DNS server Is Down... Switching To Secondary DNS server Jul 17 22:05:08 router dnsprobe[276]: Switching Back To Primary DNS server Jul 17 22:26:11 debian -- MARK -- Jul 17 22:46:11 debian -- MARK -- Jul 17 22:47:36 router -- MARK -- Jul 17 22:47:36 router dnsprobe[276]: dns query failed Jul 17 22:47:38 debian kernel: rtc: lost some interrupts at 1024Hz. Jun 17 22:47:39 debian kernel: IN=eth0 OUT= MAC=00:0f:ea:91:04:07:00:08:5c:00:00:01:08:00 SRC=61.4.218.24 DST=192.168.1.100 LEN=60 TOS=0x00 PREC=0x00 TTL=46 ID=21599 DF PROTO=TCP SPT=59297 DPT=22 WINDOW=5840 RES=0x00 SYN URGP=0
常见的Linux日志文件名称和用途
- /var/log/messages:一般信息和系统相关内容
- /var/log/auth.log:认证日志
- /var/log/kern.log:内核日志
- /var/log/cron.log:Cron 日志(cron 作业)
- /var/log/maillog:邮件服务器日志
- /var/log/qmail/:Qmail 日志目录(此目录内有更多文件)
- /var/log/httpd/:Apache 访问和错误日志目录
- /var/log/lighttpd/:Lighttpd 访问和错误日志目录
- /var/log/nginx/:Nginx 访问和错误日志目录
- /var/log/apt/:Apt/apt-get 命令历史记录和日志目录
- /var/log/boot.log:系统启动日志
- /var/log/mysqld.log:MySQL 数据库服务器日志文件
- /var/log/secure或/var/log/auth.log:身份验证日志
- /var/log/utmp或/var/log/wtmp:登录记录文件
- /var/log/yum.log或/var/log/dnf.log:Yum/Dnf 命令日志文件。
打印 Linux 内核环形缓冲区消息
我们使用 dmesg 命令来检查或控制内核环形缓冲区。默认操作是显示来自内核环形缓冲区的所有消息。例如:
示例输出:
$ sudo dmesg
$ sudo dmesg | grep 'error'
$ sudo dmesg | grep -i -E 'error|warn|failed'
$ sudo dmesg | more
[sudo] password for vivek: [78637.759323] thermal thermal_zone14: failed to read out thermal zone (-61) [83556.712080] thermal thermal_zone14: failed to read out thermal zone (-61) [88912.931783] thermal thermal_zone14: failed to read out thermal zone (-61) [89824.197634] thermal thermal_zone14: failed to read out thermal zone (-61) [103175.274428] thermal thermal_zone14: failed to read out thermal zone (-61) [104087.896937] thermal thermal_zone14: failed to read out thermal zone (-61)
用于在 Linux 上查看日志文件的 GUI 工具
系统日志查看器是一个图形化、菜单驱动的查看器,可用于查看和监控系统日志。此工具仅适用于 Linux 笔记本电脑或台式机系统。大多数服务器未安装 X Window 系统。您可以通过以下方式启动系统日志查看器:
Click on System menu > Choose Administration > System Log:
Ubuntu 桌面上的现代日志查看器:
关于 rsyslogd 的说明
所有上述日志均使用 rsyslogd 服务生成。它是一个提供消息日志记录支持的系统实用程序。支持互联网和 unix 域套接字使此实用程序能够支持本地和远程日志记录。您可以通过输入以下命令查看其配置文件:
简而言之,/var/log 是您应该找到所有 Linux 日志文件的位置。但是,某些应用程序(例如 httpd)在 /var/log/ 中有一个目录用于存放自己的日志文件。您可以使用logrotate软件轮换日志文件,并使用logwatch软件监视日志文件。
# vi /etc/rsyslog.conf
# ls /etc/rsyslog.d/
关于现代 Linux 发行版上的 systemd 日志的说明
systemd-journald是现代 Linux 发行版中随 systemd 提供的系统服务。它收集并存储日志数据。此外,它根据从各种来源(例如通过 kmsg 收到的 Linux 内核日志消息)收到的日志信息创建和维护结构化的索引日志。因此,我们需要使用 journalctl 命令来查询 systemd-journald 的内容。
Linux journalctl 命令示例
如果不使用任何参数,则所有收集到的日志均不加过滤地显示,如下所示:
$ journalctl
查看所有启动消息:
$ journalctl -b
想要查看上次启动时的内核日志?请尝试:
$ journalctl -k -b -1
查看 systemd 单元或服务的日志
显示系统服务 apache.service 或 nginx.service 的实时日志显示:
该开关可多次使用,以节省在 CLI 上的输入。例如:
我们可以实时跟踪日志。例如:
仅显示最后 10 条日志条目:
$ journalctl -f -u apache
$ journalctl -f -u nginx
-u
$ journalctl -f -u apache.service -u php-cgi.service -u mysqld.service
tail -f /var/log/nginx/foo.log
$ journalctl -u mysqld.service -f
$ journalctl -u nginx.service -f
$ journalctl -f
$ journalctl -n 10 -u nginx.service
可执行日志
查看 D-Bus 或应用程序可执行文件生成的所有日志
$ journalctl /usr/bin/dbus-daemon
$ journalctl /usr/local/bin/app
时间范围
我们可以看到按时间范围创建的日志。例如:
$ journalctl --since "30 min ago"
$ journalctl --since "1 hour ago"
$ journalctl --since "1 days ago"
# The date and time format is YYYY-MM-DD HH:MM:SS
# So we can do
$ journalctl --since "2020-06-06"
$ journalctl --since "2020-06-06 10:42:00"
$ journalctl --since "2020-06-04 10:42:00" --until "2020-06-07 10:42:00"
按用户 ID (UID) 或 PID 查看日志
查看用户 ID # 300 的日志
$ sudo journalctl _UID=300
查看 PID # 4242 的日志
$ sudo journalctl _PID=4242
反向输出,以便首先显示最新的条目
尝试:
$ journalctl -r
$ journalctl -r -u apache.service
仅显示 Linux 内核消息
$ journalctl -k
$ journalctl --dmesg
过滤日志文件(类似 grep 语法)
我们可以过滤输出 MESSAGE= 字段与指定正则表达式匹配的条目。使用与 PERL 兼容的正则表达式。例如:
$ journalctl -k -g PATTERN
$ journalctl -u mysqld.service -g PATTERN
$ journalctl -u nginx.service -g 'error'
$ journalctl -k -g failed
总结
您了解了各种日志文件,并使用 CLI 和 GUI 选项在 Linux 上显示它们。使用 help 命令或 info 命令/man 命令查看手册页以获取更多信息:
$ man cat
$ man grep
$ man less
$ man more
$ man journalctl
$ journalctl --help