在带新人和做分享的时候,我经常被问到类似的问题:"有没有一份最全的 Linux 命令大全?""我背了几天命令,到新服务器上还是不会用。"说实话,Linux 命令这玩意儿,真不是靠背出来的。你背得再熟,换个环境、换套权限、换个发行版,原来能跑通的命令照样能给你整出各种幺蛾子。真正有用的"命令大全",不是给你列一个几千条命令的清单,而是把命令背后那套逻辑讲明白,让你知道什么场景该用什么命令、出问题去哪查。这篇内容我按实际工作里最常用的场景来组织,从基础语法到文件操作、系统排查、网络调试、软件管理、权限控制,再到把多个命令组合成一条高效的"命令流",尽量把我这些年踩过的坑也一并写进去。
1. 命令学习的第一课:先懂语法,再谈记忆
1.1 一条命令的"通用骨架"
不管什么命令,基本都可以抽象成这样一个骨架:
code复制命令名 [选项] [参数]
命令名决定你要干什么,选项决定你怎么干,参数决定你作用在谁身上。比如 ls -l /etc,ls 是命令名,-l 是选项(long format,长格式输出,显示更多属性),/etc 是参数,也就是我们要看的目录。
选项又分短选项和长选项。短选项是一个横杠加一个字母,长选项是两个横杠加单词。例如:
ls -a和ls --all效果一样,都表示显示隐藏文件ls -a -l可以合写成ls -al,这是短选项的合并写法
为什么有的命令帮助是 -h,有的却是 --help?这跟命令出身、遵循的规范有关,GNU 类命令通常两者都支持,BSD 或嵌入式精简版可能只支持其中一种。遇到不确定的情况,先敲看一下输出,比去搜索引擎猜要快得多。
理解了骨架,你会发现大部分命令的用法是相通的。你学会了一个命令的安装、启动、状态检查方式,其他命令也能用同样的思路去摸清。这个"迁移能力",比记住一百条命令更有价值。
1.2 查命令的正确姿势:man、info、whatis 到底该用谁
很多新人查命令只会用搜索引擎,其实系统自带的手册已经足够强大了。man 是最常用的在线手册工具,但它的坑在于输出很长,而且不同内容分布在不同的章节里:
| 章节 | 内容分类 | 典型示例 |
|---|---|---|
| 1 | 用户命令 | ls、grep、find |
| 5 | 文件格式 | /etc/passwd、systemd.service |
| 8 | 系统管理命令 | mount、iptables |
当你知道 passwd 可能是用户命令(改密码)也可能是文件格式(/etc/passwd)时,就不会困惑为什么 man passwd 出来的不是改密码的说明。想指定章节,用 man 5 passwd 这样写。想按关键词搜索手册,用 man -k passwd 或者等价的 apropos passwd,它会列出所有手册里相关的条目,这个用法比你想关键词更精准。whatis passwd 则给出每一条的一句话概括。
info 是 GNU 手册的另一套体系,内容更深更细,但日常排查问题我一般先看 man,再看 --help,只有写系统级程序文档时才去翻 info。总之一句话:先 type 看命令,再 man 查手册,最后 --help 看示例,这是绝大多数排查问题的第一步。
1.3 终端环境差异:同一个命令,不同 shell 下结果不同
我在带人时发现,很多人把 Bash 和 Linux 划等号,结果在别的 shell 环境下就蒙了。常见 shell 有 Bash、Zsh、Fish、Dash 等,它们对某些语法支持不太一样。比如 [[ ]] 条件测试在 Dash 的 /bin/sh 环境里可能报错,而你的登录环境默认是 Bash 就没事。所以当你写脚本时,#!/bin/bash 和 #!/bin/sh 背后的解释器可能不同,执行效果也可能不同。
还有一个容易踩的坑:部分命令在嵌入式 Linux 里被精简掉了。比如完整版系统里 ps aux 能看所有进程,但某些嵌入式系统用的是 busybox 版本,ps 只能看当前终端的进程,选项也不一样。这解释了为什么热词里有人搜"xilinx ise linux 启动""嵌入式linux项目"时会遇到连 ls 输出颜色都不同的情况。不是你不会用,是环境做了裁剪。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 文件与目录操作:最常用的命令里藏着最深的坑
2.1 删除文件夹前,先想清楚 rm -rf 的边界问题
"linux删除文件夹命令"是高频搜索词了,答案其实就是 rm -r。-r 表示递归,删除目录下的所有子文件和子目录;-f 表示强制,不提示直接删。但我必须强调:rm -rf 是 Linux 上最危险的一条命令,没有之一。
先说最常见的误删场景。假设你的脚本里写了:
code复制rm -rf $dir/*
如果 $dir 因为某种原因没被赋值,这条命令就变成了 rm -rf /*,它会以当前用户权限去递归强制删除根目录下所有文件,大概率直接导致系统崩溃。安全习惯是:删除变量路径前先判断变量是否为空,或者写成更稳妥的写法:
code复制[ -n "$dir" ] && rm -rf "${dir:?}/"*
${dir:?} 的语法会让变量为空时报错退出,从根上避免灾难。
再说 rm -rf $dir/ 和 rm -rf $dir 的区别。多一个斜杠,在绝对路径下差别不大,但在变量拼接时容易让人看走眼。我个人的习惯是删除前先 ls -ld $dir 看一眼,确认路径正确再删。真有重要数据的机器,我会把 rm 做成别名指向 trash-cli 的命令,删除后还有个后悔药。
