您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

chmod

概要

shell
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...

主要用途

  • 通过符号组合的方式更改目标文件或目录的权限。

  • 通过八进制数的方式更改目标文件或目录的权限。

  • 通过参考文件的权限来更改目标文件或目录的权限。

    参数

    mode:八进制数或符号组合。

    file:指定要更改权限的一到多个文件。

    选项

    shell
    -c, --changes:当文件的权限更改时输出操作信息。
    --no-preserve-root:不将'/'特殊化处理,默认选项。
    --preserve-root:不能在根目录下递归操作。
    -f, --silent, --quiet:抑制多数错误消息的输出。
    -v, --verbose:无论文件是否更改了权限,一律输出操作信息。
    --reference=RFILE:使用参考文件或参考目录RFILE的权限来设置目标文件或目录的权限。
    -R, --recursive:对目录以及目录下的文件递归执行更改权限操作。
    --help:显示帮助信息并退出。
    --version:显示版本信息并退出。
    

    返回值

    返回状态为成功除非给出了非法选项或非法参数。

    例子

    > 参考man chmod文档的DESCRIPTION段落得知:

    > - u符号代表当前用户。

    > - g符号代表和当前用户在同一个组的用户,以下简称组用户。

    > - o符号代表其他用户。

    > - a符号代表所有用户。

    > - r符号代表读权限以及八进制数4

    > - w符号代表写权限以及八进制数2

    > - x符号代表执行权限以及八进制数1

    > - X符号代表如果目标文件是可执行文件或目录,可给其设置可执行权限。

    > - s符号代表设置权限suid和sgid,使用权限组合u+s设定文件的用户的ID位,g+s设置组用户ID位。

    > - t符号代表只有目录或文件的所有者才可以删除目录下的文件。

    > - +符号代表添加目标用户相应的权限。

    > - -符号代表删除目标用户相应的权限。

    > - =符号代表添加目标用户相应的权限,删除未提到的权限。

    shell
    linux文件的用户权限说明:
    
    <h1>查看当前目录(包含隐藏文件)的长格式。</h1>
    ls -la
      -rw-r--r--   1 user  staff   651 Oct 12 12:53 .gitmodules
    
    <h1>第1位如果是d则代表目录,是-则代表普通文件。</h1>
    <h1>更多详情请参阅info coreutils 'ls invocation'(ls命令的info文档)的'-l'选项部分。</h1>
    <h1>第2到4位代表当前用户的权限。</h1>
    <h1>第5到7位代表组用户的权限。</h1>
    <h1>第8到10位代表其他用户的权限。</h1>
    
    shell
    <h1>添加组用户的写权限。</h1>
    chmod g+w ./test.log
    <h1>删除其他用户的所有权限。</h1>
    chmod o= ./test.log
    <h1>使得所有用户都没有写权限。</h1>
    chmod a-w ./test.log
    <h1>当前用户具有所有权限,组用户有读写权限,其他用户只有读权限。</h1>
    chmod u=rwx, g=rw, o=r ./test.log
    <h1>等价的八进制数表示:</h1>
    chmod 764 ./test.log
    <h1>将目录以及目录下的文件都设置为所有用户拥有读写权限。</h1>
    <h1>注意,使用'-R'选项一定要保留当前用户的执行和读取权限,否则会报错!</h1>
    chmod -R a=rw ./testdir/
    <h1>根据其他文件的权限设置文件权限。</h1>
    chmod --reference=./1.log  ./test.log
    

    注意

  1. 该命令是GNU coreutils包中的命令,相关的帮助信息请查看man chmodinfo coreutils 'chmod invocation'

  1. 符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。

  1. 使用-R选项一定要保留当前用户的执行和读取权限,否则会报错!