linux命令执行优先级顺序为:别名→关键字→函数→内置命令→hash缓存→path路径→绝对/相对路径;其中path内目录顺序决定同名命令执行优先级,/bin与/usr/bin实际常为软链接,内容一致。

/bin 和 /usr/bin 都是存放可执行命令的目录,但它们在系统启动阶段和命令查找顺序中角色不同,**路径优先级不直接由目录本身决定,而是由 PATH 环境变量中它们出现的顺序决定**。不过,在绝大多数现代 Linux 发行版(如 Ubuntu、CentOS、Debian)中,/bin 通常被软链接到 /usr/bin,两者实际内容高度重合甚至完全一致。
/bin 是系统启动必需的基础命令目录
早期 Linux 中,/bin 存放最核心的、系统启动和单用户模式下必须可用的命令,比如 ls、cp、sh、mount。这些命令不能依赖 /usr 分区——因为 /usr 可能挂载在独立分区,而系统启动初期该分区尚未挂载。
- 设计目标:最小化依赖,保障 init 过程可用
- 现在多数发行版采用“usrmerge”方案,/bin → /usr/bin 是符号链接(可通过 ls -l /bin 验证)
- 即使保留独立 /bin,它也只包含极少数关键命令,其余功能由 /usr/bin 补充
/usr/bin 是用户级应用程序的主要存放位置
/usr/bin 存放绝大多数普通用户日常使用的命令,比如 wget、git、python3、make。这些程序不是启动必需的,但构成完整用户环境。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 由包管理器(apt/yum/dnf)安装的软件默认放入 /usr/bin
- 内容随系统升级自动更新,与发行版生命周期绑定
- 不参与早期 boot 流程,但属于标准 PATH 的一部分
PATH 中的实际优先级取决于顺序,而非目录层级
真正影响“谁先被执行”的,是你的 PATH 环境变量里 /bin 和 /usr/bin 谁排在前面。例如:
echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
- 这里 /usr/bin 在 /bin 前,若两个目录下都有同名命令(极少发生),/usr/bin 版本会被优先使用
- 但现实中,/bin 和 /usr/bin 几乎不会存在冲突——因为 /bin 命令通常是 /usr/bin 的硬链接或 symlink,本质是同一文件
- 真正有竞争关系的是 /usr/local/bin 和 /usr/bin(前者通常排在 PATH 更前,用于覆盖系统命令)
别名、函数、hash 缓存比 PATH 查找更优先
即使 PATH 设置合理,命令执行仍可能绕过 /bin 或 /usr/bin:
- 你定义了 alias ls='ls --color',输入 ls 就不会去 PATH 里找,直接执行别名
- Shell 内置命令(如 cd、echo)永远优先于外部可执行文件
- hash 缓存会记住上次找到的路径;用 hash -d ls 可强制重新搜索










