第6章、 Linux 的档案权限与目录配置

6.1. 使用者与群组
最重要的可能就是档案的拥有者的概念
1. 档案拥有者:
2. 群组概念:
在Linux底下这样的限制是很简单!可以经由简易的档案权限设定,就能限制非自己团队(亦即是群组) 的其他人不能够阅览内容!而且亦可以让自己的团队成员可以修改我所建立的档案! 同时,如果我自己还有私人隐密的文件,仍然可以设定成让自己的团队成员也看不到我的档案数据。
3. 其他人的概念:
因此,在Linux里面,任何一个档案都具有『User, Group及Others』三种身份的个别权限。
在Linux系统中的身份代号是『 root 』可是『万能的天神』。
『使用者身份』,与该使用者所支持的『群组』概念,在Linux的世界里面是相当的重要的, 他可以帮你让你的多任务Linux环境变的更容易管理!更详细的 『身份与群组』设定,我们将在第十四章、账号管理再行解说。 底下我们将针对文件系统与档案权限来进行说明。

Linux 用户身份与群组记录的档案:
在我们Linux系统当中,默认的情况下:

  • /etc/passwd:记录所有的系统上的账号与一般身份使用者,还有那个root的相关信息。
  • /etc/shadow:记录密码。
  • /etc/group:记录Linux所有的组名!

这三个档案可以说是Linux系统里面账号、密码、群组信息的集中地! 不要随便删除这三个档案! (shadow阴影)

6.2. Linux档案权限概念
屏幕前面出现了『Permission deny』的时候肯定是权限设定错误。(Permission许可;deny否认)

6.2.1. Linux文件属性
『 ls 』这一个察看档案的指令。在你以root的身份登入Linux之后,下达『 ls -al 』看看,会看到底下的几个咚咚:
第6章、 Linux 的档案权限与目录配置
ls是『list』的意思,重点在显示档案的文件名与相关属性。而选项『-al』则表示列出所有的档案详细的权限与属性 (包含隐藏文件,就是文件名第一个字符为『 . 』的档案)。如上所示,在你第一次以root身份登入Linux时, 如果你输入上述指令后,应该有上列的几个东西,先解释一下上面七个字段个别的意思:
第6章、 Linux 的档案权限与目录配置

1.第一栏代表这个档案的类型与权限(permission):
你应该可以发现这一栏其实共有十个字符:(图2.1.1及图2.1.2内的权限并无关系)
第6章、 Linux 的档案权限与目录配置
第一个字符代表这个档案是『目录、档案或链接文件等等』:

  • 当为[ d ]则是目录,例如上表档名为『.gconf』的那一行;
  • 当为[ - ]则是档案,例如上表档名为『install.log』那一行;
  • 若是[ l ]则表示为连结档(link file);
  • 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
  • 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
    接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。
  • 第一组为『档案拥有者的权限』,以『install.log』那个档案为例, 该档案的拥有者可以读写,但不可执行;
  • 第二组为『同群组的权限』;
  • 第三组为『其他非本群组的权限』。

2.第二栏表示有多少档名连结到此节点(i-node):
每个档案都会将他的权限与属性记录到文件系统的i-node中,不过,我们使用的目录树却是使用文件名来记录, 因此每个档名就会连结到一个i-node!这个属性记录的,就是有多少不同的档名连结到相同的一个i-node号码。
3.第三栏表示这个档案(或目录)的『拥有者账号』:
4.第四栏表示这个档案的所属群组:
5.第五栏为这个档案的容量大小,默认单位为bytes:
6.第六栏为这个档案的建档日期或者是最近的修改日期:
如果想要显示完整的时间格式,可以利用ls的选项,亦即:『ls -l –full-time』就能够显示出完整的时间格式了!包括年、月、日、时间。
如果想要让系统默认的语系变成英文的话,那么你可以修改系统配置文件『/etc/sysconfig/i18n』,利用第五章谈到的nano来修改该档案的内容,使LANG这个变量成为上述的内容即可。
7.第七栏为这个档案的档名:

  • Linux档案权限的重要性:
    与Windows系统不一样的是,在Linux系统当中,每一个档案都多加了很多的属性进来,尤其是群组的概念,这样有什么用途呢? 其实,最大的用途是在『数据安全性』上面的:
  • 系统保护的功能:
  • 团队开发软件或数据共享的功能:
  • 未将权限设定妥当的危害:

6.2.2. 如何改变文件属性与权限: chgrp, chown, chmod

  • chgrp:改变档案所属群组
  • chown :改变档案拥有者
  • chmod :改变档案的权限, SUID, SGID, SBIT等等的特性

1.改变所属群组,,chgrp :
这个指令就是change group的缩写,要被改变的组名必须要在/etc/group档案内存在才行,否则就会显示错误!
假设你是以root的身份登入Linux系统的,那么在你的家目录内有一个install.log的档案, 如何将该档案的群组改变一下呢?假设你已经知道在/etc/group里面已经存在一个名为users的群组, 但是testing这个群组名字就不存在/etc/group当中了,此时改变群组成为users与testing分别会有什么现象发生呢?
第6章、 Linux 的档案权限与目录配置
2.改变档案拥有者,chown:
改变拥有者就是change owner! 用户必须是已经存在系统中的账号,也就是在/etc/passwd 这个档案中有纪录的用户名称才能改变。
chown的用途还满多的,他还可以直接修改群组的名称!此外,如果要连目录下的所有次目录或档案同时更改档案拥有者的话,直接加上 -R 的选项即可!我们来看看语法与范例:
第6章、 Linux 的档案权限与目录配置
亊实上,chown也可以使用『chown user.group file』,亦即在拥有者与群组间加上小数点『.』也行! 不过很多朋友设定账号时,喜欢在账号当中加入小数点(例如vbird.tsai这样的账号格式),这就会造成系统的误判了! 所以我们比较建议使用冒号『:』来隔开拥有者与群组!此外,chown也能单纯的修改所属群组! 例如『chown .sshd install.log』就是修改群组。就是那个小数点的用途!
知道如何改变档案的群组与拥有者了,那么什么时候要使用chown或chgrp呢?最常见的例子就是在复制档案给你之外的其他人时, 我们使用最简单的cp指令来说明好了:
第6章、 Linux 的档案权限与目录配置
假设要将.bashrc这个档案拷贝成为.bashrc_test档名,且是要给bin这个人,你可以这样做:
第6章、 Linux 的档案权限与目录配置
继续利用chown修改即可。
3.改变档案的权限, SUID, SGID, SBIT等等的特性,chmod:
档案权限的改变使用的是chmod这个指令,但是,权限的设定方法有两种, 分别可以使用数字或者是符号来进行权限的变更:

  • 数字类型改变档案权限:
    档案的权限字符为:『-rwxrwxrwx』, 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:
    r:4
    w:2
    x:1
    每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: [-rwxrwx—] 分数则是: owner = rwx = 4+2+1 = 7
    group = rwx = 4+2+1 = 7
    others= — = 0+0+0 = 0
    所以等一下我们设定权限的变更时,该档案的权限数字就是770!变更权限的指令chmod的语法是这样的:
    第6章、 Linux 的档案权限与目录配置
    如果要将.bashrc这个档案所有的权限都设定启用,那么就下达:
    第6章、 Linux 的档案权限与目录配置
    那如果要将权限变成『 -rwxr-xr– 』那么权限的分数就成为 [4+2+1][4+0+1][4+0+0]=754 !所以需要下达『 chmod 754 filename』。 另外,在实际的系统运作中最常发生的一个问题就是,常常我们以vim编辑一个shell的文字批处理文件后,他的权限通常是 -rw-rw-r– 也就是664, 如果要将该档案变成可执行文件,并且不要让其他人修改此一档案的话, 那么就需要-rwxr-xr-x这样的权限,此时就得要下达:『 chmod 755 test.sh 』的指令!
    另外,如果有些档案你不希望被其他人看到,那么应该将档案的权限设定为例如:『-rwxr—–』,那就下达『 chmod 740 filename 』!

  • 符号类型改变档案权限:
    基本上就九个权限分别是(1)user (2)group (3)others三种身份!那么我们就可以藉由u, g, o来代表三种身份的权限!此外, a 则代表 all 亦即全部的身份!那么读写的权限就可以写成r, w, x!也就是可以使用底下的方式来看:
    第6章、 Linux 的档案权限与目录配置
    假如我们要『设定』一个档案的权限成为『-rwxr-xr-x』时,基本上就是: user (u):具有可读、可写、可执行的权限; group 与 others (g/o):具有可读与执行的权限。
    所以就是:
    第6章、 Linux 的档案权限与目录配置
    那么是『 -rwxr-xr– 』这样的权限就可以使用『 chmod u=rwx,g=rx,o=r filename 』来设定。此外,如果我不知道原先的文件属性,而我只想要增加.bashrc这个档案的每个人均可写入的权限, 那么我就可以使用:
    第6章、 Linux 的档案权限与目录配置
    而如果是要将权限去掉而不改动其他已存在的权限呢?例如要拿掉全部人的可执行权限,则:
    第6章、 Linux 的档案权限与目录配置
    知道 +, -, = 的不同点了在于 + 与 – 的状态下,只要是没有指定到的项目,则该权限『不会被变动』, 例如上面的例子中,由于仅以 – 拿掉 x 则其他两个保持当时的值不变!你想要教一个朋友如何让一个程序可以拥有执行的权限, 但你又不知道该档案原本的权限为何,此时,利用『chmod a+x filename』 ,就可以让该程序拥有执行的权限了。

6.2.3. 目录与档案之权限意义
权限对档案的重要性
档案是实际含有数据的地方,包括一般文本文件、数据库内容文件、二进制可执行文件(binary program)等等。 因此,权限对二档案来说,他的意义是这样的:

  • r (read):可读取此一档案的实际内容,如读取文本文件的文字内容等;
  • w (write):可以编辑、新增者是修改该档案的内容(但不含删除该档案);
  • x (eXecute):该档案具有可以被系统执行的权限。

Windows底下一个档案是否具有执行的能力是藉由『 扩展名 』来判断的, 例如:.exe, .bat, .com 等等,但是在Linux底下,我们的档案是否能被执行,则是藉由是否具有『x』这个权限来决定的!跟档名是没有绝对的关系的 !
对于档案的rwx来说, 主要都是针对『档案的内容』而言,与档案档名的存在与否没有关系!因为档案记录的是实际的数据!
权限对目录的重要性
目录主要的内容在记录文件名列表,文件名与目录有强烈的关连! 所以如果是针对目录时, r, w, x 对目录的意义:

  • r (read contents in directory):
    表示具有读取目录结构列表的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据。 所以你就可以利用 ls 这个指令将该目录的内容列表显示出来!
  • w (modify contents of directory): (modify修改)
    这个可写入的权限对目录来说,是很了不起的! 因为他表示你具有移动该目录结构列表的权限,也就是底下这些权限:
    o 建立新的档案与目录;
    o 删除已经存在的档案与目录(不论该档案的权限为何!)
    o 将已存在的档案或目录进行更名;
    o 搬移该目录内的档案、目录位置。
    总之,目录的w权限就与该目录底下的文件名移动有关就对了!
  • x (access directory): (access使用)
    目录不可以被执行,目录的x代表的是用户能否进入该目录成为工作目录的用途! 所谓的工作目录(work directory)就是你目前所在的目录!当你登入Linux时, 你所在的家目录就是你当下的工作目录。而变换目录的指令是『cd』(change directory)!
    第6章、 Linux 的档案权限与目录配置
    上面这个例题中因为vbird具有r的权限,因为是r乍看之下好像就具有可以进入此目录的权限,其实那是错的。 能不能进入某一个目录,只与该目录的x权限有关!此外, 工作目录对于指令的执行是非常重要的,如果你在某目录下不具有x的权限, 那你就无法切换到该目录下,也就无法执行该目录下的任何指令,即使你具有该目录的r的权限。
    很多朋友在架设网站的时候都会卡在一些权限的设定上,他们开放目录数据给因特网的任何人来浏览, 却只开放r的权限,如上面的范例所示那样,那样的结果就是导致网站服务器软件无法到该目录下读取档案(最多只能看到文件名), 最终用户总是无法正确的查阅到档案的内容(显示权限不足!)。要注意:要开放目录给任何人浏览时,应该至少也要给予r及x的权限,但w权限不可随便给!
    我们底下就来设计一个练习:

    1. 先用root的身份建立所需要的档案与目录环境:
      我们用root的身份在所有人都可以工作的/tmp目录中建立一个名为testing的目录, 该目录的权限为744且目录拥有者为root。另外,在testing目录下在建立一个空的档案, 档名亦为testing。建立目录可用mkdir(make directory),建立空档案可用touch(下一章会说明)来处理。 所以过程如下所示:
      第6章、 Linux 的档案权限与目录配置
    2. 一般用户的读写权限为何?
      在上面的例子中,虽然目录是744的权限设定,一般用户应该能有 r 的权限, 但这样的权限使用者能做啥亊呢?假设鸟哥的系统中含有一个账号名为 vbird 的, 我们可以透过『 su - vbird 』这个指令来变换身份!看看底下的操作先!
      第6章、 Linux 的档案权限与目录配置
    3. 如果该目录属于用户本身,会有什么状况?
      上面的练习我们知道了只有r确实可以让用户读取目录的文件名列表,不过详细的信息却还是读不到的, 同时也不能将该目录变成工作目录(用 cd 进入该目录之意)。那如果我们让该目录变成用户的, 那么用户在这个目录底下是否能够删除档案呢?底下的练习做看看:
      第6章、 Linux 的档案权限与目录配置
      透过上面这个简单的步骤,你就可以清楚的知道, x 在目录当中是与『能否进入该目录』有关, 至于那个 w 则具有相当重要的权限,因为他可以让使用者删除、更新、新建档案或目录, 是个很重要的参数!

6.2.4. Linux档案种类与扩展名

一、档案种类:
我们在基础篇一直强调一个概念,那就是:任何装置在Linux底下都是档案, 不仅如此,连数据沟通的接口也有专属的档案在负责。所以,你会了解到,Linux的档案种类真的很多。 除了前面提到的一般档案(-)与目录档案(d)之外,还有哪些种类的档案呢?
1. 正规档案(regular file ):
就是一般我们在进行存取的类型的档案,在由 ls -al 所显示出来的属性方面,第一个字符为 [ - ],依照档案的内容,又大小可以分为:
- 纯文本档(ASCII):这是Linux系统中最多的一种文件类型, 称为纯文本档是因为内容为我们人类可以直接读到的数据,例如数字、字母等等。 几乎只要我们可以用来做为设定的档案都属于这一种文件类型。 举例来说,你可以下达『 cat ~/.bashrc 』就可以看到该档案的内容。 (cat 是将一个档案内容读出来的指令)
- 二进制文件(binary):还记得我们在『 第零章、计算器概论 』里面的软件程序的运作中提过, 我们的系统其实仅认识且可以执行二进制文件(binary file)。 你的Linux当中的可执行文件(scripts, 文字型批处理文件不算)就是这种格式的。举例来说,刚刚下达的指令cat就是一个binary file。
- 数据格式文件(data): 有些程序在运作的过程当中会读取某些特定格式的档案,那些特定格式的档案可以被称为数据文件 (data file)。举例来说,我们的Linux在使用者登入时,都会将登录的数据记录在 /var/log/wtmp那个档案内,该档案是一个data file,他能够透过last这个指令读出来! 但是使用cat时,会读出乱码,因为他是属于一种特殊格式的档案。
2. 目录(directory):
第一个属性为 [ d ]。
3. 连结档(link):
就是类似Windows系统底下的快捷方式啦! 第一个属性为 l
4. 设备与装置文件(device):(device装置)
与系统周边及储存等相关的一些档案, 通常都集中在/dev这个目录之下!通常又分为两种:
- 区块(block)设备档:就是一些储存数据, 以提供系统随机存取的接口设备,举例来说,硬盘与软盘等! 你可以随机的在硬盘的不同区块读写,这种装置就是成组设备!你可以自行查一下/dev/sda看看, 会发现第一个属性为[ b ]!
- 字符(character)设备文件:亦即是一些串行端口的接口设备, 例如键盘、鼠标等等!这些设备的特色就是『一次性读取』的,不能够截断输出。 举例来说,你不可能让鼠标『跳到』另一个画面,而是『滑动』到另一个地方啊!第一个属性为 [ c ]。
5. 资料接口文件(sockets): (socket接口)
既然被称为数据接口文件, 这种类型的档案通常被用在网络上的数据承接了。我们可以启动一个程序来监听客户端的要求, 而客户端就可以透过这个socket来进行数据的沟通了。第一个属性为 [ s ], 最常在/var/run这个目录中看到这种文件类型了。
6. 数据输送文件(FIFO, pipe): (pipe管)
FIFO也是一种特殊的文件类型,他主要的目的在解决多个程序同时存取一个档案所造成的错误问题。 FIFO是first-in-first-out的缩写。第一个属性为[p] 。

除了设备文件是我们系统中很重要的档案,最好不要随意修改之外(通常他也不会让你修改的), 另一个比较有趣的档案就是连结档。如果你常常将应用程序捉到桌面来的话,你就应该知道在 Windows底下有所谓的『快捷方式』。同样的,你可以将 linux下的连结档简单的规为一个档案或目录的快捷方式。 至与socket与 FIFO档案比较难理解,因为这两个咚咚与程序(process)比较有关系, 这个等到未来你了解process之后,再回来查阅吧!此外, 你也可以透过man fifo及man socket来查阅系统上的说明!

二、Linux档案扩展名:
可以被执行跟可以执行成功是不一样的。在root家目录下的install.log 是一个纯文本档,如果经由修改权限成为 -rwxrwxrwx 后,这个档案能够真的执行成功吗? 当然不行。因为他的内容根本就没有可以执行的数据。所以说,这个x代表这个档案具有可执行的能力, 但是能不能执行成功,当然就得要看该档案的内容。
虽然如此,不过我们仍然希望可以藉由扩展名来了解该档案是什么东西,所以, 通常我们还是会以适当的扩展名来表示该档案是什么种类的。底下有数种常用的扩展名:
- *.sh : 脚本或批处理文件 (scripts),因为批处理文件为使用shell写成的,所以扩展名就编成 .sh ;
- *Z, *.tar, *.tar.gz, *.zip, *.tgz: 经过打包的压缩文件。这是因为压缩软件分别为 gunzip, tar 等等的,由于不同的压缩软件,而取其相关的扩展名! 与PHP 语法的网页档案! .html 的档案可使用网页浏览器。
- *.html, *.php:网页相关档案,分别代表 HTML 语法来直接开启,至于 .php 的档案, 则可以透过 client 端的浏览器来 server 端浏览,以得到运算后的网页结果!

三、Linux档案长度限制:
在Linux底下,使用预设的Ext2/Ext3文件系统时,针对档案的档名长度限制为:
- 单一档案或目录的最大容许文件名为 255 个字符;
- 包含完整路径名称及目录 (/) 之完整档名为 4096 个字符。
是相当长的档名!我们希望Linux的文件名可以一看就知道该档案在干嘛的, 所以档名通常是很长很长!而用惯了Windows的人可能会受不了,不过,只得劝你好好的加强打字的训练!
而由第五章谈到的热键你也会知道, 其实可以透过[tab]按键来确认档案的文件名的!这很好用啊! 如果你已经读完了本书第三篇关于BASH的用法,那么你将会发现 『哇!变量真是一个相当好用的东西吶!』

四、Linux文件名的限制:
由于Linux在文字接口下的一些指令操作关系,一般来说,你在设定Linux底下的文件名时, 最好可以避免一些特殊字符比较好!例如底下这些: * ? > < ; & ! [ ] | \ ’ ” ` ( ) { } 因为这些符号在文字接口下,是有特殊意义的!另外,文件名的开头为小数点『.』时, 代表这个档案为『隐藏档』!同时,由于指令下达当中,常常会使用到 -option 之类的选项, 所以你最好也避免将档案档名的开头以 – 或+ 来命名!

6.3. Linux目录配置
6.3.1. Linux目录配置的依据–FHS:/, /usr, /var
Filesystem Hierarchy Standard (FHS)标准:根据FHS(http://www.pathname.com/fhs/)的官方文件指出, 他们的主要目的是希望让使用者可以了解到已安装软件通常放置于哪个目录下,FHS的重点在于规范每个特定的目录下应该要放置什么样子的数据而已。
亊实上,FHS是根据过去的经验一直再持续的改版的,FHS依据文件系统使用的频繁与否与是否允许使用者随意更动, 而将目录定义成为四种交互作用的形态,用表格来说有点像底下这样:
第6章、 Linux 的档案权限与目录配置
- 可分享的:可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据, 是能够分享给网络上其他主机挂载用的目录;
- 不可分享的:自己机器上面运作的装置档案或者是与程序有关的socket档案等, 由于仅与自身机器有关,所以当然就不适合分享给其他主机了。
- 不变的:有些数据是不会经常变动的,跟随着distribution而不变动。 例如函式库、文件说明文件、系统管理员所管理的主机服务配置文件等等;
- 可变动的:经常改变的数据,例如登录文件、一般用户可自行收受的新闻组等。
亊实上,FHS针对目录树架构仅定义出三层目录底下应该放置什么数据而已,分别是底下这三个目录的定义:
- / (root, 根目录):与开机系统有关;
- /usr (unix software resource):与软件安装/执行有关;
- /var (variable):与系统运作过程有关。
一、根目录 (/) 的意义与内容:
根目录是整个系统最重要的一个目录,因为不但所有的目录都是 由根目录衍生出来的, 同时根目录也与开机/还原/系统修复等动作有关。 由于系统开机时需要特定的开机软件、核心档案、开机所需程序、 函式库等等档案数据,若系统出现错误时,根目录也必须要包含有能够修复文件系统的程序才行。 因为根目录是这么的重要,所以在FHS的要求方面,他希望根目录不要放在非常大的分割槽内, 因为越大的分割槽你会放入越多的数据,如此一来根目录所在分割槽就可能会有较多发生错误的机会。
因此FHS标准建议:根目录 (/)所在分割槽应该越小越好, 且应用程序所安装的软件最好不要与根目录放在同一个分割槽内,保持根目录越小越好。 如此不但效能较佳,根目录所在的文件系统也较不容易发生问题。 有鉴于上述的说明,因此FHS定义出根目录(/)底下应该要有底下这些次目录的存在才好:
第6章、 Linux 的档案权限与目录配置
第6章、 Linux 的档案权限与目录配置
1. /bin操作指令;/boot开机文件;/dev接口设备;/etc系统配置;/home用户家目录;/lib开机函式库;/media可移除装置;/mnt暂时挂载;/opt第三方软件;/root root家目录;/sbin root设定系统;/srv(service)网络服务数据目录;/tmp暂时放置档案;
2. /lost+found遗失片段;/proc虚拟文件系统;/sys记录与核心相关信息(虚拟);
3. /usr/X11R6/为X Win Sys重要数据放置;/usr/bin/用户指令;/usr/include/ c/c++等程序语言的档头与包含档放置处;/usr/lib/各应用软件的函式库、目标档案以及不惯用的执行档或脚本;/usr/local/ root安装自己下载软件;/usr/sbin/非系统正常运作需要的系统指令;/usr/share/共享文件;/usr/src/放置原始码;
4. /var/cache/暂存档;/var/lib/程序使用的数据所放置的目录;/var/lock/确保只会给单一软件使用;/var/log/登录文件放置的目录;/var/mail/放置邮件信箱;/var/run/ 放置PID;/var/spool放置队列数据;
亊实上FHS针对根目录所定义的标准就仅有上面的咚咚,不过我们的Linux底下还有许多目录你也需要了解一下的。 底下是几个在Linux当中也是非常重要的目录:
第6章、 Linux 的档案权限与目录配置
除了这些目录的内容之外,另外要注意的是,因为根目录与开机有关,开机过程中仅有根目录会被挂载, 其他分割槽则是在开机完成之后才会持续的进行挂载的行为。就是因为如此,因此根目录下与开机过程有关的目录, 就不能够与根目录放到不同的分割槽去!那哪些目录不可与根目录分开呢?有底下这些:
- /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的次目录建议有底下这些:
第6章、 Linux 的档案权限与目录配置
三、 /var 的意义与内容:
如果/usr是安装时会占用较大硬盘容量的目录,那么/var就是在系统运作后才会渐渐占用硬盘容量的目录。 因为/var目录主要针对常态性变动的档案,包括快取(cache)、登录档(log file)以及某些软件运作所产生的档案, 包括程序档案(lock file, run file),或者例如MySQL数据库的档案等等。常见的次目录有:
第6章、 Linux 的档案权限与目录配置
建议在你读完整个基础篇之后,可以挑战FHS官方英文文件(参考本章参考数据),相信会让你对于Linux操作系统的目录有更深入的了解!
四、针对FHS,各家distributions的异同
由于FHS仅是定义出最上层(/)及次层(/usr, /var)的目录内容应该要放置的档案或目录数据, 因此,在其他次目录层级内,就可以随开发者自行来配置了。举例来说,CentOS的网络设定数据放在 /etc/sysconfig/network-scripts/ 目录下,但是SuSE则是将网络放置在 /etc/sysconfig/network/ 目录下,目录名称可是不同的呢!不过只要记住大致的FHS标准,差异性其实有限!

6.3.2. 目录树(directory tree)
目录树(directory tree) 主要的特性有:
1. 目录树的起始点为根目录 (/, root);
2. 每一个目录不只能使用本地端的 partition 的文件系统,也可以使用网络上的 filesystem 。举例来说, 可以利用 Network File System (NFS) 服务器挂载某特定目录等。
3. 每一个档案在此目录树中的文件名(包含完整路径)都是独一无二的。
实际来看看CentOS在根目录底下会有什么样子的数据吧!我们可以下达以下的指令来查询:
第6章、 Linux 的档案权限与目录配置
上面表格中比较特殊的应该是/selinux这个目录了,这个目录的内容数据也是在内存中的信息, 同样的不会占用任何的硬盘容量。这个/selinux是Secure Enhance Linux(SELinux)的执行目录, 而SELinux是Linux核心的重要外挂功能之一,他可以用来作为细部权限的控管,主要针对程序(尤其是网络程序)的访问权限来限制。 关于SELinux我们会在后续的章节继续做介绍的!
如果我们将整个目录树以图标的方法来显示,并且将较为重要的档案数据列出来的话,那么目录树架构有点像这样:
第6章、 Linux 的档案权限与目录配置
根据FHS的定义,你最好能够将/var独立出来, 这样对于系统的数据还有一些安全性的保护呢!因为至少/var死掉时,你的根目录还会活着嘛! 还能够进入救援模式!

6.3.3. 绝对路径与相对路径
除了需要特别注意的FHS目录配置外,在文件名部分我们也要特别注意!因为根据档名写法的不同,也可将所谓的路径(path)定义为绝对路径(absolute)与相对路径(relative)。 这两种文件名/路径的写法依据是这样的:
- 绝对路径:由根目录(/)开始写起的文件名或目录名称, 例如 /home/dmtsai/.bashrc;
- 相对路径:相对于目前路径的文件名写法。 例如 ./home/dmtsai 或 ../../home/dmtsai/ 等等。反正开头不是 / 就属于相对路径的写法

6.3.4. CentOS 的观察: lsb_release
某些时刻你可能想要知道你的 distribution 使用的是那个 Linux 标准 (Linux Standard Base), 而且我们也知道 distribution 使用的都是 Linux 的核心! 可以使用如下的指令来观察看看:
第6章、 Linux 的档案权限与目录配置