Linux 系统目录结构
介绍
如果想要了解 Linux,那么你首先需要知道大部分的目录是做什么的,具有什么含义。
为了方便管理和维护,Linux 采用了 FHS(Filesystem Hierarchy Standard) 标准(文件系统层次结构标准),它规定了根目录下各个目录应该存在哪些类型的文件(目录也是文件)。
FHS 认为,Linux 系统的根目录(/)最为重要,没有之一,原因:
- 所有目录都是由根目录衍生出来的;
- 根目录与系统的开机、修复和还原密切相关。
如果仅仅靠联想,其实还是难以理解其中含义,如果见过真正的小型机,很多概念就变得容易理解了。
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 Resource | 用于存储系统软件资源。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)。 | 通常被用于提供字符流来覆盖信息,或利用它生成一个特定大小的空白文件。 |