我有一些程序(python、bash 等,有些是我自己的,有些是第三方的),我希望能够在任何地方使用。因此,我考虑将它们放在我的 $PATH 中的某个位置。我最近从 Ubuntu 切换过来,这是某种标准做法把这些东西放进去/usr/local/bin
。然而,现在在 Manjaro 上,我收到一条错误消息Permission denied
: .据我了解,问题在于,在基于 Arch 的操作系统上,该目录/usr/local/bin
也由包管理器 pacman 使用(我在某处读过此内容,但无法再找到源代码)。
总结来说,我需要的是:
我的 $PATH 上的一个目录,我可以在其中保存所有这些脚本
在该目录中进行版本控制的可能性
我知道我可以在硬盘驱动器上的某个位置创建一些目录并将其添加到我的 $PATH 中,但我想知道是否有常见的做法。
编辑:这是我的 $PATH 变量:
/home/douglas/bin:/home/douglas/bin:/home/douglas/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/var/lib/snapd/snap/bin
有人知道为什么/home/douglas/bin
出现两次吗?
答案1
该
/usr/local
层次结构供系统管理员在本地安装软件时使用。当系统软件更新时,它需要确保不被覆盖。它可用于可在一组主机之间共享但在 /usr 中找不到的程序和数据。
https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch04s09.html# Purpose24
如果您希望系统上的所有用户都可以使用脚本,请将其放在那里。
pacman
不会覆盖现有文件并在发生冲突时退出安装。
这是主要问题:您希望脚本/程序仅适用于某个特定用户,还是适用于系统上的所有用户?
可以将适用于所有用户和具有版本控制的软件(每个都有 .git 或 .svn 目录)的正确系统范围实现放入/opt/<packagename>
. (如果你安装了java,你可能会发现/etc/profile.d/jre.sh
)
shell 环境将通过一个文件进行扩展, 每当登录 shell 启动时/etc/profile.d/<packagename>.sh
都会在该文件中执行。将包含环境数据,例如 /etc/profile
<packagename>.sh
PATH=${PATH}:/opt/<packagename>/bin/
对于单个用户,只需输入克隆的路径~/.profile
并将其克隆到目录中您希望它位于的任何位置/home/<username>
。