在哪里可以安装自定义bash脚本?


32

我将要安装“ leiningen”,它是clojure编程语言的bash脚本,具有很多用处... ...但是我不确定在Linux中将可执行脚本放到哪里合适。系统,使其永久且稳定可用。

我认为/ home中的任何地方都不有意义,但是我不知道应该使用哪个目录/目录。

/ usr / share?


Answers:


45

(注意:~翻译成/home/user这篇文章)

就个人而言,我将所有定制的系统脚本放入其中,/usr/local/bin并将所有个人bash脚本放入~/bin。我安装的程序很少,它们自己放置在/usr/local/bin目录中,因此它不是很混乱,并且已经在$PATH大多数计算机上的变量中。

要添加/usr/local/bin到您的系统路径(如果尚不存在),请将其添加到/etc/profile

PATH=$PATH:/usr/local/bin
export PATH

要添加~/bin到用户的路径,请将其添加到~/.bash_profile

PATH=$PATH:$HOME/bin
export PATH

有时默认的.bash_profile文件将有一个if语句自动添加~/bin$PATH如果存在的话,那么创建~/bin和打开一个新的终端,看看是否你已经这样做了。


BSD默认情况下会这样做。
克里斯·S

@Chris:BSD在/ usr / local / bin中放了很多东西
Dan Andreatta 2010年

您的bash脚本和系统脚本之间有什么区别?将两者分开是有原因的吗?
Hashim

@Hashim我当然不能代表Trey,但是当您发现满足个人需求的系统工具可以解决其他人正在苦苦挣扎的问题时,您为自己的需求而开发的工具可能会“升级”为系统工具,或者您需要依赖于系统的其他系统安装这些工具之一。我怀疑对于大多数程序员来说,在系统范围内安装某些东西的门槛很高。另外,您共享的工具需要具有文档等,许多开发人员很少以其他方式编写文档。
三点

顺便说export一句,不需要多次变量(并且您的系统可能已经标记PATH为要导出,因此您根本不必自己做)。
三点

9

/ usr / local /确实是正确的位置,而/ opt则真正适用于第三方应用程序;“ / opt保留用于安装附加应用程序软件包。” 这是文件系统层次结构标准的一部分。

有关/ opt的讨论,请参见http://www.pathname.com/fhs/pub/fhs-2.3.html

对于/ usr / local /,它用于“由系统管理员使用”。只是不要忘记那里的东西-记录下来。


您提供的链接告诉“目录/ opt / bin,/ opt / doc,/ opt / include,/ opt / info,/ opt / lib和/ opt / man保留供本地系统管理员使用。” 关于/ usr / local没有任何内容。此处仅提及/ usr / local / share。另一方面,编译后的程序通常安装在Linux上的/ usr / local中。您是否认为/ opt / bin是系统管理员更好的使用场所?
raacer 2015年

1
@raacer我的经验是/usr/local-顾名思义-是用于本地管理员的,并且/opt用于未正式分发的内容,例如由类似过程管理的商业第三方软件(在升级到上游),但不由发行版的程序包管理器管理,或者实际上是作为RPM或.deb程序包分发的,但未按照发行版的所有策略和约定进行组织和打包。
三点

1
@raacer /usr/local在文档的稍后部分有一个单独的小节。
tripleee

@raacer三人是对的。这里是链接:pathname.com/fhs/pub/… ..专为该系统编译/构建或在多个系统之间共享(但不属于正常OS包装/发行版的一部分)的正确,正确的编译程序(通常是开源),但是它严重依赖于共享库)应该安装到/ usr / local中(基本上反映了/ usr的层次结构)。在可能具有自己的库支持(即firefox,userify)的可能不同的系统上编译的第三方软件应放入/ opt。
Jamieson Becker

3

从历史上看,您会使用/ opt之类的东西。只要在$ PATH中对应该拥有它的用户进行更新,就可以了(因此/ home中的任何内容都不是一个好主意)。


2

/usr/share/clojure放置clojure的二进制文件和库似乎是一个常见的地方-为什么我不知道,这似乎很自然/usr/local/share/clojure-因此site在下面为这些bash脚本创建一个子目录似乎很好。

总的来说,按功能组织脚本更有意义,而不是将所有bash脚本放在同一位置。


1
使用/usr/share此有两个问题。首先,share是指与架构无关的文件(即跨架构共享)。因此,库和可执行文件不属于share目录。其次,除了/usr/local发行包管理器应该写过的东西外,别无其他/usr
kasperd

2

/usr/local,我相信“本地”的含义有些混乱。

据我了解,“本地”并不意味着“在本地计算机上/从本地计算机发起”,而是更简单地讲,“特定于本地计算机”,它可能会或可能不会源自本地计算机。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.