[linux]/usr/bin和/usr/local/bin(区别)

251 阅读2分钟

在Linux和Unix系统中,/usr/bin/usr/local/bin都是存放可执行程序(可执行文件)的重要目录,但它们在用途和管理上有着关键区别:

关键词: /usr/bin是系统级的目录

/usr/local/bin是本地化目录

核心区别概览

特性/usr/bin/usr/local/bin
管理方系统包管理器 (apt/yum/dnf等)系统管理员/用户
内容来源发行版官方软件包本地编译安装或手动安装的软件
更新权限只有root/包管理器可修改用户/管理员可直接修改
层级关系操作系统核心层级本地自定义层级
路径优先级PATH中优先级较低PATH中优先级较高

1. /usr/bin

  • 系统级目录:包含操作系统核心组件和发行版官方软件包安装的可执行文件
  • 管理方式
    • 由系统包管理器(apt/yum/dnf/pacman等)自动管理
    • 普通用户不可修改,需要root权限才能更改
  • 内容示例
    ls /usr/bin  # 包含系统级命令如ls, cat, python3, git(系统安装版)
    
  • 路径优先级
    echo $PATH  # 通常显示为:/usr/local/bin:/usr/bin:...
    

2. /usr/local/bin

  • 本地化目录:专为系统管理员,以及普通用户自定义安装的软件设计
  • 管理方式
    • 由用户或管理员手动管理
    • 普通用户可直接写入(取决于权限设置)
  • 典型使用场景
    • 编译安装软件:./configure && make && sudo make install
    • 脚本/工具部署:如放置自定义脚本、Python工具的pip install --user结果
    • 隔离系统文件:避免污染系统目录
  • 内容示例
    # 常见内容
    - 手动编译的nginx/node
    - pip安装的Python工具(flake8, black, pipx)
    - 自定义shell脚本
    - Homebrew安装的软件(macOS)
    

优先级对比

在PATH环境变量中,/usr/local/bin通常优先于/usr/bin

# 典型PATH顺序
echo $PATH
# /usr/local/sbin:/usr/local/bin:/usr/bin:/bin...

这意味着:

  1. 当同名程序存在于两个目录时(如python3),系统会优先执行/usr/local/bin中的版本
  2. 允许用户覆盖系统默认程序(但需谨慎操作)

最佳实践指南

  1. 系统程序 → 保留在/usr/bin

    • 通过包管理器安装/更新
    • 保持系统完整性
  2. 自定义安装 → 放入/usr/local/bin

    • 编译安装的软件
    • pip install --user安装的Python工具
    • 自定义脚本/工具链
  3. 避免冲突

    # 检查命令路径
    which python3
    # /usr/local/bin/python3  # 自定义版本, 及用户自己安装python版本
    # /usr/bin/python3        # 系统版本
    
  4. 恢复默认: 如需使用系统版本,可:

    # 临时使用
    /usr/bin/python3 myscript.py
    
    # 永久调整(不推荐)
    export PATH="/usr/bin:$PATH"
    

目录结构关系

/
├── usr/
│   ├── bin/          # 系统级程序 (核心)
│   └── local/        # 本地层级
│       ├── bin/      # 自定义程序 (优先)
│       ├── lib/      # 本地库文件
│       └── ...
└── ...

💡 设计哲学/usr/local的分离遵循Unix的"文件系统层次结构标准"(FHS),确保系统更新不会覆盖本地自定义内容,同时保持系统目录的纯净性。