老程序员含泪整理这 12 个 Linux 命令新手用了都说早知道就好了阅读时间约 12 分钟适合人群刚摸到 Linux 的小白、被rm -rf支配过的勇士、以及每天都在 Google “怎么退出 vim” 的同学作者状态喝着第三杯咖啡回忆起被 Linux 蹂躏的青春岁月前言我与 Linux 的爱恨情仇我第一次接触 Linux是 2009 年。当时我以为它就是个黑窗口版 Windows。然后我误执行了rm -rf /。然后服务器安静了。然后我失业了。好玩笑归玩笑部分是真的。Linux 是程序员绕不开的坎命令行是 Linux 的灵魂。但大多数人学 Linux就学了ls、cd、cp然后就以为自己会了。那叫会个锤子。下面这 12 个技巧才是真正拉开差距的地方。一、Ctrl R搜索历史命令拒绝上下键翻翻翻你现在是不是每次想找之前敲过的命令就拼命按 ↑ 键按一百下按两百下眼睛都累了正确姿势按Ctrl R然后输入关键词Shell 会帮你反向搜索历史(reverse-i-search)docker: docker run -it --rm -v $(pwd):/app node:18 bash继续按Ctrl R翻上一条匹配找到了按Enter直接执行按→可以编辑再执行。老鸟提醒历史命令默认保存 1000 条可以在~/.bashrc里加大exportHISTSIZE10000exportHISTFILESIZE20000毕竟我的手指是用来写代码的不是用来按方向键的。二、!!和!$懒人最爱的命令快捷方式场景一你执行了一条命令提示权限不够需要加sudo。新手做法把整条命令重新打一遍前面加sudo。老鸟做法aptinstallvim# 提示: Permission deniedsudo!!# 等价于: sudo apt install vim!!代表上一条完整命令sudo !!一秒解决。场景二想用上一条命令的最后一个参数。mkdir-p/very/deep/nested/directory/that/is/annoyingly/longcd!$# !$ 代表上一条命令的最后一个参数# 等价于: cd /very/deep/nested/directory/that/is/annoyingly/long 这两个符号我每天至少用十几次堪称效率神器。三、tee既要输出到屏幕又要写入文件场景跑一个耗时命令想实时看输出同时又想把日志保存下来。# 错误做法看不到实时输出等完了才有文件./long-running-script.shoutput.log# 正确做法./long-running-script.sh|teeoutput.log# 追加模式不覆盖已有内容./long-running-script.sh|tee-aoutput.logtee的意思就是T 型管道数据一路流到屏幕一路流进文件两不耽误。老鸟进阶同时写多个文件也行echohello|teefile1.log file2.log file3.log四、watch实时监控命令输出比你手动刷新靠谱场景你想盯着磁盘使用量、某个进程、某个文件变化……新手做法每隔几秒手动跑一次命令眼睛盯着屏幕活像在玩找不同。老鸟做法watch-n2df-h# 每 2 秒刷新一次磁盘使用情况watch-n1ps aux | grep nginx# 每秒看 nginx 进程watch-dfree-h# -d 高亮变化的部分一眼看出哪里变了 默认刷新间隔是 2 秒。-n 0.5可以设置成 0.5 秒但你的眼球可能跟不上。五、管道 xargs批量操作的瑞士军刀场景找到一堆文件想对每个文件执行操作。很多新手不会用xargs每次都写 for 循环又长又丑。# 找到所有 .log 文件并删除find.-name*.log|xargsrm-f# 找到所有包含 TODO 的 .py 文件并用 vim 打开grep-rlTODO.--include*.py|xargsvim# 并行处理-P 指定并发数caturls.txt|xargs-P4-I{}curl-O{}-I{}是占位符{}会被替换成每一行输入。-P 4是 4 个进程并行跑速度直接起飞。⚠️注意文件名里有空格会让xargs抓狂。加上find -print0 | xargs -0用 null 字符分隔可以完美处理带空格的路径。六、screen/tmuxSSH 断了任务还在跑这是个能救命的技巧但新手几乎没人知道。场景你 SSH 到服务器跑了个耗时几小时的任务。结果网断了或者你不小心关了终端窗口……任务挂了。白跑了。你想哭。解决方案先开一个持久会话。# 用 screen大多数系统自带screen-Smytask# 新建一个叫 mytask 的会话./my-long-task.sh# 跑你的任务# 按 CtrlA然后按 D脱离会话任务继续在后台跑# SSH 断开也没关系# 重新连接screen-rmytask或者用功能更强的tmuxtmux new-smytask# 新建会话# CtrlB然后 D脱离tmux attach-tmytask# 重新连接老鸟提醒tmux还能分屏一个窗口里同时开多个终端面板。一旦用上你就再也回不去单窗口了。这是真的。七、rsync比cp和scp都聪明的文件同步工具场景传一个大文件夹到服务器传到一半网断了只能重头来过用rsync就不存在这个问题# 本地同步rsync-av--progress源目录/ 目标目录/# 同步到远程服务器rsync-avz--progress./dist/ userserver:/var/www/html/# 断点续传只传增量没变化的文件跳过rsync-avz--partial./bigfolder/ userserver:/backup/常用参数速查参数含义-a归档模式保留权限、时间戳等-v显示详细信息-z传输时压缩--progress显示进度条--delete删除目标端有但源端没有的文件慎用--dry-run预演只显示会做什么不真的执行老鸟必备--dry-run在用--delete之前一定要先跑一遍否则后果自负。八、cut、awk、sed三剑客文本处理的降维打击这三个工具放在一起说因为它们经常配合使用。cut按列切割# 取 /etc/passwd 第一列用户名以 : 分隔cut-d:-f1/etc/passwd# 取日志的第2到第4列cut-d -f2-4 access.logawk更强大的列处理 条件判断# 打印第1列和第3列awk{print $1, $3}access.log# 筛选第2列大于 1000 的行awk$2 1000 {print $0}data.txt# 统计每种 HTTP 状态码出现次数awk{print $9}access.log|sort|uniq-c|sort-rnsed流式文本替换# 把文件里所有 foo 替换成 barsed-is/foo/bar/gfile.txt# 删除空行sed-i/^$/dfile.txt# 只处理第 5 到 10 行sed-n5,10pfile.txt 这三个工具学会了你处理日志、分析数据的速度会比用 Excel 的同事快 10 倍。不夸张。九、lsofnetstat网络/文件占用排查神器场景 1端口被占用不知道是哪个进程。# 查看谁占用了 8080 端口lsof-i:8080# 或者ss-tlnp|grep8080场景 2某个文件删了但磁盘空间没释放文件被进程占用。# 找出哪些进程还打开着已删除的文件lsof|grepdeleted这个场景超级经典日志文件删了磁盘还是满的就是因为进程还在写那个幽灵文件。解决方法重启对应进程或者清空文件内容不删文件/path/to/logfile# 清空内容但保留文件进程继续写不会出错十、alias给常用命令起个小名解放双手# 加到 ~/.bashrc 或 ~/.zshrc 里aliasllls -alFhaliaslals -Aaliasclsclearalias..cd ..alias...cd ../..aliasgrepgrep --colorautoaliasmyipcurl ifconfig.mealiasportsss -tlnpaliasupdatesudo apt update sudo apt upgrade -y改完记得让配置生效source~/.bashrc老鸟进阶alias只能做简单替换复杂逻辑就写成函数放在~/.bashrc里# 一键创建目录并进入mkcd(){mkdir-p$1cd$1;}十一、后台运行三兄弟、nohup、disown很多人知道可以让命令在后台跑但不知道还有更稳的方式。# 放后台但关掉终端就死了./script.sh# nohup忽略挂断信号关终端不影响输出默认写到 nohup.outnohup./script.sh# 已经在跑的进程想放后台# CtrlZ 先暂停bg# 让它在后台继续跑disown# 从 shell 的任务表里移除彻底断开联系 生产环境推荐用systemd、supervisor或pm2管理长期运行的进程比nohup更可靠、能自动重启。nohup是应急用的别当正式方案。十二、less的正确打开方式不只是查看文件大多数人用less就是less file.txt然后按 Q 退出仅此而已。但less是个功能完整的文件浏览器lessF /var/log/syslog# 实时追踪日志类似 tail -f但可以随时按 CtrlC 暂停翻看less-Nfile.txt# 显示行号less-Sfile.txt# 不换行横向滚动看宽表格很爽在less内部的快捷键按键功能G跳到文件末尾g跳到文件开头/keyword向后搜索?keyword向前搜索n/N下一个 / 上一个搜索结果F实时追踪类似 tail -fq退出总算知道怎么退出了吧 用less看大日志文件比用cat再翻屏聪明太多了。cat一个 1GB 的日志你的终端会感谢你不这么干的。总结速查表技巧用途一句话描述CtrlR搜索历史命令拒绝上下键翻翻翻!!/!$重用上一条命令懒人必备tee同时输出到屏幕和文件T 型管道两头通watch周期刷新命令输出不用手动反复执行xargs批量执行命令管道的最佳搭档tmux/screen持久终端会话SSH 断了任务不停rsync增量文件同步比 scp 聪明支持断点续传awk/sed/cut文本处理三剑客日志分析的降维打击lsof查进程占用端口/文件被占时的救命工具alias自定义命令别名解放你的手指nohup/disown后台运行不挂断关终端任务继续跑less F实时查看日志比 tail -f 更灵活结语Linux 命令行博大精深这 12 个只是冰山一角。但冰山一角也够用了——80% 的日常工作就靠这些命令打天下。剩下的 20%等你踩了足够多的坑自然就学会了。这是任何教程都代替不了的。如果这篇文章让你少踩了哪怕一个坑麻烦点个赞再走真的写这东西很费头发的我已经快没了。系列往期回顾 《老程序员的 Git 避坑手册这 10 个命令我当年要是早知道就好了》下期预告《VS Code 的 20 个隐藏神技用了 3 年才发现你可能一个都没用过》本文在 Ubuntu 22.04 zsh 环境下验证。macOS 用户部分命令略有差异比如sed -i需要加建议装个gnu-sed保持一致省心。Windows 用户……装 WSL 吧我不是针对你我是说 CMD 里面的命令都不好使。