本文介绍的是Linux文件及目录权限的相关概念、对文件和目录权限进行修改的相关操作!
一、权限涉及的概念
权限的操作主要涉及以下几个概念:
- 角色
角色包括所属用户(即所有者)、所属群组、其他人。通常用user(u)、group(g)、others(o)来表示前面的三种角色。 -
权限
权限包括读、写、执行三种权限。通常用read(r)、write(w)、execute(x)来表示前面的三种权限,这三种权限针对不同的操作对象(文件、目录)又有不同的含义。 -
操作对象
操作对象包括文件、目录两种。
下面对权限的操作就是针对上面几个概念进行的!
既然这里的重点是“权限”,那我们来看一下文件及目录的权限,在我的机器上有这样几个文件和目录:
[admin@centos-ss iwwenbo]$ pwd
/usr/share/nginx/html/iwwenbo
[admin@centos-ss iwwenbo]$ ll
total 24
-rw-r--r-- 1 admin www 15086 Jun 26 2016 favicon.ico
-rw-r--r-- 1 admin www 432 Aug 5 2016 index.php
drwxr-xr-x 3 admin www 4096 Aug 18 03:33 sites
我使用的是iwwenbo这个用户进行登陆的,当前目录是/usr/share/nginx/html/iwwenbo
,使用ll
查看当前目录的文件,可以发现包含的信息有:
从上图可以看出,包含的信息包括7部分:
[1] 代表这个文件的类型与权限(permission);
[2] 表示有多少档名连结到此节点(i-node);
[3] 表示这个文件(或目录)的拥有者账号;
[4] 表示这个文件的所属群组;
[5] 表示这个文件的容量大小,默认单位为bytes;
[6] 表示这个文件的建档日期或者是最近的修改日期;
[7] 表示这个文件的档名;
二、更改角色
权限离不开角色,更改角色和权限的命令有:
- chgrp :改变文件所属群组(change group);
- chown :改变文件拥有者(change owner);
具体命令格式为:
#-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件、目录都更新成为这个群组之意。常常用在变更某一目录内所有的文件之情况。
chgrp [-R] group_name dirname/filename
#-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都变更
chown [-R] 用户账号名称 文件或目录
#chown在更改所属用户时也可以将所属群组一起修改,具体语法
chown [-R] 账号名称:组名 文件或目录
补充:
chown也可以使用『chown user.group file』,亦即在拥有者与群组间加上小数点『.』也行! 不过很多朋友设定账号时,喜欢在账号当中加入小数点(例如vbird.tsai这样的账号格式),这就会造成系统的误判了! 所以我们比较建议使用冒号『:』来隔开拥有者与群组啦!此外,chown也能单纯的修改所属群组呢! 例如『chown .sshd install.log』就是修改群组~看到了吗?就是那个小数点的用途!
三、权限对于文件和目录作用的区别:
对于文件
文件是实际含有数据的地方,包括一般文本文件、数据库内容文件、二进制可执行文件(binary program)等等。 因此,权限对于文件来说,他的意义是这样的:
- r (read):可读取此一文件的实际内容,如读取文本文件的文字内容等;
- w (write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件);
- x (execute):该文件具有可以被系统执行的权限。
对于目录
目录主要的内容在记录文件名列表,文件名与目录有强烈的关连啦! 所以如果是针对目录时,那个 r, w, x 对目录是什么意义呢?
- r (read contents in directory):
表示具有读取目录结构列表的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据。 所以你就可以利用 ls
这个指令将该目录的内容列表显示出来!
- w (modify contents of directory):
这个可写入的权限对目录来说,是很了不起的! 因为他表示你具有异动该目录结构列表的权限,也就是底下这些权限:
- 建立新的文件与目录;
- 删除已经存在的文件与目录(不论该文件的权限为何!)
- 将已存在的文件或目录进行更名;
- 搬移该目录内的文件、目录位置。
总之,目录的w权限就与该目录底下的文件名异动有关就对了啦!
- x (access directory):
咦!目录的执行权限有啥用途啊?目录只是记录文件名而已,总不能拿来执行吧?没错!目录不可以被执行,目录的x代表的是用户能否进入该目录成为工作目录的用途! 所谓的工作目录(work directory)就是你目前所在的目录啦!举例来说,当你登入Linux时, 你所在的家目录就是你当下的工作目录。而变换目录的指令是『cd』(change directory)啰!
四、更改权限
更改权限操作离不开角色,权限更改的实际意义在于,更改对应角色对指定文件或目录的作用权限。使用chmod命令设定权限时有两种方式:通过数字或通过符号来进行权限的变更!
一个文件的权限字符大概如下:
-rwxrwxrwx
除了第一个字符表示的是文件类型外,其他9个字符则表示的是权限,每3个一组,代表了3个角色的权限信息。
使用数字进行权限变更
权限的数字表示为:
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
使用数字进行权限设定的命令如下:
#xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
#-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更
chmod [-R] xyz 文件或目录
使用符号进行权限变更
我们可以由u, g, o来代表三种身份的权限!此外, a 则代表 all 亦即全部的身份!那么读写的权限就可以写成r, w, x!也就是可以使用底下的方式来看:
来实作一下吧!假如我们要『设定』一个文件的权限成为『-rwxr-xr-x』时,基本上就是:
- user (u):具有可读、可写、可执行的权限;
- group 与 others (g/o):具有可读与执行的权限。
所以就是:
[root@www ~]# chmod u=rwx,go=rx .bashrc
# 注意喔!那个 u=rwx,go=rx 是连在一起的,中间并没有任何空格!
[root@www ~]# ls -al .bashrc
-rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc
更多详情参见『鸟哥的Linux私房菜』。
最新评论
我的是ipv4网络,如何使用直播源啊!
我今天试了,不想啊,我的是新疆昌吉移动的网络。
收不到验证码电报
现在充值29起了