上位机知识篇---Linux日志
在 Linux 系统中,运行日志就像系统和应用程序的 “日记”,会详细记录各种事件(比如启动、错误、用户操作等)。理解日志的作用、位置和查看方法,能帮你快速排查问题、监控系统状态,甚至发现安全隐患。下面从作用、存放位置、查看方法到实用技巧,一步步讲清楚。
一、运行日志的核心作用
简单说,日志是系统和应用的 “行为记录”,主要有 3 个核心作用:
- 排查问题:当服务启动失败(比如 nginx 没起来)、程序崩溃时,日志里会记录具体错误原因(比如 “端口被占用”)。
- 监控系统:实时查看日志能知道系统状态(比如 “磁盘满了”“内存不足”),提前发现异常。
- 安全审计:记录用户登录、权限变更等操作(比如 “有人尝试暴力破解密码”),方便追溯安全事件。
二、日志文件存放在哪里?
Linux 的日志文件几乎都集中在 /var/log/
目录下(可以理解为 “系统日志仓库”)。这里有很多按功能分类的日志文件,常用的有这些:
日志文件路径 | 记录内容 | 适用场景举例 |
---|---|---|
/var/log/syslog | 系统综合日志(大部分系统事件,如服务启动 / 停止、进程错误) | 找系统级别的错误(如 “防火墙启动失败”) |
/var/log/auth.log | 认证相关日志(用户登录、sudo 操作、ssh 登录尝试等) | 查 “谁登录过服务器”“有没有暴力破解” |
/var/log/kern.log | 内核日志(内核启动、硬件驱动错误、内存问题等) | 排查硬件相关问题(如 “显卡驱动崩溃”) |
/var/log/messages | 通用消息日志(比 syslog 更简洁,包含系统正常运行的信息) | 快速了解系统近期状态 |
/var/log/dpkg.log | 软件包管理日志(安装 / 卸载 / 更新 deb 包的记录,如 apt 操作) | 查 “之前装了什么软件”“更新失败原因” |
/var/log/nginx/access.log | Nginx 服务器访问日志(谁访问了网站、访问时间、URL 等) | 分析网站访问量、异常请求 |
/var/log/nginx/error.log | Nginx 错误日志(请求失败、配置错误等) | 排查 “网站打不开” 的原因 |
/var/log/secure | (CentOS/RHEL 系统)类似 auth.log,记录认证和安全事件 | CentOS 系统查登录记录 |
三、如何查看日志?常用工具和操作
查看日志的工具很多,从简单的 “直接读内容” 到 “实时监控”“关键词过滤”,按需选择即可。
1. 基础查看:直接读日志内容
适合快速看日志的部分内容,常用命令:
cat 日志文件
:一次性显示整个日志内容(适合短日志)。
例:cat /var/log/messages
→ 查看系统近期的通用消息。head -n 数字 日志文件
:只看日志的前 N 行(比如前 10 行)。
例:head -n 10 /var/log/auth.log
→ 看最近 10 条登录相关记录。tail -n 数字 日志文件
:只看日志的后 N 行(最新的记录,常用)。
例:tail -n 20 /var/log/kern.log
→ 看最近 20 条内核事件。
2. 实时监控:日志更新时自动显示
当服务运行中(比如网站、数据库),想实时看新产生的日志(比如用户刚访问网站的记录),用 tail -f
:
- 命令:
tail -f 日志文件
(-f
= follow,“跟踪” 日志更新)。
例:tail -f /var/log/nginx/access.log
→ 实时显示新的网站访问记录(按Ctrl+C
退出)。
3. 关键词过滤:快速找目标内容
日志通常很长,直接看太费劲,用 grep
过滤关键词(比如 “错误”“失败”):
命令:
grep "关键词" 日志文件
(区分大小写,加-i
忽略大小写)。
例 1:查 “登录失败” 的记录:grep "Failed" /var/log/auth.log
→ 找出所有包含 “Failed” 的行(比如暴力破解尝试)。
例 2:查 “nginx 错误”:grep -i "error" /var/log/nginx/error.log
(-i
让 “Error”“ERROR” 都能被找到)。进阶:结合
tail
实时过滤。比如实时看 nginx 的错误:tail -f /var/log/nginx/error.log | grep -i "error"
。
4. 翻页查看:长日志慢慢看
如果日志很长(比如几个 G),cat
会一次性刷完屏幕,用 less
或 more
翻页看:
- 命令:
less 日志文件
(按Enter
下一行,空格
下一页,q
退出,/关键词
搜索)。
例:less /var/log/syslog
→ 慢慢翻系统综合日志,按/error
直接搜 “error” 关键词。
5. 系统日志管理工具:journalctl(适用于 systemd 系统)
现在大部分 Linux 发行版(如 Ubuntu 16.04+、CentOS 7+)用systemd
管理系统,日志由journald
统一管理,用 journalctl
查看更方便:
- 基础用法:
journalctl
→ 显示所有日志(按时间倒序,最新的在最后)。 - 常用参数:
journalctl -u 服务名
:只看某个服务的日志(比如journalctl -u nginx
→ nginx 的所有日志)。journalctl -f
:实时监控新日志(类似tail -f
)。journalctl --since "1小时前"
:查看 1 小时内的日志(也可以写具体时间,如--since "2024-05-01 08:00"
)。
四、日志不会无限变大?日志轮转(logrotate)
日志会不断产生,时间长了会占满磁盘。Linux 用 logrotate
自动 “管理” 日志:按时间或大小切割日志(比如每天切一个新文件)、压缩旧日志、删除超期日志(比如只保留 30 天的)。
- 配置文件位置:
/etc/logrotate.d/
(每个服务的日志轮转规则在这里,比如/etc/logrotate.d/nginx
是 nginx 的日志规则)。 - 简单理解:就像写日记,一本写满了换一本,旧的日记打包收起来,太久的就扔掉,避免桌面堆太多。
五、实用场景举例
- 服务启动失败:比如
systemctl start nginx
提示失败,用journalctl -u nginx
或grep "nginx" /var/log/syslog
找错误原因(比如 “端口被占用”)。 - 查谁登录过服务器:看
/var/log/auth.log
,用grep "Accepted" auth.log
找成功登录的记录(包含用户名、IP)。 - 系统突然卡了:看
/var/log/kern.log
或journalctl -k
(内核日志),可能有 “内存不足”“硬盘 IO 错误” 等记录。
总结:日志是 Linux 的 “黑匣子”,遇到问题先查日志,大部分答案都在里面。记住/var/log/
目录和tail -f
、grep
这两个工具,基本能解决 80% 的问题~