Linux 系统目录结构

介绍

如果想要了解 Linux,那么你首先需要知道大部分的目录是做什么的,具有什么含义。

为了方便管理和维护,Linux 采用了 FHS(Filesystem Hierarchy Standard) 标准open in new window(文件系统层次结构标准),它规定了根目录下各个目录应该存在哪些类型的文件(目录也是文件)。

FHS 认为,Linux 系统的根目录(/)最为重要,没有之一,原因:

  1. 所有目录都是由根目录衍生出来的;
  2. 根目录与系统的开机、修复和还原密切相关。

如果仅仅靠联想,其实还是难以理解其中含义,如果见过真正的小型机open in new window,很多概念就变得容易理解了。

FHS 规范目录

缩写全称说明
/bin/binary存放系统命令,普通用户和 root 都可以执行。目前 /bin/ 实际上是 /usr/bin/ 的软连接。
/boot/boot系统启动目录,保存与系统启动相关的文件,如内核文件和启动引导程序(grub)文件等。该目录挂载在 /dev/ 对应的第一块硬盘下,硬盘名根据硬盘类型来生成。安装系统时,需要为其单独分一个 boot 分区,大小可为 256~1024MB。
/dev/device设备文件保存位置。
/etc/etceteras(附加)二进制软件包(yum、rpm)等的配置文件路径,例如:/etc/exports/etc/fstab/etc/resove.conf 等。
/etc/opt//opt/ 的配置文件。
/etc/X11/X窗口系统(版本11)的配置文件。
/etc/sgml/SGML 的配置文件。
/etc/xml/XML 的配置文件。
/home/home普通用户的主目录(也称为家目录),用于用户的默认登录和保存数据。
/lib/library启动系统和运行命令所需的共享文件和内核模块存放目录。分为 /lib//lib64/(64位程序)
/media/media挂载目录。系统建议用来挂载媒体设备,如软盘和光盘。
/mnt/mount挂载目录。早期 Linux 中只有这一个挂载目录,并没有细分。系统建议这个目录用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区。
/opt/optional application software package第三方安装的软件保存位置。如果是作为一个真正的运维,那么该目录基本上废弃了,推荐安装到 /usr/local/ 下。在桌面端的 Linux 下还有一些应用会使用该目录。
/proc/processes虚拟文件系统。该目录中的数据并不保存在硬盘上,而是保存到内存中。主要保存系统的内核、进程、外部设备状态和网络状态等。
/root/root 用户的主目录。例如普通用户 shanyuhai 主目录为 /home/shanyuhai 下。
/sbin/system binary/sbin/ 的遭遇相对 /bin/ 好一些,一些系统先关的指令只有在 root 用户下可以访问。
/srv/service为系统提供服务数据目录。一些系统服务启动之后,可以在这个目录中保存所需要的数据。
/tmp/temp临时目录。所有用户都可以访问和写入。
/usr/Unix Software Resourceopen in new window用于存储系统软件资源。FHS 建议所有开发者,应把软件产品的数据合理的放置在 /usr 目录下的各子目录中,而不是为他们的产品创建单独的目录。
/usr/bin/存放系统命令,普通用户和超级用户都可以执行。
/usr/lib/应用程序调用的函数库保存位置。
/usr/sbin/存放根文件系统不必要的系统管理命令,如多数服务程序,只有 root 可以使用。
/usr/include/C/C++ 等编程语言头文件的放置目录。
/usr/share/应用程序的资源文件保存位置,如帮助文档、说明文档和字体目录。
/usr/src/源码包保存位置。下载的源码包和内核源码包都可以保存到这里。
/usr/X11R6/图形界面系统保存位置。
/usr/local/手工安装的软件保存位置。一般建议源码包软件安装在这个位置。
/var/variable data用于存储动态数据,例如缓存、日志文件、软件运行过程中产生的文件等。
/var/cache/应用程序缓存数据。这些数据是在本地生成的一个耗时的 I/O 或计算结果。应用程序必须能够再生或恢复数据。缓存的文件可以被删除而不导致数据丢失。
/var/lib/状态信息。程序运行中需要调用或改变的数据保存位置。
/var/lock/锁文件,一类跟踪当前使用中资源的文件。
/var/log/登陆文件放置的目录,其中所包含比较重要的文件如 /var/log/messages/var/log/wtmp 等。
/var/mail/用户的电子邮箱。
/var/run/自最后一次启动以来运行中的系统的信息,例如:当前登录的用户和运行中的守护进程。现已经被 /run 代替。
/var/spool/等待处理的任务的脱机文件,例如:打印队列和未读的邮件。
/var/spool/mail/用户的邮箱(不推荐的存储位置)。
/var/tmp/在系统重启过程中可以保留的临时文件。
/run/run代替 /var/run 目录。

非 FHS

缩写全称说明
/lost+found/lost + found当系统意外崩溃或意外关机时,产生的一些文件碎片会存放在这里。
/sys/system虚拟文件系统。与 /proc/ 目录类似(数据在内存中),主要用于保存与内核相关的信息,提供了比 /proc/ 更为理想的访问内核数据的途径。

硬件设备

Linux 中一切皆文件。硬件设备自然也是文件,有各自的文件名称。Linux 系统内核中的 udev 设备管理器会自动对硬件设备的名称进行规范,目的是让用户通过设备文件的名称,就可以猜测设备的属性及相关信息。udev 设备管理器会一直以进程的形式运行,并侦听系统内核发出的信号来管理位于 /dev 目录下的设备文件。

常见硬件设备文件名:

硬件设备文件名称
IDE设备/dev/hd[a-d],现在的 IDE设备已经很少见了,因此一般的硬盘设备会以 /dev/sd 开头。
SCSI/SATA/U盘/dev/sd[a-p],一台主机可以有多块硬盘,因此系统采用 a~p 代表 16 块不同的硬盘。
m.2 硬盘/dev/nvme1n1p[1-9]
软驱/dev/fd[0-1]
打印机/dev/lp[0-15]
光驱/dev/cdrom
鼠标/dev/mouse
磁带机/dev/st0 或 /dev/ht0

特殊设备文件:

文件名说明作用
/dev/null它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一个 EOF。通常被用于丢弃不需要的输出流,或作为输入流的空文件。
/dev/zero当你读它的时候,他会提供无限的空字符串(NULL,0x00)。通常被用于提供字符流来覆盖信息,或利用它生成一个特定大小的空白文件。