如果我有一个自定义shell脚本或程序,我自己创建或从Web下载,并且我希望能够从CLI执行它,是否有标准位置将其放入Linux / Unix目录结构中?
/usr/bin ?
/usr/local/bin ?
/usr/lib ?
/usr/sbin ?
/bin ?
/sbin ?
/var ?
我通常将它放在我的〜/ bin文件夹下并将其放在PATH中,但它看起来并不干净。每次我下载一个新程序时,我都要把它放在PATH中。
答案 0 :(得分:76)
/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
。 (像stow
这样的工具可以为你做幕后工作 - 等等。)
答案 1 :(得分:16)
根据Unix的风格,这可能略有不同。我在这里假设Linux(尽管这可能适用于OSX)。根据{{3}}(从Filesystem Hierarchy Standard (FHS)获得的链接):
/usr/local
层次结构供系统管理员使用 在本地安装软件。它需要安全 系统软件更新时覆盖。它可能用于 可在一组主机之间共享的程序和数据,但不能 在/usr
中找到。本地安装的软件必须放在
/usr/local
内 除/usr
以外,除非安装它以替换或升级软件 在/usr
。
/usr/local/bin
默认情况下通常在路径上。
请注意,您只应将可执行文件或其链接放在/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保留供本地系统管理员使用。包 可以提供旨在放入的“前端”文件(通过链接或 由本地系统管理员复制这些保留的目录, 但必须在没有这些保留的情况下正常运作 目录。
(您可以从/opt/your-package/bin/executable
创建自己的链接到/opt/bin
,并将/opt/bin
放在PATH
上,如果它尚未存在的话。)
答案 2 :(得分:-9)
好吧,我会使用~/bin
(虽然我不是root用户),但关于$PATH
你可以随时使用
export PATH=".:${PATH}"
# or
export PATH="${PATH}:."
这样,实际工作目录始终位于$PATH
。虽然它有一些安全问题......尤其是下载的脚本。