相信大家都执行过 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值决定了创建文件、目录时的默认权限