linux文件权限

linux文件权限

文件权限符

[root@localhost /]# ll
总用量 60
lrwxrwxrwx.   1 root root     7 12月 12 08:36 bin -> usr/bin
dr-xr-xr-x.   6 root root  4096 12月 12 08:43 boot
drwxr-xr-x.  19 root root  3200 1月  12 22:39 dev
drwxr-xr-x.  84 root root  4096 1月  12 23:22 etc
drwxr-xr-x.   3 root root  4096 1月  12 23:22 home
lrwxrwxrwx.   1 root root     7 12月 12 08:36 lib -> usr/lib
lrwxrwxrwx.   1 root root     9 12月 12 08:36 lib64 -> usr/lib64
drwx------.   2 root root 16384 12月 12 08:36 lost+found
drwxr-xr-x.   2 root root  4096 4月  11 2018 media
drwxr-xr-x.   2 root root  4096 4月  11 2018 mnt
drwxr-xr-x.   3 root root  4096 12月 12 08:38 opt
dr-xr-xr-x. 101 root root     0 1月  12 22:39 proc
dr-xr-x---.   4 root root  4096 1月  12 21:23 root
drwxr-xr-x.  29 root root   880 1月  12 22:39 run
lrwxrwxrwx.   1 root root     8 12月 12 08:36 sbin -> usr/sbin
drwxr-xr-x.   2 root root  4096 4月  11 2018 srv
dr-xr-xr-x.  13 root root     0 1月  12 22:39 sys
drwxrwxrwt.  15 root root  4096 1月  12 23:23 tmp
drwxr-xr-x.  13 root root  4096 12月 12 08:36 usr
drwxr-xr-x.  20 root root  4096 12月 12 08:50 var

输出结果的第一个字段就是描述文件和目录权限的编码。这个字段的第一个字符代表了对象

的类型:

    • 代表文件
  • d 代表目录

  • l 代表链接

  • c 代表字符型设备

  • b 代表块设备

  • n 代表网络设备

之后有3组三字符的编码。每一组定义了3种访问权限:

  • r 代表对象是可读的

  • w 代表对象是可写的

  • x 代表对象是可执行的

若没有某种权限,在该权限位会出现单破折线。这3组权限分别对应对象的3个安全级别:

  • 对象的属主

  • 对象的属组

  • 系统其他用户

默认文件权限

你可能会问这些文件权限从何而来,答案是 umask 。 umask 命令用来设置所创建文件和目录的默认权限。

[root@localhost ~]# touch newfile
[root@localhost ~]# ll | grep newfile
-rw-r--r--. 1 root root    0 1月  12 23:29 newfile

touch 命令用分配给我的用户账户的默认权限创建了这个文件。 umask 命令可以显示和设置这个默认权限。

[root@localhost ~]# umask
0022

第一位代表了一项特别的安全特性,叫作粘着位(sticky bit)。后面的3位表示文件或目录对应的 umask 八进制值。要理解 umask 是怎么工作的,得先理解八进制模式的安全性设置。

八进制模式的安全性设置先获取这3个 rwx 权限的值,然后将其转换成3位二进制值,用一个八进制值来表示。在这个二进制表示中,每个位置代表一个二进制位。因此,如果读权限是唯一置位的权限,权限值就是 r-- ,转换成二进制值就是 100 ,代表的八进制值是 4 。

了解八进制模式权限是怎么工作的之后, umask 值反而更叫人困惑了。我的Linux系统上默认的八进制的 umask 值是 0022 ,而我所创建的文件的八进制权限却是 644 ,这是如何得来的呢?

umask 值只是个掩码。它会屏蔽掉不想授予该安全级别的权限。接下来我们还得再多进行一些八进制运算才能搞明白来龙去脉。

要把 umask 值从对象的全权限值中减掉。对文件来说,全权限的值是 666 (所有用户都有读和写的权限);而对目录来说,则是 777 (所有用户都有读、写、执行权限)。

所以在上例中,文件一开始的权限是 666 ,减去 umask 值 022 之后,剩下的文件权限就成了 644 。

安全性设置

权限二进制值八进制值描述
0000没有任何权限
–x0011只有执行权限
-w-0102只有写入权限
-wx0113有写入和执行权限
r–1004只有读取权限
r-x1015有读取和执行权限
rw-1106有读取和写入权限
rwx1117有全部权限

改变权限

chmod 命令用来改变文件和目录的安全性设置。该命令的格式如下:

chmod options mode file

mode 参数可以使用八进制模式或符号模式进行安全性设置。八进制模式设置非常直观,直接用期望赋予文件的标准3位八进制权限码即可。

[root@localhost ~]# chmod 666 newfile
[root@localhost ~]# ll
总用量 8
-rw-rw-rw-. 1 root root    0 1月  12 23:29 newfile

改变文件所属关系

有时你需要改变文件的属主,比如有人离职或开发人员创建了一个在产品环境中需要归属在

系统账户下的应用。Linux提供了两个命令来实现这个功能: chown 命令用来改变文件的属主,chgrp 命令用来改变文件的默认属组。

chown 命令的格式如下。

chown options owner[.group] file

[root@localhost ~]# ll 
总用量 8
-rw-rw-rw-. 1 root root    0 1月  12 23:29 newfile
[root@localhost ~]# chown shared01 newfile 
[root@localhost ~]# ll
总用量 8
-rw-rw-rw-. 1 shared01 root    0 1月  12 23:29 newfile
[root@localhost ~]# 

chown 命令也支持同时改变文件的属主和属组。

[root@localhost ~]# chown shared01.shared newfile 
[root@localhost ~]# ll
总用量 8
-rw-------. 1 root     root   1289 12月 12 08:43 anaconda-ks.cfg
-rw-------. 1 root     root   1575 1月  12 21:23 anaconda-ks.cfg.bak
-rw-rw-rw-. 1 shared01 shared    0 1月  12 23:29 newfile
[root@localhost ~]# 
知春秋 CSDN认证博客专家 博客专家 Java高级研发
不忘初心,方得始终。初心易得,始终难守。
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页