文件和目录权限/更改所有者和所属组/umask/隐藏权限lsat
文件和目录权限
认识Linux文件属性以及它的所有者和所属组
[root@localhost ~]# ls -lh word1.txt
-rw-r--r--. 1 root root 0 12月 20 08:36 word1.txt
第一列:我们从一个杠(-)开始认识,第一个杠(-)是表示文件属于哪种类型
*-表示该文件为普通文件*d表示该文件为目录*l表示该文件为链接文件*b表示该文件为块设备文件(比如/dev/sda就是这样的文件,硬盘*c表示该文件为串行端口设备文件(又称字符设备文件),比如鼠标、键盘这些
第二列:9个权限位rw-r--r--,每三个权限位为一段,第一段rw-;表示所有者的权限,第二段r--;表示为所属组的权限,第三段r--;表示为其他用户的权限
权限里字母所表示的意思,以及权限位数字的表示:
*r(4):可读*w(2):可写*x(1):可执行*-(0):没有权限;为空
rw-r--r--;所有者权限为rw-既表示为可读可写不可执行,接下来的所属组和其他用户以此类推。
u表示:所有者,g表示:所属组,o表示:其他用户,a=u+g+o
第三列:(.)表示该文件占用的节点(inode),如果是目录,那这个数值与目录下是子目录数量有关
第四列:表示该文件的所有者
第五列:表示该文件的所属组
chmod命令
chmod是用来更改文件权限的一个命令,在Linux系统中,一个目录的默认权限为755:rwxr-xr-x,而一个文件的默认权限为644:
[root@localhost ~]# chmod 777 word1.txt
[root@localhost ~]# ls -lh word1.txt
-rwxrwxrwx. 1 root root 0 12月 20 08:36 word1.txt
更改所有者和所属组chown_chgrp
chgrp命令
chgrp命令可以用来更改文件的所属组,其格式为:chgrp[组名][文件名],示例
[root@localhost ~]# groupadd hch
[root@localhost ~]# chgrp hch word1.txt
[root@localhost ~]# ls -lh
总用量 4.0K
-rwxrwxrwx. 1 root hch 0 12月 20 08:36 word1.txt
-rw-r--r--. 1 root root 0 12月 20 08:37 word2.txt
上例中有用到groupadd命令,该命令是用来创建一个所属组的。
chown命令
chown命令是用来更改文件或者目录的所有者,其格式为:chown[账户名][文件名]或者chown[-R][账户名:组名][文件名],以下示例:
[root@localhost ~]# mkdir hch
[root@localhost ~]# cd hch
[root@localhost hch]# touch 123.txt
[root@localhost hch]# cd
[root@localhost ~]# chown -R hch1 hch
[root@localhost ~]# ls -lh hch/123.txt
-rw-r--r--. 1 hch1 root 0 12月 21 08:12 hch/123.txt
上例中用到useradd命令,该命令是用来创建一个用户的。
命令umask
命令umask是用来改变文件的默认权限值的,其格式为:umask xxx(这里xxx表示数字),我们可以在命令行输umask查看当前的默认值
*若用户建立普通文件时,则预设没有可执行权限,只有r、w两个权限,最大值为666(-rw-rw-rw-)*若用户建立普通目录时,则预设所有权限均开放,最大值777(drwxrwxrwx)
umask数值代表的行以为以上两条规则中的默认值需要减去的权限,所以结果为:
*目录的权限为rwxrwxrwx - ----w--w-=rwxr-xr-x*普通文件的权限为rw-rw-rw- - ----w--w- =rw-r--r--
以下我们示例使用umask将数值改为002,在看下创建文件或者目录的时候默认权限
[root@localhost ~]# umask 002
[root@localhost ~]# mkdir hch02
[root@localhost ~]# ls -l
总用量 4
drwxrwxr-x. 2 root root 6 12月 21 08:20 hch02
drwxr-xr-x. 2 root root 19 12月 20 08:44 hello
-rwxrwxrwx. 1 hch1 hch 0 12月 20 08:36 word1.txt
-rw-r--r--. 1 root root 0 12月 20 08:37 word2.txt
[root@localhost ~]# touch hch123.txt
[root@localhost ~]# ls -lh hch123.txt
-rw-rw-r--. 1 root root 0 12月 21 08:21 hch123.txt
隐藏权限lsattr/chattr
chattr命令
命令chattr的格式为:chattr[+-=][Asaci][文件或者目录]其中+、-和=分别表示增加、减少和设定,各个权限如下。
*A:增加该属性后,表示文件或目录的atime将不可以修改*s:增加该属性后,会见个数据同步写入磁盘中*a:增加该属性后,表示只能追加不能删除,非root用户不能设定该属性*c:增加该属性后,表示自动压缩该文件,读取是会自动解压*i:增加该属性后,表示文件不能删除、重命名、设定链接、写入以及新增数据。
以上参数中a和i连个常用的权限,我们举例说明示范一下
[root@localhost ~]# chattr +i hch
[root@localhost ~]# touch hch/1234.txt
touch: 无法创建"hch/1234.txt": 权限不够
[root@localhost ~]# chattr -i hch
[root@localhost ~]# touch hch/1234.txt
[root@localhost ~]# chattr +i hch
[root@localhost ~]# rm -f hch/1234.txt
rm: 无法删除"hch/1234.txt": 权限不够
示例中,给asklinux2目录加了i权限后,即使是root用户,也不能在asklinux2目录中创建或删除1.txt。
接下来我们看下a权限的作用
[root@localhost ~]# chattr -i hch
[root@localhost ~]# touch hch/456.txt
[root@localhost ~]# ls -lh hch
总用量 0
-rw-rw-r--. 1 root root 0 12月 21 08:26 1234.txt
-rw-r--r--. 1 hch1 root 0 12月 21 08:26 123.txt
-rw-rw-r--. 1 root root 0 12月 21 08:28 456.txt
[root@localhost ~]# chattr +a hch
[root@localhost ~]# rm -f hch/456.txt
rm: 无法删除"hch/456.txt": 不允许的操作
[root@localhost ~]# touch hch/789.txt
[root@localhost ~]# ls hch
1234.txt 123.txt 456.txt 789.txt
上例中,asklinux2目录增加a权限后,只可以在里面创建文件,而不能删除文件,文件同适用以上权限。
命令lsattr
lsattr命令是用来读取文件或者目录的特殊权限,格式为:lsattr[-aR][文件/目录],我们看下a和R两个参数的定义
*-a:类似于ls的-a参数,既连同隐藏文件一同列出* -R:连同子目录的数据一同列出
示例:
[root@localhost ~]# chattr +i hch/456.txt
[root@localhost ~]# chattr +a hch/789.txt
[root@localhost ~]# lsattr hch
---------------- hch/123.txt
---------------- hch/1234.txt
----i----------- hch/456.txt
-----a---------- hch/789.txt
[root@localhost ~]# lsattr -aR hch
-----a---------- hch/.
---------------- hch/..
---------------- hch/123.txt
---------------- hch/1234.txt
----i----------- hch/456.txt
-----a---------- hch/789.txt