Linux 命令行艺术:文件、进程与文本处理

FreeGuideOnline 最新 2026-06-12

Linux 命令行艺术:文件、进程与文本处理

引言:为什么你需要掌握命令行

图形界面可以完成日常操作,但在服务器管理、自动化脚本、海量数据处理等场景中,命令行是不可替代的利器。本教程聚焦于 Linux 命令行最核心的三个领域——文件系统操作、进程控制与文本处理流,帮助你打下坚实的 Shell 基础。

文件与目录管理

基础导航命令:pwd, ls, cd

  • pwd — 显示当前工作目录的绝对路径。
  • ls -lha — 列出详细信息(-l)、人类可读大小(-h)、包含隐藏文件(-a)。
  • cd — 改变目录:cd .. 返回上一级,cd - 回到上一个目录,cd ~ 返回家目录。

创建、删除、移动与复制

命令 用途 常用示例
touch file.txt 创建空文件或更新时间戳 touch {a..d}.txt 一次创建多个文件
mkdir dir 创建目录 mkdir -p parent/child 递归创建
rm file 删除文件 rm -rf dir/ 强制递归删除目录(危险)
cp source dest 复制文件 cp -r dir1 dir2 递归复制目录
mv source dest 移动或重命名 mv old.txt new.txt 重命名文件

查看文件内容

  • cat — 一次性输出全部内容。
  • less — 分页浏览,支持 / 搜索、q 退出。
  • head -n 20 / tail -n 20 — 显示头部或尾部行。
  • tail -f /var/log/syslog — 实时追踪日志文件新增内容。

文件权限与所有者

Linux 的权限体系基于用户(u)、用户组(g)和其他(o),每个文件有三种权限:读(r)、写(w)、执行(x)。

  • chmod 修改权限:
    • 符号模式:chmod u+x script.sh 给属主增加执行权限。
    • 八进制模式:chmod 755 file 对应 rwxr-xr-x
  • chown user:group file 改变属主和属组。

查找文件与内容

  • find — 强大的文件搜索。
    • 按名称:find /path -name "*.log"
    • 按大小:find . -size +100M
    • 按修改时间:find . -mtime -7 最近7天修改的文件
    • 执行动作:find . -name "*.tmp" -delete
  • locate — 依赖数据库的快速文件搜索(需 updatedb 更新数据库)。

进程管理

查看进程

  • ps aux — 列出所有用户的所有进程,显示 CPU、内存占用等信息。
  • ps -ef — 另一种常用格式,特别适合结合 grep 过滤。
  • tophtop(更友好)— 动态实时监控系统进程和资源。
  • pgrep -l ssh — 根据名称查找进程 ID。

控制进程

  • 前台进程:可直接用 Ctrl+C 终止;Ctrl+Z 将进程挂起到后台。
  • jobs 查看当前终端挂起的任务;fg %1 把后台任务调回前台。
  • bg %1 使挂起的任务在后台继续运行。
  • & 符号:command & 直接在后台启动命令。
  • nohup command & — 即使退出终端进程也不会中断。

发送信号

kill 命令用于向进程发送信号,默认发送 TERM(15)信号请求正常终止。

  • kill -l 列出所有信号。
  • kill -9 PID 强制杀死进程(SIGKILL),不留清理机会。
  • pkill -f pattern 按命令全匹配杀死进程。
  • killall process_name 按名称杀死所有同名进程。

文本处理:命令行管道艺术

标准输入输出与管道

Linux 中每个命令都有标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。

  • 重定向:command > file 覆盖写入,>> 追加写入,2> error.log 重定向错误。
  • 管道 | 将一个命令的输出作为另一个命令的输入,是文本处理的基石。

文本处理五剑客

grep — 文本搜索

  • grep "error" log.txt 搜索包含 error 的行。
  • grep -i "Error" 忽略大小写。
  • grep -v "debug" 反向匹配(排除)。
  • grep -r "function" src/ 递归搜索目录。
  • 结合正则:grep -E "failed|error" 使用扩展正则。

sed — 流编辑器

  • 替换:sed 's/old/new/' file 将每行第一个 old 换为 new。
  • 全局替换:sed 's/old/new/g'
  • 删除行:sed '/^$/d' 删除空行;sed '2,5d' 删除第2到5行。
  • 就地修改:sed -i 's/foo/bar/g' file.txt

awk — 数据处理引擎

awk 按字段处理文本,默认字段分隔符为空白。

  • 打印特定列:awk '{print $1, $3}' data.txt
  • 条件过滤:awk '$3 > 100' data.txt
  • 使用自定义分隔符:awk -F: '{print $1}' /etc/passwd
  • 变量与计算:awk '{sum+=$2} END {print "Total:", sum}'

cut — 列裁剪

  • 按字符:cut -c 1-10 file 提取每行前10个字符。
  • 按分隔字段:cut -d',' -f2,3 file.csv

sortuniq — 排序与去重

  • sort -n 按数值排序;sort -k2 按第二列排序。
  • uniq 去除重复行(通常需先排序):sort file | uniq -c 统计重复次数。
  • sort -u 相当于排序并去重。

实用组合示例

  1. 统计日志中访问量最高的5个IP

    awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -5
    
  2. 批量替换文件中的字符串

    find . -name "*.conf" -exec sed -i 's/old_domain/new_domain/g' {} \;
    
  3. 监控特定进程的CPU使用率

    watch -n 2 "ps aux | grep nginx | grep -v grep"
    

进阶技巧:提升效率

  • 命令历史history 查看历史,!number 执行历史中某条命令,Ctrl+R 反向搜索。
  • 别名:在 ~/.bashrc 中定义 alias ll='ls -lha',然后 source ~/.bashrc 生效。
  • xargs:将标准输入转化为命令参数。
    • find . -name "*.jpg" | xargs rm 删除所有找到的 jpg 文件。
    • cat urls.txt | xargs -n 1 curl -O 批量下载。
  • tee:同时将输出写入文件和 stdout:command | tee output.txt

总结

命令行是系统管理的肌肉,文本处理是自动化运维的灵魂。掌握文件操作、进程管控以及以管道为核心的文本处理链,你就能将繁琐的任务转化为高效的一行命令。接下来,将这些技巧融入 Shell 脚本,开启自动化编程之旅。

练习建议:找一个日志文件或 CSV 数据,试着只用管道命令完成数据清洗、统计和格式转换。不要依赖图形工具,让键盘成为你的主要接口。