Linux 基础命令:文件操作、权限管理与进程管理
说实话,很多刚接触日志分析的朋友,一上来就想着用什么高大上的工具。其实啊,Linux 基础命令才是你吃饭的家伙。我做了这么多年运维和日志分析,90% 的排查工作,靠的就是这几个命令。
这一章,我就带你把这几个核心命令吃透。别小看它们,用好了,效率翻倍。
2.1 文件操作命令:你的眼睛和手
日志分析,说白了就是跟文件打交道。你总得知道文件在哪儿、里面写了什么、怎么快速找到关键信息吧?
2.1.1 ls —— 看看目录里有什么
ls 是我用得最多的命令,没有之一。每次登录服务器,第一件事就是 ls 一下。
# 基本用法
ls
ls -l # 长格式,显示权限、大小、时间
ls -la # 显示所有文件(包括隐藏文件)
ls -lh # 人类可读的大小(K、M、G)
ls -lt # 按时间排序,最新的在最上面
我的习惯: 我一般直接用
ll(很多系统上 ll 是 ls -l 的别名)。看日志目录时,ls -lh 最实用,一眼就能看出哪个日志文件最大,是不是该轮转了。
2.1.2 cd —— 想去哪儿就去哪儿
cd 就是切换目录。没什么好说的,但有几个小技巧很实用。
cd /var/log # 进入日志目录
cd .. # 返回上一级
cd ~ # 回到家目录
cd - # 回到上一个目录(这个超好用)
避坑指南: 我曾经在排查问题时,在
/var/log 和 /etc 之间来回切换,每次都打全路径。后来同事告诉我 cd - 这个技巧,瞬间省了一半时间。你想想看,排查问题时,时间就是生命啊。
2.1.3 cat —— 看文件内容
cat 是最直接的查看命令。但日志文件通常很大,直接 cat 会把终端刷爆。
cat /var/log/syslog # 查看系统日志
cat -n /var/log/syslog # 显示行号
注意: 千万别用
cat 看几百兆的日志文件。我见过有人这么干,结果终端卡死,最后只能强制关闭。大文件用 less 或 tail 才是正解。
2.1.4 tail —— 看尾巴,实时追踪
这是日志分析的灵魂命令。没有 tail,我都不敢想象怎么排查线上问题。
tail /var/log/syslog # 查看最后10行
tail -n 50 /var/log/syslog # 查看最后50行
tail -f /var/log/syslog # 实时追踪,新日志会不断刷新
我的经验: 排查线上问题时,我习惯先开一个终端窗口,执行
tail -f /var/log/app.log,然后另一个窗口去复现问题。这样能实时看到日志输出,定位问题特别快。说白了,这就是「实时监控」的雏形。
2.1.5 grep —— 大海捞针的神器
日志文件动辄几万行,你不可能一行一行看。grep 就是你的过滤器。
grep "ERROR" /var/log/syslog # 查找包含 ERROR 的行
grep -i "error" /var/log/syslog # 忽略大小写
grep -r "timeout" /var/log/ # 递归搜索目录下所有文件
grep -c "ERROR" /var/log/syslog # 只统计匹配行数
grep -A 5 "ERROR" /var/log/syslog # 显示匹配行及后面5行
grep -B 5 "ERROR" /var/log/syslog # 显示匹配行及前面5行
grep -C 5 "ERROR" /var/log/syslog # 显示匹配行及前后各5行
实战组合拳: 我最常用的组合是
tail -f app.log | grep "ERROR"。这样既能实时追踪,又能只看到错误信息,不会被正常日志刷屏。嗯,这个技巧你一定要记住。
2.2 权限管理命令:别乱动我的文件
日志文件通常只有 root 或特定用户能看。权限搞错了,要么看不到日志,要么被不该看的人看到了。我在项目中遇到过好几次因为权限问题导致的排查延误。
2.2.1 理解文件权限
先看一个 ls -l 的输出:
-rw-r--r-- 1 root root 12345 Feb 20 10:00 syslog
这串字符怎么读?我教你一个口诀:
| 位置 | 含义 | 示例 |
|---|---|---|
| 第1位 | 文件类型(- 普通文件,d 目录) | - |
| 第2-4位 | 所有者权限(r读 w写 x执行) | rw- |
| 第5-7位 | 所属组权限 | r-- |
| 第8-10位 | 其他人权限 | r-- |
说白了,就是三组权限:我(所有者)、我们组(所属组)、他们(其他人)。
2.2.2 chmod —— 修改权限
权限可以用数字表示:r=4, w=2, x=1。加起来就行。
chmod 644 /var/log/syslog # 所有者读写,其他人只读
chmod 755 /var/log/ # 目录:所有者读写执行,其他人读执行
chmod +x script.sh # 给所有用户添加执行权限
我的建议: 日志文件一般用 640 或 644。640 表示只有所有者和所属组能读,更安全。我曾经因为日志权限设成 777,结果被安全团队通报了。嗯,权限这东西,够用就行,别太开放。
2.2.3 chown —— 修改所有者
chown root:root /var/log/syslog # 修改所有者和所属组
chown -R appuser:appgroup /var/log/ # 递归修改目录下所有文件
注意: 修改日志目录的所有者要小心。如果把系统日志
/var/log/syslog 的所有者改成普通用户,syslog 服务可能就无法写入了。我见过有人这么干,结果系统日志停了半天才发现。
2.3 进程管理命令:看看谁在搞事情
日志分析时,经常需要确认某个服务是否在运行,或者某个进程是不是在疯狂写日志。这时候就需要进程管理命令了。
2.3.1 ps —— 查看进程快照
ps -ef # 查看所有进程
ps aux # 查看所有进程(更详细的格式)
ps -ef | grep nginx # 查找 nginx 进程
ps -eo pid,ppid,cmd,%mem # 自定义输出列
实战场景: 有一次线上服务响应变慢,我怀疑是某个进程在大量写日志导致磁盘 I/O 高。用
ps aux --sort=-%mem 一看,果然有个进程内存占用异常。说白了,ps 就是你的「进程体检报告」。
2.3.2 top —— 实时监控系统状态
top 是动态的,会不断刷新。我习惯用它来快速定位「谁在吃资源」。
top # 启动 top
top -u appuser # 只看某个用户的进程
top -p 1234 # 只看某个 PID
在 top 界面里,按 P 按 CPU 排序,按 M 按内存排序。这个我经常用。
2.3.3 kill —— 结束进程
有时候日志分析发现某个进程异常,需要干掉它。
kill 1234 # 优雅结束进程(发送 SIGTERM)
kill -9 1234 # 强制结束进程(发送 SIGKILL)
killall nginx # 结束所有 nginx 进程
警告:
kill -9 是最后的手段。它不会给进程任何清理的机会,可能导致数据丢失。我一般先用 kill,等几秒没反应再用 kill -9。你想想看,如果数据库进程被 kill -9 了,那后果...
2.4 本章知识体系
下面这张图,帮你把这一章的核心逻辑串起来:
2.5 实战小练习
光看不练假把式。我给你留个小任务:
- 登录你的 Linux 服务器(或者虚拟机)
- 进入
/var/log目录,用ls -lh看看有哪些日志文件 - 用
tail -f实时监控syslog或messages - 在另一个终端执行
ps -ef | grep syslog,看看是哪个进程在写日志 - 用
chmod 640修改一个测试文件的权限
做完这些,你就已经迈出了日志分析的第一步。别急,后面我们会把这些命令组合起来,解决真正的线上问题。