5.1 使用者与群组
5.1 文件拥有者
例如当你将你的e-mail情书转存成档案之后,放在你自己的家目录,你总不希望被其他人看见自己的情书吧?这个时候,你就把该档案设定成『只有档案拥有者,就是我,才能看与修改这个档案的内容』,那么即使其他人知道你有这个相当『有趣』的档案,不过由于你有设定适当的权限,所以其他人自然也就无法知道该档案的内容啰!
5.2 群组概念
如果teacher这个帐号是projecta与projectb这两个专题的老师,他想要同时观察两者的进度,因此需要能够进入这两个群组的权限时,你可以设定teacher这个帐号, 『同时支持projecta与projectb这两个群组!』,也就是说:每个帐号都可以有多个群组的支援!
假设有一家人,家里只有三兄弟,分别是王大毛、王二毛与王三毛三个人,而这个家庭是登记在王大毛的名下的!所以,『王大毛家有三个人,分别是王大毛、王二毛与王三毛』,而且这三个人都有自己的房间,并且共同拥有一个客厅!
- 使用者的意义:由于王家三人各自拥有自己的房间,所以,王二毛虽然可以进入王三毛的房间,但是二毛不能翻三毛的抽屉!那样会被三毛K的!因为抽屉里面可能有三毛自己私人的东西,例如情书啦,日记啦等等的,这是『私人的空间』,所以当然不能让二毛拿!
- 群组的概念:由于共同拥有客厅,所以王家三兄弟可以在客厅打开电视机啦、翻阅报纸啦、坐在沙发上面发呆啦等等的!反正,只要是在客厅的玩意儿,三兄弟都可以使用喔!因为大家都是一家人嘛!
- 『王大毛家』就是所谓的『群组』。
- 至于三兄弟就是分别为三个『使用者』,而这三个使用者是在同一个群组里面的。
- 而三个使用者虽然在同一群组内,但是我们可以设定『权限』, 好让某些使用者个人的资讯不被群组的拥有者查询,以保有个人『私人的空间』。而设定群组共享,则可让大家共同分享喔!
5.3 其他人的概念
张小猪,他是张小猪家的人,与王家没有关系!这个时候,除非王家认识张小猪,然后开门让张小猪进来王家,否则张小猪永远没有办法进入王家,更不要说进到王三毛的房间啦!不过,如果张小猪透过关系认识了三毛,并且跟王三毛成为好朋友,那么张小猪就可以透过三毛进入王家啦!那个张小猪就是所谓的『其他人,Others』!
因此,我们就可以知道啦,在Linux里面,任何一个档案都具有『User, Group及Others』三种身份的个别权限,我们可以将上面的说明以底下的图示来解释:
图5.1.1、每个文件的拥有者、群组与others 的示意图
以王三毛为例,王三毛这个『文件』的拥有者为王三毛,他属于王大毛这个群组,而张小猪相对于王三毛,则只是一个『其他人(others) 』而已。
那个root可是『万能的天神』喔!
5.2 Linux 文件权限概念
5.2.1 Linux文件属性
su:切换用户身份ls:察看文件的指令

图5.2.1、文件属性的示意图
- 第一栏:代表这个文件的**类型与权限**(permission):
你应该可以发现这一栏其实共有十个字元:(图5.2.1及图5.2.2内的权限并无关系)
图5.2.2、文件的类型与权限之内容
第一个字元代表这个档案是『目录、档案或连结档等等』:
接下来的字元中,以三个为一组,且均为『rwx』的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。
- 第一组为『文件拥有者可具备的权限』,以『initial-setup-ks.cfg』那个档案为例,该档案的拥有者可以读写,但不可执行;
- 第二组为『加入此群组的帐号的权限』;
- 第三组为『非本人且没有加入本群组之其他帐号的权限』。(也就是others)
第二栏表示有多少档名连结到此节点(i-node):
- 每个档案都会将他的权限与属性记录到档案系统的i-node中,不过,我们使用的目录树却是使用档名来记录,因此每个文件就会连结到一个i-node!这个属性记录的,就是有多少不同的文件连结到相同的一个i-node号码去就是了。关于i-node的相关资料我们会在第七章谈到档案系统时再加强介绍的。
第三栏表示这个档案(或目录)的『拥有者帐号』
**
- 第四栏表示这个档案的所属群组
**
- 第五栏为这个档案的容量大小,预设单位为bytes;
**
- 第六栏为这个档案的建档日期或者是最近的修改日期。
**
- 第七栏为这个档案的档名
5.2.2 如何改变文件属性与权限
chgrp**:改变文件所属群组**chown** :改变文件拥有者**chmod** :改变文件的权限, SUID, SGID, SBIT等等的特性**
cp**:于复制文件或目录**
改变权限, chmod
- 数字类型改变档案权限
Linux档案的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限,先复习一下刚刚上面提到的资料:档案的权限字元为:『-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
- 符号类型改变档案权限
基本上就九个权限分别是(1)user (2)group (3)others三种身份啦!那么我们就可以藉由u, g, o来代表三种身份的权限!此外,a则代表all亦即全部的身份!那么读写的权限就可以写成r, w, x啰!也就是可以使用底下的方式来看:
| chmod | u g o a |
+(加入) -(除去) =(设定) |
r w x |
档案或目录 |
|---|---|---|---|---|
假如我们要『设定』一个档案的权限成为『-rwxr-xr-x』时,基本上就是:
- user (u):具有可读、可写、可执行的权限;
- group 与others (g/o):具有可读与执行的权限。
所以就是:
| [root@study ~]# chmod u=rwx,go=rx .bashrc
注意喔!那个u=rwx,go=rx是连在一起的,中间并没有任何空白字元! |
| —- |
5.2.3 目录与文件的权限意义
权限对文件的重要性
- r (read)**:可读取此一档案的实际内容,如读取文字档的文字内容等;**
- w (write)**:可以编辑、新增或者是修改该档案的内容(但不含删除该档案);**
- x (eXecute)**:该档案具有可以被系统执行的权限。**
在Windows底下一个档案是否具有执行的能力是藉由『副档名(扩展的后缀)』来判断的,例如:.exe, .bat, .com等等,但是在Linux底下,我们的档案是否能被执行,则是藉由是否具有『x』这个权限来决定的!跟档名是没有绝对的关系的!
权限对目录的重要性
目录主要的内容在记录文件名清单,文件名与目录有强烈的关连!所以如果是针对目录时,那个r, w, x对目录是什么意义呢?
- r (read contents in directory):表示具有读取目录结构清单的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的档名资料。所以你就可以利用ls这个指令将该目录的内容列表显示出来!
- w (modify contents of directory): 因为他表示你具有异动该目录结构清单的权限,也就是底下这些权限:
- 建立新的档案与目录;
- 删除已经存在的档案与目录(不论该档案的权限为何!)
- 将已存在的档案或目录进行更名;
- 搬移该目录内的档案、目录位置。
- x (access directory):目录的x代表的是 使用者能否进入该目录成为工作目录的用途!工作目录(work directory)就是你目前所在的目录。
| 元件 | 内容 | 叠代物件 | r | w | x |
|---|---|---|---|---|---|
| 文件 | 详细资料data | 文件资料夹 | 读到文件内容 | 修改文件内容 | 执行文件内容 |
| 目录 | 文件名 | 可分类抽屉 | 读到档名 | 修改档名 | 进入该目录的权限(key) |
注意:
- 如果你在某目录下不具有x的权限,那么你就无法切换到该目录下,也就无法执行该目录下的任何指令,即使你具有该目录的r或w的权限。
- 要开放目录给任何人浏览时,应该至少也要给予r及x的权限,但w权限不可随便给。
使用者操作功能与权限
刚刚讲这样如果你还是搞不懂~没关系,我们来处理个特殊的案例!假设两个文件名,分别是底下这样:
- /dir1/file1
- /dir2
假设你现在在系统使用dmtsai (非root组的账号)这个帐号,那么这个帐号针对/dir1, /dir1/file1, /dir2 这三个档名来说,分别需要『哪些最小的权限』才能达成各项任务?鸟哥汇整如下,如果你看得懂,恭喜你,如果妳看不懂~没关系~未来再来继续学!
| 操作动作 | /dir1 | /dir1/file1 | /dir2 | 重点 |
|---|---|---|---|---|
| 读取file1 内容 | x | r | - | 要能够进入/dir1 才能读到里面的文件资料! |
| 修改file1 内容 | x | rw | - | 能够进入/dir1 且修改file1 才行! |
| 执行file1 内容 | x | rx | - | 能够进入/dir1 且file1 能运作才行! |
| 删除file1 档案 | wx | - | - | 能够进入/dir1 具有目录修改的权限即可! |
| 将file1 复制到/dir2 | x | r | wx | 要能够读file1 且能够修改/dir2 内的资料 |
你可能会问,上面的表格当中,很多时候/dir1 都不必有r 耶!为啥?我们知道/dir1 是个目录,也是个抽屉!那个抽屉的r 代表『这个抽屉里面有灯光』, 所以你能看到的抽屉内的所有资料夹名称(非内容)。但你已经知道里面的资料夹放在哪个地方,那,有没有灯光有差嘛?你还是可以摸黑拿到该资料夹的!对吧!因此,上面很多动作中,你只要具有x 即可!r 是非必备的!只是,没有r 的话,使用[tab] 时,他就无法自动帮你补齐档名了。
5.2.4 Linux文件种类与扩展名
档案种类:
- 正规档案(regular file )**:**第一个字元为[ - ],例如[-rwxrwxrwx ]。另外,依照档案的内容,又大略可以分为:
- 纯文字档(ASCII):称为纯文字档是因为内容为我们人类可以直接读到的资料,例如数字、字母等等。
- 二进位档(binary):Linux当中的可执行档(scripts,文字型批次档不算)就是这种格式的啦。
- 资料格式档(data):Linux在使用者登入时,都会将登录的资料记录在/var/log/wtmp那个档案内,该档案是一个data file,他能够透过last这个指令读出来!
- 目录(directory):第一个属性为[ d ],例如[drwxrwxrwx]。
连结档(link):类似Windows系统底下的捷径啦!第一个属性为 l ,例如[lrwxrwxrwx] ;
设备与装置档(device):与系统周边及储存等相关的一些档案,通常都集中在/dev这个目录之下!通常又分为两种:
- 区块(block)设备档:就是一些储存资料,以提供系统随机存取的周边设备,举例来说,硬碟与软碟等就是啦!你可以自行查一下/dev/sda看看,会发现第一个属性为[ b ]喔!
- 字元(character)设备档:亦即是一些序列埠的周边设备,例如键盘、滑鼠等等!这些设备的特色就是『一次性读取』的,不能够截断输出。第一个属性为[ c ]。
- 资料接口档(sockets):这种类型的档案通常被用在网路上的资料承接了。第一个属性为[ s ],最常在/run或/tmp这些个目录中看到这种档案类型了。
- 资料输送档(FIFO, pipe):FIFO也是一种特殊的档案类型,他主要的目的在解决多个程序同时存取一个档案所造成的错误问题。FIFO是first-in-first-out的缩写。第一个属性为[p] 。
Linux文件扩展名:
一个Linux档案能不能被执行,与他的第一栏的十个属性有关,与档名根本一点关系也没有。
这个x代表这个档案具有可执行的能力, 但是能不能执行成功,当然就得要看该档案的内容啰~
在Windows底下,能被执行的档案副档名通常是.com .exe .bat等等,而在Linux底下,只要你的权限当中具有x的话,例如[ -rwxr-xr-x ]即代表这个档案具有可以被执行的能力喔!
通常我们还是会以适当的副档名来表示该档案是什么种类的。底下有数种常用的副档名:
- *.sh : 脚本或批次档(scripts),因为批次档为使用shell写成的,所以副档名就编成.sh 啰;
- Z, .tar, .tar.gz, .zip, *.tgz: 经过打包的压缩档。这是因为压缩软体分别为gunzip, tar 等等的,由于不同的压缩软体,而取其相关的副档名啰!
- .html, .php:网页相关档案,分别代表HTML 语法与PHP 语法的网页档案啰!.html 的档案可使用网页浏览器来直接开启,至于.php 的档案, 则可以透过client 端的浏览器来server 端浏览,以得到运算后的网页结果呢!
Linux文件名长度限制
在Linux底下,使用传统的Ext2/Ext3/Ext4档案系统以及近来被CentOS 7 当作预设档案系统的xfs 而言,针对档案的档名长度限制为:
- 单一档案或目录的最大容许档名为255bytes,以一个ASCII 英文占用一个bytes 来说,则大约可达255 个字元长度。若是以每个中文字占用2bytes 来说, 最大档名就是大约在128 个中文字之谱!
5.3 Linux目录配置
5.3.1 Linux目录配置的依据—FHS
Filesystem Hierarchy Standard (FHS)标准 依据档案系统使用的频繁与否与是否允许使用者随意更动, 而将目录定义成为四种交互作用的形态,用表格来说有点像底下这样:
| 可分享的(shareable) | 不可分享的(unshareable) | |
|---|---|---|
| 不变的(static) | /usr (软体放置处) | /etc (设定档) |
| /opt (第三方协力软体) | /boot (开机与核心档) | |
| 可变动的(variable) | /var/mail (使用者邮件信箱) | /var/run (程序相关) |
| /var/spool/news (新闻群组) | /var/lock (程序相关) |
- 可分享的:可以分享给其他系统挂载使用的目录,所以包括执行档与使用者的邮件等资料,是能够分享给网路上其他主机挂载用的目录;
- 不可分享的:自己机器上面运作的装置档案或者是与程序有关的socket档案等,由于仅与自身机器有关,所以当然就不适合分享给其他主机了。
- 不变的:有些资料是不会经常变动的,跟随着distribution而不变动。例如函式库、文件说明档、系统管理员所管理的主机服务设定档等等;
- 可变动的:经常改变的资料,例如登录档、一般用户可自行收受的新闻群组等。
事实上,FHS针对目录树架构仅定义出三层目录底下应该放置什么资料而已,分别是底下这三个目录的定义:
- / (root, 根目录):与开机系统有关;
- /usr (unix software resource):与软体安装/执行有关;
- /var (variable):与系统运作过程有关。
根目录(/) 的意义与内容
根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来的,同时根目录也与开机/还原/系统修复等动作有关。
由于系统开机时需要特定的开机软体、核心档案、开机所需程式、函式库等等档案资料,若系统出现错误时,根目录也必须要包含有能够修复档案系统的程式才行。
在FHS的要求方面,他希望根目录不要放在非常大的分割槽内,因为越大的分割槽妳会放入越多的资料,如此一来根目录所在分割槽就可能会有较多发生错误的机会。
FHS标准建议:根目录(/)所在分割槽应该越小越好,且应用程式所安装的软体最好不要与根目录放在同一个分割槽内,保持根目录越小越好。如此不但效能较佳,根目录所在的档案系统也较不容易发生问题。
FHS定义出根目录(/)底下应该要有底下这些次目录的存在才好,即使没有实体目录,FHS也希望至少有连结档存在才好:
| 目录 | 应放置档案内容 |
|---|---|
| 第一部份:FHS 要求必须要存在的目录 | |
| /usr/bin/ | 所有一般用户能够使用的指令都放在这里!目前新的CentOS 7 已经将全部的使用者指令放置于此,而使用连结档的方式将/bin 连结至此!也就是说, /usr/bin 与/bin 是一模一样了!另外,FHS 要求在此目录下不应该有子目录! |
| /usr/lib/ | 基本上,与/lib 功能相同,所以/lib 就是连结到此目录中的! |
| /usr/local/ | 系统管理员在本机自行安装自己下载的软体(非distribution预设提供者),建议安装到此目录, 这样会比较便于管理。举例来说,你的distribution提供的软体较旧,你想安装较新的软体但又不想移除旧版, 此时你可以将新版软体安装于/usr/local/目录下,可与原先的旧版软体有分别啦!你可以自行到/usr/local去看看,该目录下也是具有bin, etc, include, lib…的次目录喔! |
| /usr/sbin/ | 非系统正常运作所需要的系统指令。最常见的就是某些网路伺服器软体的服务指令(daemon)啰!不过基本功能与/sbin 也差不多, 因此目前/sbin 就是连结到此目录中的。 |
| /usr/share/ | 主要放置唯读架构的资料档案,当然也包括共享文件。在这个目录下放置的资料几乎是不分硬体架构均可读取的资料, 因为几乎都是文字档案嘛!在此目录下常见的还有这些次目录: - /usr/share/man:线上说明文件 - /usr/share/doc:软体杂项的文件说明 - /usr/share/zoneinfo:与时区有关的时区档案 |
| 第二部份:FHS 建议可以存在的目录 | |
| /usr/games/ | 与游戏比较相关的资料放置处 |
| /usr/include/ | c/c++等程式语言的档头(header)与包含档(include)放置处,当我们以tarball方式(*.tar.gz 的方式安装软体)安装某些资料时,会使用到里头的许多包含档喔! |
| /usr/libexec/ | 某些不被一般使用者惯用的执行档或脚本(script)等等,都会放置在此目录中。例如大部分的X视窗底下的操作指令,很多都是放在此目录下的。 |
| /usr/lib |
与/lib |
| /usr/src/ | 一般原始码建议放置到这里,src有source的意思。至于核心原始码则建议放置到/usr/src/linux/目录下。 |
FHS针对根目录所定义的标准就仅有上面的,不过我们的Linux底下还有许多目录你也需要了解一下的。底下是几个在Linux当中也是非常重要的目录:
| 目录 | 应放置档案内容 |
|---|---|
| /lost+found | 这个目录是使用标准的ext2/ext3/ext4档案系统格式才会产生的一个目录,目的在于当档案系统发生错误时, 将一些遗失的片段放置到这个目录下。不过如果使用的是xfs 档案系统的话,就不会存在这个目录了! |
| /proc | 这个目录本身是一个『虚拟档案系统(virtual filesystem)』喔!他放置的资料都是在记忆体当中,例如系统核心、行程资讯(process)、周边装置的状态及网路状态等等。因为这个目录下的资料都是在记忆体当中,所以本身不占任何硬碟空间啊!比较重要的档案例如:/proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net/*等等。 |
| /sys | 这个目录其实跟/proc非常类似,也是一个虚拟的档案系统,主要也是记录核心与系统硬体资讯较相关的资讯。包括目前已载入的核心模组与核心侦测到的硬体装置资讯等等。这个目录同样不占硬碟容量喔! |
/usr 的意义与内容:
依据FHS的基本定义,/usr里面放置的资料属于可分享的与不可变动的(shareable, static)。
其实usr是Unix Software Resource的缩写,也就是『Unix操作系统软体资源』**所放置的目录,而不是使用者的资料啦。
因为是所有系统预设的软体(distribution发布者提供的软体)都会放置到/usr底下,因此这个目录有点类似Windows 系统的『C:\Windows\ (当中的一部份) + C:\Program files \』这两个目录的综合体,系统刚安装完毕时,这个目录会占用最多的硬碟容量。
一般来说,/usr的次目录建议有底下这些:
| 目录 | 应放置档案内容 |
|---|---|
| 第一部份:FHS 要求必须要存在的目录 | |
| /usr/bin/ | 所有一般用户能够使用的指令都放在这里!目前新的CentOS 7 已经将全部的使用者指令放置于此,而使用连结档的方式将/bin 连结至此!也就是说, /usr/bin 与/bin 是一模一样了!另外,FHS 要求在此目录下不应该有子目录! |
| /usr/lib/ | 基本上,与/lib 功能相同,所以/lib 就是连结到此目录中的! |
| /usr/local/ | 系统管理员在本机自行安装自己下载的软体(非distribution预设提供者),建议安装到此目录, 这样会比较便于管理。举例来说,你的distribution提供的软体较旧,你想安装较新的软体但又不想移除旧版, 此时你可以将新版软体安装于/usr/local/目录下,可与原先的旧版软体有分别啦!你可以自行到/usr/local去看看,该目录下也是具有bin, etc, include, lib…的次目录喔! |
| /usr/sbin/ | 非系统正常运作所需要的系统指令。最常见的就是某些网路伺服器软体的服务指令(daemon)啰!不过基本功能与/sbin 也差不多, 因此目前/sbin 就是连结到此目录中的。 |
| /usr/share/ | 主要放置唯读架构的资料档案,当然也包括共享文件。在这个目录下放置的资料几乎是不分硬体架构均可读取的资料, 因为几乎都是文字档案嘛!在此目录下常见的还有这些次目录: - /usr/share/man:线上说明文件 - /usr/share/doc:软体杂项的文件说明 - /usr/share/zoneinfo:与时区有关的时区档案 |
| 第二部份:FHS 建议可以存在的目录 | |
| /usr/games/ | 与游戏比较相关的资料放置处 |
| /usr/include/ | c/c++等程式语言的档头(header)与包含档(include)放置处,当我们以tarball方式(*.tar.gz 的方式安装软体)安装某些资料时,会使用到里头的许多包含档喔! |
| /usr/libexec/ | 某些不被一般使用者惯用的执行档或脚本(script)等等,都会放置在此目录中。例如大部分的X视窗底下的操作指令,很多都是放在此目录下的。 |
| /usr/lib |
与/lib |
| /usr/src/ | 一般原始码建议放置到这里,src有source的意思。至于核心原始码则建议放置到/usr/src/linux/目录下。 |
/var 的意义与内容:
如果/usr是安装时会占用较大硬碟容量的目录,那么/var就是在系统运作后才会渐渐占用硬碟容量的目录。/var目录主要针对常态性变动的档案,包括快取(cache)、登录档(log file)以及某些软体运作所产生的档案, 包括程序档案(lock file, run file),或者例如MySQL资料库的档案等等。
常见的次目录有:
| 目录 | 应放置档案内容 |
|---|---|
| 第一部份:FHS 要求必须要存在的目录 | |
| /var/cache/ | 应用程式本身运作过程中会产生的一些暂存档; |
| /var/lib/ | 程序本身执行的过程中,需要使用到的资料档案放置的目录。在此目录下各自的软体应该要有各自的目录。举例来说,MySQL的资料库放置到/var/lib/mysql/而rpm的资料库则放到/var/lib/rpm去! |
| /var/lock/ | 某些装置或者是档案资源一次只能被一个应用程式所使用,如果同时有两个程式使用该装置时, 就可能产生一些错误的状况,因此就得要将该装置上锁(lock),以确保该装置只会给单一软体所使用。举例来说,烧录机正在烧录一块光碟,你想一下,会不会有两个人同时在使用一个烧录机烧片?如果两个人同时烧录,那片子写入的是谁的资料?所以当第一个人在烧录时该烧录机就会被上锁, 第二个人就得要该装置被解除锁定(就是前一个人用完了)才能够继续使用啰。目前此目录也已经挪到/run/lock 中! |
| /var/log/ | 重要到不行!这是登录档放置的目录!里面比较重要的档案如/var/log/messages, /var/log/wtmp(记录登入者的资讯)等。 |
| /var/mail/ | 放置个人电子邮件信箱的目录,不过这个目录也被放置到/var/spool/mail/目录中!通常这两个目录是互为连结档啦! |
| /var/run/ | 某些程式或者是服务启动后,会将他们的PID放置在这个目录下喔!至于PID的意义我们会在后续章节提到的。与/run 相同,这个目录连结到/run 去了! |
| /var/spool/ | 这个目录通常放置一些队列资料,所谓的『队列』就是排队等待其他程式使用的资料啦! 这些资料被使用后通常都会被删除。举例来说,系统收到新信会放置到/var/spool/mail/中,但使用者收下该信件后该封信原则上就会被删除。信件如果暂时寄不出去会被放到/var/spool/mqueue/中,等到被送出后就被删除。如果是工作排程资料(crontab),就会被放置到/var/spool/cron/目录中! |
针对FHS,各家distributions的异同,与CentOS7 的变化
由于FHS仅是定义出最上层(/)及次层(/usr, /var)的目录内容应该要放置的档案或目录资料, 因此,在其他次目录层级内,就可以随开发者自行来配置了。
CentOS 7 在目录的编排上与过去的版本不同喔!本节稍早之前已经有介绍过,这里做个汇整。比较大的差异在于将许多原本应该要在根目录(/) 里面的目录,将他内部资料全部挪到/usr 里面去,然后进行连结设定!包括底下这些:
- /bin —> /usr/bin
- /sbin —> /usr/sbin
- /lib —> /usr/lib
- /lib64 —> /usr/lib64
- /var/lock —> /run/lock
- /var/run —> /run
5.3.2 目录树(directory tree)
在Linux底下,所有的档案与目录都是由根目录开始的!那是所有目录与档案的源头。他主要的特性有:
- 目录树的启始点为根目录(/, root);
- 每一个目录不止能使用本地端的partition 的档案系统,也可以使用网路上的filesystem 。举例来说, 可以利用Network File System (NFS) 伺服器挂载某特定目录等。
- 每一个档案在此目录树中的档名(包含完整路径)都是独一无二的。
谈完了FHS的标准之后,实际来看看CentOS在根目录底下会有什么样子的资料吧!我们可以下达以下的指令来查询:
| [dmtsai@study ~]$ ls -l / lrwxrwxrwx. 1 root root 7 May 4 17:51 bin -> usr/bin dr-xr-xr-x. 4 root root 4096 May 4 17:59 boot drwxr-xr-x. 20 root root 3260 Jun 2 19:27 dev drwxr-xr-x. 131 root root 8192 Jun 2 23:51 etc drwxr-xr-x. 3 root root 19 May 4 17:56 home lrwxrwxrwx. 1 root root 7 May 4 17:51 lib -> usr/lib lrwxrwxrwx. 1 root root 9 May 4 17:51 lib64 -> usr/lib64 drwxr-xr-x. 2 root root 6 Jun 10 2014 media drwxr-xr-x. 2 root root 6 Jun 10 2014 mnt drwxr-xr-x. 3 root root 15 May 4 17:54 opt dr-xr-xr-x. 154 root root 0 Jun 2 11:27 proc dr-xr-x—-. 5 root root 4096 Jun 3 00:04 root drwxr-xr-x. 33 root root 960 Jun 2 19:27 run lrwxrwxrwx. 1 root root 8 May 4 17:51 sbin -> usr/sbin drwxr-xr-x. 2 root root 6 Jun 10 2014 srv dr-xr-xr-x. 13 root root 0 Jun 2 19:27 sys drwxrwxrwt. 12 root root 4096 Jun 3 19:48 tmp drwxr-xr-x. 13 root root 4096 May 4 17:51 usr drwxr-xr-x. 22 root root 4096 Jun 2 19:27 var | | —- |
如果我们将整个目录树以图示的方法来显示,并且将较为重要的档案资料列出来的话,那么目录树架构有点像这样:

图5.3.1、目录树架构示意图
5.3.3 绝对路径与相对路径
- 绝对路径:由根目录(/)开始写起的档名或目录名称,例如/home/dmtsai/.bashrc;
相对路径:相对于目前路径的档名写法。例如./home/dmtsai或../../home/dmtsai/等等。反正开头不是
**/**就属于相对路径的写法。.:代表当前的目录,也可以使用./来表示;..:代表上一层目录,也可以../来代表。
5.3.4 LSB标准
如同在第一章谈到的Linux distribution的差异性,除了FHS之外,还有个Linux Standard Base (LSB)的标准是可以依循的!我们可以简单的使用ls来查看FHS规范的目录是否正确的存在于你的Linux系统中,那么Linux核心、LSB的标准又该如何查阅呢?基本上,LSB团队是有列出正确支援LSB标准的distribution在如下的网页中:
5.4 重点回顾
- Linux的每个档案中,可分别给予拥有者、群组与其他人三种身份个别的rwx 权限;
- 群组最有用的功能之一,就是当你在团队开发资源的时候,且每个帐号都可以有多个群组的支援;
- 利用ls -l显示的档案属性中,第一个栏位是档案的权限,共有十个位元,第一个位元是档案类型, 接下来三个为一组共三组,为拥有者、群组、其他人的权限,权限有r,w,x三种;
- 如果档名之前多一个『 . 』,则代表这个档案为『隐藏档』;
- 若需要root的权限时,可以使用su - 这个指令来切换身份。处理完毕则使用exit 离开su 的指令环境。
- 更改档案的群组支援可用chgrp,修改档案的拥有者可用chown,修改档案的权限可用chmod
- chmod修改权限的方法有两种,分别是符号法与数字法,数字法中r,w,x分数为4,2,1;
- 对档案来讲,权限的效能为:
- r:可读取此一档案的实际内容,如读取文字档的文字内容等;
- w:可以编辑、新增或者是修改该档案的内容(但不含删除该档案);
- x:该档案具有可以被系统执行的权限。
- 对目录来说,权限的效能为:
- r (read contents in directory)
- w (modify contents of directory)
- x (access directory)
- 要开放目录给任何人浏览时,应该至少也要给予r及x的权限,但w权限不可随便给;
- 能否读取到某个档案内容,跟该档案所在的目录权限也有关系(目录至少需要有x 的权限)。
- Linux档名的限制为:单一档案或目录的最大容许档名为255 个英文字元或128 个中文字元;
- 根据FHS的官方文件指出, 他们的主要目的是希望让使用者可以了解到已安装软体通常放置于那个目录下
- FHS订定出来的四种目录特色为:shareable, unshareable, static, variable等四类;
- FHS所定义的三层主目录为:/, /var, /usr三层而已;
- 绝对路径档名为从根目录/ 开始写起,否则都是相对路径的档名。
