Skip to content
On this page

相信大家都执行过 chomd 777 xxx 命令来设置权限,那数字 777 有何含义?

一、文件权限

在任意目录下,执行 ll 命令,即可查看该目录下所有文件和目录的权限

shell
[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、修改基本权限

  • 命令

    shell
    chmod [选项] 模式 文件名
    
  • 选项

    • -R: 递归
  • 模式

    [ugoa][+-=][rwx]
    

    三个[] 中字符代表什么意思呢?

    [ugoa]:

    • u(user): 所有者
    • g(group): 所有组
    • o(other): 其他人
    • a(all): 所有人

    [+-=]:

    • +: 添加权限
    • -: 减少权限
    • =: 直接赋值

    [rwx]:

    • r(read): 可读
    • w(write): 可写
    • x(execute): 可执行

    要修改的权限除了使用👆方法表示,还可以直接使用数字来表示,例如 777, 那么 777 啥意思?

    以(read)为例,可读或不可读,内部使用二进制 01 来标识,那么最高权限 rwx 对应的二进制就是 111, 转换成十进制就是 7, 那么 777 表示所有者,所有组,以及其他人对文件都可以读、写、执行

    rwx 对应的二进制就是 111,每个权限对应的数字是

    • r: 4
    • w: 2
    • x: 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

shell
umask # 0022

umask 命令指定在建立文件时预设的权限掩码, 默认值为 0022

  • 第一位 0 表示文件的特殊权限
  • 后面 022 才是我们需要的

2.2、文件默认权限

默认创建的文件是不可执行文件,必须手工赋予执行权限,所以文件默认权限最大值为 666, 而默认创建的文件权限为 666 减去 umask

shell
666 - 022 = 644 # 655 => `rw-r--r--`

也就是 rw-r--r--

2.3、目录默认权限

目录默认权限最大值为 777, 所以默认创建的目录权限为 777 减去 umask

shell
777 - 022 = 755 # 755 => `rwxr-xr-x`

2.4、修改 umask 值

  • 临时修改

    shell
    umask 0002
    
  • 永久修改

    shell
    vi /etc/profile
    

三、总结

  • 共有三组角色可以操作一份文件,分别是文件所有者文件所有组其他人

  • 对文件可执行 read(读)write(写)execute(执行) 这三种操作,分别对应三个权限rwx

  • 最高权限777, 最低权限000,可通过 chmod 命令修改权限

  • umask 值决定了创建文件、目录时的默认权限