Unix/Linux 操作系统上的标准和/或通用目录

use*_*686 26 linux fhs directory-structure

来自 Windows 世界,我发现大多数文件夹目录名称都非常直观:

  • \Program Files 包含程序使用的文件(惊喜!)

  • \Program Files (x86) 包含 64 位操作系统上 32 位程序使用的文件

  • \Users(以前Documents and Settings)包含用户的文件,即文档和设置

    • \Users\USER\Application Data 包含特定于应用程序的数据

    • \Users\USER\Documents 包含属于用户的文档

  • \Windows 包含属于 Windows 本身操作的文件

    • \Windows\Fonts 存储字体文件(惊喜!)

    • \Windows\Temp 是一个全局临时目录

等等。即使我不知道这些文件夹做了什么,我也可以从它们的名字中准确地猜测出来。

现在我正在仔细研究 Linux,并且对如何绕过文件系统感到非常困惑。

例如:

  • /bin包含二进制文件。但也是如此/sbin/usr/bin, /usr/sbin, 可能还有更多我不知道的。哪个是哪个??它们之间有什么区别?如果我想制作一个二进制文件并将它放在系统范围内的某个地方,我应该把它放在哪里?

  • /media包含外部媒体文件系统。但也是如此/mnt。目前它们都没有在我的系统上包含任何内容;一切似乎都在/dev。有什么不同?哪里是我的硬盘的其他分区,像C:D:那名在Windows?

  • /home包含用户文件和设置。这是直观的,但是,应该进入/usr什么?为什么/root仍然是分开的,即使它是一个拥有文件和设置的用户?

  • /lib包含共享库,如 DLL。但也是如此/usr/lib。有什么不同?

  • 什么 /etc?它真的代表“et cetera”还是其他什么意思?什么类型的文件应该放在那里——全局的还是本地的?对于没有人知道放在哪里的东西,它是一个包罗万象的东西,还是有一个特定的用例?

  • 什么是/opt/proc/var?它们代表什么以及它们的用途是什么?我在 Windows* 中没有看到过类似的东西,我只是想不出它们的用途。

如果有人能想到其他可能值得了解的标准地方,请随时将其添加到问题中;希望这对像我这样开始熟悉 *nix 系统的人来说是一个很好的参考。

*好吧,那是谎言。我在 WinObj 中看到过类似的东西,但显然不是定期的。不过,我仍然不知道这些在 Linux 上的作用。

bhi*_*ley 30

Linux 发行版使用 FHS:http : //www.pathname.com/fhs/pub/fhs-2.3.html

您也可以尝试man hier.

我会尽量总结回答你的问题,但我强烈建议你通读 FHS:

  • /bin 用于非超级用户系统二进制文件
  • /sbin 用于超级用户(root)系统二进制文件
  • /usr/bin 和 /usr/sbin 分别用于非关键共享的非超级用户或超级用户二进制文件
  • /mnt 用于临时挂载分区
  • /media 用于一次安装多个可移动媒体
  • /dev 包含您的系统设备文件;说来话长 :)
  • /usr 文件夹及其子文件夹可以与其他系统共享,以便他们可以访问安装在同一位置的相同程序/文件。由于 /usr 通常位于单独的文件系统上,因此它不包含使系统联机所必需的二进制文件。
  • /root 是单独的,因为可能需要使系统联机而不安装可能位于不同分区/硬盘驱动器/服务器上的其他目录
  • 是的,/etc 代表“et cetera”。本地系统的配置文件存储在那里。
  • /opt 是您可以安装下载/编译的程序的地方。这样您就可以将它们与系统的其余部分分开,将所有文件放在一个地方。
  • /proc 包含有关内核和正在运行的进程的信息
  • /var 包含可变大小的文件,如日志、邮件、网页等。

要访问系统,您通常不需要 /var、/opt、/usr、/home;系统上一些可能最大的目录。

我最喜欢的一个,有些人不使用,是 /srv。它用于通过 http/ftp/samba 等服务托管的数据。我已经看到 /var 经常用于此目的,这并不是它的真正目的。

  • 关于 Unix 需要记住的另一件事是“_一切都是文件_”的概念(或者至少看起来像一个)。例如,/proc 中的内容看起来像文件和目录,但实际上是在您访问它们时由内核动态创建的。这意味着您可以使用相同的工具(ls、cat 等)来访问这些信息。 (2认同)
  • @symcbean 来自 FHS:“... /usr 是可共享的只读数据。这意味着 /usr 应该可以在各种符合 FHS 的主机之间共享...”。显然,有些文件依赖于体系结构,而有些发行版则期望有截然不同的目录层次结构。解决方案是做你的功课,就像一个好的管理员:) (2认同)

Arc*_*ege 19

我不会回答它们的含义(其他人有),但会给出一些历史背景。

首先,请记住 UNIX 已经接近 40 岁,回到纸带和 300 波特硬编码终端到大型机的时代(Windows XP 系统已经接近 10 岁)。打字很慢,打字效率的需要超过了许多其他考虑因素。这就是非常短的基本命令(即'ls'、'cat'、'cc'、'dd' 等)的原因。目录结构也是如此。想法是,如果命令超过三四个字符,则名称太长。

/usr 目录最初包含用户的主目录,因为大多数命令都在 /bin 中,而所有设备文件都在 /dev 中。后来它被认为使主驱动器(根文件系统,'/')变小以加快启动时间。因此其他结构如 /usr/bin、/usr/include 和 /usr/lib 出现了,其中 /usr 是一个单独的“驱动器”。很久以后,它被认为在 /home 中有用户的主目录,这是另一个驱动器。比这晚得多,有一个 /var(variable/changeable 的缩写)。/etc 目录确实意味着“et cetera”,因为这是所有系统配置文件的全部位置。/mnt 用作访问驱动器(通常是备份驱动器)的临时位置。像 /opt、/proc 和 /media 这样的目录要晚得多。

有很多被遗漏了(如 /usr/local 和 /net),但这里简要说明了名称“不太直观”的原因。

  • +1 我喜欢历史背景,它可以组织我的大脑。:) 感谢您花时间写这篇文章! (2认同)

Phi*_*ath 5

正如这里已经提到的,Linux 发行版主要使用 FHS,参见这里的类似教程的概述,特别适合来自 Windows 的人。

请注意,Windows 目录在表面上看起来很直观。但是让我问你,程序的设置属于哪里,作为*.ini程序文件夹中的文件,Documents and Settings\User\Application Data\Local Settings\Application Data),或臭名昭著的注册表中的文件?没有人知道,甚至微软也不知道。所以我们可以继续下去。