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 本章知识体系

下面这张图,帮你把这一章的核心逻辑串起来:

Linux基础命令知识体系 Linux 基础命令知识体系 文件操作命令 权限管理命令 进程管理命令 ls cd cat tail grep chmod chown 权限理解 ps top kill 核心思路:文件操作是基础,权限管理是保障,进程管理是排查手段 三者结合,才能高效进行日志分析

2.5 实战小练习

光看不练假把式。我给你留个小任务:

  1. 登录你的 Linux 服务器(或者虚拟机)
  2. 进入 /var/log 目录,用 ls -lh 看看有哪些日志文件
  3. 用 tail -f 实时监控 syslog 或 messages
  4. 在另一个终端执行 ps -ef | grep syslog,看看是哪个进程在写日志
  5. 用 chmod 640 修改一个测试文件的权限

做完这些,你就已经迈出了日志分析的第一步。别急,后面我们会把这些命令组合起来,解决真正的线上问题。