在Linux系统中,日志文件是记录系统运行状态、应用程序行为、错误信息及安全事件的核心数据,通过查看日志可以快速定位故障、分析性能问题、追踪安全威胁,常见的日志文件存储在/var/log/目录下,如syslog(系统日志)、auth.log(认证日志)、kern.log(内核日志),以及各服务的专用日志(如nginx/access.log、mysql/error.log等),掌握查看日志的方法是Linux运维和管理的基础技能,以下详细介绍常用查看命令及使用场景。

基础查看命令:直接读取日志内容
cat:查看整个文件
cat命令用于一次性输出文件全部内容,适合小文件快速查看,
cat /var/log/syslog # 查看系统日志全部内容
缺点:大文件会瞬间输出所有内容,不利于浏览,可能超出终端缓冲区。
less:分页浏览大文件
less支持分页显示,可通过上下箭头、PageUp/PageDown翻页,按q退出,适合大文件逐页查看,
less /var/log/syslog # 分页查看系统日志
常用操作(如/error)、n跳转至下一个匹配项、N跳转至上一个匹配项。
tail:查看文件末尾内容
tail默认显示文件末尾10行,适合查看最新日志(如错误、访问记录),
tail /var/log/nginx/access.log # 查看nginx访问日志最新10行 tail -n 50 /var/log/syslog # 查看末尾50行 tail -f /var/log/syslog # 实时跟踪日志更新(Ctrl+C退出)
核心参数:-f(实时跟踪,适合监控动态日志)、-n(指定行数)。
head:查看文件开头内容
head与tail相反,默认显示文件开头10行,适合查看日志初始状态,

head -n 20 /var/log/syslog # 查看日志开头20行
基础命令对比表:
| 命令 | 参数示例 | 功能描述 | 适用场景 |
|——-|——————-|——————————|————————|
| cat | cat /var/log/syslog | 查看文件全部内容 | 小文件快速查看 |
| less | less /var/log/syslog | 分页浏览,支持搜索/翻页 | 大文件逐页查看 |
| tail | tail -f /var/log/syslog | 实时跟踪文件末尾更新 | 查看最新动态日志 |
| head | head -n 20 /var/log/syslog | 显示文件开头N行 | 查看日志初始记录 |
过滤与搜索:精准定位关键信息 庞大时,需通过过滤工具快速定位关键词、时间范围或特定格式。
grep:按关键词过滤
grep是文本搜索工具,支持正则表达式,
grep "error" /var/log/syslog # 过滤包含"error"的行 grep -i "ERROR" /var/log/syslog # 忽略大小写过滤(匹配Error/ERROR等) grep -v "debug" /var/log/syslog # 反向过滤(排除包含"debug"的行) grep -c "failed" /var/log/auth.log # 统计包含"failed"的行数
核心参数:-i(忽略大小写)、-v(反向匹配)、-c(统计行数)、-n(显示行号)。
awk:按列处理日志
awk基于列处理文本,适合结构化日志(如空格/制表符分隔),
awk '{print $1, $4}' /var/log/syslog # 打印每行的第1、4列(假设日志以空格分隔)
awk -F: '{print $1}' /var/log/auth.log # 按冒号分隔,打印第1列(如时间戳)
awk '/error/{print $5}' /var/log/syslog # 匹配含"error"的行,打印第5列
核心参数:-F(指定分隔符)、'{print $N}'(打印第N列)。
sed:编辑替换日志内容
sed用于流编辑,可替换、删除特定内容(注意默认不修改原文件,需加-i参数),
sed 's/ERROR/Warning/g' /var/log/syslog # 将所有"ERROR"替换为"Warning"(输出不修改) sed -i 's/127.0.0.1/localhost/g' /var/log/nginx/access.log # 直接修改原文件,替换IP
系统日志查看:journalctl(systemd专用)
对于使用systemd的Linux系统(如Ubuntu 16+、CentOS 7+),journalctl是查看系统日志的核心命令,整合了内核日志、服务日志等:

journalctl # 查看所有系统日志(从最早到最新) journalctl -u nginx # 查看nginx服务的日志 journalctl -f -u nginx # 实时跟踪nginx服务日志 journalctl --since "2023-10-01" --until "2023-10-02" # 查看指定时间范围的日志 journalctl -p err # 过滤错误级别日志(err=3,包括emerg(0)、alert(1)、crit(2)、err(3)) journalctl -k # 仅查看内核日志
核心参数:-u(指定服务)、-f(实时跟踪)、--since/--until(时间范围)、-p(日志级别)。
日志管理:logrotate(日志轮转)
日志文件会持续增长,占用磁盘空间,logrotate是Linux常用的日志轮转工具,可自动分割、压缩、删除旧日志。/etc/logrotate.d/syslog配置文件定义了日志轮转规则:
/var/log/syslog {
daily # 每天轮转一次
rotate 7 # 保留7份旧日志
compress # 压缩旧日志(如syslog.1.gz)
missingok # 若日志文件不存在则忽略
notifempty # 若日志为空则不轮转
create 644 root root # 轮转后新文件的权限和所有者
}
通常由cron定时任务执行(如/etc/cron.daily/logrotate),无需手动干预。
查看Linux日志需根据场景选择工具:小文件用cat,大文件用less,最新动态用tail -f,关键词过滤用grep/awk,系统日志用journalctl,日志管理依赖logrotate,熟练掌握这些命令,能高效排查问题,保障系统稳定运行。
FAQs
-
如何实时查看某个服务的日志更新?
答:使用tail -f或journalctl -f命令,例如查看nginx服务的实时日志,若日志为文件(如/var/log/nginx/access.log),用tail -f /var/log/nginx/access.log;若服务由systemd管理(如nginx),用journalctl -f -u nginx。 -
如何按时间范围筛选日志内容?
答:根据日志类型选择命令:对于文本日志(如/var/log/syslog),可用grep结合时间戳过滤(如grep "2023-10-01 10:" /var/log/syslog筛选某小时日志);对于systemd日志,用journalctl的--since和--until参数,如journalctl --since "2023-10-01 00:00" --until "2023-10-02 00:00"筛选指定时间范围。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/35220.html