Linux 操作系统的目录结构
Linux 操作系统中一切皆文件。不仅仅存储数据的磁盘是文件,其它设备也是文件。操作系统内部的信息也是以文件的形式呈现的,比如 CPU 信息、内存信息和进程信息等等。
有一个专门的文档来介绍 Linux 的目录结构,这个文档名为文件系统层次标准(Filesystem Hierarchy Standard,简称 FHS)。但是这个文档非常长, 而且在 Linux 的目录结构中有些目录并不在该文档中,因此本文简要介绍一下 Linux 的核心目录。
/ – 根目录
首先我们介绍一下 Linux 下的根目录。Linux 的目录结构就像一棵倒着的大树,最底层是树干,然后是分支,层层细分。而根目录是 Linux 最底层的目录,就像一棵大树的树干一样。
任何内容都位于根目录之下,根目录通过一个路径符号/表示。如果非要找个类比的话,可以将根目录理解为 Windows 下面的 C:\目录。但是严格来说并不一样,Linux 下的"/"是所有内容(包括文件目录、设备和文件等)的根,而 Windows 下的 C:\并不是,因为如果有多个磁盘或者多个分区,那 Windows 下可能还有 D:\或者 E:\。
我们可以通过执行命令cd /将当前工作路径切换到根目录。并通过命令tree -L 1显示根目录的所有下一级目录。具体如图 3 所示。本例中只显示了一级子目录,当然也可以通过-L 2 显示二级子目录,但结果可能会占满整个屏幕。
图 3 根目录示例
/Bin – 用户基础二进制文件目录
目录/bin 是根目录的一级子目录。在该目录中包含着最为基础的用户二进制文件,也就是应用程序。这个目录非常像 Windows 下的 Programs 目录。
并非所有的应用程序都存储在这个目录下面,有些不是特别基础的程序会存储在/usr/bin 目录下面。比如 Chrome 浏览器等,或者用户自己安装的一些程序通常会在/usr/bin 下面。而系统应用程序则通常会在该目录下面,比如 ls、mkdir 和 cp 等等。
如果你使用的桌面版的操作系统,可以通过 GUI 看到该目录下的内容。下面这张图是一个具体的例子。
图 4 二进制目录
/Boot – 静态启动文件
在目录/boot 下面包含的文件是用于启动操作系统的文件。比如 GRUB boot loader 文件和操作系统内核等。但是 boot loader 的配置文件并没有在这里,而是在/etc 目录中。
/Cdrom – 光盘安装点
目录/cdrom 并不是 FHS 标准的一部分,但是我们在绝大多数发行版中都可以看到。该目录是光盘的临时挂载点。
/Dev – 设备文件
在 Linux 下面,设备也是一个文件,比如磁盘、优盘或者光盘等。包括无线网卡、摄像头和串口等都是一个文件。而通常这些文件都是在/dev 目录下面,大家可以切换到该目录下看看具体的内容。
图 5 设备目录
其中图是/dev 目录的一个局部截图。在该目录下面最常见的可能就是/dev/sda 这种文件,该文件表示一个 SCSI 磁盘。
处理实体设备外,在该目录下面还有很多伪设备。比如/dev/random 表示一个产生随机数的设备,/dev/loop0 则是一个将本地文件映射为磁盘的虚拟设备。这些伪设备有的时候非常用于,我们经常使用这些设备做一些测试。
图 6 GUI 目录
/Etc – 配置文件
操作系统和应用程序的配置文件通常都统一存储在一个目录下面,这个目录就是/etc。很多配置文件都已文本文件的形式存储在这里。我们可以通过文本编辑器修改配置项。比如网络的 IP 地址、Nginx 的配置和系统日志的配置等等都可以在这里找到。
/Home –主目录
这个目录称为主目录。在 Linux 操作系统下面通常每个用户都有一个自己的目录,该目录就在/home 下面。例如本例中有一个名为 zhangsn 的用户,该用户的主目录在/home 下如图 7 所示。
用户的主目录下面包含这数据文件和用户相关的配置文件。通常一个用户只能修改其目录下的文件,只有获得授权的情况下才能访问其它文件。
图 7 zhangsn 的主目录
/Lib – 基础共享库
在/lib 目录中存储的是/bin 和/sbin 中二进制文件(应用程序)需要的库文件。在/usr/bin 下的应用程序依赖的库通常在/usr/lib 目录下面。
/Lost+Found – 可恢复的文件
每一个文件系统都有一个 lost+found 目录。如果文件系统崩溃,在系统下次启动的时候会进行数据检查。在检查的过程中如果发现有数据冲突的文件就会将其放入该目录中。这样,你就可以试着手动恢复该文件。
/Media – Removable Media
在目录/media 下面包含的子目录是一些可插拔设备的挂载点。当一些可插拔设备插入电脑时,在该目录下会自动创建子目录,并进行挂载。
/Mnt – 临时挂载点目录
该目录通常是空的。主要用于临时挂载一些外部文件系统。比如有多个数据磁盘的情况下,会将格式化的磁盘挂载到该目录下面。mnt 字符是 mount 的缩写,也就是挂载的意思。
/Opt – 自选软件包(Optional Packages)
自行安装的非常规软件通常会安装在该目录。
/Proc – Kernel & Process Files
该目录也是一个虚拟目录,也就是并不是存储文件数据的目录。这个目录中存储的文件通常是用来获取操作系统内核内部信息或者进程内部信息的。
图 8 proc 目录
比如每个进程在该目录下都有一个子目录,而字母的名字就是进程 ID。通过 cat 命令对该目录下的文件进行读取,可以获取进程的详细信息。例如我们进入目录/proc/258 下面,这个是进程 ID 为 258 的进程的信息,通过 ls 命令可以看到如下内容。
图 8 进程详细信息
/Root – Root 主目录
目录/root 是 root 用户的主目录。root 用户的主目录并不是在/home 下面,而是在根目录下面。这一点需要注意。
/Run – 应用程序状态文件
这个目录是比较新的目录,用于应用程序存储经常变化的文件,比如文件锁、进程 ID 或者套接字等等。
/Sbin – 系统管理二进制文件
该目录与/bin 目录类似,用于存储二进制文件。与/bin 目录不同的地方是这个目录存储的是用于系统管理的二进制文件,比如磁盘格式化(mkfs)、磁盘分区(fdisk)和网络配置(ifconfig)等命令。
图 9 系统命令
/Selinux – SELinux 虚拟文件系统
如果你的 Linux 发行版使用 SELinux 作为安全管理,那么该目录包含着 SELinux 使用的相关文件。
/Srv – 服务数据
该目录存储具体服务提供的数据。通常该目录是空的。这个目录中的数据通常是提供给外部的,比如 Web 网站存储的用户信息。这里需要注意与/var 和/tmp 的区别,前者是提供给外部用户的,而两者则是应用自己使用的,而且/tmp 中的数据重启后会丢失。
/Tmp – 临时文件
应用程序产生的临时数据通常存储在该目录中。该目录有一个特点,就是系统重启后目录中的数据将被清理。
/Usr – User Binaries & Read-Only Data
与系统使用的应用程序和文件不同,在/usr 目录下存储的是用户使用的应用程序的文件。比如/bin 下面存储的系统二进制文件,而/usr/bin 下面则是用户使用的二进制文件。/lib 下面存储的系统库文件,而/usr/lib 下面存储的是用于应用程序使用的库文件。
/Var – 变量数据文件
/var 目录是/usr 目录对应的可写目录,在/usr 目录中的内容只读的,而/var 则是可写的。日志文件和正常操作中的一些写入操作通常会写入/var 目录。例如,日志文件通常存储在/var/log 中。
好了,关于 Linux 目录的内容就介绍到这里,相信通过本次介绍,大家对 Linux 的目录和文件会有更加深刻和细致的了解,在以后的工作中也能更加合理的使用这些目录了。
其实通过了解和学习 Linux 目录结构,对 Linux 操作系统的运行机制理解也是很有帮助的,像明月这样的需要经常使用 Linux 的人来说,看完此篇文章真的是受益匪浅!