目录
一.使用者与群组
1.文件拥有者
由于 Linux是个多人多任务的系统,因此可能常常会有多人同时使用这部主机来进行工作的情况发生,为了考虑每个人的隐私权以
及每个人喜好的工作环境,因此,这个文件拥有者的角色就显的相当的重要了!
例如当你将你的文件放在你自己的家目录,你总不希望被其他人看见自己的文件吧?这个时候,你就把该文件设定成只有文件拥有者,就是我,才能看与修改这个文件的内容,那么即使其他人知道你有这个文件,不过由于你有设定适当的权限,所以其他人自然也就无法知道该文件的内容。
2.群组概念
举例来说,假设有两组专题生在我的主机里面,每组的组员之间必须要能够互相修改对方的数据,但是其他组的组员则不能看到本组自己的文件内容,此时该如何是好?我可以经由简易的文件权限设定,就能限制非自己团队(也就是群组)的其他人不能够阅览内容,但可以让自己的团队成员可以修改我所建立的文件!
3.其他人的概念
除了上述所述的文件拥有者和群组以外的所有用户都可以被称为其他人。(除了root)
4.Linux用户身份与群组记录的文件
在 Linux系统当中,默认的情况下,所有的系统上的账号与一般身份使用者,还有那个root的相关信息,都是记录在/etc/passwd这个文件内的。至于个人的密码则是记录在/etc/ shadow这个文件下此外, Linux所有的组名都纪录在/etc/group内。
二.Linux文件权限概念
1.Linux文件属性
首先使用su切换身份成为root后,输入命令 ls -al,结果如下
ls是list的意思,重点在显示文件的文件名与相关属性。而选项 -al 则表示列出所有的文件详细的权限与属性(包含隐藏文件,就是文件名第一个字符为.的文件)。如上所示,在你第一次以root身份登入 Linux时,如果你输入上述指令后,应该有上列的几个东西,先解释一下上面七个字段个别的意思
第一栏代表这个文件的类型与权限 :
第一个字符代表这个文件是目录、文件或链接文件等等:
- 当为d则代表目录
- 当为-则代表文件
- 当为I则表示为连结档
- 当为b则表示为装置文件里面的可供储存的接口设备(可随机存取装置)
- 当为c则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)
接下来的字符中,以三个为一组,且均为 rwx 的三个参数的组合。其中,r代表可读(read)、w代表可写(write)、x代表可执行( execute)。要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 - 而已。
- 第一组为文件拥有者可具备的权限
- 第二组为加入此群组之账号的权限
- 第三组为非本人且没有加入本群组之其他账号的权限
第二栏表示有多少档名连结到此节点(i-node): 每个文件都会将他的权限与属性记录到文件系统的 i-node中,不过,我们使用的目录树却是使用文件名来记录,因此每个档名就会连结到一个i-node。这个属性记录的,就是有多少不同的档名连结到相同的一个i-node号码。
第三栏表示这个文件或目录的拥有者账号
第四栏表示这个文件的所属群组
第五栏为这个文件的容量大小,默认单位为 bytes
第六栏为这个文件的建档日期或者是最近的修改日期
第七栏为这个文件的档名:这个字段就是档名了。比较特殊的是:如果档名之前多一个 . ,则代表这个文件为隐藏档,你可以使用 ls 及 ls -a 这两个指令去感受下二者的不同。
三.如何改变文件属性与权限
如何修改一个文件的属性与权限呢?我们先介绍几个常用于群组、拥有者、各种身份的权限之修改的指令,如下所示:
chgrp //改变文件所属群组
chown //改变文件拥有者
chomd //改变文件的权限等
1.改变所属群组 chgrp
这个指令就是 change group的缩写,要被改变的组名必须要在/etc/ group文件内存在才行,否则就会显示错误!
假设你已经是root的身份了,那么在你的家目录内有一个名为 initial-setup-ks.cfg的文件,如何将该文件的群组改变一下呢?假设你已经知道在/etc/ group里面已经存在一个名为 users的群组,但是testing这个群组名字就不存在/etc/goup当中了,此时改变群组成为 users与 testing分别会有什么现象发生呢?
我们发现文件的群组被改成 users了,但是要改成 testing的时候,就会发生错误。
2.改变文件拥有者 chown
改变拥有者就是 change owner,就是 chown这个指令的用途,要注意的是,用户必须是已经存在系统中的账号,也就是在/etc/ passwd这个文件中有纪录的用户名称才能改变。chown的用途还满多的,他还可以顺便直接修改群组的名称呢!此外,如果要连目录下的所有次目录或文件同时更改文件拥有者的话,直接加上-R的选项即可!我们来看看语法与范例。
3.改变权限 chmod
文件权限的改变使用的是 chmod这个指令,但是,权限的设定方法有两种,分别可以使用数字或者是符号来进行权限的变更。我们就来谈一谈:
(1)数字类型改变文件权限
我们可以使用数字来代表各个权限,各权限的分数对照表如下:
r : 4
w : 2
x : 1
每种身份各自的三个权限(rwx)分数是需要累加的,例如当权限为: -rwxrwx--- 分数则是
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others = --- = 0+0+0 = 0
所以当我们设定权限的变更时,该文件的权限数字就是770。变更权限的指令 chmod的语法是这样:
举例来说,如果要将.bashrc这个文件所有的权限都设定启用,那么就下达:
那如果要将权限变成-rwxr-xr--呢?那么权限的分数就成为[4+2+1][4+0+1][4+0+0]=754.所以你需要下达
chomd 754 filename
(2)符号类型改变文件权限
从之前的介绍中我们可以发现,基本上就九个权限分别是(1)user(2) group(3) others三种身份啦!那么我们就可以由u,g,o来代表三种身份的权限!此外,a则代表all亦即全部的身份!那么读写的权限就可以写成r,w,x.也就是可以使用底下的方式来看
假如我们要设定一个文件的权限成为 -rwxr-xr-x 时
那么假如是 -rwxr-xr-- 这样的权限呢?可以使用
chomd u=rwx,g=rx,o=r filename
来设定。此外,如果我不知道原先的文件属性,而我只想要增加 .bashrc这个文件的每个人均可写入的权限,那么我就可以使用
而如果是要将权限去掉而不更动其他已存在的权限呢?例如要拿掉全部人的可执行权限,则:
四.目录与文件之权限意义
1.权限对文件的重要性
文件是实际含有数据的地方,包括一般文本文件、数据库内容文件、二进制可执行文件等等。因此,权限对于文件来说,他的意义是这样的:
- r(read):可读取此一文件的实际内容,如读取文本文件的文字内容等。
- w(write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件)。
- x( eXecute):该文件具有可以被系统执行的权限。
在Windows底下一个文件是否具有执行的能力是由扩展名来判断的,例如:exe,bat,com等等,但是在Linux底下,我们的文件是否能被执行,则是藉由是否具有x这个权限来决定的!跟档名是没有绝对的关系的!
至于最后一个w这个权限呢?当你对一个文件具有w权限时,你可以具有写入编辑/新增/修改文件的内容的权限,但并不具备有删除该文件本身的权限!
2.权限对目录的重要性
文件是存放实际数据的所在,目录主要的内容在记录文件名列表,文件名与目录有强烈的关连。所以如果是针对目录时,那个r,w,x对目录是什么意义呢?
- ·r:表示具有读取目录结构列表的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据。所以你就可以利用ls这个指令将该目录的内容列表显示出来。
- w:这个可写入的权限对目录来说,表示你具有异动该目录结构列表的权限,也就是底下这些权限
- 建立新的文件与目录
- 删除已经存在的文件与目录(不论该文件的权限为什么)
- 将已存在的文件或目录进行更名
- 搬移该目录内的文件、目录位置
- x:目录的x代表的是用户能否进入该目录成为工作目录的用途!所谓的工作目录就是你目前所在的目录。举例来说,当你登录 Linux时,你所在的家目录就是你当下的工作目录。