Unix的标准目录把自定义的可执行文件或脚本?
如果我有一个自定义的shell脚本或程序,我创build了自己的或从网上下载的,我希望能够从CLI执行这个脚本,是否有标准的位置把它放在Linux / Unix目录结构中?
/usr/bin ? /usr/local/bin ? /usr/lib ? /usr/sbin ? /bin ? /sbin ? /var ?
我通常把它放在我的〜/ bin文件夹下,并放在PATH中,但看起来并不干净。 每次我下载一个新的程序,我都必须再次把它放在PATH中。
/usr/local/bin
恰恰为此目的而存在,用于系统范围的安装。 为了您自己的私人使用, ~/bin
是事实上的标准。
如果要将每个二进制文件保存在其自己的子目录中,则可以这样做,并将符号链接添加到已经在PATH
的目录中。 所以,例如
curl -o $HOME/downloads/fnord http://fnord.example.com/script.exe ln -s $HOME/downloads/fnord $HOME/bin/
提供$HOME/bin
在你的PATH
。 (有像这样的工具,还有更多 – 在幕后为你。)
这可能会有所不同,这取决于Unix的风格。 我在这里假设Linux(虽然这可能适用于OSX)。 根据文件系统层次结构标准(FHS) (从Linux标准库工作组获得的链接):
/usr/local
层次结构供系统pipe理员在本地安装软件时使用。 系统软件更新时,需要保证安全。 它可以用于可在一组主机之间共享但在/usr
找不到的程序和数据。本地安装的软件必须放在
/usr/local
而不是/usr
除非安装它来replace或升级/usr
软件。
/usr/local/bin
通常在path上默认。
请注意,您只应将可执行文件或其链接放在/usr/local/bin
,其余的文件可能需要放在/usr/local/lib
或/usr/local/share
。
/opt
树也许是明智的:
/opt
保留用于安装附加应用程序软件包。要安装在/ opt中的软件包必须将其静态文件放置在单独的
/opt/<package>
或/opt/<provider>
目录树中,其中<package>
是描述软件包的名称,<provider>
是提供者的LANANA注册名称。[…]
目录/ opt / bin,/ opt / doc,/ opt / include,/ opt / info,/ opt / lib和/ opt / man保留给本地系统pipe理员使用。 软件包可以提供“前端”文件,用于通过本地系统pipe理员(通过链接或复制)来保存这些保留目录,但必须在没有这些保留目录的情况下正常运行。
(你可以从/opt/your-package/bin/executable
创build自己的链接到/opt/bin
,并且如果PATH
不存在,则将/opt/bin
放在PATH
。
那么我会使用~/bin
(虽然我不是root),但关于$PATH
你可以随时做
export PATH=".:${PATH}" # or export PATH="${PATH}:."
这样,实际的工作目录总是在你的$PATH
。 虽然它有一些安全问题,特别是下载的脚本。