指令:
cat:将一个文件内容读出来的指令
ls:查看文件的指令
离开 su - 则使用 exit
mkdir:建立目录
touch:建立空文件
文件范例说明处:
第[ 1 ]栏代表这个文件的类型与权限(permission):
第一个字符代表这个文件是『目录、文件或链接文件等等』:
当为[ d ]则是目录,例如上表档名为『.config』的那一行;
当为[ - ]则是文件,例如上表档名为『initial-setup-ks.cfg』那一行;
若是[ l ]则表示为连结档(link file);
若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已
。
第一组为『文件拥有者可具备的权限』,以『initial-setup-ks.cfg』那个文件为例, 该文件的拥有者可以读写,但不可执行;
第二组为『加入此群组之账号的权限』;
第三组为『非本人且没有加入本群组之其他账号的权限』。
第[ 2 ]栏表示有多少文件名连结到此节点(i-node):
每个文件都会将他的权限与属性记录到文件系统的 i-node 中,不过,我们使用的目录树却是使用文件名来记录, 因此每个文件名就会连结到一个 i-node !这个属性记录的,就是有多少不同的文件名连结到相同的一个 i-node 号码去就是了。 关于 i-node 的相关资料我们会在第七章谈到文件系统时再加强介绍的。
第[ 3 ]栏表示这个文件(或目录)的『拥有者账号』
第[ 4 ]栏表示这个文件的所属群组
在 Linux 系统下,你的账号会加入于一个或多个的群组中。举刚刚我们提到的例子,class1, class2, class3均属于 projecta 这个群组,假设某个文件所属的群组为 projecta,且该文件的权限如图 5.2.2 所示(-rwxrwx---),则 class1, class2, class3 三人对于该文件都具有可读、可写、可执行的权限(看群组权限)。但如果是不属于 projecta 的其他账号,对于此文件就不具有任何权限了。
第[ 5 ]栏为这个文件的容量大小,默认单位为 bytes;
第[ 6 ]栏为这个文件的建档日期或者是最近的修改日期:
这一栏的内容分别为日期(月/日)及时间。如果这个文件被修改的时间距离现在太久了,那么时间部分会仅显示年份:『.tcshrc』那个文件为例
第[ 7 ]栏为这个文件的文件名
这个字段就是档名了。比较特殊的是:如果档名之前多一个『 . 』,则代表这个文件为『隐藏档』,例如上表中的.config 那一行,该文件就是隐藏档。 你可以使用『ls』及『ls -a』这两个指令去感受一下什么是隐藏档。
改变文件属性与权限([option] 参考man page)
chgrp group(组) [选项] 组文件
:改变文件所属群组
chown [options] user[:group] file
:改变文件拥有者(如果用户名后面紧跟着冒号和组名或者是数字组标识),并且它们之间没有空格,那么文件的组所有权也随之改变。
chmod [options] mode file
:权限的设定方法有两种, 分别可以使用数字或者是符号来进行权限的变更:
1、数字类型改变文件权限文件的权限
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
那如果要将权限变成『 -rwxr-xr-- 』呢?那么权限的分数就成为 [4+2+1][4+0+1[4+0+0]=754,所以你需要下达『 chmod 754 filename』
2、符号类型改变文件权限
还有一个改变权限的方法呦!从之前的介绍中我们可以发现,基本上就九个权限分别是(1)user(2)group(3)others 三种身份!那么我们就可以藉由 u, g, o 来代表三种身份的权限!此外, a 则代表 all 亦即全部的身份!那么读写的权限就可以写成 r, w, x !也就是可以使用底下的方式来看:
那么假如是『 -rwxr-xr-- 』这样的权限呢?可以使用『 chmod u=rwx,g=rx,o=r filename 』来设定。
如果只想要增加文件的每个人均可写入的权限:chmod a+w filename
如果是要将权限去掉而不更动其他已存在的权限,例如要拿掉全部人的可执行权限:chmod a-x filename
目录与文件之权限意义:
权限对文件的重要性
文件是实际含有数据的地方,包括一般文本文件、数据库内容文件、二进制可执行文件(binary
program)等等。 因此,权限对于文件来说,他的意义是这样的:
r (read):可读取此一文件的实际内容,如读取文本文件的文字内容等;
w (write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件);
x (eXecute):该文件具有可以被系统执行的权限(具有『可执行的权限』以及『具有可执行的程序代码』是两回事!在 Linux 底下,你可以让一个文本文件,例如我们之前写的 text.txt 具有『可执行的权限』 (加入 x 权限即可), 但是这个文件明显的无法执行,因为他不具备可执行的程序代码!这个 x 代表这个文件具有可执行的能力, 但是能不能执行成功,当然就得要看该文件的内容)
。
那个可读(r)代表读取文件内容是还好了解,那么可执行(x)呢?这里你就必须要小心啦! 因为在Windows 底下一个文件是否具有执行的能力是藉由『 扩展名 』来判断的, 例如:.exe, .bat, .com 等等,但是在 Linux 底下,我们的文件是否能被执行,则是藉由是否具有『x』这个权限来决定的!跟文件名是没有绝对的关系的!
至于最后一个 w 这个权限呢?当你对一个文件具有 w 权限时,你可以具有写入/编辑/新增/修改文件的内容的权限, 但并不具备有删除该文件本身的权限!对于文件的 rwx 来说, 主要都是针对『文件的内容』而言,与文件档名的存在与否没有关系喔!因为文件记录的是实际的数据嘛!
权限对目录的重要性
文件是存放实际数据的所在,那么目录主要是储存啥玩意啊?目录主要的内容在记录文件名列表,文件名与目录有强烈的关连啦! 所以如果是针对目录时,那个 r, w, x 对目录是什么意义呢?
r (read contents in directory):
表示具有读取目录结构列表的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的
文件名数据。 所以你就可以利用 ls 这个指令将该目录的内容列表显示出来!
w (modify contents of directory):
这个可写入的权限对目录来说,是很了不起的! 因为他表示你具有异动该目录结构列表的权限,也就是底
下这些权限:
o 建立新的文件与目录;
o 删除已经存在的文件与目录(不论该文件的权限为何!)
o 将已存在的文件或目录进行更名;
o 搬移该目录内的文件、目录位置。
总之,目录的 w 权限就与该目录底下的文件名异动有关就对了啦!
x (access directory):
咦!目录的执行权限有啥用途啊?目录只是记录文件名而已,总不能拿来执行吧?没错!目录不可以被执行,目录的 x 代表的是用户能否进入该目录成为工作目录的用途! 所谓的工作目录(work directory)就是你目前所在的目录啦!举例来说,当你登入 Linux 时, 你所在的家目录就是你当下的工作目录。而变换目录的指令是『cd』(change directory)。
现在让我们汇整一下数据:
组件 | 内容 | 迭代物件 | r | w | x |
---|---|---|---|---|---|
文件 | 详细资料 data | 文件文件夹 | 读到文件内容 | 修改文件内容 | 执行文件内容 |
目录 | 文件名列表 | 可分类抽屉 | 读到文件名列表 | 异动该目录结构列表 | 进入该目录的权限(key) |
Linux 目录配置的依据--FHS
根据 FHS(注 2)的标准文件指出,他们的主要目的是希望让使用者可以了解到已安装软件通常放置于那个目录下, 所以他们希望独立的软件开发商、操作系统制作者、以及想要维护系统的用户,都能够遵循 FHS 的标准。 也就是说,FHS 的重点在于规范每个特定的目录下应该要放置什么样子的数据而已。 这样做好处非常多,因为 Linux 操作系统就能够在既有的面貌下(目录架构不变)发展出开发者想要的独特风格。
事实上,FHS 是根据过去的经验一直再持续的改版的,FHS 依据文件系统使用的频繁与否与是否允许使用者随意更动, 而将目录定义成为四种交互作用的形态,用表格来说有点像底下这样:
绝对路径与相对路径
绝对路径:由根目录(/)开始写起的文件名或目录名称, 如/home/dmtsai/.bashrc;
相对路径:相对于目前路径的文件名写法。 例如 ./home/dmtsai 或 ../../home/dmtsai/ 等等。反正开头不是 /就属于相对路径的写法。
而你必须要了解,相对路径是以『你当前所在路径的相对位置』来表示的。举例来说,你目前在 /home这个目录下, 如果想要进入 /var/log 这个目录时,可以怎么写呢?
- cd /var/log (absolute)
- cd ../var/log (relative)
因为你在 /home 底下,所以要回到上一层 (../) 之后,才能继续往 /var 来移动的! 特别注意这两个特殊的目录:
. :代表当前的目录,也可以使用 ./ 来表示;
.. :代表上一层目录,也可以 ../ 来代表。
这个 . 与 .. 目录概念是很重要的,你常常会看到 cd .. 或 ./command 之类的指令下达方式, 就是代表上一层与目前所在目录的工作状态喔
总结:
1、Linux 的每个文件中,可分别给予使用者、群组与其他人三种身份个别的 rwx 权限;
群组最有用的功能之一,就是当你在团队开发资源的时候,且每个账号都可以有多个群组的支持;
2、利用 ls -l 显示的文件属性中,第一个字段是文件的权限,共有十个位,第一个位是文件类型, 接下来三个为一组共三组,为使用者、群组、其他人的权限,权限有 r,w,x 三种;
3、如果档名之前多一个『 . 』,则代表这个文件为『隐藏档』;
4、若需要 root 的权限时,可以使用 su - 这个指令来切换身份。处理完毕则使用 exit 离开 su 的指令环境。
5、更改文件的群组支持可用 chgrp,修改文件的拥有者可用 chown,修改文件的权限可用 chmod
6、chmod 修改权限的方法有两种,分别是符号法与数字法,数字法中 r,w,x 分数为 4,2,1;
7、对文件来讲,权限的效能为:
r:可读取此一文件的实际内容,如读取文本文件的文字内容等;
w:可以编辑、新增或者是修改该文件的内容(但不含删除该文件);
x:该文件具有可以被系统执行的权限。
8、对目录来说,权限的效能为:
r (read contents in directory)
w (modify contents of directory)
x (access directory)
9、 要开放目录给任何人浏览时,应该至少也要给予 r 及 x 的权限,但 w 权限不可随便给;
10、 能否读取到某个文件内容,跟该文件所在的目录权限也有关系 (目录至少需要有 x 的权限)。
11、Linux 档名的限制为:单一文件或目录的最大容许文件名为 255 个英文字符或 128 个汉字字符;
12、根据 FHS 的官方文件指出,他们的主要目的是希望让使用者可以了解到已安装软件通常放置于那个目录下
13、 FHS 订定出来的四种目录特色为:shareable, unshareable, static, variable 等四类;
14、FHS 所定义的三层主目录为:/, /var, /usr 三层而已;
15、 绝对路径文件名为从根目录 / 开始写起,否则都是相对路径的文件名。