美文网首页
Linux文件权限与chmod命令简介

Linux文件权限与chmod命令简介

作者: LittleMagic | 来源:发表于2020-07-13 22:48 被阅读0次

    前言

    最近一段时间忙大项目,抽空写篇流水账,然后趁早休息。

    Linux系统的文件权限用来决定哪些用户和组可以对文件执行何种操作,以保证安全性。笔者试图不参考其他资料,按照记忆快速总结之。

    文件权限

    我们都知道,通过ls -l/ll命令能够以长形式显示出文件的各种属性。例:

    ~ ll -h /etc
    total 1.6M
    # 类型和权限|链接数|所有者|所属组|大小|最后修改时间|名称
    -rw-r--r--.  1 root       root         16 Dec  3  2018 adjtime
    -rw-r--r--.  1 root       root       1.5K Jun  7  2013 aliases
    -rw-r--r--   1 root       root        12K Nov 29  2018 aliases.db
    drwxr-xr-x.  2 root       root       4.0K Jun  4 17:57 alternatives
    -rw-------.  1 root       root        541 Apr 11  2018 anacrontab
    -rw-r--r--.  1 root       root         55 Apr 11  2018 asound.conf
    -rw-r--r--   1 root       root          1 Apr 11  2018 at.deny
    drwxr-x---.  3 root       root       4.0K Nov 29  2018 audisp
    drwxr-x---.  3 root       root       4.0K Nov 29  2018 audit
    drwxr-xr-x.  2 root       root       4.0K Jul  2 14:41 bash_completion.d
    -rw-r--r--.  1 root       root       2.8K Apr 11  2018 bashrc
    drwxr-xr-x.  2 root       root       4.0K Sep 27  2018 binfmt.d
    -rw-r--r--   1 root       root         38 Oct  8  2018 centos-release
    -rw-r--r--   1 root       root         51 Oct  8  2018 centos-release-upstream
    drwxr-xr-x.  2 root       root       4.0K Aug  4  2017 chkconfig.d
    -rw-r--r--.  1 root       root       1.9K Jun  4 11:01 chrony.conf
    -rw-r-----.  1 root       chrony      481 Sep 15  2017 chrony.keys
    drwxr-xr-x   3 clickhouse clickhouse 4.0K Jul  6 15:45 clickhouse-client
    

    我们要关心的是第1列,以drwxr-xr-x为例:

    • 第1个字符表示文件类型——如-表示普通文件,d表示目录,l表示软链接等等,不多废话。
    • 第2~4个字符表示文件所有者(第3列示出)的权限——r表示可读,w表示可写,x表示可执行。如果没有某个权限,会以-来占位。
    • 第5~7个字符表示文件所属组(第4列示出)的权限,含义同上。
    • 第8~10个字符表示系统内其他用户的权限,含义同上。
    • 最后一个可能存在的字符.(也有可能是+)表示该文件受到SELinux或ACL的控制,不在讨论范围内。

    所以,drwxr-xr-x就意味着文件所有者拥有目录的读、写、执行权限,文件所属组拥有读、执行权限,其他用户拥有读、执行权限。

    多说一句,只有用户对目录拥有执行权限,才能使用cd命令进入目录,以及访问目录下的文件数据,所以我们看到的绝大多数目录都会带有x。如果只有r的话,那么用户仅能通过ls命令列出目录的文件清单,其他什么都做不了。

    八进制表示法

    对于每一组rwx,将拥有的权限视为二进制1,不拥有的权限视为二进制0,即可形成一个八进制数字,如:

    • rwx = 111 = 7
    • rw- = 110 = 6
    • r-x = 101 = 5
    • r-- = 100 = 4
    • --- = 000 = 0

    将文件所有者、文件所属组和其他用户的权限排列起来,就是完整的数字权限表示,如上文的drwxr-xr-x就是755。

    多说第二句,Linux系统中创建新文件时的默认权限就是由八进制表示法的掩码决定,可以通过umask命令获取及设置此掩码。一般来讲,这个掩码是0022(最高位表示附加权限,本文不表)。所以:

    • 普通文件的默认权限是666 - 022 = 644 = rw-r--r--
    • 目录的默认权限是777 - 022 = 755 = rwxr-xr-x

    chmod命令

    chmod命令用于更改文件权限,它有两种使用方式。

    字符串设定

    此种方式的语法为:

    chmod [role][+|-|=][mode] [filename]
    

    其中,role表示要更改权限的角色,可以是如下字符或它们的组合:

    • u:文件所有者
    • g:文件所属组
    • o:其他用户
    • a:全部用户(默认值)

    后面的符号则比较容易理解,+表示添加权限,-表示取消权限,=表示直接赋予权限。举例:

    • 为my_script.sh添加所有用户的执行权限
    # 等同于chmod +x my_script.sh
    chmod a+x my_script.sh
    
    • 为my_script.sh取消所有者、所属组的写权限,并设定其他用户只读权限
    chmod ug-w,o=r my_script.sh
    

    八进制设定

    此种方式不提供上一种方式的+-语义,只有=语义,其语法为:

    chmod [octal] filename
    

    octal就是上面说过的八进制表示法,举例:

    • 为my_script.sh设定所有者全部权限,所属组可读和执行权限,其他用户无权限
    # rwxr-x---
    chmod 750 my_script.sh
    

    最后,如果要递归地改变目录与其所有子目录以及文件的权限,在chmod后紧跟-R即可。

    The End

    零散写了一点,各位当睡前读物随便看看吧。

    晚安晚安。

    相关文章

      网友评论

          本文标题:Linux文件权限与chmod命令简介

          本文链接:https://www.haomeiwen.com/subject/pswzcktx.html