一、Linux目录配置标准:FHS
因为利用Linux来开发产品或distributions的社群/公司与个人实在太多了, 如果每个人都用自己的想法来配置档案放置的目录,那么将可能造成很多管理上的困扰。 所以,后来就有所谓的 Filesystem Hierarchy Standard (FHS)标准的出炉了!
FHS是根据过去的经验一直再持续的改版的,FHS依据文件系统使用的频繁与否与是否允许使用者随意变动,而将目录定义为四种交互作用的形态,用表格来说有点像底下这样:
可分享的(shareable) | 不可分享的(unshareable) | |
---|---|---|
不变的(static) | /usr(软件放置处) | /etc(配置文件) |
/opt(第三方协力软件) | /boot(开机与核心档) | |
可变的(variable) | /var/mail(使用者邮件信箱) | /var/run(程序相关) |
/var/spool/news(新闻组) | /var/lock(程序相关) |
我们首先要了解什么是那四个类型:
可分享的:可以分享给其他系统挂载使用的目彔,所以包括执行文件与用户的邮件等数据, 是 能够分享给网络上其他主机挂载用的目彔;
不可分享的:自己机器上面运作的装置档案或者是与程序有关的socket档案等, 由于仅与自身 机器有关,所以当然就不适合分享给其他主机了。
不变的:有些数据是不会经常变动的,跟随着distribution而不变动。 例如函式库、文件说明 文件、系统管理员所管理的主机服务配置文件等等;
可变动的:经常改变的数据,例如登录文件、一般用户可自行收受的新闻组等。
事实上,FHS针对目录树架构仅定义了以下三层目录:
1. /(root,根目录):与开机系统有关;
2. /usr(UNIX software resource):与软件安装/执行有关;
3. /var(variable):与系统运行过程有关。
根目录(/)的意义与内容
- 根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来的,同时根目录也与开机、还原、系统修复等操作有关,是非常得重要。
- 因此FHS标准建议:根目录(/)所在分区应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分割槽内,保持根目录越小越好。
鉴于以上的说明,FHS定义出根目录下的这些子目录:
目录 | 应放置文件内容 |
---|---|
/bin | 放置的是在单用户维护模式下还能够被操作的命令 |
/boot | 包括Linux内核文件和开机配置文件,Linux kernel常用文件名为 vmlinuz |
/dev | 任何设备与接口设备都是以文件的形式存放在这里 |
/etc | 系统的主要配置文件都放在这里,例如账号密码、服务起始文件等,FHS建议不要放置可执行文件(binary)在这个目录中 |
/home | 默认的用户家目录,新增的一般账号,都会放到这里来 |
/lib | 放置的是开机会用到的配置文件 |
/media | 放置的是可删除的设备,包括软盘、光盘等等 |
/mnt | 如果有暂时挂载某些额外的设备,可以放到这里来 |
/opt | 第三方软件放置的目录 |
/root | 系统管理员的主文件夹 |
/sbin | 放在这下面的为开机过程中需要的,里面包括了开机、修复、还原系统所需要的指令 |
/usr的意义与内容
- 依据FHS的基本定义,/usr里面放置的数据属于可分享的与不可变动的(shareable,static),可以分享给局域网内的其他主机来使用。
- 很多人都会误会/usr为user的缩写,起始usr是Unix Software Resource的缩写,也就是“UNIX操作系统软件资源”所放置的目录。
- 因为所以系统默认的软件(distribution发布者提供的)都会放置到/usr下面,因此比较类似“C:\Windows”和“C:\Program files”的综合体。
/var的意义与内容
- /var是在系统运行后才会渐渐占用硬盘容量的目录。因为/var主要针对常态性变动的文件,包括缓存(cache)、登录文件(log file)以及某些软件运作所产生的档案,包括程序档案(lock file,run file),或者MySQL数据库档案等。
针对FHS,各家distributions的异同
由于FHS仅是定义出最上层(/)及次层(/usr,/var)的目录内容应该要放置的档案或目录数据,因此,在其他次目录层级内,就可以随开发者自行配置了。所以只要记住大致的FHS标准,差异性其实有限!
二、目录树
在Linux底下,所有的档案与目录都是由根目录开始的!然后再一个个分支下去,有点像是树。因此我们也称这种目录配置方式为:目录树(directory tree),它的主要特性有:
- 目录树的起始点为根目录(/,root);
- 每一个目录不止能使用本地端的partition文件系统,也可以使用网络上的filesystem。举例来说,可以利用Network File System(NFS)服务器挂载某特定目录等。
- 每一个档案在此目录树中的文件名(包含完整路径)都是独一无二的。
我们可以通过以下命令来查询根目录下的情况:
上面特殊的就是这个/selinux目录,这个目录的内容数据也是在内存中的信息,同样的不会占用任何的硬盘容量。这个/selinux是 Secure Enhance Linux(SELinux)的执行目录,而SELinux是Linux核心的重要外挂功能之一,可以作为细部权限的控管,主要针对程序(尤其是网络程序)的访问权限来控制。
这个目录树的结构如下图所示:
CentOS的查看
有的时候你想知道你的distribution使用的是哪个Linux标准(Linux Standard Base),我们可以使用如下命令来查看:
[root@VM_174_157_centos ~]# uname -r
2.6.32-504.30.3.el6.x86_64 <==可以查看实际的内核版本
[root@VM_174_157_centos ~]# lsb_release -a
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch <==LSB版本
Distributor ID: CentOS
Description: CentOS release 6.6 (Final) <==distribution 版本
Release: 6.6
Codename: Final
不能使用lsb_release命令,提示找不到的,可以先执行yum -y install redhat-lsb
安装之后,就可以使用了。