Linux文件权限管理chmod

1 如何查看文件权限

使用 ls -l 命令可以查看文件的详细信息,其中包括文件权限。

1
ls -l bitcontrol.c

输出示例:

1
-rw-r--r-- 1 serenitatis serenitatis 1024 Nov 16 15:59 bitcontrol.c
  • 文件类型:最前面的一个字符表示文件类型共七种。

    - 表示普通文件。白色
    d 表示目录。蓝色
    l 表示链接。蓝绿色
    c 字符设备(流式传输)驱动文件。亮黄色
    b 块设备(带缓存的传输)驱动文件。同字符设备亮黄色
    p 管道(进程间通信)文件,管道文件数据不会保存,只能用于进程间通信。紫色
    s 套接字文件(不同计算机间的通信文件)。暗黄色

    特殊的有压缩包和失去连接的文件的软链接文件为红色。

  • rw-r--r-- 表示文件权限,第一个 - 表示文件类型,rw- 表示拥有读和写权限,r-- 表示拥有只读权限,第一个为用户权限,第二个为组权限,第三个为其他用户权限。
    alt text
    每个rwx都是有

  • 1 表示硬链接数目。
  • serenitatis 表示文件所有者。
  • serenitatis 表示文件所属组。
  • 1024 表示文件大小。
  • Nov 16 15:59 表示文件最后修改时间。
  • bitcontrol.c 表示文件名。

2 如何修改文件权限

使用 chmod 命令可以修改文件权限。

2.1 chmod 语法

chmod 命令的基本语法如下:

1
chmod [who][operator][permission] file
  • who 可以是以下值之一或组合:

    • u:文件所有者
    • g:文件所属组
    • o:其他用户
    • a 或者省略:所有用户(等同于 ugo
  • operator 可以是:

    • +:添加权限
    • -:移除权限
    • =:设置权限(替换现有权限)
  • permission 可以是:

    • r:读权限
    • w:写权限
    • x:执行权限

2.2 示例

假设你想给用户 serenitatis 添加读、写和执行权限,你需要先确定 serenitatis 是否是文件的所有者或所属组成员。然后根据情况使用以下命令:

2.2.1 如果 serenitatis 是文件所有者

1
chmod u+rwx bitcontrol.c

2.2.2 如果 serenitatis 属于文件的所属组

首先,确保 serenitatis 属于文件的所属组,然后使用:

1
chmod g+rwx bitcontrol.c

2.2.3 如果 serenitatis 是其他用户

1
chmod o+rwx bitcontrol.c

2.3 更改文件所有者或所属组

如果你需要将文件的所有者或所属组更改为 serenitatis,可以使用 chownchgrp 命令:

2.3.1 更改文件所有者

1
chown serenitatis bitcontrol.c

2.3.2 更改文件所属组

1
chgrp serenitatis bitcontrol.c

2.3.3 示例

假设你希望将 bitcontrol.c 的所有者更改为 serenitatis 并赋予其读、写和执行权限:

1
2
chown serenitatis bitcontrol.c
chmod u+rwx bitcontrol.c

3 权限掩码umask及其缺省值

3.1 权限值

也可使用数字表示权限,如:

1
chmod 777 file

表示将文件所有者、所属组和其他用户都设置为可读可写可执行。

权限说明:rwx分别表示可读、可写、可执行。对应权限值为4、2、1。

3.2 权限掩码umask

在类Unix系统(如Linux)中,当普通用户和root用户创建文件夹或文件时,默认的权限设置会有所不同,这主要取决于umask值。umask是一个权限掩码,它决定了新创建文件或目录的默认权限。普通用户umask值默认为002,root用户umask值默认为022

3.2.1 对于文件:

  • 默认情况下,新创建的文件的权限是 666(即 -rw-rw-rw-),这意味着所有者、所属组和其他用户都具有读写权限。
  • 但实际赋予的权限取决于umask值。例如,如果umask设置为022(这是常见的默认值),那么最终的文件权限将是 666 - 022 = 644(即 -rw-r--r--),意味着文件所有者有读写权限,而其他用户只有读权限。

3.2.2 对于目录:

  • 新创建的目录默认权限是 777(即 drwxrwxrwx),表示所有者、所属组和其他用户都有读、写、执行权限。
  • 同样地,应用umask后,如果umask022,那么目录的实际权限将变为 777 - 022 = 755(即 drwxr-xr-x)。这意味着所有者可以读写并进入该目录,而其他人只能读取和进入,但不能写入。