相信大家都执行过 chomd 777 xxx
命令来设置权限,那数字 777
有何含义?
一、文件权限
在任意目录下,执行 ll
命令,即可查看该目录下所有文件和目录的权限
[root@VM-0-15-centos ~]# ll
-rw-r--r-- 1 root root 0 7月 5 23:26 1.txt
drwxr-xr-x 2 root root 4096 7月 5 23:26 book
默认创建的文件和文件夹权限分别是 -rw-r--r--
和 drwxr-xr-x
, 具体有哪些含义?
1.1、基本权限格式
以 -rw-r--r--
为例,权限一共有 10 个字符,从左到右,
第一个字符表示文件类型,具体区分是:
-
表示是文件d
表示是目录l
表示软链接文件
后面每三个字符组成一组,共三组分别是:文件所有者、文件所有组、其他人。每一组中的三个字符分别表示 read
(可读)、write
(可写)、execute
(可执行) 这三个权限。
所以,权限-rw-r--r--
表示
- 文件所有者 对该文件可读可写,不能执行
rw-
- 文件所有组 和 其他用户 对该文件仅可读,不能写入,不能执行
r--
1.2、修改基本权限
命令
shellchmod [选项] 模式 文件名
选项
-R
: 递归
模式
[ugoa][+-=][rwx]
三个
[]
中字符代表什么意思呢?[ugoa]:
u(user)
: 所有者g(group)
: 所有组o(other)
: 其他人a(all)
: 所有人
[+-=]:
+
: 添加权限-
: 减少权限=
: 直接赋值
[rwx]:
r(read)
: 可读w(write)
: 可写x(execute)
: 可执行
要修改的权限除了使用👆方法表示,还可以直接使用数字来表示,例如
777
, 那么777
啥意思?以(
read
)为例,可读或不可读,内部使用二进制0
、1
来标识,那么最高权限rwx
对应的二进制就是111
, 转换成十进制就是7
, 那么777
表示所有者,所有组,以及其他人对文件都可以读、写、执行rwx
对应的二进制就是111
,每个权限对应的数字是r
: 4w
: 2x
: 1
shell# 所有者添加可写权限 chmod u+w 1.txt # 其他人去除可写权限 chmod o-w 1.txt # 最高权限 chmod 777 1.txt
1.3、其它权限
1.3.1、chown
chown(change owner)
, 修改文件所有者
- 命令
chown 用户名 文件名
1.3.2、chgrp
chgrp(change group)
, 修改文件所有组
- 命令
chown 组名 文件名
二、默认权限
文件和目录在创建时,都有默认的权限,具体是什么,以及如何修改默认权限呢?
2.1、umask
umask # 0022
umask
命令指定在建立文件时预设的权限掩码, 默认值为 0022
- 第一位 0 表示文件的特殊权限
- 后面
022
才是我们需要的
2.2、文件默认权限
默认创建的文件是不可执行文件,必须手工赋予执行权限,所以文件默认权限最大值为 666
, 而默认创建的文件权限为 666 减去 umask
值
666 - 022 = 644 # 655 => `rw-r--r--`
也就是 rw-r--r--
2.3、目录默认权限
目录默认权限最大值为 777, 所以默认创建的目录权限为 777 减去 umask
值
777 - 022 = 755 # 755 => `rwxr-xr-x`
2.4、修改 umask 值
临时修改
shellumask 0002
永久修改
shellvi /etc/profile
三、总结
共有三组角色可以操作一份文件,分别是文件所有者、文件所有组、其他人
对文件可执行
read
(读)、write
(写)、execute
(执行) 这三种操作,分别对应三个权限rwx
最高权限
777
, 最低权限000
,可通过chmod
命令修改权限umask
值决定了创建文件、目录时的默认权限