文件系统

在 Windows 中,文件分区以盘符的形式表示,如 「C盘」,「D盘」这样的说法,而Linux/Unix系列采用 “树状结构” 的挂载方式:

整个系统的文件都从 / 开始,像一棵树一样

10:43:25 with imicola in ~ is 📦 None
 tree -L 1 /
/
├── bin -> usr/bin
├── boot
├── dev
├── etc
├── home
├── init
├── lib -> usr/lib
├── lib64 -> usr/lib
├── lost+found
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin -> usr/bin
├── srv
├── sys
├── tmp
├── usr
└── var

其他的分区以挂载 (mount) 的形式「挂」在了这棵树上,比如 mnt/下就挂载了window的磁盘

/下常见文件作用

/bin

存储必须的程序文件,对所有用户都可用。有的发行版会将这个文件链接到 /user/bin 上实现更方便的管理

/boot

存储在启动系统时需要的文件

/dev

存储设备文件

[!什么是设备文件?]

在 Linux 的哲学中,存在着「一切皆文件」这样的思想。设备文件就是计算机设备抽象成文件的形式,程序和用户可以以读写普通文件的方式向这些文件输入内容,或者从文件中获取内容。系统驱动程序会相应处理用户对对应设备文件的输入和输出。

有一些常用的设备文件如:

  • /dev/null:总是返回空(EOF)数据。
  • /dev/zero:总是返回零数据。
  • /dev/urandom:输出随机数据。

/etc

存储系统和程序的配置文件。

/home

用户的家目录。存储用户自己的信息。

/lib

存放系统运行必须的程序库文件。

/media 和 /mnt

这两个目录都用于挂载其他的文件系统。/media 用于可移除的文件系统(如光盘),而 /mnt 用于临时使用。

/opt

存放额外的程序包。一般将一些大型的、商业的应用程序放置在这个目录。

/root

root 用户的家目录。

/run

系统运行时的数据。在每次启动时,里面的数据都会被删除。

/sbin

存储用于系统管理,以及仅允许 root 用户使用的程序。如 fsck(文件系统修复程序)、reboot(重启系统)、useradd(添加用户)等。

/srv

存储网络服务的数据。

/tmp

临时目录,所有用户都可使用。

/usr

大多数软件都会安装在此处。其下有一些目录与 / 下的结构相似,如:

  • /usr/bin
  • /usr/lib
  • /usr/sbin

此外,还有一些目录:

  • /usr/include: 存储系统通用的 C 头文件。当然,里面会有你非常熟悉的头文件,如 stdio.h
  • /usr/local: 存储系统管理员自己安装的程序,这些文件不受系统的软件管理机制(如 apt)控制。/usr/local 里面的层次结构和 /usr 相似。
  • /usr/share: 存储程序的数据文件(如 man 文档、GUI 程序使用的图片等)。

Usrmerge

近年来,部分发行版选择将 /usr/bin/usr/sbin/usr/lib 与根目录下的 /bin/sbin/lib 合并,根目录下的对应目录软链接到 /usr 下的目录,以简化文件结构。

Ubuntu 与 Debian 中可以安装 usrmerge 软件包来进行转换。

/var

存储会发生变化的程序相关文件。例如下面的目录:

  • /var/log:存储程序的日志文件。
  • /var/lib:存储程序自身的状态信息(如 lock file)。这个目录和 library 的关系并不大。
  • /var/run:存储程序运行时的数据(部分发行版会将该目录符号链接到 /run 目录)。
  • /var/spool:存储「等待进一步处理」的程序数据。