目录树
在Linux底下,所有的文件与目录都是由根目录开始的。那是所有目录与文件的源头, 然后再一个一个的分支下来,因此,我们也称这种目录配置方式为:目录树(directory tree)。目录树的启始点为根目录“/”
文件系统层次化标准(FHS,Filesystem Hierarchy Standard )
Filesystem Hierarchy Standard(文件系统层次化标准)的缩写,多数Linux版本采用这种文件组织形式,类似于Windows操作系统中c盘的文件目录,FHS采用树形结构组织文件。FHS定义了系统中每个区域的用途、所需要的最小构成的文件和目录,同时还给出了例外处理与矛盾处理。
FHS定义了两层规范,第一层是, / 下面的各个目录应该要放什么文件数据,例如/etc应该要放置设置文件,/bin与/sbin则应该要放置可执行文件等等。因为的开发人员实在太多了,如果每个人都使用自己的目录配置方法,那么将可能会带来很多管理问题。你能想象,你进入一个企业之后,所接触到的Linux目录配置方法竟然跟你以前学的完全不同吗?很难想象。所以,后来就有所谓的文件系统层次标准(Filesystem Hierarchy Standard,FHS)出台。
第二层则是针对/usr及/var这两个目录的子目录来定义。例如/var/log放置系统登录文件、/usr/share放置共享数据等等。
FHS官方文件:
根目录(/)
根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来的, 同时根目录也与开机/还原/系统修复等动作有关。 由于系统开机时需要特定的开机软件、核心文件、开机所需程序、 函式库等等文件数据,若系统出现错误时,根目录也必须要包含有能够修复文件系统的程序才行。 因为根目录是这么的重要,所以在FHS的要求方面,他希望根目录不要放在非常大的分区, 因为越大的分区内你会放入越多的数据,如此一来根目录所在分区就可能会有较多发生错误的机会。
因此FHS标准建议:根目录(/)所在分区应该越小越好, 且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好。 如此不但效能较佳,根目录所在的文件系统也较不容易发生问题。说白了,就是根目录和Windows的C盘一个样。
根据以上原因,FHS认为根目录(/)下应该包含如下子目录:
目录 | 应放置档案内容 |
---|---|
/bin | 基础命令的二进制文件。 主要有:cat,chmod, chown, date, mv, mkdir, cp, bash等等常用的指令。 |
/boot | 开机引导加载的静态文件。 包括Linux核心档案以及开机选单与开机所需设定档等等。Linux kernel常用的档名为:vmlinuz 。 |
/dev | 设备驱动文件。 只要通过存取这个目录下的某个档案,就等于存取某个装置。比要重要的档案有/dev/null, /dev/zero, /dev/tty , /dev/lp*, / dev/hd*, /dev/sd*等等 |
/etc | 系统主要的配置文件。 例如人员的帐号密码档、各种服务的启始档等等。 |
/home | 这是系统预设的使用者家目录(home directory)。 在你新增一个一般使用者帐号时,预设的使用者家目录都会规范到这里来。比较重要的是,家目录有两种代号: ~ :代表当前使用者的家目录,而 ~guest:则代表用户名为guest的家目录。 |
/lib | 基本共享函数库和内核模块。 系统和软件所使用的函数库将保存在这里,比如java的jdk、jvm等。 /lib/modules/很重要存放了内核所需的模块。 |
/media | 可移动多媒体设备挂载点。 包括软碟、光碟、DVD等等装置都暂时挂载于此。 |
/mnt | 临时外设挂载点。 |
/opt | 附加应用程序软件包。 |
/root | root用户家目录。 |
/sbin | 基础系统二进制文件。 常见的指令包括:fdisk, fsck, ifconfig, init, mkfs等等。 |
/srv | 系统提供的服务(service)。 常见的服务例如WWW, FTP等等。 |
/tmp | 临时目录。 |
另外要注意的是,因为根目录与开机有关,开机过程中仅有根目录会被挂载, 其他分区则是在开机完成之后才会持续的进行挂载的行为。就是因为如此,因此根目录下与开机过程有关的目录, 就不能够与根目录放到不同的分区去。/etc、/bin、/dev、/lib、/sbin这五个目录千万不可与根目录分开在不同的分区。
FHS未规定的常见目录
目录 | 应放置档案内容 |
---|---|
/lost+found | ext2/ext3档案系统发生错误时,将一些遗失的片段放置到这个目录下。 |
/proc | 虚拟文件系统,访问的是内存的内容。 |
/sys | 虚拟文件系统,访问的是核心相关信息。 |
软件目录(/usr)
/usr不是user的缩写,其实usr是Unix Software Resource的缩写, 也就是Unix操作系统软件资源所放置的目录。 FHS建议所有软件开发者,应该将他们的数据合理的分别放置到这个目录下的次目录,而不要自行建立该软件自己独立的目录。
因为是所有系统默认的软件都会放置到/usr底下,因此这个目录有点类似Windows 系统的C:\Program files\这个目录,系统刚安装完毕时这个目录会占用最多的硬盘容量。
目录 | 应放置文件内容 |
---|---|
/usr/bin/ | 大部分的用户命令。 |
/usr/include/ | c/c++等程序语言的头文件(header)与包含文件(include)放置处。 |
/usr/lib/ | 函数库 |
/usr/local/ | 本地程序主要安装目录。 我们自己安装的程序一般放在这里。 |
/usr/sbin/ | 系统非必要的二进制文件。 最常见的就是某些网络服务器软件的服务指令(daemon) |
/usr/share/ | 共享文件目录。 |
/usr/src/ | 一般原始码建议放置到这里,src有source的意思。 |
运行文件目录(/var)
如果/usr是安装时会占用较大硬盘容量的目录,那么/var就是在系统运作后才会渐渐占用硬盘容量的目录。 因为/var目录主要针对常态性变动的文件,包括缓存(cache)、登录档(log file)以及某些软件运作所产生的文件, 包括程序文件(lock file, run file),或者例如MySQL数据库的文件等等。常见的次目录有:
目录 | 应放置文件内容 |
---|---|
/var/cache/ | 应用程序缓存数据。 |
/var/lib/ | 程序执行中变化的状态信息。 |
/var/local/ | 本地/usr/local程序变化的数据。 |
/var/lock/ | 锁文件。 某些装置或者是文件资源一次只能被一个应用程序所使用,如果同时有两个程序使用该装置时, 就可能产生一些错误的状况,因此就得要将该装置上锁(lock),以确保该装置只会给单一软件所使用。 |
/var/log/ | 日志和目录。 |
/var/opt/ | 本地/opt程序变化的数据。 |
/var/run/ | 与运行过程相关的数据。 某些程序或者是服务启动后,会将他们的PID放置在这个目录下 |
/var/spool/ | 队列数据。 |
/var/tmp/ | 系统重启时保存的临时文件。 |
绝对路径与相对路径
绝对路径 | 由根目录(/)开始写起的文件名或目录名称, 例如 /home/dmtsai/.bashrc; |
---|---|
相对路径 | 相对于目前路径的文件名写法。 例如 ./home/dmtsai . :代表当前的目录,也可以使用 ./ 来表示; .. :代表上一层目录,也可以 ../ 来代表。 |