本地可执行文件应该放在哪里?

use*_*378 106 fhs executable software-installation directory-structure not-root-user

我有一个 perforce 版本控制客户端 ( p4)的可执行文件。我不能把它放进去,/opt/local因为我没有 root 权限。是否有一个标准位置需要放置在它下面$HOME

文件系统层次结构是否有一个约定,说明需要将本地可执行文件/二进制文件放入$HOME/bin

在 FHS维基百科文章中找不到这样的约定。

另外,如果确实有约定,我是否必须明确包含$HOME/bin目录的路径或目录的任何位置bin

Geo*_*e M 111

一般来说,如果非系统安装和维护的二进制文件需要在系统范围内可供多个用户访问,则应由管理员将其放入/usr/local/bin. 下面有一个完整的层次结构/usr/local,通常用于本地编译和安装的软件包。

如果您是二进制文件的唯一用户,则安装到$HOME/bin合适的位置,因为您可以自己安装它并且您将是唯一的使用者。如果您从源代码编译软件包,也可以在您的$HOME目录中创建部分或完整的本地层次结构。完整的本地层次结构将如下所示。

  • $HOME/bin 本地二进制文件
  • $HOME/etc 本地二进制文件的特定于主机的系统配置
  • $HOME/games 本地游戏二进制文件
  • $HOME/include 本地 C 头文件
  • $HOME/lib 本地图书馆
  • $HOME/lib64 本地 64 位库
  • $HOME/man 本地在线手册
  • $HOME/sbin 本地系统二进制文件
  • $HOME/share 与本地架构无关的层次结构
  • $HOME/src 本地源代码

运行时configure,您应该通过指定$HOME安装默认值的前缀来定义安装的本地层次结构。

./configure --prefix=$HOME

现在make && make install运行时,编译的二进制文件、包、手册页和库将安装到您的$HOME本地层次结构中。如果您没有手动创建$HOME本地层次结构,make install则会创建软件包所需的目录。

安装后$HOME/bin,您可以添加$HOME/bin到您$PATH的二进制文件或使用绝对文件调用二进制文件$PATH。默认情况下,某些发行版会包含$HOME/bin在您$PATH的发行版中。您可以通过以下任一方式进行测试echo $PATH并查看是否$HOME/bin存在,或者将二进制文件放入$HOME/bin并执行which binaryname. 如果它返回$HOME/bin/binaryname,则默认情况下它在您的 $PATH 中。

  • 我不推荐使用`$HOME`。这会使您的主目录充满许多您根本不感兴趣的目录。谁想要在自己的主目录中拥有 `man`、`lib` 等?我宁愿在`$HOME/bin` 或`$HOME/local` 下面创建层次结构。这只会向您的主目录添加一个子目录,而不是十个。`PATH` 可以很容易地修改为包含 `$HOME/bin/bin` 或 `$HOME/local/bin`。 (41认同)
  • 一种选择是使用 $HOME/.local/{bin,lib,etc.},例如 XDG basedir 规范(http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html ) 和 python (http://www.python.org/dev/peps/pep-0370/) (31认同)
  • 只要 $HOME 不在 noexec 挂载的文件系统上。/tmp/ 通常也挂载 noexec。 (6认同)
  • @janneb 您提到的*XDG 基本目录规范* 仅提到了`$HOME/.local/share`(0.7 版,2010 年 11 月 24 日)。 (6认同)
  • 这是正确的,它是文件系统层次结构标准 (FHS) 的一部分。http://www.pathname.com/fhs/pub/fhs-2.3.html#USRLOCALLOCALHIERARCHY (4认同)
  • 还有 Python PIP 使用的 `$HOME/.local/bin` 带有 `--user` 标志。 (2认同)

Mat*_*eon 40

正如uther 所提到的/usr/local本质上是作为系统管理员安装的软件的前缀,而/usr应该用于从分发包安装的软件。

这背后的想法是避免与分布式软件(例如rpmdeb包)发生冲突,并让管理员完全控制“本地”前缀。

这意味着管理员可以安装自定义编译的软件,同时仍然使用像 debian 这样的发行版。

来自 FHS

放置在 / 或 /usr 中的软件可能会被系统升级覆盖(尽管我们建议在这些情况下发行版不要覆盖 /etc 中的数据)。出于这个原因,本地软件不得在没有充分理由的情况下放置在 /usr/local 之外。

安装特定于用户的软件时,uther 建议使用$HOME作为前缀,因为这可以确保您具有写入权限。就我个人而言,我觉得$HOME/.local它是一个更优雅的解决方案,因为它避免了你(希望)漂亮整洁的主目录混乱!

$HOME/.local/share已在freedesktop.org XDG 基本目录规范中使用,因此在您使用它时,无需太多设想将 a 添加$HOME/.local/bin到您的$PATH并制作 a$HOME/.local/lib等。

如果你真的不希望你的前缀是一个隐藏目录,你也可以轻松地创建一个符号链接,例如:

ln -s .local ~/local
Run Code Online (Sandbox Code Playgroud)

边注

值得注意的是.config(not .local/etc) 是$XDG_CONFIG_HOME用于用户特定配置文件的默认值。我还应该指出,不幸的是,很大一部分软件忽略了 XDG 并在他们喜欢的任何地方(通常在 的根目录中$HOME)创建配置文件。另请注意,$XDG_CONFIG_HOME如果$HOME/.config需要默认值,则可能未设置。

奇怪的是,没有为发行版的默认配置文件保留目录,因此无法知道文件/etc是由发行版提供还是由系统管理员编辑。

  • @naught101 为了解决谁改变了什么的混乱,你考虑过 etckeeper 吗?它对整个`/etc` 目录进行版本控制,包括`git` 或其他一些目录。它在安装包时自动提交,可以每天自动提交,你基本上可以使用 git-hook 或 `cron` 随心所欲。您可以让系统将您的分支推送到远程主机以进行跟踪。 (2认同)

小智 8

XDG 基本目录规范版本 0.8 规定本地可执行文件应放置在~/.local/bin中:

用户特定的可执行文件可以存储在 $HOME/.local/bin 中。发行版应确保此目录显示在 UNIX $PATH 环境变量中的适当位置。

如果您的发行版遵循规范,那么您不必“显式包含路径”。上一个问题试图确定哪些发行版可以执行此操作。


Clo*_*Cho 6

/usr/local/bin根据互联网网站 Wikitechy 的说法,它看起来很像。

\n

/usr/bin来自文件系统层次结构标准的信息,他们将文件夹定义为系统上可执行命令的主目录。

\n

/usr/bin维基百科/usr/local/bin之间的其他信息:

\n

\xc2\xa0\xc2\xa0/usr/bin是操作系统提供的可供普通用户使用的可执行文件的位置。例如,通常不是核心操作系统所需的文件,也不是 root 用户访问的文件,但也可以是。

\n

\xc2\xa0\xc2\xa0/usr/local/bin是您添加到系统中以供所有用户用作通用系统文件的所有附加可执行文件的位置,但它们不是操作系统支持的官方文件。

\n

\xc2\xa0\xc2\xa0 总的来说,/usr/bin是操作系统提供的二进制文件的位置。/usr/local/bin是用户下载二进制文件的地方。

\n