1、文件的基本权限
我们之前介绍了用户与组。在操作系统中,每一个文件都会有属主(拥有这个文件的用户,user)、属组(拥有这个文件的组,group)。既不是这个文件的属主,也不属于其属组的用户,对这个文件来讲,就是其他用户(other)
大家是否还记得ls -al的迷之输出?
我们已经知道,最左侧的第一位指的是文件的类型。忘记的童鞋请前往传送门:011文本查看类命令
左侧右边的九位则是与权限相关的,今天我们就来详细介绍。
第二列是链接数,我们会在讲文件系统的时候给大家介绍。
第三列和第四列出的是文件的属主与属组。
第五列是文件的大小(如果是设备文件,显示的是主次设备号)
后面的几列列出的是文件的修改时间(mtime)和文件名
权限分三种:可读(r)、可写(w)、可执行(x)。而权限为什么要用九个位置表示呢。
rwxrwxrwx:
左三位:定义user(owner)的权限
中三位:定义group的权限;
右三位:定义other的权限
当我们需要使用一个文件的时候,无非也是对文件进行三种行为:读取(文本/数据文件)、写入(文本/数据文件)、执行(二进制程序文件或高级语言程序文件)
我们要对文件产生行为的时候,必然也要借助与命令,而我们执行命令的时候,又必然是以某种用户的身份去执行的。
因此,我们对文件进行访问时,会遵循以下原则:
判断执行命令的时候,运行该命令的用户与文件的属主是否相同;
如果相同,则应用属主权限;
否则,则检查运行该命令的用户是否属于文件的属组;如果是,则应用属组权限;
否则,就只能应用other的权限;
再来回忆一下,权限的种类分为:
r:readable, 读
w:writable, 写
x:excutable,执行
对于非目录文件来说:
r表示:可获取文件的数据;
w表示: 可修改文件的数据;
x表示:可将此文件运行为进程;
对于目录来说:
r:可使用ls命令获取其下的所有文件列表;
w:可修改此目录下的文件列表;即创建或删除文件;
x:可cd至此目录中,且可使用ls -l来获取所有文件的详细属性信息;
权限可以用rwx来表示,也常常用二进制转换为八进制的数字来表示:
什么意思呢,以左三位权限为例,rwx的权限只有两种状态:有或者没有,因此可以用1和0来表示。比如,rwx可以表示为111,二进制转为八进制就是4+2+1=7。
因此,权限可以组合为:
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
如,某个文件的权限为rwxr-x---,用数字表示就是750,rwxr-xr-x就是755.
2、改变文件权限:chmod
(1) chmod [OPTION]... MODE[,MODE]...FILE...
MODE表示法:
赋权表示法:直接操作一类用户的所有权限位rwx;
u=
g=
o=
a=
授权表示法:直接操作一类用户的一个权限位r,w,x;
u+,u-
g+,g-
o+,o-
a+,a-
如:
[root@localhost tmp]# touch test_chmod
[root@localhost tmp]# ll test_chmod
-rw-r--r--. 1 root root 0 Aug 13 19:45 test_chmod
使用赋权表示法,将权限改为rwxrw----(760)
[root@localhost tmp]# chmodu=rwx,g=rw-,o=--- test_chmod
[root@localhost tmp]# ll test_chmod
-rwxrw----. 1 root root 0 Aug 13 19:45test_chmod
[root@localhost tmp]#
使用授权表示法,取消属组的w权限,赋予other读权限
[root@localhost tmp]# chmod g-w,o+r test_chmod
[root@localhost tmp]# ll test_chmod
-rwxr--r--. 1 root root 0 Aug 13 19:45test_chmod
[root@localhost tmp]#
(2) chmod [OPTION]... OCTAL-MODE FILE...
八进制数字的格式修改文件权限,如,将该文件权限改为全部放通:
[root@localhost tmp]# chmod 777 test_chmod
[root@localhost tmp]# ll test_chmod
-rwxrwxrwx. 1 root root 0 Aug 13 19:45test_chmod
再改回原来的权限(文件权限777是很危险且不合理的行为):
[root@localhost tmp]# chmod 744 test_chmod
[root@localhost tmp]# ll test_chmod
-rwxr--r--. 1 root root 0 Aug 13 19:45test_chmod
(3) chmod [OPTION]... --reference=RFILE FILE...
参考某文件的权限来设置文件权限:
如,参照/etc/fstab的权限给该文件赋权:
[root@localhost tmp]# ll /etc/fstab
-rw-r--r--. 1 root root 465 Jul 24 18:32/etc/fstab
[root@localhost tmp]# chmod--reference=/etc/fstab test_chmod
[root@localhost tmp]# ll test_chmod
-rw-r--r--. 1 root root 0 Aug 13 19:45 test_chmod
[root@localhost tmp]#
另外,对于目录可以使用-R, --recursive进行递归修改
注意:用户仅能修改属主为自己的那些文件的权限;root可以修改任意文件的权限。
3、改变文件的属主:chown
chown命令:
chown[OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
对于目录而言可以使用-R对目录内的文件进行递归操作。
举例:
[root@localhost tmp]# mkdir test_chown
[root@localhost tmp]# touch test_chown/test1
[root@localhost tmp]# ll test_chown/test1
-rw-r--r--. 1 root root 0 Aug 13 21:31test_chown/test1
改变其属主为test用户(用户需存在于系统哦,如果没有请你创建一个)
[root@localhost tmp]# chown testtest_chown/test1
[root@localhost tmp]# ll test_chown/test1
-rw-r--r--. 1 test root 0 Aug 13 21:31test_chown/test1
[root@localhost tmp]#
看到了么,文件的属主已经改为test了。
我们还可以用-R选项对目录及目录内的文件进行递归修改。
如:我们将test_chown目录及其内的文件均改为root用户所有。
[root@localhost tmp]# chown -R roottest_chown
[root@localhost tmp]# ll -d test_chown/
drwxr-xr-x. 2 root root 19 Aug 13 21:31test_chown/
[root@localhost tmp]# ll test_chown/
total 0
-rw-r--r--. 1 root root 0 Aug 13 21:31test1
[root@localhost tmp]#
4、改变文件的属组:chgrp
用法:
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
用法请类比chown命令,在此不做多余的演示。
最后需注意一点:仅管理员可修改文件的属主和属组
下一节为大家介绍文件的隐藏属性与默认权限。