用户组与文件权限
一、ls命令
虽然本篇重点讲的是用户组与文件权限,但是这一切都要从ls这个命令说起,故先介绍ls这个命令。ls(List)命令是linux下最常用的命令之一,ls跟dos下的dir命令是一样的都是用来列出目录下的文件。
几个重要的参数如下:
1. ls -a 列出文件下所有的文件,包括以“.“开头的隐藏文件(linux下文件隐藏文件是以.开头的,如果存在..代表存在着父目录)。
2. ls -l 列出文件的详细信息,如创建者,创建时间,文件的读写权限列表等等。
3. ls -F 在每一个文件的末尾加上一个字符说明该文件的类型。"@"表示符号链接、"|"表示FIFOS、"/"表示目录、"="表示套接字。
4. ls -s 在每个文件的后面打印出文件的大小。 size(大小)
5. ls -t 按时间进行文件的排序 Time(时间)
6. ls -A 列出除了"."和".."以外的文件。
7. ls -R 将目录下所有的子目录的文件都列出来,相当于我们编程中的“递归”实现
8. ls -L 列出文件的链接名。Link(链接)
9. ls -S 以文件的大小进行排序
简单测试如下:
补充三点:
1.文件名前面有.的表示隐藏文件
2.不同的颜色有不同的含义(上图不全):
绿色---->代表可执行文件
红色---->代表压缩文件
深蓝色---->代表目录
浅蓝色----->代表链接文件
灰色--→代表其它的一些文件
3.ls -al 显示的共有七列,含义分别为:
第一列:文件的类型与权限
第二列:有多少文件名连接到此节点(i-node)
第三列:所有者账号
第四列:文件所属用户组
第五列:容量大小,默认单位B
第六列:创建或最近修改日期
第七列:文件名
二、用户与用户组
在ls -al查看的文件中,第三列与第四列为所有者与文件所在组。这个概念比较重要。
由于Linux系统是多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
用户和用户组属于多对多关系,一个用户可以同时属于多个用户组,一个用户组可以包含多个不同的用户。使用用户组的好处是便于一个小组合作开发。
关于所有者,文件所在组与其他组的概念区分为:
所有者:一般为文件的创建者,谁创建了该文件,就天然的成为该文件的所有者
文件所在组:当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组
其它组:除开文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组
三、文件类型与权限
在ls -al查看的文件中,第一列为文件权限。这个概念非常重要。
从上面可以看出,文件权限共有十个字符组成。第一个字符为文件类型,后面九个字符每三个为一组,分别表示所有者、文件所在组、其他人的权限。具体看下面介绍。
1.文件类型
在Linux中,文件类型此字符有关,并不像windows中以扩展名区分。(虽然Linux中有看起来像是扩展名的存在,比如proximity.conf,但是这个扩展名仅为了方便区分,并没有实质性作用)。
在Lunux中有这几种类型
-:普通文件
d:目录
c:字符设备
s:套接字
p:管道
b: 块设备
l: 链接
例如上图,.bashrc就是文件,.cache就是目录(上面有介绍,开头是.表示隐藏文件)
2.文件权限
在剩余的九个字符中,每三个为一组,第一组是所有者的权限,第二组是文件所在组的权限,第三组是不同组的其他用户的权限。
每一组的顺序都是为RWX,含义分别为读(r)、写(w)、执行(x),如果没有权限就用-代替,但是顺序不会变化。
例如:如果一个文件的属性为-rwxrw-r--
解读一下就是:这个是一个文件(第一位为-),所有者的权限为可读可写可执行(RWX),同组的用户权限是可读可写不可执行(RW-),其他组的权限是可读不可写和不可执行(R–)
这是对于一个文件来说的,同样对于文件夹也有这样的属性,那文件夹的可执行是什么,可读可写又是什么?
对于文件夹(目录)来说,
r权限:可以查看目录中的文件信息
w权限:可以在目录中添加删除文件
x权限:可以进入目录
这个很难区分RX权限,具体看例子
如果一个目录权限是RWX 则表示,对这个目录,可以查看信息,可以在目录中添加删除文件,可以进入目录
如果一个目录权限是R-- 则表示,对这个目录,可以查看信息,不可以在目录中添加删除文件,不可以进入目录。这里解释一下:可以查看信息是指可以用ls查看目录下的内容,不可进入目录指的是不可cd进入作为工作目录。
如果一个目录权限是R-W 则表示,对这个目录,可以查看信息,不可以在目录中添加删除文件,可以进入目录。即可以查看信息是指可以用ls查看目录下的内容,可进入目录指的是不可cd进入作为工作目录,但是不能删除添加文件。
注意:W权限具有删除功能,不可随便添加这个权限。
四、群组和权限修改
简单的介绍完上面的第一列、第三列和第四列后,就说一下修改方法。
1.chgrp : 改变档案所属群组
chgrp [-R] dirname/filename ...
选项与参数:-R :进行递归(recursive)的持续变更,亦即连同次目录下的所有档案、目录都更新成为这个群组之意。常常用在变更某一目录内所有的档案之情况。
2.chown : 改变档案拥有者
chown [-R] 账号名称 档案或目录
chown [-R] 账号名称:组名 档案或目录
选项与参数: -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有档案都变更
3.chmod :改变文件或目录的权限
3.1 数字类型
刚才介绍了RWX三个表示可读可写可执行,三个权限的数字为:r:4 w:2 x:1 这样可以用0-7这8个数字表示所有的权限,例如RW-就是4+2+0=6,RWX就是4+2+1=7,—就是0+0+0=0
chmod [-R] xyz 档案或目录
选项与参数:
xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有档案都会变更
3.2符号类型
刚才说的九个字符是三种用户的权限,用户分别是(1)user (2)group (3)others,那么我们就可以由u, g, o来代表三种身份的权限,此外, a 则代表 all 亦即全部的身份。
那么读写的权限就可以写成r, w, x也就是可以用下面的方式来看:
例如:
chmod u=rwx,go=rx .bashrc
# 设置user的权限是RWX,group和other的权限是RX,注意go是连在一起的,中间并没有任何空格符
chmod a-x .bashrc
#删掉所有人的执行权限