Linux 常用命令大全:运维必背 50 个

Linux 常用命令大全:运维必背 50 个

刚接触 Linux 的人手里总会攒一张命令清单,收藏了几十篇文章,真到了排查问题的时候还是只会 ls 和 cd。命令这东西,光看没用,得知道每个命令解决什么问题、关键参数是什么,再配合管道把几个命令串起来,才叫会用。

这篇文章按用途把 50 个高频命令分成 10 类,每个命令给出最常用的一个例子和预期输出。别指望一口气背完,把它当字典用:遇到哪类问题,翻到对应分类,把命令抄下来跑一遍,自然就记住了。

文中示例在 Ubuntu 22.04 / CentOS 7 上都验证过(CentOS 部分命令输出略有差异)

按用途分类:一张表看清全局

先建立全局观。50 个命令分布如下:

分类命令解决什么问题文件管理ls cp mv rm touch ln file看、拷、移、删、建文件目录导航cd pwd mkdir rmdir tree在目录树里移动与创建文本处理cat grep awk sed sort uniq wc head tail cut diff查看和加工文本权限管理chmod chown chgrp umask控制谁能用进程管理ps top kill pkill nohup jobs看进程、杀进程网络ping curl wget ss scp rsync探测与传输磁盘df du mount lsblk fdisk看容量、挂载系统信息uname free uptime date whoami history了解机器状态用户管理useradd passwd su sudo id管理账号查找与帮助find which man alias echo找文件、看手册

每类挑几个核心的展开,其余在速查表里补全。下面按类逐个过。

目录导航与查找帮助

排查问题的前提是知道自己在哪、目标在哪。pwd 打印当前绝对路径,cd 切换目录,cd .. 回上级,cd ~ 回主目录,cd - 回到上一个目录——最后一个在日常来回切两个目录时很省事。mkdir -p a/b/c 一次性建多级目录,rmdir 只能删空目录,非空的得用 rm -r。tree -L 2 以树形打印两层目录,新接手一台机器时先跑它看整体布局。

找东西靠 find 和 which。find 按名字、类型、大小、时间找文件,-name 是最常用参数:

find /etc -name "*.conf"# 预期输出:/etc 下所有以 .conf 结尾的文件路径,一行一个which python3# 预期输出:/usr/bin/python3

man 是每个命令自带的手册,man ls 能查到 ls 的全部参数,记不清参数时就查它。alias 给长命令起短名,alias ll='ls -l' 写进 ~/.bashrc 就永久生效。echo $PATH 看可执行文件的搜索路径——命令"找不到"时,八成是它不在 PATH 里。

高频命令详解:文件与文本

文件管理。 ls 是入门第一命令,-lh 组合最常用,-h 把字节数转成人类可读的 K/M/G:

ls -lh# 预期输出:# total 12K# -rw-r--r-- 1 root root 3.5K Aug 26 10:21 app.log# drwxr-xr-x 2 root root 4.0K Aug 26 10:22 conf

cp、mv、rm 三个命令动作相反,参数也有讲究。cp -r 递归拷目录,mv 既可移动也可改名,rm -rf 威力最大,-f 不询问、-r 递归删目录。生产环境慎用 rm -rf,很多人删库跑路就栽在这一行上。touch 建空文件或更新时间戳,ln -s 建软链接。

文本处理。 grep 是排查日志的绝对主力,-i 忽略大小写,-n 显示行号,-E 启用扩展正则:

grep -n "ERROR" app.log# 预期输出:# 42:[2026-08-26 10:22:01] ERROR: connect timeout# 87:[2026-08-26 10:30:55] ERROR: disk full

sed 做替换,格式是 s/旧/新/g,-i 直接改文件(建议先不加 -i 试跑一遍看输出):sed -i 's/ERROR/WARN/g' app.log。awk 按列取数据,awk '{print $1}' 取第一列,日志分析里经常配 -F 指定分隔符。sort 排序加 -n 按数字排,uniq -c 去重并计数,两者经常串联用。head -n 20 看开头,tail -f 实时跟日志尾部,tail -f 配合 grep 能实现"只盯错误"的效果:

tail -f app.log | grep --line-buffered "ERROR"

cut -d ':' -f 1 按冒号切列,wc -l 数行数,diff 对比两个文件差异。cat 除了看文件,还能拼接:cat a.txt b.txt > c.txt。

权限、进程与网络

权限。 ls -l 输出里第一列 -rwxr-xr-x 就是权限位,三位一组,分别是所有者、所属组、其他人,r=4、w=2、x=1 可相加。chmod 755 script.sh 是最常见用法,chmod +x 只加执行权限。chown user:group file 改所有者,umask 决定新建文件的默认权限。

进程。 ps -ef 列出全部进程,grep 一下就能找目标进程:

ps -ef | grep nginx# 预期输出:# root  1234  1 0 Aug20 ? 00:00:01 nginx: master process# www   5678  1234 0 Aug20 ? 00:00:00 nginx: worker process

top 动态看 CPU/内存排行,按 M 按内存排序、按 P 按 CPU 排序、按 q 退出。kill -9 pid 强杀,kill -15 pid 优雅退出(先给进程机会清理资源),pkill 按名字杀,比如 pkill -f "python app.py"。nohup 让命令在终端关闭后继续跑:nohup python app.py > app.log 2>&1 &,jobs 查看后台任务。

网络。 连通性先 ping -c 4(-c 4 只发 4 个包)。接口与端口用 ss,ss -tlnp 列出监听端口和进程,比旧的 netstat 信息更全。抓 HTTP 请求用 curl -I 看响应头、curl -o file 下载、-L 跟随跳转。wget 批量下载更顺手,支持断点续传 -c。跨机传输,小文件 scp,大目录和增量同步用 rsync -avz,后者支持断点,运维同步目录基本靠它。

磁盘、系统信息与用户

磁盘。 看容量用 df -h,-h 转成易读格式;看目录占多大用 du -sh /var/log。想找"哪个目录把磁盘吃满了",du -sh ./* | sort -rh | head 一条链搞定。lsblk 看块设备结构,fdisk -l 看分区表,mount /dev/sdb1 /mnt 挂载,umount /mnt 卸载。

系统信息。 uname -a 看内核版本,free -h 看内存(注意 free 里 buff/cache 可以回收,别一看到 used 高就慌)。uptime 看运行时长和负载,load average 三个数分别对应 1/5/15 分钟,超过 CPU 核数说明忙。date 看时间,whoami 看当前用户,history 翻历史命令,history | grep mysql 找回以前执行过的命令。

用户。 useradd -m user1 建用户并建家目录,passwd user1 设密码,su - user1 切换用户(- 会加载目标用户环境),sudo 提权执行单条命令,id 看用户所属组。日常维护原则:能用普通用户 + sudo 就别直接 root 干活。

实用组合:把命令串起来

单个命令是零件,组合才是运维日常。三个最常用的组合套路:

管道 | 把左边命令的输出喂给右边命令,是组合的基础。重定向 > 覆盖写入、>> 追加写入、2>&1 把错误输出并到标准输出,日志落盘必备。

场景化命令串,照着跑就能用:

# 场景1:统计日志里各类报错各有多少条grep -E "ERROR|WARN|FATAL" app.log | cut -d ':' -f 1 | sort | uniq -c | sort -rn# 预期输出:# 128 WARN#  47 ERROR#   3 FATAL# 场景2:找出 /home 下各用户家目录占用的磁盘大小,从大到小du -sh /home/* | sort -rh | head -5# 场景3:杀掉所有残留的 uwsgi 进程(先看清楚再执行)ps -ef | grep uwsgi | grep -v grep | awk '{print $2}' | xargs kill -9# 场景4:实时监控日志里新增的 500 错误tail -f access.log | grep " 500 "# 场景5:批量把 .bak 文件改名去掉后缀for f in *.bak; do mv "$f" "${f%.bak}"; done

第 3 条里 grep -v grep 是为了过滤掉 grep 自己,xargs 把前面输出的每一行作为参数传给 kill。这种写法在排查僵尸进程时很常用,但执行前务必先跑不带 xargs 的前半段确认名单没错。

组合命令的另一个要点是"先想后敲"。新手习惯把整条命令串一口气打出来,出错了不好定位。更稳的写法是分步验证:先跑前半段看输出,确认数据符合预期,再追加管道继续。比如上面场景 3,先 ps -ef | grep uwsgi | grep -v grep 看进程名单,确认无误,再接 awk 和 xargs。线上环境操作,谨慎永远不过时。

还有个容易被忽略的组合工具是 tee。它把输出既写文件又打到屏幕,调试时既能留档又能实时看:df -h | tee disk_report.txt。配合脚本排障时,tee 比单纯重定向好用得多。

速查表:50 个命令一次带走

分类命令与一句话用法文件ls -lh 列表目录cd .. 上级目录文本cat 拼接权限chmod 755 f 设权限进程ps -ef 全量进程网络ping -c 4 探测磁盘df -h 容量系统uname -a 内核用户useradd -m u 建用户查找帮助find / -name "*.conf" 按名找

一次实战:磁盘写满的排查

把上面的命令串成一次真实排障。现象是服务告警"磁盘空间不足",处理流程:

# 1. 确认哪块盘满了、使用率多少df -h# 2. 定位到满的目录后,从根向下逐层找大目录du -h --max-depth=1 / | sort -rh | head -10# 3. 锁定嫌疑目录(比如 /var/log),找出最大的几个文件du -ah /var/log | sort -rh | head -10# 4. 确认文件内容,确实是日志就按策略处理ls -lh /var/log/nginx/access.log# 5. 清空时用 > 而不是 rm,避免进程句柄悬挂> /var/log/nginx/access.log

这套流程用到 df、du、sort、head、ls 五个命令,靠管道一层层收敛。排查的通用思路就是这样:先确认范围,再逐级缩小,最后处理。不要上来就 rm,先看清楚删的是什么。

命令用错的常见翻车现场

命令背熟了,反而容易在"看似没错"的地方翻车。几个高频现场,提前打预防针。

rm -rf 别带变量用。rm -rf $DIR/ 这种写法,一旦 $DIR 是空或未定义,命令就变成 rm -rf /,代价你承受不起。真要删目录,先 echo $DIR 确认有值,再动手;更稳的写法是 rm -rf -- "$DIR",删之前再 ls "$DIR" 过一眼内容。

du 和 df 数字对不上,不是出 bug。文件被删但进程还握着句柄,df 显示空间没释放,du 却找不到大文件。处理办法是找到持有句柄的进程,重启它或者 kill 掉。"磁盘满了但找不到大文件",先想到这一层。

kill -9 是最后手段。先给 kill -15 让进程优雅退出,留出时间清理临时文件和连接;只有它不响应才上 -9。上来就 -9,可能留下半写的文件,服务重启都起不来。

grep 没匹配到会返回 1,脚本里开着 set -e 会直接中断,容易误判成程序出错。想让它"搜不到也继续跑",加 || true,或者改判断逻辑。管道同理,最后一段的退出码才是整条命令的退出码,前面段落挂了也可能被吞掉,set -o pipefail 能把这个坑堵上。

结论

50 个命令看起来多,拆开就十来个动作:看、找、改、传、管。本文最该记住的不是每条语法,而是三条思路:先 grep 再处理、先 ps 再看 top、删东西前先 ls 确认。命令背不下来不丢人,能用 man 和 history 把正确姿势查出来,就是合格的运维。本文首发于 CSDN

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容