第三章:Linux进阶命令——文件查找、文本处理与权限管理

各位同学,欢迎来到第三章。说实话,前两章的基础命令,就像学开车时的挂挡和踩油门。但今天要讲的这些,才是真正让你在Linux世界里「飙车」的本事。文件查找、文本处理、权限管理——这三板斧,我干了十年系统工程师,几乎每天都在用。

3.1 文件查找:find 与 locate

先说说文件查找。你想想看,一个跑了几年的服务器,文件成千上万,想找一个配置文件怎么办?

3.1.1 find —— 真正的「地毯式搜索」

find 命令,说白了就是实时遍历文件系统。它慢,但准。

# 在当前目录下找所有 .log 文件
find . -name "*.log"

# 找大于 100MB 的文件(我排查磁盘爆满时常用)
find / -type f -size +100M

# 找最近7天内修改过的文件
find /var/log -mtime -7

我个人习惯,排查问题时一定会用 find。因为它能看到实时状态。有一次线上服务报错,我怀疑是某个临时文件没清理,用 find /tmp -mmin -5 一查,果然抓到了罪魁祸首。

注意: 在根目录 / 下用 find,尤其是 -size 参数,会消耗大量 I/O。我曾经在生产环境高峰期跑过一次,差点把磁盘读炸了。建议先 cd 到目标目录再搜。

3.1.2 locate —— 飞快的「数据库查询」

locate 快,因为它查的是预建的数据库。但它有个坑——数据库不是实时更新的。

# 查找所有包含 nginx 的文件
locate nginx

# 更新数据库(新装软件后记得跑一下)
sudo updatedb

我记得有一次,明明刚装了一个包,用 locate 死活找不到。折腾了半天,才想起来没跑 updatedb。嗯,这坑我替你们踩过了。

我的建议: 日常快速查找用 locate,精确排查用 find。两者互补,别死磕一个。

3.2 文本处理三剑客:grep、sed、awk

这三兄弟,是Linux文本处理的灵魂。我敢说,任何一个合格的运维或后端开发,都离不开它们。

3.2.1 grep —— 文本过滤的「瑞士军刀」

grep 就是用来「找行」的。它从输入中匹配模式,输出匹配的行。

# 在日志中查找 ERROR
grep "ERROR" /var/log/syslog

# 递归搜索所有 .c 文件中的 main 函数
grep -r "main(" --include="*.c" ./src

# 显示匹配行的前后各3行(排查异常时特别好用)
grep -B 3 -A 3 "OutOfMemory" app.log

我在项目中遇到过最经典的场景:线上服务突然挂了,日志文件好几GB。用 grep -n "FATAL" app.log | tail -20,十秒钟定位到崩溃点。你想想看,要是没有 grep,手动翻文件得翻到什么时候?

3.2.2 sed —— 流式编辑器,批量替换的利器

sed 不会直接改文件,它把文件内容「流式」处理,然后输出。我最常用的就是替换操作。

# 把文件中的 old 全部替换成 new(原地修改)
sed -i 's/old/new/g' config.txt

# 只删除第5到第10行
sed '5,10d' input.txt

# 在每一行前面加上行号
sed = file.txt | sed 'N;s/\n/ /'
避坑指南: 我曾经在写自动化脚本时,用 sed -i 替换配置文件,结果正则写错了,把整个文件内容清空了。还好有版本控制。所以,重要文件操作前,一定先备份,或者先用 sed 不带 -i 跑一遍看看输出。

3.2.3 awk —— 文本处理的「重型坦克」

awk 比 grep 和 sed 都强大。它把每一行当作一条记录,每个字段用空格或制表符分隔。你可以把它理解成一个微型编程语言。

# 打印第1列和第3列
awk '{print $1, $3}' data.txt

# 统计文件行数
awk 'END{print NR}' file.txt

# 找出第3列大于100的行
awk '$3 > 100' data.txt

# 格式化输出(我写报表时常用)
awk '{printf "%-10s %-5d\n", $1, $2}' data.txt

说实话,awk 我刚开始也觉得难。但后来发现,只要掌握三个核心概念就够了:模式(pattern)、动作(action)、字段($1, $2...)。剩下的,用到什么查什么。

命令 核心用途 我的评价
grep 按行匹配文本 简单粗暴,日常必备
sed 流式编辑与替换 批量修改的神器
awk 结构化文本处理 功能最强,学习曲线略陡

3.3 权限管理:chmod、chown、chgrp

Linux 的权限模型,说白了就是「谁可以对这个文件做什么」。三个命令搞定:chmod(改权限)、chown(改所有者)、chgrp(改组)。

3.3.1 chmod —— 修改文件权限

权限分三种:读(r=4)、写(w=2)、执行(x=1)。数字表示法就是把这些值加起来。

# 给所有者读写执行,组用户读执行,其他人读执行
chmod 755 script.sh

# 给所有用户加上执行权限
chmod +x script.sh

# 递归修改目录下所有文件(注意安全)
chmod -R 644 ./docs/

我记得刚入行时,有个同事把整个 /etc 目录 chmod -R 777 了。结果系统直接崩了。为什么?因为很多系统文件需要特定的权限才能正常工作。你想想看,/etc/shadow 这种密码文件要是变成 777,那还得了?

警告: 永远不要对整个系统目录执行 chmod -R 777。这是新手最容易犯的错误之一。正确的做法是:只给最小必要权限。

3.3.2 chown —— 修改文件所有者

有时候文件权限没问题,但就是访问不了。为什么?因为所有者不对。

# 把文件所有者改成 www-data
sudo chown www-data:www-data /var/www/html/index.html

# 递归修改目录所有者
sudo chown -R myuser:mygroup ./project/

我在部署 Web 服务时,经常遇到权限问题。Nginx 以 www-data 用户运行,但文件却是 root 的。这时候 chown 就派上用场了。

3.3.3 chgrp —— 修改文件所属组

chgrp 用得相对少一些,但多用户协作时很关键。

# 把文件所属组改成 devteam
chgrp devteam project.conf

# 递归修改
chgrp -R devteam ./shared/
小技巧: 其实 chown user:group 可以同时修改所有者和组,所以 chgrp 很多时候可以用 chown :group 替代。但我个人习惯,只改组的场景还是用 chgrp,语义更清晰。

本章知识体系

下面这张图,是我自己梳理的本章知识结构。你可以把它当作一张「地图」,学完后再回来看,会更有感觉。

Linux 进阶命令三大核心 文件查找 find locate 实时遍历,精确 数据库查询,快速 文本处理三剑客 grep sed awk 按行匹配 流式编辑 结构化处理 权限管理 chmod chown chgrp 修改权限 修改所有者 修改所属组 核心思想: 查找文件 → 处理文本 → 管理权限,三步搞定日常运维 我的建议:先掌握 grep 和 chmod,再学 sed 和 awk locate 和 chgrp 作为补充,用到时再查

好了,第三章的内容就到这里。这些命令,你光看是学不会的。打开终端,找个目录,动手敲一敲。遇到问题别怕,Linux 的报错信息其实很友好,仔细读一读,你就能找到答案。

可可精品资料库