自己机器里面运作的装置文件或则是与程序有关的socket文件等,因为仅与自身机器有关,所以其实就不适宜分享给其他主机了。
3.不变的:
有些数据是不会时常变动的,跟随着distribution而不变动。诸如函式库、文件说明文件、管理员所管理的主机服务配置文件等等;
4.可变动的:
时常改变的数据,比如登入文件、一般用户可自行收受的新闻组等。
事实上,FHS针对目录树构架仅定义出三层目录下边应当放置哪些数据而已,分别是下边这三个目录的定义:
/(root,根目录):与开机系统有关;
/usr(unixsoftwareresource):与软件安装/执行有关;
/var(variable):与系统运作过程有关。
一.根目录(/)的意义与内容:
根目录是整个系统最重要的一个目录,由于不但所有的目录都是由根目录衍生下来的,同时根目录也与开机/还原/系统修补等动作有关。因为系统开机时须要特定的开机软件、核心文件、开机所需程序、函式库等等文件数据,若系统出现错误时,根目录也必需要包含有才能修补文件系统的程序才行。由于根目录是如此的重要,所以在FHS的要求方面,他希望根目录不要置于特别大的分区,由于越大的分区内你会倒入越多的数据,这么一来根目录所在分区就可能会有较多发生错误的机会。
因而FHS标准建议:根目录(/)所在分区应当越小越好,且应用程序所安装的软件最好不要与根目录置于同一个分区内,保持根目录越小越好。这么不但效能较佳,根目录所在的文件系统也较不容易发生问题。说白了linux操作系统教程,就是根目录和Windows的C盘一个样。
按照以上缘由,FHS觉得根目录(/)下应当包含如下子目录:
目录
应放置档案内容
/bin
系统有好多放置执行档的目录,但/bin比较特殊。由于/bin放置的是在双人维护模式下还能否被操作的指令。在/bin下边的指令可以被root与通常账号所使用,主要有:cat,chmod(更改权限),chown,date,mv,mkdir,cp,bash等等常用的指令。
/boot
主要放置开机会使用到的档案,包括Linux核心档案以及开机选单与开机所需设定档等等。Linuxkernel常用的档名为:vmlinuz,假如使用的是grub这个开机管理程式,则就会存在/boot/grub/这个目录。
/dev
在Linux系统上,任何装置与周边设备都是以档案的型态存在于这个目录当中。只要通过存取这个目录下的某个档案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/iptablesstart、/etc/init.d/iptablesstop
/etc/xinetd.d/:这就是所谓的superdaemon管理的各项服务的设定档目录。
/etc/X11/:与XWindow有关的各类设定档都在这儿,尤其是xorg.conf或XF86Config这两个XServer的设定档。
/home
这是系统预设的使用者家目录(homedirectory)。在你新增一个通常使用者账号时,预设的使用者家目录还会规范到这儿来。比较重要的是,家目录有两种代号:
~:代表当前使用者的家目录,而~guest:则代表用户名为guest的家目录。
/lib
系统的函式库特别的多,而/lib放置的则是在开机时会用到的函式库,以及在/bin或/sbin下边的指令会呼叫的函式库而已。哪些是函式库呢?妳可以将他想成是外挂,个别指令必需要有这种外挂才才能顺利完成程式的执行之意。尤其重要的是/lib/modules/这个目录,由于该目录会放置核心相关的模组(驱动程式)。
/media
media是媒体的中文,顾名思义,这个/media下边放置的就是可移除的装置。包括软碟、光碟、DVD等等装置都暂时挂载于此。常见的档名有:/media/floppy,/media/cdrom等等。
/mnt
假如妳想要暂时挂载个别额外的装置,通常建议妳可以放置到这个目录中。在古早时侯,这个目录的用途与/media相同啦。只是有了/media以后,这个目录就拿来暂时挂载用了。
/opt
这个是给第三方协力软体放置的目录。哪些是第三方协力软体啊?举例来说,KDE这个桌面管理系统是一个独立的计画,不过他可以安装到Linux系统中linux私房菜,因而KDE的软体就建议放置到此目录下了。另外,假如妳想要自行安装额外的软体(非原先的distribution提供的),这么也就能将你的软体安装到这儿来。不过,原先的Linux系统中,我们还是习惯放置在/usr/local目录下。
/root
系统管理员(root)的家目录。之所以置于这儿,是由于假如步入双人维护模式而仅挂载根目录时linux私房菜,该目录就才能拥有root的家目录,所以我们会希望root的家目录与根目录放置在同一个分区中。
/sbin
Linux有特别多指令是拿来设定系统环境的,这种指令只有root才才能利拿来设定系统,其他使用者最多只能拿来查询而已。置于/sbin下边的为开机过程中所须要的,上面包括了开机、修复、还原系统所须要的指令。至于个别伺服器软体程式,通常则放置到/usr/sbin/当中。至于本机自行安装的软体所形成的系统执行档(systembinary),则放置到/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
这个目录本身是一个虚拟文件系统(virtualfilesystem)喔。他放置的资料都是在显存当中,比如系统核心、行程资讯(process)(是进程吗?)、周边装置的状态及网路状态等等。由于这个目录下的资料都是在记忆体(显存)当中,所以本身不占任何硬碟空间。比较重要的档案(目录)诸如:/proc/cpuinfo,/proc/dma,/proc/interrupts,/proc/ioports,/proc/net/*等等。呵呵,是虚拟显存吗[guest]?
/sys
这个目录貌似跟/proc十分类似,也是一个虚拟的档案系统,主要也是记录与核心相关的资讯。包括目前已载入的核心模组与核心探测到的硬体装置资讯等等。这个目录同样不占硬碟容量。
不仅这种目录的内容之外,另外要注意的是,由于根目录与开机有关,开机过程中仅有根目录会被挂载,其他分区则是在开机完成以后就会持续的进行挂载的行为。就是由于这般,因而根目录下与开机过程有关的目录,就不能否与根目录放在不同的分区去。那什么目录不可与根目录分开呢?有下边这种:
/etc:配置文件
/bin:重要执行档
/dev:所须要的装置文件
/lib:执行档所需的函式库与核心所需的模块
/sbin:重要的系统执行文件
这五个目录千万不可与根目录分开在不同的分区。请背出来啊。
二./usr的意义与内容:
根据FHS的基本定义,/usr上面放置的数据属于可分享的与不可变动的(shareable,static),假如你晓得怎样透过网路进行分区的挂载(比如在服务器篇会提到的NFS服务器),这么/usr确实可以分享给局域网路内的其他主机来使用喔。
/usr不是user的简写,虽然usr是UnixSoftwareResource的简写,也就是Unix操作系统软件资源所放置的目录,而不是用户的数据啦。这点要注意。FHS建议所有软件开发者,应当将她们的数据合理的分别放置到这个目录下的次目录,而不要自行构建该软件自己独立的目录。
由于是所有系统默认的软件(distribution发布者提供的软件)就会放置到/usr里边,因而这个目录有点类似Windows系统的C:Windows+C:Programfiles这两个目录的综合体,系统刚安装完毕时,这个目录会占用最多的硬碟容量。通常来说,/usr的次目录建议有下边这种:
目录
应放置文件内容
/usr/X11R6/
为XWindowSystem重要数据所放置的目录,之所以起名为X11R6是由于最后的X版本为第11版,且该版的第6次释出之意。
/usr/bin/
绝大部份的用户可使用指令都置于这儿。请注意到他与/bin的不同之处。(是否与开机过程有关)
/usr/include/
c/c++等程序语言的档头(header)与包含档(include)放置处,当我们以tarball形式(*.tar.gz的形式安装软件)安装个别数据时,会使用到里头的许多包含档。
/usr/lib/
包含各应用软件的函式库、目标文件(objectfile),以及不被通常使用者惯用的执行档或(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/目录下。
三./var的意义与内容:
假如/usr是安装时会占用较大硬碟容量的目录,这么/var就是在系统运作后才能逐渐占用硬碟容量的目录。由于/var目录主要针对常态性变动的文件,包括缓存(cache)、登录档(logfile)以及个别软件运作所形成的文件,包括程序文件(lockfile,runfile),或则诸如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)的目录内容应当要放置的文件或目录数据,因而,在其他次目录层级内,就可以随开发者自行来配置了。
四.目录树(directorytree):
在Linux下边,所有的文件与目录都是由根目录开始的。那是所有目录与文件的源头,之后再一个一个的分支出来,因而,我们称作这些目录配置方法为:目录树(directorytree),这个目录树的主要特点有:
目录树的启始点为根目录(/,root);
每一个目录不止能使用本地端的partition的文件系统,也可以使用网路上的filesystem。举例来说,可以借助NetworkFileSystem(NFS)服务器挂载某特定目录等。
每一个文件在此目录树中的文件名(包含完整路径)都是独一无二的。
假如我们将整个目录树以图的方式来显示,但是将较为重要的文件数据列下来的话,这么目录树构架就如右图所示:
五.绝对路径与相对路径
不仅须要非常注意的FHS目录配置外,在文件名部份我们也要非常注意。由于按照档名写法的不同,也可将所谓的路径(path)定义为绝对路径(absolute)与相对路径(relative)。这两种文件名/路径的写法根据是这样的:
绝对路径:
由根目录(/)开始写起的文件名或目录名称,比如/home/dmtsai/.bashrc;
相对路径:
相对于目前路径的文件名写法。诸如./home/dmtsai或等等。总之开头不是/就属于相对路径的写法
而你必需要了解,相对路径是以你当前所在路径的相对位置来表示的。举例来说,你目前在/home这个目录下,假如想要步入/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的文件。
参考资料:《鸟哥的linux私房菜》
本系列文章:
本文原创地址://gulass.cn/lsfcjqsmyzdz.html编辑:刘遄,审核员:暂无