我的bash脚本应该放在哪里


15

我有一些非常简单的bash脚本,我将它们整理在一起以完成我经常做的事情。其中之一是运行重复性来执行我的备份任务。只是一堆if..then语句而已。由于这需要以sudo的方式运行,因此最好的做法是将我的脚本放在/ usr / bin(或PATH中的其他位置),chown到root.root,chmod到700?


我想说的是用于git对脚本进行版本控制,将git repos的本地副本放在您喜欢的位置~,然后将脚本符号链接到中~/bin
edwinksl

你的意思是git,如github在云端?
WinEunuuchs2Unix

2
@ WinEunuuchs2Unix如果希望其他用户可以使用自己的脚本,则应将它们放在中/usr/local/bin。否则,我会说只是将它们放入~/bin。升级时,两个目录中的脚本都应该是安全的。
edwinksl 2016年

2
如上所述,将它们放在/ usr / local / bin中。只要确保您的脚本名称是唯一的,而不是现有的Linux命令/二进制名称。我自己只是在我创建的任何脚本的末尾添加一个数字,因为我还没有看到任何已有的Linux名称以数字结尾。(并不是说有些晦涩难懂的可能……

1
@edwinksl大约一年后,我必须说~/bin是大多数脚本的最佳选择,sudo因为当它们存储在脚本中时,您不必像他们那样对其进行编辑/usr/local/bin
WinEunuuchs2Unix

Answers:


3

我将自己的脚本保存在中/opt/scripts

如果您的脚本应可由每个系统用户执行,则可以创建的符号链接/usr/bin

如果只有root可以执行脚本,则可以创建到的符号链接/usr/sbin

在中添加符号链接的命令/usr/bin/

ln -s /opt/scripts/<script> /usr/bin/

您可以执行该脚本,因为默认情况下该脚本/usr/bin/位于PATH中


1
我建议不要将它/usr/bin用作用户/本地Shell脚本的目标,而应按照文件系统层次结构标准-Debian Wiki的/usr/local/bin(或/opt/bin)作为目标,以避免冲突(大多数情况下,您希望Ubuntu提供的脚本优先)。
shalomb

在大多数系统上,/usr/local/binoverride会/usr/bin在路径的后面出现。这是有意为之的,因为系统不会在此处放置文件,所以您可以在此处放置文件,该文件应覆盖系统提供的文件。
allo

我将其标记为正确答案,即使两个答案看起来都不错。原因是,我全神贯注地查看了FHS文档,并了解到/ opt正是出于此目的。我喜欢它们的想法,即简单地将符号链接到/ usr / local / bin中的脚本。感谢所有的指针。
hatterman

17

如果除您之外没有其他用户使用这些脚本:

然后,您可以将其保留/home/$USER/binbin如果文件夹不存在,请创建该文件夹,然后将文件移动到该文件夹​​。您家中的bin文件夹将自动添加到PATH环境变量中。代码在中.profile

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

请参阅如何将/ home / username / bin添加到$ PATH?

或在某些系统中可能位于.bashrc

export PATH=${HOME}/bin/:${HOME}/.local/bin:${PATH}

谢谢极客长老

如果这些脚本将由其他用户使用:

然后,无论是/usr/local/bin/opt/bin都是不错的选择。请参阅是否存在放置自定义Linux脚本的标准位置?

希望这可以帮助


3

我有一个目录,可用于快速收集本地工具或在中的各种计算机上部署的内容/usr/local/apollo。该目录有分支flagsbinlogs

对于我在默认apt-get存储库之外下载和安装的应用程序,将放置在其中,/opt/并以应用程序的名称命名一个目录,并为该应用程序的特定版本提供一个子目录。这样,我像编译应用程序的版本,vlceclipse将不会与分布式版本冲突。

我使用的/opt是它基本上是正式设计的方式。

顺便说一下,目录/usr/local/bin/usr/local/apollo和会/opt在新的OS版本安装覆盖后继续存在。


1
$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin我喜欢事实/usr/local/bin已经在路上,要记住的另一件事。我喜欢您的方法,/opt/program/version可以将其用于我得到的内核内容,并像EnhanceIO一样进行编译,它们可以在内核版本之间进行更改。/apollo登月是个人的最爱还是对Ubuntu有意义?
WinEunuuchs2Unix

/usr/local/binusr/local/sbin后者之间有什么区别,后者在升级过程中会变核?
WinEunuuchs2Unix

安装程序Nukes使用它的目录。它可以方便地创建/usr/local目录,但不会在其中放置任何内容。这些目录由用户填充。存储库之外的许多源程序都为用户提供了选择安装位置的选项。配置文件中的默认值为/usr/local/bin。因此,由于使用这些目录的普遍性,默认情况下它们包含在用户的路径中。默认情况下,系统检查~/bin 并添加到路径(如果存在)。
LD詹姆斯

您是说系统~/bin在安装过程中或每次引导时进行检查?sbin和之间有什么区别bin?它们似乎并存,您必须根据程序类型选择准规则,对吗?
WinEunuuchs2Unix

1
@ WinEunuuchs2Unix在~/bin路径上...在安装过程中未添加。系统在每次登录时都会检查它,并将其添加到$ PATH中(如果在登录期间存在)。查看设置的最后两行~/.profile
LD詹姆斯
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.