Linux 目录结构

/dev 目录

基于 Unix 的操作系统的一个独特方面是一切都是文件。
也就是说,文件代表了系统中的一切:正在运行的进程、内存,当然还有存储设备。
例如,当我们将一些数据复制到硬盘驱动器时,Linux 实际上是将数据写入像 /dev/nvme0n1p3 这样的文件,该文件代表 SSD 的第三个分区。

/dev 目录是保存所有这些特殊文件的地方。
如果你浏览它,你会看到几乎所有你能想到的设备的文件,从前面提到的基于 NVMe 的固态驱动器到 SATA 上的硬盘(例如 /dev/sd* )或者更旧的 IDE(/dev/ hd* ) 连接,以及旧的,如 PS/2 鼠标端口 (/dev/psaux )。
星号代表通配符;例如,在基于 SATA 的设置中,第一个硬盘将是“/dev/sda”,而该磁盘的第一个分区将是“/dev/sda1”。
它的第二个分区是“/dev/sda2”,而第二个磁盘的第一个分区是“/dev/sdb 1”。

虽然它们按任何特定顺序排列并不重要,但重要的是要知道哪个是哪个。
例如,当我们打算将 Linux 安装到新的空白驱动器时,这些知识将防止我们覆盖 Windows 分区。

/var 目录

最后一个“主”Linux 目录,/var 目录包含系统数据。
这意味着系统操作生成的数据,例如日志文件 (/var/log)、缓存 (/var/cache) 和备份 (/var/backup)。
并且由于 Unix(因此 Linux 也是)最初是一个多用户系统,保存服务器应用程序的区域,例如电子邮件(/var/mail 用于邮箱,/var/spool/postfix 用于外发邮件)和网络打印(/var/ spool/cups ) 也在这里实例化。

/boot 目录

接下来按字母顺序是 /boot ,它包含系统启动时使用的文件。
它包含 Linux 内核的副本(我们在文件系统的根目录中看到的内核可能是其中之一的链接)、 initrd 或者系统的初始 ramdisk 以及其他相关数据。

关于这个目录,你应该知道的最重要的事情是不要在里面乱搞。
当包管理器安装和升级内核时,会处理这里的内容。

如果我们删除当前内核(或者内核本身)所需的文件之一,则最终可能会导致系统无法启动。

/lib 目录

由于我们可能使用的是 64 位操作系统,因此我们可能在这里有几个目录: /lib 、 /lib32 和 /lib64 。

这些包含内核用于其最基本操作的软件库。
那些不包含特定于处理器版本的代码位于 /lib 文件夹中。
特定于版本的那些在 /lib32(32 位)或者 /lib64(64 位)目录中视情况而定。

/usr 目录

虽然用户数据存储在 /home 文件夹中,但 /usr 及其子目录包含系统的大部分已安装软件。
这里安装的意思是 /bin 中基本实用程序之外可用的任何内容。
例如,它将包含:

  • 桌面环境、LibreOffice 办公套件、GIMP 图像编辑器和 Firefox Web 浏览器等应用程序。
  • Linux 内核和硬件驱动程序等的源代码。
  • 辅助文件,例如图稿或者文档,用于上述所有内容。

/usr 目录将这些存储在其自己的层次结构中。
它包含 bin 、 lib 和 sbin 子目录,它们的操作就像他们的上级兄弟一样,但只包含与我们安装的软件相关的内容。
/usr/share 目录包含图标集等资产以及文档文件。

最后,/usr/local 分支的初衷类似于 /opt——用户安装的“可选”软件。
争论的一部分是这两者中的哪一个应该保留。
赞成 /usr/local 的一点是,大多数从源代码安装的软件都配置为将自身放置在这里。

Windows 和 Linux 目录结构之间的差异

Linux 和 Windows 之间的一个显着区别在于我们在全新安装操作系统后会遇到的默认目录排列系统。

要从高层次理解为什么这些操作系统的结构是这样的,了解它们的历史是很有用的。

当基于 Windows 的 PC 首次开始其增长曲线时,在 MS-DOS 的早期,Microsoft 的操作系统特别关注微型计算机(我们今天更常称为台式计算机)。
早些年,文件主要存储在软盘驱动器上。
它们被标记为 A: 和 B: 所以很容易区分它们。
后来,硬盘驱动器获得了 C: 驱动器标签,并且其他驱动器类型(例如 CD-ROM 或者基于 USB 的驱动器)被分配了后续字母。

相比之下,Linux 源自 Unix,这是一种由 AT&T 在 1970 年代开发的操作系统。
此时,人们使用的“计算机”主要只是终端。
他们在屏幕上显示基于文本的信息,并提供键盘输入。
但是繁重的工作是由一个“系统”完成的,这个系统可能由多台物理机器组成:一台用于处理,一台用于存储,另一台提供特定的应用程序。
这些都是通过网络连接的,而对用户来说,它们似乎是一个单一的实体。
Unix 设计的这种客户端-服务器配置与 MS-DOS 和后来的 Windows 支持的单用户微型计算机完全相反。

Linux 文件系统的一条经验法则是,根文件系统或者文件系统的最顶层不包含任何杂散文件。
在大多数系统中,它可能包含内核(图中的 vmlinuz)或者操作系统的核心,并且可能包含一个 ramdisk (initrd),其中包含系统启动和运行所需的数据。

但除此之外,它应该只包含我们将在以下部分(以及其他部分)中讨论的目录。

/home 和 /root 目录

Windows 爱好者了解 C:\Users 目录,该目录是系统每个用户的文档和设置所在的位置。
由于 Unix 从一开始就是一个多用户系统,这个概念在 Linux 中作为 /home 目录已经存在多年。
每个帐户在此处享有一个包含所有帐户数据的子目录。
事实上,普通的非管理员用户甚至没有将文件存储在其他地方的权限。

/root 目录是系统管理员或者 root 用户的等效用户文件夹。
它与 /home 仅在其位置(使潜在的敏感文件远离普通用户)和所有权上有所不同。

/opt 目录

不久前,我们还不能直接跳到某个站点并为我们喜欢的应用程序下载 Ubuntu 包。
我们可以通过运行自定义安装程序来安装其中的许多程序,只需从存档中解压缩它们,甚至从它们的源代码构建它们。
这些安装方法并不统一,有时很难跟踪文件去了哪里以及如何卸载它们。
此可选软件引入了 /opt 目录,以确保在安装或者卸载出错时系统的其余部分不受影响。

虽然当今越来越多的开发人员以标准包格式(.RPM 和 .DEB)提供他们的应用程序,但其中一些程序仍然安装到 /opt 。
这个目录是否仍然有意义是 Linux 社区中一些争论的主题,但就目前而言,它仍然存在。
一些软件仍然安装在那里,即使是标准的 .DEB 包。
值得注意的是,谷歌浏览器安装在基于 Ubuntu 的系统上。

/cdrom 目录

这是一个遗留目录。
它被引入作为可以安装或者连接 CD 并访问其内容的地方。
在那个时候,安装 CD-ROM 需要 root 或者管理员权限是很常见的。
但是现在更常见的是在 /media 目录中找到自动挂载的 CD-ROM,我们稍后会讨论。

以同样的方式,曾经有一个 /floppy 目录。
我们可以看到这些是如何让可能习惯于 Windows 的用户更舒服一点的。
但是由于软盘驱动器不是现代 PC 上的标准组件,我们甚至可能再也看不到这个目录了。
例如,Ubuntu 没有它。
如果机器有软盘驱动器,我们可能会发现它自动安装在 /media 中。

/bin 目录

我们将遇到的第一个目录是 /bin 。
这代表二进制文件,它包含“标准”操作系统程序。
此处,“标准”是指以任何有意义的方式使用操作系统所需的基本实用程序。
我们将在此处找到的程序示例如下:

  • cd ,或者更改目录,其操作与 Windows 对应物非常相似
  • 文件管理命令,如 cp 和 mv(分别复制和移动文件)。
  • 文件权限实用程序,例如 chmod(更改文件权限)和 chown(更改这些文件的所有者)。
  • 提供计算环境的程序,例如登录(提供登录机器的能力)和 bash 或者其他 shell。

当我们第一次安装 Linux 发行版时,这些程序将作为最基本安装的一部分进行安装,并且在许多情况下无法删除。

/media 和 /mnt 目录

几年前,如果我们有像 USB 拇指驱动器这样的可移动媒体,在使用它之前,我们需要为其分配一个 /dev 条目并在 /mnt(挂载)目录中创建一个位置。
在更现代的版本中,Linux 发行版会自动配置可移动媒体。
事实上,根据设备连接时登录的用户,系统会创建一个用户特定的目录,挂载设备,并确保用户具有正确的访问权限。
现在的不同之处在于 /media 目录通常用于此目的。

/sbin 目录

/sbin 目录与前面提到的 /bin 一样,包含二进制实用程序。
但是,此目录仅限于系统二进制文件,因此只有 root 用户可以运行其内容。
它包括诸如 adduser(用于创建新用户帐户)、insmod(用于将硬件驱动程序加载到内核)和 poweroff(关闭计算机)等工具。

如果我们对最后一个感到疑惑,那么眼光就很敏锐。
不,我们无需成为“超级用户”即可关闭 Linux 系统。
在服务器系统上就是这种情况。
但是在桌面上,首选环境(例如 KDE、GNOME 或者 XFCE)已设置为可以像 root 用户一样执行该特定命令。

/etc目录

/etc 目录的名称,作为放置任何另外文件或者其他文件的地方,掩盖了它的重要性。
实际上,这个目录包含许多控制整个系统的配置文件。
有两种主要类型的文件驻留在此处:

  • 全局配置文件,例如/dev/fstab 文件用于挂载我们在上面 /dev 目录中描述的所有大型驱动器。
  • 所谓的“骨架”文件,用作用户级设置的默认值。这方面的一个示例是 /etc/profile 文件,其中包含 Bash shell 的设置。创建新帐户时,此文件将作为 .profile 复制到新帐户并作为起点,直到用户对其进行自定义。

/etc 中的许多子目录都是以其控制的应用程序命名的,因此很容易在此处浏览以尝试查找修复应用程序运行时所需的文件。

其他目录

不同的发行版在根级别使用不同的标准目录组合。
下面,我们共享 MX Linux 18.3 Continuum 和 Ubuntu 19.10 Eoan Ermine 的根文件夹的目录列表。

根据发行版的不同,我们也可能会遇到其他目录:

  • /lost+found :有时会在系统中放错少量数据。如果我们知道丢失了某些东西,我们可以在此处查看,尽管内容不易识别。我们需要手动检查它们的内容以找出它们是什么。
  • /proc :Linux 中的一切都可以用文件表示。 /proc 目录包含与 processes 关联的文件,我们可以查看它们以检查它们在做什么(但不要编辑它们)。
  • /run :这是一个运行时目录,进程其中存储他们需要的一些临时数据,最常见的是在系统启动时。与其他系统级目录一样,请不要在这里胡思乱想。
  • /snap :Ubuntu 的 Snap 是一种包格式,它将应用程序以及应用程序所需的一切包装在一个与系统其余部分隔离的容器中。

/snap 目录是这些容器安装到系统的地方,与存储设备类似。

  • /srv :此目录是存储守护程序服务的文件的位置。例如,Apache Web 服务器提供的静态网页可能存储在 /srv/www 子目录中。
  • /sys :与“一切都是文件”的口号保持一致,/sys 及其内容代表来自 Linux 内核的设置和信息,就像 /proc 用于运行进程一样。
  • /tmp :如果你猜这个目录保存临时数据的名称,你是对的。系统级程序在此处临时存储信息。

在基于 Windows 的计算机上,没有什么可以阻止我们将目录放置在我们希望的任何位置,包括在根 (C:) 级别。
但是,在基于 Linux 的系统上,我们应该将数据保留在它所属的地方。
当我们从系统设计为接受的内容中强制替代目录布局时,基于细粒度权限的 Linux 系统将产生有意的摩擦。

日期:2020-07-15 11:16:42 来源:oir作者:oir