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
/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
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
/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