
1. 为什么“命令大全”这种东西永远有人看干运维这行十几年我电脑里换过无数台机器从最早的物理机到后来的虚拟机、容器唯一没变过的习惯就是手边永远留一份自己整理的 Linux 命令速查表。不是网上找不到而是别人的表永远缺那么几条你真正天天用的。“Linux 常用命令大全”这个标题看着像老生常谈但它背后对应的需求其实非常具体一个刚接手服务器的新人或者一个平时写代码、偶尔要登机器排查问题的开发需要一份能直接抄、能直接跑、覆盖日常 90% 场景的命令清单。它解决的不是“Linux 是什么”这种科普问题而是“我现在要删一个文件夹到底该用哪个参数”这种即时性问题。这篇文章我打算按真实使用场景来组织而不是按字母表罗列。因为按字母背命令是最低效的学法你背完awk转头就忘了sed怎么用。按场景走你记住的是“我要干这件事所以用这条命令”这才是运维老手的记忆方式。内容会覆盖文件操作、文本处理、进程管理、网络排查、权限用户、包管理与容器这几大块每一块我都会补上参数选择的理由和踩过的坑。适合刚入行的运维、需要登服务器干活的开发以及准备面试想系统过一遍命令的人。2. 文件与目录操作最高频也最容易出事的地方2.1 增删改查四条主线命令文件操作是所有人接触 Linux 的第一课但恰恰是这里翻车最多。我见过太多人一个rm -rf敲错路径把生产环境的数据目录清空。所以先把最核心的几条讲透。查看目录用ls但真正干活时我几乎不用裸的ls。常用组合是ls -alh-a显示隐藏文件很多配置文件以点开头不显示你就找不到-l长格式列出权限和属主-h把文件大小变成人类可读的 K/M/G。这三个参数基本是肌肉记忆。ls -alh /etc/nginx/切换目录cd没什么好说的但有几个快捷方式值得记cd -回到上一个目录cd ~回家目录cd ..上一级。cd -这个在两边目录来回跳的时候特别省事比如你从/var/log跳到/etc/nginx改完配置又要回去看日志直接cd -就行。创建目录mkdir关键是-p参数。mkdir -p /data/app/logs会一次性把中间缺失的目录都建出来不加-p的话父目录不存在就直接报错。这个参数在写部署脚本时几乎是必带的。删除是重灾区。rm本身简单但组合参数要清楚-r递归删目录-f强制不提示。rm -rf之所以危险是因为它不给你任何反悔机会。我的习惯是删之前先用ls确认一遍路径或者用rm -ri交互式删除每个文件都问一下慢是慢点但安全。提示永远不要在rm -rf后面直接跟变量比如rm -rf $DIR/如果$DIR是空的命令就变成了rm -rf /。正确写法是rm -rf ${DIR:?}/变量为空时直接报错退出。复制cp和移动mv也常带参数。cp -r复制目录cp -a保留权限、时间戳、软链接等所有属性做备份时用-a最稳妥。mv除了移动还能重命名mv old.txt new.txt就是改名。2.2 查找与定位find 和 locate 怎么选找文件这件事find是万能但慢locate是快但依赖索引数据库。find的基本结构是find 路径 条件 动作。最常用的场景是按名字找find /var/log -name *.log -mtime 7这条命令的意思是在/var/log下找所有.log结尾、且修改时间在 7 天前的文件。-mtime 7里的7表示 7 天以前-7表示 7 天以内。这个在清理旧日志时天天用。按大小找也很实用-size 100M找大于 100M 的文件排查磁盘占满时先跑一遍这个往往能揪出几个巨大的日志或缓存文件。locate走的是预建的数据库速度极快但新建的文件可能搜不到需要先updatedb更新索引。日常快速定位某个配置文件在哪我一般先locate nginx.conf找不到再用find。2.3 查看文件内容别只会 catcat适合看小文件大文件直接cat会把终端刷爆。看大文件用less可以上下翻页、搜索按q退出。less里按/关键词搜索按n跳下一个匹配这个组合看日志特别顺手。看文件头几行用head默认前 10 行head -n 50看前 50 行。看尾部用tailtail -f是实时跟踪日志排查的标配。tail -f配合grep过滤关键字是我排查线上问题最常用的组合tail -f /var/log/app/error.log | grep -i timeout这条命令会实时输出包含 timeout 的日志行大小写不敏感。线上出问题时挂着它等错误复现比事后翻日志高效得多。3. 文本处理三剑客grep、sed、awk3.1 grep过滤是运维的基本功grep的作用是从文本里挑出匹配的行。基本用法grep 关键词 文件但真正好用的是它的参数组合。-i忽略大小写-v反向匹配输出不包含关键词的行-r递归搜索目录-n显示行号-c只输出匹配行数。排查配置时我常用grep -rn listen /etc/nginx/把 nginx 配置里所有 listen 指令连行号一起列出来。-A、-B、-C这三个参数是排查日志的利器。-A 3显示匹配行后 3 行-B 3显示前 3 行-C 3前后各 3 行。看异常堆栈时光看报错那一行没用得看上下文这时候-C就派上用场了。grep -C 5 Exception app.log3.2 sed流式编辑改配置不用打开编辑器sed最常用的场景是替换文本。sed s/old/new/g file把文件里所有 old 替换成 newg表示全局替换不加只替换每行第一个。真正干活时-i参数才是重点它直接修改原文件sed -i s/8080/9090/g config.yaml这条命令把配置文件里所有 8080 改成 9090。批量改配置时比手动打开 vim 快得多。但-i有风险改错了没法撤销所以我一般先不加-i跑一遍看输出对不对确认了再加。sed还能按行号操作sed -n 10,20p file只打印第 10 到 20 行相当于轻量级的行提取。sed /pattern/d删除匹配的行。3.3 awk按列处理报表统计一把好手awk的强项是处理结构化文本比如日志、CSV。它的核心模型是“按行读入按列处理”默认以空格或制表符分列$1是第一列$2第二列$0是整行。最经典的用法是提取某一列awk {print $1} access.log这条命令把访问日志的第一列通常是 IP全部打印出来。配合sort和uniq就能统计awk {print $1} access.log | sort | uniq -c | sort -rn | head -20这一串的意思是提取 IP排序去重并计数按次数倒序取前 20。这就是统计访问量最高的 IP 的标准套路排查异常访问时必用。awk还支持条件判断awk $9 500 {print $0} access.log打印状态码为 500 的整行日志。-F参数指定分隔符处理 CSV 时用awk -F, {print $2}。提示这三剑客不用一次学完。我的建议是先练熟grep因为过滤是最高频的需求然后学sed的替换最后再啃awk。很多人卡在awk的语法上就放弃了其实日常 80% 的场景只需要{print $N}这一种写法。4. 进程、系统资源与磁盘管理4.1 进程查看与终止看进程用ps但裸ps只显示当前终端的进程没意义。常用的是ps aux或ps -ef列出系统所有进程。ps aux的列含义要记住USER 是属主PID 是进程号%CPU 和 %MEM 是资源占用COMMAND 是启动命令。实时监控用top它每秒刷新一次按 CPU 占用排序。top里几个快捷键要会P按 CPU 排序M按内存排序k输入 PID 杀进程q退出。htop是top的增强版界面更友好支持鼠标操作能装的话强烈建议装一个。杀进程用killkill PID发的是 TERM 信号15让进程自己优雅退出。如果进程卡死不响应用kill -9 PID发 KILL 信号强制杀死。但-9是最后手段因为进程没机会保存状态或清理临时文件可能导致数据不一致。按名字批量杀进程用pkillpkill -f python app.py会杀掉所有命令行匹配这个字符串的进程。-f表示匹配完整命令行不加只匹配进程名。4.2 磁盘与内存排查磁盘满了是运维最常见的告警之一。第一步用df -h看各分区使用率-h让容量以 G/M 显示。找到使用率高的分区后用du -sh *逐层排查是哪个目录占的。du -sh /var/* | sort -rh | head -10这条命令列出/var下各子目录大小按从大到小排序取前 10。sort -rh里的-h让 sort 能正确理解 K/M/G 单位不加的话会按字符串排序结果就乱了。内存用free -h看重点看 available 那一列而不是 free。因为 Linux 会把空闲内存拿去做缓存free 低不代表内存不够available 才是真正可用的。4.3 系统负载与运行时间uptime一行就能看出系统负载和运行时长。输出里的load average三个数字分别是 1 分钟、5 分钟、15 分钟的平均负载。判断负载高不高要跟 CPU 核数比单核机器负载超过 1 就算高4 核机器超过 4 才算满。所以看到负载 3 别慌先nproc看几个核。w命令比uptime多显示了当前登录的用户和他们在干什么排查“谁在跑重活”时有用。5. 网络排查从连通性到端口5.1 连通性测试ping是最基础的ping -c 4 host发 4 个包就停不加-c会一直 ping 下去。但很多服务器禁 pingping 不通不代表服务不可达别急着下结论。telnet常被用来测端口通不通telnet 192.168.1.10 3306如果连上会显示 Connected连不上会卡住或报 refused。但telnet默认没装而且交互式不好写脚本。更推荐nc -zv host port-z只扫描不发数据-v显示详细信息一条命令就能判断端口开没开。nc -zv 192.168.1.10 3306curl是测 HTTP 服务的首选curl -I http://host只看响应头-v显示完整请求响应过程排查接口问题时能看到 DNS 解析、TCP 连接、TLS 握手每一步的耗时。5.2 端口与连接查看看本机监听了哪些端口用ss -tlnp。-t是 TCP-l是监听状态-n显示端口号而不是服务名-p显示进程。这条命令基本替代了老的netstat而且更快。ss -tlnp | grep 8080看某个端口被谁占着这条就够了。输出里能看到进程名和 PID直接定位到是哪个程序。看当前所有连接用ss -tan-a显示所有状态。排查连接数暴涨时配合awk统计各状态数量ss -tan | awk {print $1} | sort | uniq -c5.3 防火墙规则查看iptables是绕不开的虽然现在很多系统用firewalld或nftables但底层还是它。查看规则用iptables -L -n -v-n不解析域名快-v显示包计数和字节数。排查“端口开了但连不上”时先看ss确认服务在监听再看iptables -L确认防火墙放行了。这两步能解决 90% 的连通性问题。清空规则用iptables -F但生产环境慎用清之前先iptables-save rules.bak备份。6. 权限、用户与提权6.1 权限模型与 chmodLinux 权限分读r4、写w2、执行x1三组分别对应属主、属组、其他人。chmod 755 file的意思是属主读写执行7421属组和其他人读执行541。chmod也能用符号模式chmod ux script.sh给属主加执行权限chmod go-w file去掉属组和其他人的写权限。符号模式在只改一两个权限位时更直观。chown改属主chown user:group file同时改属主和属组。-R递归改目录下所有文件。部署应用时经常要把目录属主改成运行用户比如chown -R www-data:www-data /var/www。6.2 用户管理新建用户useradd但更推荐adduser它会交互式地让你设密码、填信息还会自动建家目录。useradd默认不建家目录得加-m。改密码passwd username删除用户userdel -r username-r连家目录一起删。把用户加进组用usermod -aG groupname username-a是追加不加会把用户从其他组里踢出来这个坑我踩过。看当前用户是谁用whoami看自己属于哪些组用groups。6.3 sudo 与提权sudo让普通用户以 root 身份执行命令。配置在/etc/sudoers但千万别直接编辑这个文件用visudo它会做语法检查写错了不会让你把系统锁死。给用户免密 sudo在 sudoers 里加一行username ALL(ALL) NOPASSWD: ALL。但生产环境慎用免密审计时说不清楚。su - username切换到另一个用户-表示同时切换环境变量。su不加用户名默认切 root需要 root 密码。sudo -i也是切 root但用的是当前用户的密码前提是当前用户在 sudoers 里。7. 包管理、容器与实用工具7.1 包管理apt 与 yum/dnfDebian/Ubuntu 系用aptapt update更新软件源索引apt install 包名装包apt remove卸载apt search搜索。装之前先update是好习惯否则可能装到旧版本。RHEL/CentOS 系用yum新版用dnf命令基本一致yum install、yum remove、yum search。yum provides 文件名能反查某个文件属于哪个包排查“命令找不到”时有用。7.2 Docker 与 containerd 常用命令装 Docker 现在基本是一行脚本的事但生产环境我更建议按官方文档加源再装可控性更好。装完systemctl enable --now docker开机自启并立即启动。Docker 日常命令docker ps看运行中的容器-a看所有包括已停止的。docker images看本地镜像。docker run -d -p 8080:80 --name web nginx后台跑一个 nginx把宿主机 8080 映射到容器 80。进容器排查用docker exec -it 容器名 bash-it分配交互式终端。看容器日志用docker logs -f 容器名-f实时跟踪。containerd是更底层的容器运行时ctr是它的命令行工具。ctr images ls列镜像ctr containers ls列容器。日常用 Docker 就够了但排查容器运行时问题时得下到ctr这一层。7.3 几个提效小工具history看命令历史!编号重新执行历史里的某条命令!!重复上一条。CtrlR反向搜索历史输入关键词就能翻出以前敲过的命令这个用熟了效率翻倍。alias设别名alias llls -alh把常用组合缩短。写进~/.bashrc就能永久生效。tar打包解包tar -czvf archive.tar.gz dir/打包并 gzip 压缩tar -xzvf archive.tar.gz解包。-c创建-x解包-zgzip-v显示过程-f指定文件名。这五个参数记住tar 就够用了。scp跨机传文件scp file userhost:/path/上传反过来就是下载。-r传目录。大文件传输加-C压缩能省不少时间。8. 常见问题与排查速查8.1 命令找不到怎么办敲命令报command not found先which 命令名看能不能找到路径。找不到通常是没装用yum provides或apt-file search反查属于哪个包。也可能是 PATH 问题echo $PATH看路径对不对临时加路径用export PATH$PATH:/新路径。8.2 磁盘满了但找不到大文件df -h显示满了du -sh却统计不出那么多常见原因是文件被删了但进程还占着句柄。用lsof | grep deleted找出来重启对应进程就能释放。另一个可能是挂载点被覆盖mount看一下有没有异常挂载。8.3 端口占用排查启动服务报Address already in use用ss -tlnp | grep 端口找到占用进程要么改端口要么kill掉旧进程。有时候是僵尸进程占着ps找不到但ss能看到这种情况得kill -9。8.4 权限拒绝排查Permission denied先看文件权限ls -l再看属主是不是当前用户。如果是执行脚本报错检查有没有x权限。如果是访问目录报错检查路径上每一级目录的x权限因为进入目录需要执行权限。问题现象排查命令常见原因命令找不到which、echo $PATH未安装或 PATH 缺失磁盘满df -h、du -sh、lsof | grep deleted大文件或已删除文件占句柄端口占用ss -tlnp | grep 端口旧进程未退出权限拒绝ls -l、namei -l 路径权限位或属主不对连接超时nc -zv、iptables -L防火墙拦截或服务未监听8.5 几个容易忽略的细节rm删文件时如果文件名以-开头会被当成参数用rm -- -filename或者rm ./-filename处理。cp覆盖文件默认不提示加-i交互确认避免误覆盖。mv跨文件系统移动大文件很慢因为实际是复制再删除同文件系统内才是瞬间完成。grep搜二进制文件会输出乱码加-I跳过二进制文件。find配合-exec时{}代表找到的文件\;是结束符别漏了分号前的反斜杠。这些细节平时不起眼但真出问题时能省你半小时排查时间。命令这东西背不是目的理解每条命令在什么场景下用、参数为什么这么选才是真正把工具变成自己能力的过程。我到现在也记不全所有参数但我知道遇到什么问题该查哪条命令的 man 手册这就够了。