unix/mac/linux 系统里的2个bin 目录区别

mac 目录里的 /usr/bin 和 /usr/local/bin 有什么区别,如果我自己安装软件bin,最适合放哪个目录?

在 macOS 上,/usr/bin/usr/local/bin 是两个常见的二进制文件存放目录,但它们有不同的用途和管理方式。

1. /usr/bin

  • 用途: 系统默认的二进制文件目录。macOS 自带的命令行工具(如 ls, cp)以及系统安装的软件通常存放在这里。
  • 权限: 这个目录是由系统控制的,用户通常没有写入权限(即使是 sudo 也可能受到系统完整性保护机制(System Integrity Protection, SIP)的限制)。
  • 不要放置自定义文件: 不建议将自定义的二进制文件放到这里,因为系统更新可能会覆盖该目录的内容。

2. /usr/local/bin

  • 用途: 用户自定义的二进制文件目录,专门为用户安装的第三方软件保留。例如 Homebrew 会将其安装的软件二进制文件链接到这里。
  • 权限: 你对这个目录通常有完全控制权限,可以自由写入和管理。
  • 推荐用法: 如果你编译、下载或创建了自己的软件,最适合将其放到 /usr/local/bin 中。这也是符合 Unix 文件系统标准(FHS)的做法。

3. 我自己安装的二进制文件放哪里?

建议优先选择 /usr/local/bin,理由如下:
- 系统保护: 不会与系统默认工具冲突,也不会被系统更新覆盖。
- PATH 优先级: /usr/local/bin 通常在环境变量 PATH 的优先级高于 /usr/bin(具体可通过 echo $PATH 查看)。这意味着你的自定义工具会优先被调用。
- 可移植性: 在迁移或备份时,你可以轻松识别和复制 /usr/local/bin 里的自定义工具。


如何添加二进制文件到 /usr/local/bin

假设你有一个二进制文件(如 mytool),可以按照以下步骤操作:
1. 确保文件具有可执行权限:

   chmod +x mytool
  1. 将文件复制到 /usr/local/bin
   sudo mv mytool /usr/local/bin/
  1. 确保 /usr/local/bin 在你的 PATH 中:
   echo $PATH

如果不在,可以在 ~/.zshrc~/.bashrc 中添加:

   export PATH="/usr/local/bin:$PATH"

然后刷新配置:

   source ~/.zshrc

完成后,你可以在终端中直接运行 mytool