1.2 目录结构

Linux 的文件是怎么放的

在实践 Linux 的文件权限管理之前,我们需要首先了解下 Linux 的文件是怎么放的,因为只有这样才能给特定的文件分配恰当的权限。

1. 文件分类

1.1 是否可共享

种类
说明

Shareable files,可共享文件

可以在本机和远程主机访问的文件

比如可执行文件、资源服务

Unsharable files,不可共享文件

只能在本机访问的文件

比如设备文件、与程序相关的套接字文件

1.2 是否可更改

种类
说明

Variable files,可变文件

可以随时更改的文件

比如文档、日志、订阅

Static files,静态文件

如果没有系统管理员的操作是不会被更改的文件

比如二进制文件、函数库

之所以用这两个维度来对文件进行分类,是想把文件的功能和它所在的目录权限关联起来。

给定一个文件,操作系统及其用户和它的交互方式,就决定了该文件应该放在哪个目录里、该目录的权限是 r-- 还是 rw- 还是 rwx,以及每个用户对该文件的访问级别。当然,文件的父级目录们也很关键,因为一旦上级目录的权限不对,就有可能限制底层目录的访问,或者出现潜在的安全问题。

2. 根目录

在 Linux 中,所有的文件和目录都是从根目录开始的(/, root),即使它们存储在不同的物理或虚拟设备上。根目录也和操作系统的启动、还原、修复等操作有关,因为那儿存放着系统启动所需要的特定的软件、内核文件、函数库等文件数据,以及能够修复文件系统的程序。

root 在 Linux 里的意义很多

  • 站在账号的角度,root 指的是系统管理员的身份

  • 站在目录的角度,root 指的是根目录 /

关于文件应该怎么放有一套标准,即 FHS(Filesystem Hierarchy Standard,文件系统层次结构标准),它主要供 Unix 开发人员、软件包开发人员和系统实现人员使用。而作为 Linux 系统的使用者,我们主要了解下它主要有哪些目录以及存放什么样的数据。

下面是在阿里云的根目录下执行 ls -l 的结果。为方便阅读,调整了下文件顺序并做了分块和注释。

## 主要放置启动(boot)会用到的文件,包括 Linux 内核文件、启动选项及相关配置文件等
dr-xr-xr-x.   5 root root  4096 Dec 18  2018 boot  # 系统启动

## 早期的5个重要文件,被要求必须和根目录放一起
drwxr-xr-x.  92 root root 12288 Dec 24 19:22 etc
drwxr-xr-x   20 root root  3100 Dec 24 16:40 dev
lrwxrwxrwx    1 root root     7 Dec 18  2018 bin -> usr/bin
lrwxrwxrwx    1 root root     8 Dec 18  2018 sbin -> usr/sbin
lrwxrwxrwx    1 root root     7 Dec 18  2018 lib -> usr/lib
lrwxrwxrwx    1 root root     9 Dec 18  2018 lib64 -> usr/lib64

## 数据目录
drwxr-xr-x.   2 root root  4096 Apr 11  2018 srv
drwxrwxrwt.  11 root root  4096 Dec 27 03:15 tmp

## 家目录
dr-xr-x---.  14 root root  4096 Dec 24 19:22 root
drwxr-xr-x.   4 root root  4096 Dec 24 21:45 home

## 重点介绍
drwxr-xr-x.  13 root root  4096 Dec 18  2018 usr
drwxr-xr-x.  20 root root  4096 Dec 18  2018 var

## ============
# 两个外挂设备:软盘/光盘/DVD, 暂时挂载的设备
drwxr-xr-x.   2 root root  4096 Apr 11  2018 media
drwxr-xr-x.   2 root root  4096 Apr 11  2018 mnt
# 第三方辅助软件
drwxr-xr-x.   7 root root  4096 Jun 27  2019 opt

# 运行时的变量数据
drwxr-xr-x   26 root root   800 Dec 24  2020 run  # 运行时的变量数据
# 两个虚拟文件系统,存的数据都在内存中,不占硬盘空间
dr-xr-xr-x  137 root root     0 Apr 11  2018 proc # 虚拟文件系统
dr-xr-xr-x   13 root root     0 Apr 11  2018 sys  # 虚拟文件系统
# 当文件系统发生错误时,存放一些遗失的片段
drwx------.   2 root root 16384 Oct 15  2017 lost+found

接下来,重点介绍在日常开发中会用到的目录,其余的查看上面的注释说明即可。

2.1 五个重要目录

早期的五个重要文件,被要求必须和根目录放一起。

重要目录
应放置的文件内容

/etc

系统主要的配置文件几乎都放在这个目录里。比如

  • /etc/modprobe.d/

  • /etc/passwd 账号密码

  • /etc/fstab

  • /etc/issue

  • /etc/opt/

一般用户可以查看此目录下的各文件属性,但只有 root 用户有权限修改。 FHS 建议不要在这个目录中放置可执行文件。

/dev

任何设备都是以文件的形式存在于这个目录中的, 读写里面的文件就等于读写某个设备

/bin

放置的是在单人维护模式下还能被使用的命令,可以被 root 和一般账号使用 比如 ls, cat, chmod, su, cp

/sbin

系统执行文件 (system binary)

/lib /lib64

函数库 格式不同的二进制函数库

关于命令,常见的三个位置:

/bin
/sbin

/bin

/usr/bin/ /usr/local/bin/

/sbin/

/usr/sbin/ /usr/local/sbin/

系统启动过程中所需要的命令

某些服务器软件程序

本机自行安装软件所产生的系统执行文件

2.2 数据目录

数据目录
应放置的文件内容

/srv

service,比如 WWW, FTP 网络服务启动后所需要使用的数据目录 比如 /srv/www/

/tmp

暂时存放文件的地方 此目录任何人都能存取,故需定期清理 FHS 甚至建议在启动时应删除此目录下的数据

2.3 家目录

家目录
应放置的文件内容

home

系统默认的用户家目录 (home directory) 新增的一般用户账号,都会在这里建个对应的文件夹

root

系统管理员 (root) 的家目录 放这里是考虑到如果进入单人维护模式且仅挂载了根目录, 此目录就能成为 root 的家目录

2.4 /usr

usr,Unix Software Resource,Unix 操作系统软件资源

根据 FHS 的基本定义,/usr 里放置的数据属于可分享的静态数据。usr/ 可以分享给局域网络内的其他主机来使用。

FHS 建议所有的软件开发者,应该将他们的数据合理地放置在 usr/ 的子目录里,而不是自行建立该软件独立的目录。

目录
应放置的文件内容

/usr/bin/

一般用户都能使用的全部命令 FHS 要求此目录下不应该有子目录

/usr/sbin/

非系统正常运行所需要的系统命令

最常见的就是某些网络服务软件的服务命令 基本功能和 /sbin 差不多,目前是符号链接到此目录

/usr/lib/

基本上和 /lib 的功能相同,目前是符号链接到此目录

/usr/local/

系统管理员在本机安装自己下载的软件 该目录下也是有 etc, bin, lib, include 等子目录

/usr/share/

主要放置只读的数据文件。此目录下常见的子目录有:

  • /usr/share/man/ 在线帮助文件

  • /usr/share/doc/ 软件的说明文档

  • /usr/share/zoneinfo/ 和时区相关的时区文件

其它:

  • /usr/src/ 放源代码

  • /usr/include/ 程序语言的 header 文件和 include 文件

  • /usr/games/ 和游戏相关的数据

  • /usr/lib64/

  • /usr/libexec/ 某些不被一般用户常用的执行文件或者脚本

eg. 在阿里云上,运行命令ls -lhF /usr,会显示如下内容

drwxr-xr-x.   2 root root 4.0K Apr 11  2018 etc/

## FHS 要求必须存在的5个目录
dr-xr-xr-x.   2 root root  24K Dec 24 21:22 bin/
dr-xr-xr-x.   2 root root  20K Nov 30 21:32 sbin/
dr-xr-xr-x.  33 root root 4.0K Jun 27  2019 lib/

drwxr-xr-x.  14 root root 4.0K Apr 11  2018 local/
drwxr-xr-x. 101 root root 4.0K Jun 27  2019 share/

## FHS 建议可以存在的目录
drwxr-xr-x.   8 root root 4.0K Jan 18  2019 src/
drwxr-xr-x.  43 root root 4.0K Dec 18  2018 include/
drwxr-xr-x.   2 root root 4.0K Apr 11  2018 games/

dr-xr-xr-x.  45 root root  36K Jun 27  2019 lib64/
drwxr-xr-x.  25 root root 4.0K Dec 18  2018 libexec/

## 其它
lrwxrwxrwx    1 root root   10 Dec 18  2018 tmp -> ../var/tmp/

FHS 建议:即使 /usr 挂载为只读,系统还是可以正常运行的。

2.5 /var

如果说 /usr 是安装时会占用较大硬盘容量的目录,那么 /var 就是在系统运行后才会渐渐占用硬盘容量的目录。

/var 目录主要针对经常性变动的文件,比如缓存、日志、以及某些软件运行过程中所产生的文件。

目录
应放置的文件内容

/var/log/

非常重要 这是日志文件存放的目录

/var/run/

某些程序或者服务启动之后, 会将它们的 PID 放置在此目录下

/var/lock/

当要给某些设备或者文件资源上锁时

/var/cache/

应用程序本身运行过程中产生的一些缓存

/var/lib/

程序本身在执行过程中需要用到的数据文件

/var/spool/

通常放一些队列数据, 即排队等待其它程序使用的数据 这些数据被使用完后通常都会被删除

/var/mail/

放置个人电子邮箱的目录

eg. 在阿里云上,运行命令ls -lahF /var,会显示如下内容

drwxr-xr-x. 20 root root 4.0K Dec 18  2018 ./
dr-xr-xr-x. 19 root root 4.0K Oct  9 18:38 ../

## FHS 要求必须存在的目录
drwxr-xr-x.  7 root root 4.0K Dec 18  2018 cache/
drwxr-xr-x. 15 root root 4.0K Dec 26 03:14 log/
drwxr-xr-x. 36 root root 4.0K Jan 18  2019 lib/
drwxr-xr-x.  9 root root 4.0K Apr 11  2018 spool/
lrwxrwxrwx.  1 root root   11 Oct 15  2017 lock -> ../run/lock/
lrwxrwxrwx   1 root root   10 Dec 18  2018 mail -> spool/mail/
lrwxrwxrwx.  1 root root    6 Oct 15  2017 run -> ../run/

## 其它
drwxr-xr-x.  2 root root 4.0K Apr 11  2018 adm/
drwxr-xr-x.  2 root root 4.0K Nov  5  2018 crash/
drwxr-xr-x.  4 root root 4.0K Apr 11  2018 db/
drwxr-xr-x.  3 root root 4.0K Apr 11  2018 empty/
drwxr-xr-x.  2 root root 4.0K Apr 11  2018 games/
drwxr-xr-x.  2 root root 4.0K Apr 11  2018 gopher/
drwxr-xr-x.  3 root root 4.0K Nov  3  2018 kerberos/
drwxr-xr-x.  2 root root 4.0K Apr 11  2018 local/
drwxr-xr-x.  2 root root 4.0K Apr 11  2018 nis/
drwxr-xr-x.  2 root root 4.0K Apr 11  2018 opt/
drwxr-xr-x.  2 root root 4.0K Apr 11  2018 preserve/
drwxrwxrwt.  4 root root 4.0K Dec 23  2020 tmp/
drwxr-xr-x   5 root root 4.0K Apr 24  2019 www/
drwxr-xr-x.  2 root root 4.0K Apr 11  2018 yp/
-rw-r--r--   1 root root  163 Oct 15  2017 .updated

3. 相关阅读

Last updated