八、文件权限和目录权限chmod;更改所有者和所属组chown;umask;隐藏权限lsattr/chattr
(一)文件权限和目录权限chmod
为了方便更改文件的权限,Linux使用数字代替rwx,具体规则:r=4,w=2,x=1,-=0。例如rwxrwx---用数字表示就是770,其具体算法为:rwx=4+2+1=7,rwx=4+2+1=7,---+0+0+0=0。
r:可读
w:可写
x:可执行
-:不可操作
-rw-r--r--. 1 root root 0 1月 30 19:10 1.txt
除第一列的-显示文件类型外,后面的九位,
分成三段:rw-,r--,r--,和文件的所有者和所属组有关系,
一个文件有三个权限位,
第一段代表文件所有者的权限,
第二段代表文件所属组的权限,
第三段代表文件其他用户的权限。
最后一个“.”,有这个点意味着这个文件受制于SELinux,若SELinux开启了,创建的文件的最后一位就会有这个点。
第一个root代表所有者,第二个root代表所属组。
例如:rw-r--r--=644
chmod命令(change mode):用于改变用户对文件/目录的读写执行文件权限。
格式为:chmod [-R] xyz文件名(此处xyz表示数字)
举例:chmod 700 1.txt
举例:chmod u=rwx,g=r,o=r dir3 //完整写法。u(user)g(group)o(other),不可以加减号。
举例:chmod a+(-)x dir3 //给该目录全部权限增加(减少)x的权限;或者u+x,g+x,o+x都可以。
其中,-R选项的作用等同于chown命令的-R选项,这个-R选项只适用于目录,作用是级联更改,即不仅更改当前目录,连目录里的目录或者文件也全部更改。
(二)更改所有者和所属组chown
chown命令(change owner):可以更改文件的所有者。
格式为:chown [-R] 账户名 文件名或者chown [-R] 账户名:组名 文件名。
示例命令:
# mkdir dir3
# useradd user1 //创建用户user1
# touch dir3/test3 //dir3目录下创建test3文件
# chown user1 dir3
# ls -ld dir3 //dir3目录所有者已经由root改为user1
drwxr-xr-x. 2 user1 root 19 1月 30 18:46 dir3
增加一个组叫testgroup。
groupadd testgroup
chown -R user 1:testgroup dir3
上例中,chown -R user1:testgroup会把dir3目录及该目录下的文件都修改成所有者为user1,所属组为testgroup。
chgrp命令(change group):更改文件的所属组。
groupadd命令:增加一个用户组。
chgrp命令用法:# chgrp user1 dir3
将后面的文件或者目录改到前面的组。
chown命令用法:chown username:group filename。可以加上-R选项。
# chown user1:dir3 先用户,再组,中间用冒号分开。
# chown :user1 /tmp/test3 省略用户,直接组,将后面的文件加入到设定user1组。
(三)umask
默认情况下,目录权限值为755,普通文件的权限值为644。
umask命令:用于改变文件的默认权限。
格式:umask xxx(xxx代表3个数字)。若要查看umask的值,输入命令umask,再回车即可。如下:
# umask
0022
此处umask的预设值是0022,。
umask规则:
a)若用户建立普通文件,则预设没有可执行权限,只有r、w两个权限,最大值为666(-rw-rw-rw-)。
b)若用户建立目录,则预设所有权限均开放,即777(drwxrwxrwx)。
umask值代表的含义为两条规则中的默认值(文件为666,目录为777)需要减掉的权限,所以:
目录权限为rwxrwxrwx - ----w--w- =rwxr-xr-x(777-022=755)
普通文件的权限为rw-rw-rw- - ----w--w- =rw-r--r--(666-022=644)
umask数值可以自定义设置,比如设定umask为002,你在创建目录或文件时,默认权限分别为:
目录权限:rwxrwxrwx - -------w- = rwxrwxr-x
文件权限:rw-rw-rw- - -------w- = rw-rw-r--
示例命令:
# umask 002
# mkdir dir4
# ls -ld dir4
drwxrwxr-x. 2 root root 6 1月 30 22:08 dir4
# touch test4
# ls -l test4
-rw-rw-r--. 1 root root 0 1月 30 22:09 test4
可以看到创建的目录的默认权限变为775,文件的默认权限变为664。
若要把umask改回来,具体操作方法如下:
# umask 022
# touch test5
# ls -l test5
-rw-r--r--. 1 root root 0 1月 30 22:12 test5
不要将计算方法换算成数字去做减法。看起来没问题,但有时会出错。比如当umask值为033时,文件的默认权限则为666-033=633,
但实际权限应为rw-rw-rw- - ----wx-wx=rw-r--r--=644
umask可以在/etc/bashrc里面更改,默认情况下,root的umask值为022,而一般使用则为002。可写权限非常重要,因此预设会去掉可写权限。
(四)隐藏权限lsattr/chattr
1.lsattr命令(list attribute):用于读取文件或目录的特殊权限。
格式:lsattr [-aR] [文件/目录名]。
-a:类似于ls -a的选项,即连同隐藏文件一同列出。
-R:连同子目录的数据一同列出。
2.chattr命令(change attribute)
格式:chattr [+-=] [文件或目录名],其中,+-和=分别表示增加、减少和设定。
选项:
A:增加该属性后,表示文件或目录的atime将不可修改。
s:增加该属性后,会将数据同步写入磁盘中。
a:增加该属性后,表示只能追加不能删除,非root用户不能设定该属性。
c:增加该属性后,表示自动压缩该文件,读取时会自动解压。
i:增加该属性后,表示文件不能删除,重命名,设定链接,写入以及新增数据。
常用选项为a和i两个选项。
隐藏权限ls看不到。