Linux文件权限

查看文件权限

  • 命令:ls -l,可以查看当前目录所有文件的相关信息,包括文件权限。
  • 该命令的输出如图(某C++项目目录),共有9列,下面讲解每一列的信息。 共3个文件,其中CMakeLists.txt为文件,includesrc为文件夹
  • 第一列:文件类型和文件权限,共10个字符,每个字符都表示其含义。例如,-rw-rw-r--
    • 第1个字符:表示文件类型。-文件普通,d文件夹,l软链接(类似于快捷方式),c设备文件等
    • 第2-4个字符:表示该文件所有者的权限,分别为r可读、w可写、x可执行。如果没有该权限,用-表示。
    • 第5-7个字符:表示该文件所有组的权限,该组的所有成员都拥有指定权限。
    • 第8-10个字符:表示其他用户权限。
    • 对于目录:
      1. 可读权限r:列出该目录下的所有文件
      2. 可写权限w:能在该目录下,创建、删除、重命名文件
      3. 可执行权限x:进入目录
    • 举例说明:CMakeLists.txt文件
      1. -表示该文件类型为普通文件
      2. rw-表示该文件所有者root,可读、可写、不可执行
      3. rw-表示该文件所有组,即root用户组,可读、可写、不可执行
      4. r--表示对于其他用户,该文件只读
  • 第二列:对于文件,表示硬链接个数;对于目录,表示子文件个数
  • 第三列:表示该文件的所有者,例如root
  • 第四列:表示该文件的所有组,例如root用户组。注意,文件的所有者并不一定要在所有组中
  • 第五列:表示文件大小,单位为字节
  • 第6-8列:表示修改时间
  • 第九列:表示文件名

文件默认权限

  • 文件默认权限,表示文件被创建或下载时拥有的权限
  • 对于普通文件,默认权限为:-rw-r--r--,即所有者可读可写、不可执行,所有组成员和其他用户只读
  • 对于目录,默认权限为:drwxr-xr-x,即所有者可读可写可执行,所有组和其他用户可读可执行

文件权限的数字表示法

  • 在权限表示中,一般采用二进制的1表示有对应权限、0表示无对应权限。这是表示权限的常用方法,不只是Linux文件权限
  • 在Linux文件权限中,用二进制的100表示可读r,二进制的010表示可写w,二进制的001表示可执行x。即4表示可读,2表示可写,1表示可执行。将这些权限中的一部分进行按位或运算,就可以表示一个文件是否拥有对应权限,表格如下
权限 说明 二进制数字 对应十进制数
--- 不可读、不可写、不可执行 000 0
--x 只可执行 001 1
-w- 只可写 010 2
-wx 可写可执行 011 3
r-- 只读 100 4
r-x 可读写执行 101 5
rw- 可读可写 110 6
rwx 可读可写可执行 111 7

修改文件权限

  • 命令:chmod,文件权限可以采用rwx表示,也可以采用数字表示法
  • 文件权限可以采用rwx表示
    • u所有者权限、g所有组权限、o其他用户权限、a以上所有
    • +增加权限、-删除权限、=权限赋值
    • 举例,以CMakeLists.txt文件为例:
      1. chmod u+x CMakeLists.txt:给该文件的所有者添加可执行权限
      2. chmod g=rw CMakeLists.txt:修改所有组组成员的权限为可读可写,不可执行
      3. chmod o-r CMakeLists.txt:删除该文件其他用户的可读权限
      4. chmod a=rwx CMakeLists.txt:将该文件的所有者、所有组、其他用户权限均改为可读可写可执行,即-rwxrwxrwx
  • 文件权限采用数字表示
    • 用一个十进制数表示权限,三个十进制数分别表示所有者权限、所有组权限、其他用户权限
    • 举例:
      1. chmod 777 CMakeLists.txt:对所有用户开放该文件的所有权限。类似于chmod a=rwx CMakeLists.txt
      2. chmod 764 CMakeLists.txt:对文件所有者开放可读可写可执行,文件所有组成员开放可读可写、不可执行,其他用户只读。类似于:chmod u=rwx CMakeLists.txt; chmod g=rw CMakeLists.txt; chmod o=r CMakeLists.txt
      3. chmod 755 CMakeLists.txt:对文件所有者开放可读可写可执行,文件所有组和其他用户开放可读可执行、不可写。类似于:chmod CMakeLists.txt a=rx; chmod CMakeLists.txt u+w
  • 递归修改该目录下所有子文件:-R

修改文件从属

  • 修改文件的所有者:chown
    • 语法结构:chown 用户名 文件路径chown 用户名:用户组 文件路径,修改该文件的所有者或同时修改所有者所有组
    • 递归修改目录的所有子文件:-R
    • 举例:
      • chown www-data CMakeLists.txt:将该文件的所有者改为www-data
      • chown -R git:root src:将src目录的所有者改为git用户,所有组改为root用户组,同时递归修改其所有子文件
  • 修改文件的所有组:chgrp
    • 语法结构:chgrp 用户组 文件路径,修改该文件的所有组
    • 递归修改目录的所有子文件:-R
使用 Hugo 构建
主题 StackJimmy 设计