八、文件权限和目录权限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看不到。