一、Linux目录设置的依据-FHS
FHS指Filesystem Hierarchy Standard。根据FHS的标准文件, 他们的主要目的是希望让使用者可以了解到已安装的软件通常放置于哪个目录下,所以他们希望独立的软件开发商,操作系统开发者都能够遵循FHS标准。也就是说FHS的重点在于规定每个特定的目录下应该要放置什么样的资料。
FHS并不是一成不变的,它在根据过去的经验一再持续的改版,FHS依据文件系统使用的类型与是否允许使用者随意变动,将目录定义为四种交互作用的形态,用表格来表示如下:
可分享的(shareable) | 不可分享的(unshareable) | |
不变的(static) | /usr(软件放置处) | /etc(设定文件) |
/opt(第三方软件) | /boot(核心文档) | |
可变的(variable) | /var/mail(使用者邮件信箱) | /var/run(程序相关) |
/var/spool/news(新闻群组) | /var/lock(程序相关) |
上表中的目录就是一些代表性的目录,该目录下放置的具体文件先略过不谈,首先我们要了解,这四种类型都代表什么:
- 可分享的:可以分享给其他系统挂载使用的目录,包括执行文件与使用者的邮件等资料,是能够分享给网络上其他主机挂载用的目标
- 不可分享的:自己机器上面运作的设备文件或者是与程序有关的socket文件等,由于仅与自身机器有关,所以不适合分享给其他主机
- 不变的:有些资料是不会经常变动的,跟随着distribution而不变动。例如函数库、文件说明、系统管理员所管理的主机服务文件等
- 可变动的:经常改变的资料,例如登陆文件,一般用户可自行收受的新闻群组等
事实上,FHS针对目录树结构仅定义出三层目录下应该放置什么文件,分别是这三种目录的定义:
- /(root,根目录):与开机系统有关
- /usr(unix software resource):与软件安装/执行有关
- /var(variable):与系统运作过程有关
每层目录下应该要放置的目录也有特定的规定,如下:
1.1 根目录
根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来的,同时根目录也与开机/还原/系统修复等动作有关。由于系统开机时需要特定的开机软件、核心文件、开机程序、函数库等文件,如果系统出现错误,根目录也必须要包含有能够修复档案系统的程序才行。因为根目录的重要性,所以在FHS的要求方面,FHS希望根目录不要放在很大的分割槽内,因为越大的分割槽会导致我们放入更多的资料,如此一来根目录所在的分割槽就可能发生较多错误。
因此FHS标准建议:根目录(/)所在分割槽越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分割槽内,保持根目录越小越好。如此不但性能较好,根目录所在的文件系统也不容易发生问题。
FHS定义根目录下应有下面这些目录的存在,即使没有实体目录,FHS也希望至少有一个连接文件存在:
目录 | 应放置文件内容 |
第一部分:FHS要求必须存在的目录 | |
/bin | 系统由很多放置执行文件的目录,但/bin比较特殊。因为/bin放置的是在单人维护模式下还能够被操作的指令。在/bin底下的指令可以被root与一般账号所使用,主要有:cat、chmod、chown、date、mv、mkdir、cp、bash等等常用的指令 |
/boot | 这个目录主要放置开机会使用到的文件,包括Linux核心文件以及开机与关机所需的设定文件等等。Linux kernel常用的文件名为:vmlinuz,如果使用grub2这个开机管理进程,那么还会存在于/boot/grub2/这个目录 |
/dev | 在Linux系统中,任何设备都是以文件的形式存在于目录中的。我们只需要通过存取这个目录下的某个文件,就等于存取某个设备 |
/etc | 系统主要的设定文件几乎都放置在这个目录内,例如人员的账号密码文件、各种服务的开启文件。一般来说,这个目录下的各个文件属性是可以让一般的使用者查阅的,但是只有root有权限进行修改。FHS建议不要在这个目录中存放可执行文件,FHS还规定几个重要的的目录最好放在这个目录下:
|
/lib | 系统的函数库非常多,而/lib放置的是在开机时会用到的函数库,以及在/bin或/sbin底下的指令会呼叫的函数库。FHS要求这个目录下还必须存在这样的目录:
|
/media | 这个目录下放置的是可移除的设备。包括软盘、光碟、DVD等设备都暂时在这里挂载 |
/mnt | 早期这个目录与media的用途相同,有了/media后,这个目录用来暂时挂载 |
/opt | 这是给第三方软件放置的目录。举例来说,KDE这个桌面管理系统是一个独立的部件,但是可以被安装到Linux系统中,因此KDE的软件就建议放在这个目录下。 |
/run | 早期的FHS规定系统开机后产生的各种信息都应该放置到/var/run下,新版的FHS则规范到/run下 |
/sbin | Linux有非常多的指令是用来设定系统环境的,这些指令只有root才能够利用来设定系统,其他使用者最多只能用来查询。放在/sbin下面的是开机过程中最需要的,里面包括了开机、修复、还原系统所需要的指令。至于某些服务器的软件程序,一般放到/usr/sbin当中。至于本机自行安装的软件所产生的系统执行文件(system binary),则放置到/usr/local/sbin当中了。 |
/srv | srv可视为service的缩写,是一些网络服务器启动后,这些服务所需要取用的资料目录。常见的服务如WWW,FTP等。举例来说,WWW服务器需要的网页资料就可以放置到/srv/www/里面。不过,系统的服务资料如果尚未要提供个网络任何人浏览的话,预设还是建议放到/var/lib下面 |
/tmp | 这是让一般使用者或是正在执行的程序暂时放置文件的地方。这个目录是任何人都能够存取的,所以我们需要定期清理它。当然,重要资料不可以放置到此目录。因为FHS深圳建议在开机时,应该要将/tmp下的资料都删除 |
/usr | 第二层FHS设定,后续介绍 |
/var | 第二层FHS设定,后续介绍 |
目录 | 应放置文件内容 |
第二部分:FHS建议可以存在的目录 | |
/etc | 这是系统预设的使用者家目录。在我们新增一个一般使用者账号时,预设的使用者家目录都会规范到这里来。比较重要的是,家目录有两种代号:
|
/root | 系统管理员(root)的家目录。之所以放在这里,是因为如果进入单人维护模式而仅挂载根目录时,该目录就能够拥有root的家目录,所以我们会希望root的家目录与根目录放置在同一个分割槽中 |
FHS针对根目录所定义的标准如上所示,我们的Linux下还有许多目录我们也需要了解,下面的是几个在Linux中十分重要的目录:
目录 | 应放置文件内容 |
/lost+found | 这个目录是使用标准的ext2/ext3/ext4文件系统格式才会产生的一个目标,目的在于当关于文件系统发生错误时,将一些遗失的片段放置到这个目录下。不过如果使用的是xfs文件系统的话,就不会存在这个目录了 |
/proc | 这个目录本身是一个虚拟文件系统(virtual filesystem)。这里所放置的文件都在内存中,例如系统核心、进程信息、外设的状态以及网络状态等。因为这个目录下的文件都在内存中,所以不占用任何硬盘空间。 |
/sys | 这个目录其实和/proc非常类似,也是一种虚拟文件系统,主要也是记录核心与系统硬件信息相关的信息。包括目前已载入的核心模块与核心检测到的硬件装置信息等。这个目录同样不占用硬盘容量 |
接下来介绍下/usr和/var,先看下/usr里面有什么:
1.2 /usr的意义与内容
二、目录树
在Linux中,根目录是所有文件和目录的源头,然后再一个一个的分支下来,有点像一个树的形状,因此我们也称这种目录配置方式为目录树。目录树的特性有:
- 目录树的启动点为根目录(/,root)
- 每一个目录不仅能使用本地端的partition的文件系统,也可以使用网络上的文件系统。举例来说,可以利用NFS(Network File System)服务器挂载某个特定的目标
- 每一个文件在此目录树中的文件名(完整路径)都是独一无二的
三、绝对路径和相对路径
这两种路径的写法依据是这样的:
- 绝对路径:由根目录(/)开始写起的文件名或目录名称,例如
/home/dmtsai/.bashrc
- 相对路径:相对于目前路径的文件名写法,例如:
./home/dmtsai
或../../home/dmtsai/
等等,简要来说,就是开头不是/
就属于相对路径的写法
对于相对,我们需要了解的一点是:相对路径是以我们当前所在路径的相对位置来表示的。举例来说,假如我们目前在/home这个目录下,如果想要进入/var/log这个目录,可以怎么写呢?
- cd /var/log:绝对路径
- cd …/var/log:相对路径