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
的结果。为方便阅读,调整了下文件顺序并做了分块和注释。
接下来,重点介绍在日常开发中会用到的目录,其余的查看上面的注释说明即可。
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
,会显示如下内容
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
,会显示如下内容
3. 相关阅读
Last updated