自己机器里面运作的装置文件或则是与程序有关的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/zero, /dev/tty , /dev/lp*, / dev/hd*, /dev/sd*等等
/etc
系统主要的设定档几乎都放置在这个目录内,比如人员的账号密码档、各种服务的启始档等等。 通常来说,这个目录下的各档案属性是可以让通常使用者查阅的,并且只有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管理的各项服务的设定档目录。
/etc/X11/ :与X Window有关的各类设定档都在这儿,尤其是xorg.conf或XF86Config这两个X Server的设定档。
/home
这是系统预设的使用者家目录(home directory)。 在你新增一个通常使用者账号时,预设的使用者家目录还会规范到这儿来。比较重要的是,家目录有两种代号:
~ :代表当前使用者的家目录,而 ~guest:则代表用户名为guest的家目录。
/lib
系统的函式库特别的多,而/lib放置的则是在开机时会用到的函式库,以及在/bin或/sbin下边的指令会呼叫的函式库而已 。 哪些是函式库呢?妳可以将他想成是外挂,个别指令必需要有这种外挂才才能顺利完成程式的执行之意。 尤其重要的是/lib/modules/这个目录,由于该目录会放置核心相关的模组(驱动程式)。
/media
media是媒体的中文,顾名思义,这个/media下边放置的就是可移除的装置。 包括软碟、光碟、DVD等等装置都暂时挂载于此。 常见的档名有:/media/floppy, /media/cdrom等等。
/mnt
假如妳想要暂时挂载个别额外的装置,通常建议妳可以放置到这个目录中。在古早时侯,这个目录的用途与/media相同啦。 只是有了/media以后,这个目录就拿来暂时挂载用了。
/opt
这个是给第三方协力软体放置的目录 。 哪些是第三方协力软体啊?举例来说,KDE这个桌面管理系统是一个独立的计画,不过他可以安装到Linux系统中,因而KDE的软体就建议放置到此目录下了。 另外,假如妳想要自行安装额外的软体(非原先的distribution提供的),这么也就能将你的软体安装到这儿来。 不过,原先的Linux系统中,我们还是习惯放置在/usr/local目录下。
/root
系统管理员(root)的家目录。 之所以置于这儿,是由于假如步入双人维护模式而仅挂载根目录时,该目录就才能拥有root的家目录,所以我们会希望root的家目录与根目录放置在同一个分区中。
/sbin
Linux有特别多指令是拿来设定系统环境的,这种指令只有root才才能利拿来设定系统,其他使用者最多只能拿来查询而已。置于/sbin下边的为开机过程中所须要的,上面包括了开机、修复、还原系统所须要的指令。至于个别伺服器软体程式,通常则放置到/usr/sbin/当中。至于本机自行安装的软体所形成的系统执行档(system binary),则放置到/usr/local/sbin/当中了。常见的指令包括:fdisk, fsck, ifconfig, init, mkfs等等。
/srv
srv可以视为service的简写,是一些网络服务启动以后,这种服务所须要取用的资料目录。 常见的服务比如WWW, FTP等等。 举例来说,WWW伺服器须要的网页资料就可以放置在/srv/www/上面。呵呵,看来平常我们编撰的代码应当放在这儿了。
/tmp
这是让通常使用者或则是正在执行的程序暂时放置档案的地方。这个目录是任何人都还能存取的,所以你须要定期的清除一下。其实,重要资料不可放置在此目录啊。 由于FHS甚至建议在开机时,应当要将/tmp下的资料都删掉。
事实上FHS针对根目录所定义的标准就仅限于上表,不过仍然有些目录也须要我们了解一下,具体如下:
目录
应放置文件内容
/lost+found
这个目录是使用标准的ext2/ext3档案系统格式才能形成的一个目录,目的在于当档案系统发生错误时,将一些丢失的片断放置到这个目录下。 这个目录一般会在分割槽的最顶楼存在,比如你改装一个硬碟于/disk中,那在这个系统下才会手动形成一个这样的目录/disk/lost+found
/proc
这个目录本身是一个虚拟文件系统(virtual filesystem)喔。 他放置的资料都是在显存当中,比如系统核心、行程资讯(process)(是进程吗?)、周边装置的状态及网路状态等等。由于这个目录下的资料都是在记忆体(显存)当中,所以本身不占任何硬碟空间。比较重要的档案(目录)诸如: /proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net/*等等。呵呵,是虚拟显存吗?
/sys
这个目录或许跟/proc十分类似,也是一个虚拟的档案系统,主要也是记录与核心相关的资讯。 包括目前已载入的核心模组与核心探测到的硬体装置资讯等等。 这个目录同样不占硬碟容量。
不仅这种目录的内容之外,另外要注意的是,由于根目录与开机有关,开机过程中仅有根目录会被挂载, 其他分区则是在开机完成以后就会持续的进行挂载的行为。就是由于这般,因而根目录下与开机过程有关的目录, 就不能否与根目录放在不同的分区去。那什么目录不可与根目录分开呢?有下边这种:
/etc:配置文件
/bin:重要执行档
/dev:所须要的装置文件
/lib:执行档所需的函式库与核心所需的模块
/sbin:重要的系统执行文件
这五个目录千万不可与根目录分开在不同的分区。请背出来啊。
二. /usr 的意义与内容:
根据FHS的基本定义,/usr上面放置的数据属于可分享的与不可变动的(shareable, static), 假如你晓得怎样透过网路进行分区的挂载(比如在服务器篇会提到的NFS服务器),这么/usr确实可以分享给局域网路内的其他主机来使用喔。
/usr不是user的简写,虽然usr是Unix Software Resource的简写, 也就是Unix操作系统软件资源所放置的目录,而不是用户的数据啦。这点要注意。 FHS建议所有软件开发者,应当将她们的数据合理的分别放置到这个目录下的次目录,而不要自行构建该软件自己独立的目录。
由于是所有系统默认的软件(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提供的软件较旧,你想安装较新的软件但又不想移除旧版linux系统目录结构linux系统目录结构, 此时你可以将新版软件安装于/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/目录下。
三. /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)的目录内容应当要放置的文件或目录数据, 为此,在其他次目录层级内,就可以随开发者自行来配置了。
四. 目录树(directory tree) :
在Linux里边,所有的文件与目录都是由根目录开始的。那是所有目录与文件的源头, 之后再一个一个的分支出来,为此,我们称作这些目录配置方法为:目录树(directory tree), 这个目录树的主要特点有:
目录树的启始点为根目录 (/, root);
每一个目录不止能使用本地端的 partition 的文件系统红旗linux操作系统,也可以使用网路上的 filesystem 。举例来说, 可以借助 Network File System (NFS) 服务器挂载某特定目录等。
每一个文件在此目录树中的文件名(包含完整路径)都是独一无二的。
假如我们将整个目录树以图的方式来显示,而且将较为重要的文件数据列下来的话,这么目录树构架就如右图所示:
五. 绝对路径与相对路径
不仅须要非常注意的FHS目录配置外,在文件名部份我们也要非常注意。由于按照档名写法的不同,也可将所谓的路径(path)定义为绝对路径(absolute)与相对路径(relative)。 这两种文件名/路径的写法根据是这样的:
绝对路径:
由根目录(/)开始写起的文件名或目录名称, 比如 /home/dmtsai/.bashrc;
相对路径:
相对于目前路径的文件名写法。 比如 ./home/dmtsai 或 等等。总之开头不是 / 就属于相对路径的写法
而你必需要了解,相对路径是以你当前所在路径的相对位置来表示的。举例来说,你目前在 /home 这个目录下小型linux系统, 假如想要步入 /var/log 这个目录时,可以如何写呢?
cd/var/log(absolute)
cd../var/log(relative)
由于你在 /home 里边,所以要回到上一层 (../) 以后,能够继续往 /var 来联通的,非常注意这两个特殊的目录:
. :代表当前的目录,也可以使用 ./ 来表示;
.. :代表上一层目录,也可以 ../ 来代表。
这个 . 与 .. 目录概念是很重要的,你经常会见到 cd .. 或 ./command 之类的指令下达形式, 就是代表上一层与目前所在目录的工作状态。
实例1:怎样先步入/var/spool/mail/目录,再步入到/var/spool/cron/目录内?
命令代码如下:
cd/var/spool/mail
cd../cron
说明:
因为/var/spool/mail与/var/spool/cron是同样在/var/spool/目录中。这么就不须要在由根目录开始写起了。这个相对路径是十分有帮助的,尤其对于个别软件开发商来说。 通常来说,软件开发协会将数据放置到/usr/local/上面的各相对目录。 但若果用户想要安装到不同目录呢?就得要使用相对路径。
实例2:网路文件经常提及类似./run.sh之类的数据,这个指令的意义为什么?
说明:
因为指令的执行须要变量的支持,若你的执行文件放置在本目录,但是本目录并非正规的执行文件目录(/bin, /usr/bin等为正规),此时要执行指令就得要严格指定该执行档。./代表本目录的意思,所以./run.sh代表执行本目录下, 名为run.sh的文件。