/ bin,/ sbin,/ usr / bin,/ usr / sbin,/ usr / local / bin,/ usr / local / sbin之间的差异


282

我有六个带有命令文件的目录。这是/bin/sbin/usr/bin/usr/sbin/usr/local/bin/usr/local/sbin

这些之间有什么区别?如果我正在编写自己的脚本,应该在哪里添加它们?


有关:



@Keelan你的问题是近一个问题,我发布了今年前+:askubuntu.com/questions/830074/...
WinEunuuchs2Unix

Answers:


348

请为此参考Linux文件系统层次结构标准(FHS)

  • /bin:对于在/usr安装分区之前可用的二进制文件。它用于非常早期的引导阶段中使用的普通二进制文件,或者用于在引导单用户模式下需要的二进制文件。认为这样的二进制文件catls等等。

  • /sbin :相同,但是对于具有超级用户(root)特权的二进制文件。

  • /usr/bin:与first相同,但适用于常规的系统级二进制文件

  • /usr/sbin :与上述相同,但是对于具有超级用户(root)特权的二进制文件。


如果我正在编写自己的脚本,应该在哪里添加这些脚本?

以上都不是。您应该将/usr/local/bin/usr/local/sbin用于系统范围内的脚本。该local路径表示它不受系统软件包的管理(这是Debian / Ubuntu软件包的错误)。

对于用户范围的脚本,请使用~/bin(主目录中的个人bin文件夹)。

FHS表示/usr/local

本地数据的第三级层次结构,特定于此主机。通常具有进一步的子目录,例如bin/lib/share/


因此/ bin是所有核心文件的安装位置。像ls,cat,pwd等?那么,/ usr / bin是用户安装的应用程序所在的位置?/ usr / bin中应该包含哪些示例?
Patoshiパトシ2014年

1
放置脚本是否/bin会引起任何问题?我已经根据您的回答移动了脚本,但我仍然感到好奇
Rumesh 2015年

5
@RumeshSudhaharan您不应该这样做,因为它由程序包管理来管理。如果其他任何软件包也想使用该路径,它将覆盖您的文件。软件包中的文件永远不能重叠(至少对于正式存储库而言),因此在本地路径中安装时更加安全。另外,它只是为了您自己的方便和安全。在本地路径中,您不能以如此糟糕的方式弄乱系统,也不能意外替换系统二进制文件。
gertvdijk 2015年

8
我喜欢错误页面上的解释:Severity:Serious Certainty:Certain
cutrightjm 2015年

1
我已经在/ usr / local / bin中放置了一些文件,我可以执行它们,但是我无法编辑它们,ls -la什么也没显示
M. Reza Nasirloo

6

我一年多以前也有类似的问题:放置bash脚本的最佳目录?

二进制文件的系统目录

man hier(层次结构)列出所有目录。要获取仅用于二进制文件的文件,请使用:

$ man hier | grep -E 'bin$|sbin$|^.{7}(/bin)|^.{7}(/sbin)' -A2

       /bin   This directory contains executable programs which are needed in single user
              mode and to bring the system up or repair it.

--
       /sbin  Like  /bin,  this  directory  holds commands needed to boot the system, but
              which are usually not executed by normal users.

--
       /usr/X11R6/bin
              Binaries  which  belong  to the X-Window system; often, there is a symbolic
              link from the more traditional /usr/bin/X11 to here.
--
       /usr/bin
              This  is the primary directory for executable programs.  Most programs exe
              cuted by normal users which are not needed for booting or for repairing the
--
       /usr/local/bin
              Binaries for programs local to the site.

--
       /usr/local/sbin
              Locally installed programs for system administration.

--
       /usr/sbin
              This directory contains program binaries for  system  administration  which
              are  not  essential  for the boot process, for mounting /usr, or for system

在哪里放置自己的脚本?

为了让所有用户都能访问您的脚本,您可以将其放入/usr/local/bin。请记住,您需要sudo在此处添加/更改文件的权限。请参阅:是否存在放置自定义Linux脚本的标准位置?

对于您自己的用户ID脚本,请将其放入/home/YOUR_NAME/bin。请记住,您必须首先创建此目录,然后重新启动终端以通过来自动设置路径~/.profile。请参阅:如何将/ home / username / bin添加到$ PATH?


我知道我不知道

我正在考虑在Ask Ubuntu中使用一些更复杂的bash脚本,并在上使用安装脚本进行设置github。以下是一些示例:

认为应该将脚本安装在/usr/bin$ PATH中,但是我不确定在适当的位置。


1
感谢您的努力,但是,除了“我所知道的我不知道的”部分,您重复了gertvdijk的回答。
danzel

1
@danzel我认为关键是man hiergertvdijk的答案未解决的部分。也就是说,您可以在命令行中获得目录的层次结构,而不必诉诸于在Web上读取它(即此处)。
WinEunuuchs2Unix

1
我同意那是有趣的信息。但是gertvdijk已经提到了文件系统层次结构标准(这man hier是IMO的信息不足摘录)。但是,这可能是我个人的看法。
danzel

@danzel我同意网站比我们的硬盘驱动器具有更深入的分析。我只是想指出信息是在我们的硬盘上,而不需要借助Internet。此外,引述的Wikipedia链接丢失 /usr/X11R6/bin/usr/local/bin该链接包含在中man heir
WinEunuuchs2Unix

@ WinEunuuchs2Unix,最后一段;为什么不这样做,/usr/local/bin因为您不是包管理器?
起搏器
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.