对于每一个Linux 学习者来说,了解 Linux 文件系统的目录结构,是学好Linux 的至关重要的一步,深入了解Linux 文件目录结构的标准和每个目录的详细功能,对于我们用好Linux 系统至关重要,下面我们就开始了解一下 Linux 目录结构的相关知识。
当在使用Linux 的时候,如果您通过 ls -l / 就会发现,在 / 下包涵很多的目录,比如 etc usr var bin 等目录,而在这些目录中,我们进去看看,发现也有很多的目录或文件。文件系统在 Linux 下看上去就像树形结构,所以我们可以把文件系统的结构形象的称为 树形结构。
文件系统是用来组织和排列文件存取的,所以它是可见的,在Linux 中,我们可以通过 ls 等工具来查看其结构,在Linux 系统中,我们见到的都是树形结构;比如操作系统安装在一个文件系统中,它表现为 由 / 起始的树形结构。Linux 文件系统的最顶端是 / , 我们称 / 为Linux 的root,也就是 Linux 操作系统的文件系统。Linux 的文件系统的 入口就是 /,所有的目录、文件、设备都在 / 之下,/ 就是 Linux 文件系统的组织者,也是最上级的领导者。
由于 Linux 是开发源代码,各大公司和团体根据 Linux 的核心代码做各自的操作,编程。这样就造成在根下的目录的不同。这样就造成个人不能使用他人的Linux 系统的PC。因为你根本不知道一些基本的配置,文件在哪里。这就造成了混乱。这就是FHS(Filesystem Hierarchy Standard)机构诞生的原因。该机构是Linux 爱好者自发的组成的一个团体,主要是对Linux 做一些基本的要求,不至于是操作者换一台主机就成了Linux 的文盲
根据FHS(http://www.pathname.com/fhs/)的官方文件指出,他们的主要目的是希望让使用者可以了解到已安装软件通常放置于哪个目录下,所以他们希望独立的软件开发商、操作系统制作者、以及想要维护系统的用户,都能够遵循FHS 的标准。也就是说, FHS 的重点在于规范每个特定的目录下应该要放置什么样子的数据而已。这样做好处非常多,因为Linux 操作系统就能够在既有的面貌下(目录架构不变)发展出开发者想要的独特风格。
事实上,FHS 是根据过去的惊艳一直在持续的改版的,FHS依据文件系统使用的频繁与否与是否允许使用者随意更动,而将目录定义成为四种交互作用的形态,用表格来说有点像底下这样:
可分享的(shareable) | 不可分享的(unshareable) | |
不变的(static) |
/usr(软件放置处) /opt(第三方协力软件) |
/etc (配置文件) /boot(开机与核心文档) |
可变动的(variable) |
/var/mail(使用者邮箱) /var/spool/news(新闻组) |
/var/run (程序相关) /var/lock (程序相关) |
四种类型:
1.可分享的:可以分享给其他系统挂在使用的目录,所以包含执行文件与用户的邮件等数据,是能够分享给网络上其他主机挂载的目录;
2.不可分享的:自己机器上面运作的装置文件或者是与程序有关的socket 文件等,由于仅与自身机器有关,所以当然就不适合分享给其他主机了。
3.不变的:有些数据是不会经常变动的,跟随着distribution 而不变动。例如函数库、文件说明文件、系统管理员所管理的主机服务配置文件等等;
4.可变动的:经常改变的数据,例如登录文件、一般用户可自行收受的新闻组等。
事实上,FHS针对目录树架构仅定义出三层目录底下应该放置什么数据而已,分别是底下这三个目录的定义:
/ (root,根目录) 与开机系统有关;
/usr (unix software resource) 与软件安装/执行有关
/var (variable) 与系统运作过程有关
一、根目录 的意义与内容。
根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来的,同时根目录与开机/还原/系统修复等动作有关。由于系统开始时需要特定的开机软件,核心文件,开机所需程序,函式库等等文件数据,若系统出现错误时,根目录也必须要包含有能够修复文件系统的过程才行。因为跟目录是这么的重要,所以在 FHS 的要求方面,他希望根目录不要放在非常大的分区,因为越大的分区内你会放入越多的数据,如此一来根目录所在分区就可能有较多发生错误的机会。
因此FHS 标准建议:根目录 / 所在分区应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好。如此不但效能较佳,根目录所在的文件系统也较不容易发生问题。说白了,就是根目录和Windows的C盘一个样。
根据以上原因,FHS认为根目录下应该包含以下目录:
目录 | 应放置档案内容 |
/bin |
系统有很多放置执行档的目录,但/bin比较特殊。以为/bin放置的是在单人维护模式下还能 够被操作的指令。在/bin底下的指令可以被root 与一般账号所使用, 主要有:cat.chmod,chown,date,mv,mkdir,cp,bash等常用指令。 |
/boot |
主要放置开机会使用到的档案,包括Linux 核心档案以及开机选项与开机所需设定档等等。 Linux kernel 常用的档案为:vmlinuz,如果使用的是 grub这个开机管理程序, 则还会存在/boot/grub这个目录 |
/dev |
在Linux 系统上,任何装置与周边设备都是以档案的形态存在与这个目录当中。 只要通过存取这个目录下的某个档案,就等于存取某个装置。比较重要的档案有: /dev/null, /dev/tty, /dev/lp* , /dev/hd* , /dev/sd* 等等 |
/etc |
系统主要的设定档几乎都放置在这个目录内,例如人员的账号密码,各种服务的起始文档。 一般来说这个目录下的各种档案属性是可以让一般使用者查询的,但是只有 root 有权利修改。 FHS建议不要放置可执行档(binary)在这个目录中。 比较重要的档案有:/etc/inittab, /etc/init.d/, /etc/modprobe.conf /etc/X11 /etc/fatab /etc/sysconfig 等等。 另外,其下重要的目录有:/etc/init.d 所有服务的预设启动script 都是放在这里的。 例如要启动或者关闭 iptables : /etc/init.d/iptables strat /etc/xinetd.d 这就是所谓的 super daemon 管理的各项服务的设定档目录 /etc/X11 与X Window 有关的各种设定档都在这里, 尤其是xorg.conf或XF86Config这两个X Server的设定档。 |
/home |
这是系统预设的使用者家目录。在你新增一个一般使用者账号时, 预设的使用者家目录都会规范到这里来。比较重要的是,家目录有两种代号: ~:代表当前使用者的家目录, ~guest: 则代表用户名为guest 的家目录 |
/lib |
系统的函式库非常的多,而/lib 放置的则是在开机时会用到的函式库,以及在 /bin或 /sbin 底下的指令会呼叫的函式库而已。什么事函式库?你可以将它想成是外挂,某些命令必须 要有这些外挂才能够顺利完成程式的执行之意。尤其重要的是 /lib/modules 这个目录, 因为该目录会放置核心相关的模组(驱动程序) |
/media |
media 是媒体的英文,这个/media 底下放置的就是可以移除的装置。包括 软碟、光碟、DVD等等装置,常见的档案命名:/media/floppy, /media/cdrom |
/mnt |
如果你有想要暂时挂载某些额外的装置,一般建议你可以放置到这个目录中。 在古早的时候,这个目录的用途与/media 相同。只是有了 /media 之后,这个 目录就被用来暂时挂载用了。 |
/opt |
这个是给第三方协议软件放置的目录。什么是第三方协软件?举例来说: KDE这个桌面管理系统是一个独立的计划,不过它可以安装到 Linux 系统中, 一次,KDE的软体就建议放置到此目录下了。另外,如果你想要自行安装额外的软件, 那么你也能够将你的软件安装到 /opt 目录下。或者还有人习惯放置在/usr/local目录下。 |
/root |
系统管理员(root)的家目录。之所以放在这里,是因为如果进入单人维护模式而仅 挂载根目录时,该目录就能够拥有root的家目录,所有我们会希望root 的家目录与根 目录放置在同一个分区中。 |
/sbin |
linux 有非常多指令是用来设定系统环境的,这些指令只有 root 才能够利用来设定系统, 其他使用者最多只能用来查询。放在/sbin 底下的,是开机过程中所需要的, 里面包括了开机、修复、还原系统所需要的指令。至于某些服务器软件程序,一般 则放置到/usr/sbin 当中。至于本机自行安装的软件所产生的系统执行文档, 则放置到/usr/local/sbin当中了、 常见的指令包括:fdisk fsck ifconfig init mkfs |
/srv |
srv 可以看做 service 的缩写,是一些网络服务启动之后,这些服务所需要取用的资料目录 常见的服务例如:WWW FTP等,举例来说,WWW服务器需要的网页资料就可以放置在 /srv/www里面 |
/tmp |
这是让一般使用者或者是正在执行的程序暂时放置档案的地方。这个目录是任何人都能存取的 所以需要定时的清理一下。当然,重要的资料不可放置在此目录。防止被误删除。 |
事实上,FHS 针对目录所定义的标准就仅限于上表,不过仍旧有些目录也需要我么了解一下。
目录 |
应放置文件内容 |
/lost+found |
这个目录是使用标准的ext2 /ext3档案格式才会产生的一个目录,目的在于档案系统发生错误时, 将一些遗失的片段放置到这个目录下。这个目录通常会分割到最顶层存在, 例如你加装一个硬盘于/disk 中,那在这个系统下就会自动产生一个这样的目录/disk/lost+found |
/proc |
这个目录本身是一个虚拟文件系统(virtual filesystem)。它放置的资料都是在内存当中, 例如系统核心、进程信息,外设的状态及网络状态。因为这个目录下的资料都是在内存当中, 所以本身不占任何硬盘空间。 比较重要的档案有:/proc/cpuinfo, /proc/dma, /proc/interrupts,/proc/ioports,/proc/net/* |
/sys |
这个目录其实跟/proc非常类似,也是一个虚拟的档案系统,主要也是记录与核心相关的内容。 包括目前已载入的核心模块与核心检测到的硬件等。这个目录同样不占硬盘容量。 |
除了这些目录的内容之外,另外要注意的是,因为根目录与开机有关,开机过程仅有根目录会被挂载,其他分区则是在开机完成之后才会持续的进行挂载的行为。
就是因为如此,因此根目录下与开机过程有关的目录,就不能够与根目录放到不同的分区去。那哪些目录不可与根目录分开呢?
/etc 配置文件
/bin 重要的执行文件
/dev 所需要的设备文件
/lib 执行文件所需的函式库与核心所需的模块
/sbin 重要的系统执行文件
今天这篇略显长,所有一分为二。不然一下看太多了记不住。