第十七章:第17节Linux用户与文件——修改文件权限(chmod)

更新于:2019-02-15 11:57:01

这节开始学习Linux文件权限的知识。


1)了解权限分类及权限起到的限制作用


为什么说Linux比Windows更安全,主要因为Linux在对文件权限控制方面做得比较好。文件权限就是文件的访问控制权限,即哪些用户和组群可以访问文件以及可以执行什么样的操作。Linux系统是一个典型的多用户系统,不同的用户处于不同的地位,对文件和目录有不同的访问权限。用户对文件的操作权限包括3种,分别是读权限、写权限和可执行权限。


读权限(Read):

允许用户读取文件内容或者列目录。

写权限(Write):

允许用户修改文件内容或者创建、删除文件。

可执行权限(eXecute):

允许用户执行文件或者使用cd命令进入目录。


1.png


其他都好理解,我们单说下文件的执行权限。


在Linux中,有些文件是需要执行权限的,比如编写的shell脚本文件(该文件执行过程中可以批量执行指令),必须要有执行权限才可以。


写一个简单的shell脚本小程序:

#!/bin/bash
cd /
ls -l

1.png

保存为a.sh,执行下:

1.png


因为a.sh包括文件属主都没有执行权限,所以报错:没有权限。

使用超级用户执行下:


1.png


连超级用户也无法执行,所以需要先给予文件执行权限,怎么给予,下面继续介绍。


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脚本文件加上执行权限

1.png

执行下:

1.png

OK,成功了。


把a.sh脚本文件属主的读权限去掉,再执行下:

1.png

会发现报错:没有权限


注意:如果用户对某文件仅具有可执行的权限时,也并不能真正被运行,它还必须具有该用户的可读权限。


②数字形式


涉及位的知识。


读、写、执行三个权限,自由组合,是不是可以使用三位二进制数就可以表示:


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=》其他用户拥有读权限


1.png


总结:


字母和数字两种方式的取舍:

① 权限修改【较少】使用字母方式

② 权限修改【较多】使用数字方式


一图概括:

1.png

-R参数:


以递归的方式设置目录的权限。

如果把一目录里所有文件设置和自己的权限一样,chmod就加上-R参数。比如:

chmod -R 755 filename


4)创建文件、目录的默认权限



我们创建a.sh文件时,它的权限默认是“664”。这个默认权限是怎么来的?我们怎么去修改它?


文件目录的默认权限主要有umask决定的:

1.png


楠神当前的umask是0002,所以文件的默认权限是“644”,没毛病。


大家可能没看明白,为什么umask是0002,文件权限就是644?


因为umask的值并不是直接定义文件、目录的默认权限值,文件默认最大权限是666,umask值与666计算后获得的值才是文件的默认权限组;目录默认最大权限是777,umask与777计算后获得的值才是目录的默认权限值。


至于怎么个计算法,推荐看《linux下umask的使用讲解》,大家去了解下就可以。


修改umask值:


1.png


希望永久性地设置自己的umask值,那么就把它放在自己$HOME目录下的.profile或.bash_profile文件中。

source $HOME/.profile