如何理解LinuxVPS中的文件系统布局

来自菜鸟教程
跳转至:导航、​搜索

介绍


如果您是 Linux 和类 Unix 操作系统的新手,那么与操作系统交互和导航的基本方法可能看起来令人费解且令人困惑。 新用户苦苦挣扎的一个领域是如何理解文件系统的结构方式。

在本文中,我们将讨论标准 Linux 文件系统的各个部分。 我们将探索一些最有趣的目录以及在您的服务器环境中查找各种组件的位置。

出于演示目的,我们将使用 Ubuntu 12.04 服务器。 其他 Linux 发行版的实现方式略有不同,因此如果您遵循并注意到与您自己的系统存在差异,请查看您的发行版的文档。

关于 Linux 文件系统布局历史的一些简要说明


Linux 从其 Unix 前辈那里继承了许多文件系统组织的概念。 早在 1979 年,Unix 就建立了标准来控制兼容系统如何组织他们的文件。

Linux 文件系统层次标准(简称 FHS)是由 Linux 基金会维护的规定性标准,它建立了 Linux 发行版应维护的组织布局,以实现互操作性、易于管理以及可靠地实现跨发行版应用程序的能力。

在处理这些系统时要提到的一件重要的事情是,Linux 几乎将所有内容都实现为文件。 这意味着文本文件是文件,目录是文件(只是其他文件的列表),打印机由文件表示(设备驱动程序可以将写入打印机文件的任何内容发送到物理打印机)等等.

尽管这在某些情况下过于简单化,但它告诉我们系统设计者所鼓励的方法:来回传递文本和字节,并能够应用类似的策略来编辑和访问不同的组件。

在本文中,我们不会完全遵循规范,因为分布经常偏离实际标准。 相反,我们将检查 Ubuntu 12.04 服务器以查找实际实现的目录结构。 这对普通用户来说更有用。

简单导航


在真正深入研究文件系统布局之前,您需要了解一些有关如何从命令行导航文件系统的基础知识。 我们将在这里介绍最低限度的内容,让您站起来。

定位自己


您需要做的第一件事是在文件系统中定位自己。 有几种方法可以做到这一点,但最基本的方法之一是使用 pwd 命令,它代表“打印工作目录”:

pwd

/root

这只是返回您当前所在的目录。 我们将学习如何解释结果。

看看周围


要查看当前目录中有哪些文件,可以发出 ls 命令,它代表“列表”:

ls

bin   etc         lib         mnt   root  selinux  tmp  vmlinuz
boot  home        lost+found  opt   run   srv      usr
dev   initrd.img  media       proc  sbin  sys      var

这将告诉您当前目录中的所有目录和文件。

ls 命令可以使用一些可选标志。 标志将命令的默认行为修改为以不同的方式处理或显示数据。

例如,如果我们想通过在目录条目后显示“/”来轻松区分文件和目录,则可以添加 -F 标志:

ls -F

bin/   home/        media/  root/     srv/  var/
boot/  initrd.img@  mnt/    run/      sys/  vmlinuz@
dev/   lib/         opt/    sbin/     tmp/
etc/   lost+found/  proc/   selinux/  usr/

两个最常见的标志是可能的 -l-a。 第一个标志强制命令以长格式输出信息:

ls -l

total 76
drwxr-xr-x  2 root root  4096 Apr 26  2012 bin
drwxr-xr-x  3 root root  4096 Apr 26  2012 boot
drwxr-xr-x 13 root root  3900 Dec  4 18:03 dev
drwxr-xr-x 78 root root  4096 Dec  4 19:29 etc
drwxr-xr-x  3 root root  4096 Dec  4 19:28 home
lrwxrwxrwx  1 root root    33 Apr 26  2012 initrd.img -> /boot/initrd.img-3.2.0-24-virtual
drwxr-xr-x 16 root root  4096 Apr 26  2012 lib
. . .

这会为每个文件或目录生成一行输出(名称在最右边)。 这有很多我们现在不感兴趣的信息。 我们 感兴趣的部分是第一个字符,它告诉我们它是什么类型的文件。 三种最常见的类型是:

  • -:普通文件
  • d:目录(列出其他文件的特定格式的文件)
  • l:硬链接或软链接(基本上是系统上另一个文件的快捷方式)

-a 标志列出所有文件,包括隐藏文件。 在 Linux 中,如果文件以点开头,则会自动隐藏:

ls -a

.  ..  .bash_logout  .bashrc  .profile

在此示例中,所有文件都被隐藏。 前两个条目 ... 是特殊的。 . 目录是一个快捷方式,意思是“当前目录”。 .. 目录是一个快捷方式,意思是“当前目录的父目录”。 稍后我们将学习一些使用它们的方法。

四处走走


现在您可以找出您在文件系统中的位置并查看您周围的情况,是时候学习如何在整个文件系统中移动了。

要更改到不同的目录,请发出 cd 命令,它代表“更改目录”:

cd /bin

您可以在命令之后使用绝对或相对路径名。

绝对路径 是一个文件路径,它从目录树的顶部指定目录的位置(我们稍后会解释)。 如上所示,绝对路径以“/”开头。

相对路径 是相对于当前工作目录的文件路径。 这意味着它不是从目录结构的顶部定义位置,而是定义与您当前所在位置相关的位置。

例如,如果要移动到当前目录中名为 documents 的目录,可以发出以下命令:

cd documents

从开头缺少“/”表示使用当前目录作为查找路径的基础。

这就是 .. 目录派上用场的地方。 要移动到当前目录的父目录,您可以键入:

cd ..

Linux 文件系统布局概述


查看 Linux 文件系统时,您需要知道的第一件事是文件系统包含在单个树中,无论包含多少设备。

这意味着操作系统可访问的所有组件都表示在主文件系统的某个位置。 如果您使用 Windows 作为您的主要操作系统,这与您习惯的不同。 在 Windows 中,每个硬盘驱动器或存储空间都表示为它自己的文件系统,这些文件系统标有字母名称(C:是系统文件层次结构的标准顶级目录,其他驱动器或存储空间被赋予其他字母标签)。

在 Linux 中,系统上的每个文件和设备都驻留在“根”目录下,该目录由开始的“/”表示。

注意:这不同于默认的管理用户,也称为“root”。 它也不同于位于“/root”的默认管理用户的主目录。

因此,如果我们想去整个操作系统的顶层目录看看里面有什么,我们可以输入:

cd /
ls

bin   etc         lib         mnt   root  selinux  tmp  vmlinuz
boot  home        lost+found  opt   run   srv      usr
dev   initrd.img  media       proc  sbin  sys      var

每个文件、设备、目录或应用程序都位于这个目录下。 在此之下,我们可以看到目录结构其余部分的开始。 我们将在下面详细介绍:

/bin


此目录包含启动时实现最小工作环境所需的基本命令和程序。 它们与系统上的一些其他程序分开保存,即使文件系统的其他部分可能损坏或不可用,您也可以引导系统进行维护。

如果你搜索这个目录,你会发现 lspwd 都在这里。 cd 命令实际上是内置在我们正在使用的 shell (bash) 中,它也在这个目录中。

/启动


该目录包含启动系统所需的实际文件、映像和内核。 /bin 包含基本的基本实用程序,而 /boot 包含实际允许系统启动的核心组件。

如果您需要修改系统上的引导加载程序,或者如果您想查看实际的内核文件和初始 ramdisk (initrd),您可以在此处找到它们。 系统必须很早就可以访问此目录。

/dev


此目录包含代表系统上设备的文件。 系统可用的每个硬盘驱动器、终端设备、输入或输出设备都在这里用一个文件表示。 根据设备的不同,您可以通过不同的方式对设备进行操作。

例如,对于表示硬盘驱动器的设备,如 /dev/sda,您可以将其挂载到文件系统以访问它。 另一方面,如果您有一个代表行式打印机的文件,例如 /dev/lpr,您可以直接写入该文件以将信息发送到打印机。

/ETC


如果您是系统管理员,这是文件系统的一个区域,您将在其中花费大量时间。 该目录基本上是各种系统范围服务的配置目录。

默认情况下,此目录包含许多文件和子目录。 它包含系统上大多数活动的配置文件,无论它们的功能如何。 在需要多个配置文件的情况下,很多时候会创建一个特定于应用程序的子目录来保存这些文件。 如果您正在尝试为整个系统配置服务或程序,这是一个很好的地方。

/家


此位置包含系统上所有用户的主目录(管理用户 root 除外)。 如果您创建了其他用户,通常会在此目录下创建与其用户名匹配的目录。

在每个主目录中,关联的用户都有写访问权。 通常,普通用户只有对他们自己的主目录的写访问权。 这有助于保持文件系统清洁并确保不只是任何人都可以更改重要的配置文件。

在主目录中,通常是隐藏文件和目录(由起始点表示),允许用户特定的工具配置。 您通常可以在 /etc 目录中设置系统默认值,然后每个用户可以根据需要在自己的主目录中覆盖它们。

/lib


此目录用于 /bin/sbin 目录所需的所有共享系统库。 这些文件基本上为系统上的其他程序提供功能。 这是您不必经常访问的目录之一。

/丢失+找到


这是一个特殊目录,其中包含由 Linux 文件系统修复程序 /fsck 恢复的文件。 如果文件系统损坏并进行了恢复,有时会找到文件但对其位置的引用会丢失。 在这种情况下,系统会将它们放在这个目录中。

在大多数情况下,此目录将保持为空。 如果您遇到损坏或任何类似问题并被迫执行恢复操作,最好在完成后检查此位置。

/媒体


该目录在引导时通常为空。 它的真正目的只是提供一个安装可移动媒体(如 cds)的位置。 在服务器环境中,这在大多数情况下都不会使用。 但是,如果您的 Linux 操作系统曾经挂载过媒体磁盘并且您不确定它的放置位置,那么这是一个安全的选择。

/mnt


此目录类似于 /media 目录,因为它的存在只是用作设备的组织挂载点。 在这种情况下,此位置通常用于挂载文件系统,如外部硬盘驱动器等。

此目录通常用于 VPS 环境中,用于挂载网络可访问的驱动器。 如果您想在服务器上挂载远程系统上的文件系统,这是一个很好的地方。

/选择


这个目录的用法相当模糊。 它被某些发行版使用,但被其他发行版忽略。 通常,它用于存储可选包。 在 Linux 发行版世界中,这通常意味着不是从存储库安装的包和应用程序。

例如,如果您的发行版通常通过包管理器提供包,但您从源代码安装程序 X,那么该目录将是该软件的好位置。 这种性质的软件的另一个流行选项是在 /usr/local 目录中。

/proc


/proc 目录实际上不仅仅是一个普通的目录。 它实际上是一个挂载到该目录的自己的伪文件系统。 proc 文件系统不包含真实文件,而是动态生成以反映 Linux 内核的内部状态。

这意味着我们可以实时检查和修改来自内核本身的不同信息。 例如,您可以通过键入 cat /proc/meminfo 来获取有关内存使用情况的详细信息。

/根


这是管理用户(称为“root”)的主目录。 它的功能与普通的主目录完全一样,但位于此处。

/跑


该目录供操作系统在启动过程的早期阶段写入临时运行时信息。 通常,您不必担心此目录中的大部分信息。

/sbin


这个目录很像 /bin 目录,因为它包含被认为是使用操作系统必不可少的程序。 区别通常是 /sbin 包含系统管理员可用的命令,而另一个目录包含系统所有用户的程序。

/selinux


此目录包含涉及安全增强 Linux 的信息。 这是一个内核模块,用于为操作系统提供访问控制。 在大多数情况下,您可以忽略这一点。

/srv


此目录用于包含计算机提供的服务的数据文件。 在大多数情况下,这个目录并没有被过多地使用,因为它的功能可以在文件系统的其他地方实现。

/tmp


这是一个用于在系统上存储临时文件的目录。 它可由计算机上的任何人写入,并且在重新启动后不会持续存在。 这意味着您只需一点点需要的任何文件都可以放在此处。 一旦系统关闭,它们将被自动删除。

/usr


该目录是系统上最大的目录之一。 它基本上包括一组看起来类似于根目录 / 中的文件夹,例如 /usr/bin/usr/lib。 此位置基本上用于存储所有非必要程序、它们的文档、库和其他对于系统的最低限度使用而言不需要的数据。

这是系统上大部分文件的存储位置。 一些重要的子目录是 /usr/local,它是 /opt 目录的替代,用于存储本地编译的程序。 另一件有趣的事情是 /usr/share 目录,它包含文档、配置文件和其他有用的文件。

/var


该目录应该包含可变数据。 实际上,这意味着它用于包含您希望在使用系统时增长的信息或目录。

例如,系统日志和备份都存放在这里。 如果您正在操作 Web 服务器,则此目录的另一个流行用途是存储 Web 内容。

结论


尽管存储位置的详细信息可能因发行版而异,但总的来说,我们讨论的位置应该为您指明正确的方向。

探索文件系统的最佳方式是简单地遍历各个目录并尝试找出其中的文件是做什么用的。 您将开始能够将不同的目录与不同的功能相关联,并能够猜测去哪里执行特定任务。 如果您想快速了解每个目录的用途,可以通过键入以下内容使用内置手册页:

man hier

这将为您提供典型文件系统布局和每个位置的用途的概述。