Linux文件系统101


> Ancient index-card file system

Linux文件系统遵循从根开始的树状分层结构。 它由目录,子目录和数据文件组成。 此结构遵循文件系统层次结构标准(FHS)推荐的标准布局,该文件结构是Linux Foundation维护的标准。

下面,我提供了根目录的树状结构的图片。

> Tree-like view of folders sitting on the root

在继续之前,我想强调一点,这是类Unix系统所特有的。 这些系统旨在使事物保持简单,并将每件事物视为字节序列。 这些字节序列被OS称为文件。 因此,从这个意义上讲,所有内容都是文件。 甚至您的硬件设备都是文件。 您的打印机是一个文件,您的内存是一个文件,基本上所有内容。 这种方法使这些系统变得非常灵活。 由于我相信Linux目录的内部工作方式有一些需要学习的优点,因此在本教程的最后创建了一个小节来详细解释它。 但是,由于您可能会被忽略,因此暂时跳过此主题。

与具有多个根的Windows不同,Linux仅允许一个根。 在下面,您可以在根目录中看到标准文件夹的图片。 根目录是系统上所有其他目录和文件所在的目录,并用正斜杠/表示。

在这里,在本教程中,我尝试解释每个目录并提供有关每个目录的一些有用信息。 我尝试按照重要性和相关性的顺序来解释它们。

> Standard directories sitting on the root directory


/ home目录

主目录(也称为登录目录)是每个用户存储其个人文件和文档的位置。 Linux是一个多用户环境,因此为每个用户分配了一个特定目录,该目录只能由他们和系统管理员访问。

主目录包含您的个人配置文件,即所谓的前导点文件。 这些文件通常是隐藏的,您需要使用带有-a选项的ls来查看它们。 如果个人配置文件和系统范围的配置文件之间存在冲突,则个人文件中的设置具有优先权。

当您存储文件,下载,应用程序,视频,图片和声音时,这会直接变得非常大。

请记住,该目录是唯一可以写入的目录,无需root用户的特权访问。 对于其他目录,尽管您可以在没有root用户访问权限的情况下阅读大多数目录,但无法对其进行修改和写入。

> The only user in my home directory

> This view inside my home directory. Folders with leading dot are hidden directories and they contain configuration/cache/temp files. For example .config directory has configuration files for your installed programs. The other files with leading dots are also typically for configuration purposes such as .bashrc or .profile

/ bin和/ sbin目录

bin是二进制文件的缩写。 这是Linux保留其基本程序和应用程序的地方。 二进制文件是包含编译源代码的可执行文件。 几乎所有基本的Linux命令都可以在这里找到,例如ls,cat,touch,pwd,rm,echo等。该目录上的二进制文件必须可用,以便获得用于引导和修复系统的最低功能。

> The view inside the bin directory

sbin是系统二进制文件的缩写。 与bin相似,它也是存储可执行程序的地方。 但是这些可执行程序对于系统配置,维护和管理任务至关重要。 Linux已决定区分普通二进制文件和这些系统二进制文件。 换句话说,此目录保留用于引导,还原和恢复必不可少的程序。 例如,查看sbin二进制文件,fsck,文件系统检查和修复实用程序的一些示例,或者重新引导,重新启动系统。

由于需要特权访问,因此该目录不是默认$ PATH环境变量的一部分。 $ PATH包含普通用户搜索以查找其二进制文件的路径,并且不需要root访问权限即可搜索这些路径。

> The view inside the sbin directory

/ usr目录

usr代表Unix系统资源。 它属于用户应用程序,与属于系统应用程序的/ bin或/ sbin目录相反。 此处安装的任何应用程序均被视为对于基本系统操作而言不是必需的。 但是,这是系统中最重要的目录之一,因为它包含所有用户级二进制文件,它们的文档,库,头文件等。此目录是只读的,应用程序不应在其中写入任何内容。

/ usr子目录:

· / usr / bin包含系统上的绝大多数二进制文件。 此目录中的二进制文件具有广泛的应用程序。 例如,vi,firefox,atom,gcc,curl,dpkg等都在这里。

· / usr / sbin包含用于管理任务的程序。 他们需要特权访问。 与/ sbin类似,它们不属于$ PATH。

· / usr / lib包含程序库。 库是常用程序例程的集合。

· / usr / local包含自编译程序或第三方程序。 该目录的结构与父目录/ usr /相似,建议系统管理员在本地安装软件时使用。

· / usr / src包含内核源代码,头文件和文档。

· / usr / include包含编译用户空间源代码所需的所有头文件。

· / usr / share包含可共享的,与体系结构无关的文件(例如docs,图标,字体等)。 建议任何包含或不需要修改数据的程序将它们存储在此子目录(或/ usr / local / share,如果在本地安装)中。

琐事:最初,该目录原本是与用户相关的任何目录,但是随着时间的流逝,它失去了意义,现在它成为了"用户可用程序和数据"的存放地。

> The view inside usr directory

/ etc目录

这是您存储所有系统范围的配置的位置。 因此,如果您的Linux上有系统范围的应用程序,则可以在此处找到其配置文件。

看下面的图片,它是/ etc目录中的视图。 所有深蓝色的名称都是目录,并且每个内部都是一个配置文件。 例如,python,python3,perl,ssh,apt,firefox,emacs等的配置。

> The view inside the etc directory

> The view inside the etc directory


/ opt目录

opt代表可选。 这是手动安装的软件所在的位置。 例如,在下面的示例中,您可以看到我的计算机上安装的zoom,BlueJeans,contained,skypeforlinux和google(Google chrome)软件文件夹。

> The view inside opt directory

/ snap目录

snap软件包和常规Deb软件包之间的区别如下:

· 安装后,它们的片段不会散布在各个目录中。 它们将全部包含在/ snap目录下的文件夹中。

· 它们不依赖于任何其他包,依赖项或库。 它们捆绑了正常运行所需的一切。

· 它们与系统的其余部分完全隔离。 因此,它们不会弄乱其他文件。

下面,我在/ snap目录中共享了一个视图。 这些都是快照包。 例如,让我们深入研究电报桌面快照包。 该快照包内部的视图在下面共享。 如您所见,它是一个独立的程序包,具有所有必要的库和依赖项,以确保正常运行。

> The view inside snap directory

> The view inside telegram-desktop snap package

/ lib / lib32 / lib64目录

lib代表库。 这些是库文件目录。 这些库文件是在其他二进制应用程序之间共享的程序。 bin和sbin中的二进制文件广泛使用这些库文件。 如果您想知道哪个命令使用哪个库文件,则可以使用strace命令对其进行跟踪。 例如,让我们看看ls命令使用的库文件。

$ strace -e open ls

答案如下图所示。 如您所见,ls命令几乎需要/ lib目录中的所有库文件才能正常运行。

> The first part shows the files inside lib directory and the second part are lib files used by ls c

/ var目录

var代表变量。 该目录包含可变数据,例如系统日志文件,邮件和打印机假脱机目录以及临时和临时文件。 这些通常是预期会增加大小的文件和目录。 例如,/ var / crash保存有关进程每次崩溃的信息。 或/ var / log包含您的计算机及其应用程序的所有日志文件,这些文件会随着时间不断增长。

> the view inside var directory

> A file that holds crash information of my Google Chrome. It is already 66 MB.

/ media目录

这是操作系统自动挂载外部可移动设备(例如USB拇指驱动器)的位置。

/ mnt目录

您可以在此处手动安装外部设备。 它可以是软盘,外部硬盘驱动器,网络驱动器等。

/ media和/ mnt基本相同; 但是,建议使用/ mnt进行手动安装,并保留操作系统的介质目录。

/ boot目录

这是您的引导加载程序所在的位置。 它包含启动计算机所需的静态引导程序,内核可执行文件和配置文件。

> The view inside the boot directory

/ sys目录

在这里可以与内核进行交互。 换句话说,您可以将其视为内核的接口。 该目录是一个虚拟文件系统,这意味着文件位于内存中,并在关闭后消失。 本质上,/ sys允许您以结构化方式获取有关系统及其组件的信息。

> The view inside the sys directory

/ dev目录

这是您的设备(也称为特殊文件)文件所在的位置。 这些文件允许应用程序与您的硬件设备进行交互。 请记住,这些不是设备驱动程序,而是代表计算机上每个设备并有助于访问这些设备的文件。

这些特殊文件可以是字符文件或块文件。 块设备是指以块为单位执行数据I / O的任何设备。 硬盘,而字符设备是任何以字符为单位执行数据I / O的设备,例如标准输入/输出(键盘/屏幕)。

下面,我提供了一些设备文件示例。

· 第一个硬盘:/ dev / sda(它的第一个分区是/ dev / sda1)

· 打印机:/ dev / lp0

· 电脑内存:/ dev / mem

· 终端(键盘或屏幕):/ dev / tty

/ sys和/ dev都与设备有关,因此它们可能会造成混淆。 但是,它们有很大的不同。 / sys目录包含提供有关设备信息的文件。 诸如是否打开电源,供应商名称,型号等信息。另一方面,/ dev目录包含允许程序访问设备的文件(将数据写入串行端口,读取硬盘等)。 如您所见,它们有很大的不同。

> The view inside the boot directory

/ proc目录

proc代表过程。 在此目录上,您可以找到包含有关系统进程和资源信息的伪文件。 例如,您计算机上的每个进程在该目录上都会有一个文件夹,其中包含有关该进程的信息。 该目录是一个虚拟文件系统,在计算机关闭后会消失。

举例来说,让我们看看该目录中的文件夹。 我首先使用htop命令查看计算机上的运行过程。 我根据运行时间对这些运行过程进行了排序。 让我们选择前3个进程,它们的PID(进程ID)分别为1916、28233和28197。让我们看一下proc目录中的内容。 如您所见,每个进程在proc目录中都有一个文件夹,其中包含每个进程的必要参数。

另一个示例是有关资源的信息,例如CPU(在/ dev / cpuinfo上)或正常运行时间(在/ dev / uptime上)。

> The list of running processes on my computer. You can check them with top/htop command

> There is one folder for each running process on proc directory

/运行目录

现代Linux发行版已将此目录包含为临时文件系统(tmpfs),用于存储RAM运行时数据。 这意味着像systemd和udev这样的守护进程在启动过程的早期(可能在/ var / run可用之前)就已经启动,它们具有标准化的文件系统位置,可以在其中存储运行时信息。 由于此目录中的文件存储在RAM中,因此关闭后它们会消失。

/ run / udev是Linux内核的设备管理器,/ run / systemd是一组基本的构建块,它们提供了标准的过程来控制系统启动时运行哪些程序。

> The view inside the run directory

/ tmp目录

应用程序在这里存储会话期间所需的临时文件。 例如,当您在文字处理器中编写文字文档时,它会存储一个临时文件,以保存您编写的所有内容。 如果由于某种原因您的系统在保存文件之前崩溃,则文字处理器可以搜索该目录以查找最近保存的副本以恢复您的文本。 重新引导系统时,该目录通常为空。

> The view inside the tmp directory

/根目录

这是超级用户(即管理员)的目录。 您可以将其视为root用户的主目录。 它只能由超级用户访问。 在我的计算机上,它是一个空文件夹。 但是,它保留用于根帐户的配置文件。

/ srv目录

它是服务目录。 如果您正在运行Web服务器,则可以在该文件夹中存储特定于站点的数据。

/ cdrom目录

这是挂载CD-ROM的旧目录。 但是,今天CD-ROM会自动安装在媒体目录上。




如果您发现本文有帮助,请与您的朋友和同事分享。 如果您还有其他疑问,可以在Linkedin上找到我,或者给我发送电子邮件smohajer85@gmail.com。

资源资源

· Linux文件系统/结构说明! (链接)

· Unix / Linux文件系统(链接)

· Linux 101的神秘化:文件系统(链接)

· 有关物理硬盘驱动器上的文件系统反射的来源(链接)

· FHS标准(链接)


(本文翻译自Saeed Mohajeryami的文章《Linux File System 101》,参考:https://medium.com/@smohajer85/linux-file-system-101-894141449257)

举报
评论 0