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 。 虽然它有一些安全问题,特别是下载的脚本。