ls命令用于列出目录内容,属于基础用户命令,默认路径为/bin/ls;which命令用于查询命令实际路径,可快速区分/bin(日常工具)与/sbin(系统管理命令)的归属及权限差异。

直接看命令归属和用途,比查文档更快。
用 ls 和 which 快速分辨
执行下面两条命令,能立刻看出哪些命令在哪个目录:
-
ls -l /bin/* | head -10 —— 列出 /bin 下前10个命令,看到的大多是
ls、cp、grep这类日常工具 -
ls -l /sbin/* | head -10 —— 列出 /sbin 下前10个命令,常见的是
fdisk、ifconfig、reboot、mount这类管理型命令 -
which shutdown 或 which ls —— 查单个命令实际路径,比如
which shutdown通常返回/sbin/shutdown,而which ls返回/bin/ls
按权限和用户角色判断
普通用户能直接运行的,大概率在 /bin;需要 root 或 sudo 才能跑的,基本都在 /sbin:
- 普通用户执行
ls没问题 → 它在 /bin,权限通常是rwxr-xr-x - 普通用户执行
fdisk -l会报Permission denied→ 它在 /sbin,权限常是rwxr-xr-x但只对 root 生效(或设了 setuid) - 用
ls -l $(which fdisk)可验证:输出里若显示 owner 是 root 且无普通用户执行位,就符合 /sbin 特征
结合启动场景理解差异
/bin 和 /sbin 的根本区别不在“放哪”,而在“什么时候必须存在”:
- /bin 下的命令,系统刚进单用户模式(只挂载根分区)就能用,比如修复文件系统时靠
ls和sh导航 - /sbin 下的命令,也必须在早期可用,但专供维护:比如
fsck检查磁盘、init启动第一个进程、mount挂载其他分区 - 如果某命令既不参与启动、也不属基础操作(如
docker或git),它就不会在这俩目录,而是落在/usr/bin或/usr/local/bin
注意现代发行版的实际布局
很多新系统(Ubuntu 24.04、Fedora 40、Debian 12 等)已把 /bin 软链接到 /usr/bin,/sbin 链接到 /usr/sbin:
- 运行
ls -l /bin很可能看到/bin -> usr/bin,说明物理文件其实在 /usr/bin - 这种合并叫 “usr-merge”,不影响使用逻辑 —— PATH 仍包含 /sbin,shell 找命令时自动穿透链接
- 真正区分命令用途的,还是它原本该在哪:系统设计上,
shutdown属于 /sbin 类别,哪怕现在它实际位于 /usr/sbin











