WithCoderWithCoderWithCoder

Linux目录结构详解

对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的第一步.深入了解linux文件目录结构的标准和每个目录的详细功能,对于我们用好linux系统至关重要,下面我们就开始了解一下linux目录结构的相关知识.

当在使用Linux的时候,如果您通过ls –l / 就会发现,在/下包涵很多的目录,比如etc、usr、var、bin等目录.而在这些目录中,我们进去看看,发现也有很多的目录或文件.文件系统在Linux下看上去就像树形结构,所以我们可以把文件系统的结构形象的称为"树形结构".

文件系统是用来组织和排列文件存取的,所以它是可见的.在Linux中,我们可以通过ls等工具来查看其结构.在Linux系统中,我们见到的都是树形结构;比如操作系统安装在一个文件系统中,它表现为由/ 起始的树形结构.

linux文件系统的最顶端是/,我们称/为Linux的根.Linux的文件系统的入口就是/,所有的目录、文件、设备都在/之下,/就是Linux文件系统的组织者,也是最上级的领导者.

由于linux是开放源代码,各大公司和团体根据linux的核心代码做各自的操作、编程.这样就造成在根下的目录的不同.这样就造成个人不能使用他人的linux系统的PC.因为你根本不知道一些基本的配置文件在哪里,这就造成了混乱.这就是FHS(Filesystem Hierarchy Standard )机构诞生的原因.该机构是linux爱好者自发的组成的一个团体,主要是是对linux做一些基本的要求,不至于让操作者换一台主机就成了linux的"文盲".

1. 根目录 (/) 的意义与内容:

 根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来的,同时根目录也与开机/还原/系统修复等动作有关. 由于系统开机时需要特定的开机软件、核心文件、开机所需程序、函式库等等文件数据,若系统出现错误时,根目录也必须要包含有能够修复文件系统的程序才行. 因为根目录是这么的重要,所以在FHS的要求方面,他希望根目录不要放在非常大的分区, 因为越大的分区内你会放入越多的数据,如此一来根目录所在分区就可能会有较多发生错误的机会.

因此FHS标准建议:根目录(/)所在分区应该越小越好, 且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好. 如此不但效能较佳,根目录所在的文件系统也较不容易发生问题.说白了,就是根目录和Windows的C盘一个样.

根据以上原因,FHS认为根目录(/)下应该包含如下子目录:

/bin 

是Binary的缩写。Linux系统有很多放置指令的目录,但/bin比较特殊.因为/bin放置的是在单人维护模式下还能够被操作的指令.在/bin底下的指令可以被root与一般帐号所使用.主要有:cat,chmod(修改权限), chown, date, mv, mkdir, cp, bash等等常用的指令. 

/sbin

这个目录存放的是系统管理员使用的系统管理程序.s就是Super User的意思,这些指令只有root才能够利用来设定系统,其他用户最多只能用来查询.里面包括了开机、修复、还原系统所需要的指令.常见的指令包括:fdisk, fsck, ifconfig, init, mkfs等.

至于某些伺服器软体程式.一般则放置到/usr/sbin/当中.

至于本机自行安装的软体所产生的系统执行档(system binary),则放置到/usr/local/sbin/当中了.

/boot   

主要放置启动Linux时会使用到的核心文件,包括一些链接文件以及镜像文件.Linux kernel常用的文档为:vmlinuz .如果使用的是grub这个开机管理程序,则还会存在/boot/grub/这个目录. 

/etc   

Linux系统主要的配置文件几乎都放置在这个目录内.例如用户的帐号密码文件、各种服务的启动配置文件等. 一般来说,这个目录下的各个文件是可以让一般用户查阅的,但是只有root有权力修改. FHS建议不要放置可执行文件(binary)在这个目录中. 比较重要的文件有: /etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/等. 另外,其下重要的目录有: /etc/init.d/,所有服务的开机启动script都是放在这里的.

例如要启动或者关闭iptables的话: /etc/init.d/iptables start、/etc/init.d/ iptables stop

/etc/xinetd.d/ : 这就是所谓的super daemon管理的各项服务的配置文件

/root

系统管理员(root)的家目录. 之所以放在这里,是因为如果进入单人维护模式而仅挂载根目录时,该目录就能够拥有root的家目录,所以我们会希望root的家目录与根目录放置在同一个分区中.

/home   

这是Linux系统存放普通用户的家目录(home directory).在Linux系统中,每个用户都有一个自己的家目录.当新增一个一般用户帐号时,在此目录就会新增一个以用户的账号命名的目录.

比较重要的是,家目录有两种代号:

    ~ : 代表当前登录用户的家目录

    ~guest: 则代表用户名为guest的家目录

/lib

Linux系统的共享类库非常的多,而/lib放置的则是在开机时会用到最基本的动态链接共享库,以及在/bin或/sbin目录底下的命令会调用的类库.其作用有点类似Windows系统中的DLL文件. 尤其重要的是/lib/modules/这个目录,因为该目录会放置核心相关的模组(驱动库).几乎所有的应用程序都需要用到这些共享库.

/media   

media是媒体的英文,顾名思义,在/media目录下放置的就是可移除的设备.例如U盘、光驱等,当识别后,Linux会把识别的设备挂在到这个目录下.常见的文件有:/media/floppy, /media/cdrom等.

/dev

这个目录类似Windows的设备管理器.在Linux系统上,任何硬件与周边设备都是以文件的形态存在于这个目录当中. 只要通过存取这个目录下的某个文件,就等于存取某个设备.比要重要的文件有/dev/null, /dev/zero, /dev/tty , /dev/lp*, / dev/hd*, /dev/sd*等.

/mnt   

这个目录主要是为了让用户临时挂载别的文件系统的.例如我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里面的内容了.

/opt

这个是给主机额外安装第三方软件的目录.例如我们要安装MySQL,可以将MySQL的安装包放到该目录下.目录默认为空.

/srv

srv可以视为service的缩写.该目录存放一些服务启动之后需要去用的数据. 常见的服务例如WWW, FTP等.

/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非常类似,也是一个虚拟的文件系统.这是Linux2.6内核的一个很大的变化.该目录下安装了2.6内核中新出现的一个文件系统.  

除了这些目录的内容之外,另外要注意的是,因为根目录与开机有关,开机过程中仅有根目录会被挂载, 其他分区则是在开机完成之后才会持续的进行挂载的行为.因此根目录下与开机过程有关的目录, 就不能够与根目录放到不同的分区去.

那哪些目录不可与根目录分开呢?有底下这些:

/etc:配置文件

/bin:重要执行文件

/dev:所需要的设备文件

/lib:执行文件所需的共享库与核心所需的模块

/sbin:重要的系统执行文件

这五个目录不可与根目录分开在不同的分区。

2. /usr 的意义与内容:

依据FHS的基本定义,/usr里面放置的数据属于可分享的与不可变动的(shareable, static), 如果你知道如何透过网络进行分区的挂载(例如在服务器篇会谈到的NFS服务器),那么/usr确实可以分享给局域网络内的其他主机来使用.

/usr不是user的缩写,其实usr是Unix Software Resource的缩写, 也就是Unix操作系统软件资源所放置的目录.因为是所有系统默认的软件(distribution发布者提供的软件)都会放置到/usr底下,因此这个目录有点类似Windows 系统的C:\Windows\ + C:\Program files\这两个目录的综合体.系统刚安装完毕时,这个目录会占用最多的硬盘容量. 一般来说,/usr的次目录建议有底下这些:

/usr/X11R6/

为X Window System重要数据所放置的目录,之所以取名为X11R6是因为最后的X版本为第11版,且该版的第6次释出之意.

/usr/bin/ 

绝大部分的用户可使用命令都放在这里.请注意到他与/bin的不同之处.(是否与开机过程有关)

/usr/include/

c/c++等程序语言的文件头(header)与包含文件(include)放置处,当我们以tarball方式 (*.tar.gz 的方式安装软件)安装某些数据时,会使用到里头的许多包含文件. 

/usr/lib/   

包含各应用软件的类库、目标文件(object file),以及不被一般使用者惯用的执行文件或脚本(script). 某些软件会提供一些特殊的命令来进行服务器的设定,这些指令也不会经常被系统管理员操作, 那就会被摆放到这个目录下.要注意的是,如果你使用的是X86_64的Linux系统, 那可能会有/usr/lib64/目录产生

/usr/local/   

系统管理员在本机自行安装自己下载的软件(非distribution默认提供者),建议安装到此目录, 这样会比较便于管理.举例来说,你的distribution提供的软件较旧,你想安装较新的软件但又不想移除旧版, 此时你可以将新版软件安装于/usr/local/目录下,可与原先的旧版软件有分别. 你可以自行到/usr/local去看看,该目录下也是具有bin, etc, include, lib...的次目录

/usr/sbin/
非系统正常运作所需要的系统指令.最常见的就是某些网络服务器软件的服务命令(daemon)  

/usr/share/   

放置共享文件的地方,在这个目录下放置的数据几乎是不分硬件架构均可读取的数据.在此目录下常见的还有这些次目录:

/usr/share/man:联机帮助文件

/usr/share/doc:软件杂项的文件说明

/usr/share/zoneinfo:与时区有关的时区文件

/usr/src/   

一般原始代码建议放置到这里,src有source的意思.至于核心原始代码则建议放置到/usr/src/linux/目录下.

3. /var 的意义与内容:

如果/usr是安装时会占用较大硬盘容量的目录,那么/var就是在系统运作后才会渐渐占用硬盘容量的目录. 因为/var目录主要针对常态性变动的文件,包括缓存(cache)、登录档(log file)以及某些软件运作所产生的文件, 包括程序文件(lock file, run file),或者例如MySQL数据库的文件等等.常见的次目录有:

/var/cache/   

应用程序本身运作过程中会产生的一些暂存文件  

/var/lib/   

程序本身执行的过程中,需要使用到的数据文件放置的目录.在此目录下各自的软件应该要有各自的目录. 举例来说,MySQL的数据库放置到/var/lib/mysql/,而rpm的数据库则放到/var/lib/rpm去  

/var/lock/   

某些设备或者是文件资源一次只能被一个应用程序所使用,如果同时有两个程序使用该设备时,就可能产生一些错误的状况,因此就得要将该设备上锁(lock),以确保该设备只会给单一软件所使用. 

/var/log/   

非常重要.这是登录文件放置的目录.里面比较重要的文件如/var/log/messages, /var/log/wtmp(记录登录用户的信息)等.

/var/mail/

放置个人电子邮件信箱的目录,不过这个目录也被放置到/var/spool/mail/目录中,通常这两个目录是互为链接文件.

/var/run/  

某些程序或者是服务启动后,会将他们的PID放置在这个目录下

/var/spool/   

这个目录通常放置一些队列数据,所谓的"队列"就是排队等待其他程序使用的数据. 这些数据被使用后通常都会被删除.

举例来说,系统收到新信会放置到/var/spool/mail/中, 但使用者收下该信件后该封信原则上就会被删除.信件如果暂时寄不出去会被放到/var/spool/mqueue/中, 等到被送出后就被删除.如果是工作排程数据(crontab),就会被放置到/var/spool/cron/目录中.   

由于FHS仅是定义出最上层(/)及次层(/usr, /var)的目录内容应该要放置的文件或目录数据, 因此,在其他次目录层级内,就可以随开发者自行来配置了

欢迎分享交流,转载请注明出处:WithCoder » Linux目录结构详解