这节开始学习Linux文件权限的知识。
1)了解权限分类及权限起到的限制作用
为什么说Linux比Windows更安全,主要因为Linux在对文件权限控制方面做得比较好。文件权限就是文件的访问控制权限,即哪些用户和组群可以访问文件以及可以执行什么样的操作。Linux系统是一个典型的多用户系统,不同的用户处于不同的地位,对文件和目录有不同的访问权限。用户对文件的操作权限包括3种,分别是读权限、写权限和可执行权限。
读权限(Read):
允许用户读取文件内容或者列目录。
写权限(Write):
允许用户修改文件内容或者创建、删除文件。
可执行权限(eXecute):
允许用户执行文件或者使用cd命令进入目录。
其他都好理解,我们单说下文件的执行权限。
在Linux中,有些文件是需要执行权限的,比如编写的shell脚本文件(该文件执行过程中可以批量执行指令),必须要有执行权限才可以。
写一个简单的shell脚本小程序:
#!/bin/bash cd / ls -l
保存为a.sh,执行下:
因为a.sh包括文件属主都没有执行权限,所以报错:没有权限。
使用超级用户执行下:
连超级用户也无法执行,所以需要先给予文件执行权限,怎么给予,下面继续介绍。
2)如何查看文件及目录权限
通过使用ls -l命令列出目录和文件的详细信息,可以查看不同类型用户所对应的权限。
3)修改权限 change mod
使用chmod命令可修改文件或目录的访问权限。用法:
chmod 权限值 文件名
文件名可以是绝对路径也可以是相对路径,只要能找到文件。
权限值,可以使用字母形式表示、也可以使用数字形式表示。
注意:通常,Unix/Linux系统只允许文件的属主或超级用户改变文件的读写执行权限。
①字母形式
chmod [who] [+|-|=] [mode] 文件名
who是指操作对象,取值为:
u 表示“用户(user)”,即文件或目录的所有者,通常拥有对文件最大的读写权限。 g 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。 o 表示“其他(others)用户”,通常只具有浏览权限。 a 表示“所有(all)用户”。它是系统默认值。
[+|-|=]是操作符号,取值为:
+ 添加某个权限。 - 取消某个权限。 = 赋予给定权限并取消其他所有权限(如果有的话)。
[mode]是权限,取值为:
r:可读权限。 w:可写权限。 x:可执行。
知道了这三个参数具体取值范围,说下它们的搭配规则:
操作对象每次可以设置一个或多个
权限可以一次性设置一个或多个
操作符号多个需要分别设置
示例:
> chmod u+/-rwx,g+/-rwx,o+/-rwx filename > chmod u+r,u-x filename > chmod +w,-x filename > chmod u+rx filename > chmod g-wx filename
给刚才的a.sh脚本文件加上执行权限
执行下:
OK,成功了。
把a.sh脚本文件属主的读权限去掉,再执行下:
会发现报错:没有权限
注意:如果用户对某文件仅具有可执行的权限时,也并不能真正被运行,它还必须具有该用户的可读权限。
②数字形式
涉及位的知识。
读、写、执行三个权限,自由组合,是不是可以使用三位二进制数就可以表示:
r w x 4 2 1
把读权限用4表示,写权限用2表示,执行权限用1表示。8种组合依次用0——7数字表示:
0----->没有权限 1----->执行 权限 2----->写 权限 3----->写、执行 权限 4----->读 权限 5----->读、执行 权限 6----->读、写 权限 7----->读、写、执行 权限
看懂了上面,那用数字形式设置文件权限是这样写:
chmod ([+|-|=])ABC filename
[+|-|=]是操作符号,和字母形式的作用一样,留空默认值为=。
ABC是三个数字,分别代表主人、同组、其他组用户权限
示例:
为a.sh脚本文件设置权限754:
7=》属主拥有全部权限
5=》用户组拥有读、执行权限
4=》其他用户拥有读权限
总结:
字母和数字两种方式的取舍:
① 权限修改【较少】使用字母方式
② 权限修改【较多】使用数字方式
一图概括:
-R参数:
以递归的方式设置目录的权限。
如果把一目录里所有文件设置和自己的权限一样,chmod就加上-R参数。比如:
chmod -R 755 filename
4)创建文件、目录的默认权限
我们创建a.sh文件时,它的权限默认是“664”。这个默认权限是怎么来的?我们怎么去修改它?
文件目录的默认权限主要有umask决定的:
楠神当前的umask是0002,所以文件的默认权限是“644”,没毛病。
大家可能没看明白,为什么umask是0002,文件权限就是644?
因为umask的值并不是直接定义文件、目录的默认权限值,文件默认最大权限是666,umask值与666计算后获得的值才是文件的默认权限组;目录默认最大权限是777,umask与777计算后获得的值才是目录的默认权限值。
至于怎么个计算法,推荐看《linux下umask的使用讲解》,大家去了解下就可以。
修改umask值:
希望永久性地设置自己的umask值,那么就把它放在自己$HOME目录下的.profile或.bash_profile文件中。
source $HOME/.profile