幸运的兔脚

2018年10月22日

Linux 查看与修改文件权限

由于工作需要,时常会使用到 linux 系统,最近在执行工作任务的时候,突然发现有一个新增的可执行文件无法执行,查资料后才知道是因为这个文件没有权限。

文件类型简单说明

在查资料时,对 linux 的文件类型有了些许了解

  • 蓝色表示目录
  • 绿色表示可执行文件
  • 红色表示压缩文件
  • 浅蓝色表示链接文件
  • 灰色表示其它文件
  • 红色闪烁表示链接的文件有问题了
  • 黄色是设备文件,包括 block, char, fifo

Linux 用户组和权限

用户组和权限

对于 Linux 系统中的文件来说,有三种身份和四种权限。
三种身份分别为:

  • u:文件的拥有者
  • g:文件所属的群组
  • o:其他用户

而对于每个身份,又有四种权限,分别为:

  • r:读取文件的权限(read)
  • w:写入文件的权限(write)
  • x:执行的权限(execute)
  • s:特殊权限

在系统中,文件的属性由 10 个字符来表示,第一个字符表示文件的类型,其余 9 个字符分为三组,分别表示文件的拥有者、群组以及其他人对该文件的访问权限,每组依次表示读取、写入、和执行的权限,如果没有该权限,则以-(一个减号)显示。

查看文件属性

通过ls命令,我们可以获知文件的各种信息,其中就包括了文件的权限信息。

drwxr-xr-x    7 root root      4096 Sep 25 19:10 www

其中drwxr-xr-x部分就是文件的权限属性了,通过这 10 个字符可以确定不同用户能对文件干什么。

文件类型 文件拥有者的权限 群组的权限 其他人的权限
d        rwx      r-x     r-x
  • 第一个字符代表文件(-)、目录(d),链接(l)
  • 其余字符每 3 个一组(rwx),读(r)、写(w)、执行(x)
  • 第一组 rwx:文件所有者的权限是读、写和执行
  • 第二组 r-x:与文件所有者同一组的用户的权限是读、执行但不能写
  • 第三组 r-x:不与文件所有者同组的其他用户的权限也是读、执行但不能写

文件权限的数字表示

除了以上的表示文件权限的方式外,也可以通过数字形式表示权限。

  • 读取权限(r):4
  • 写入权限(w):2
  • 执行权限(x):1

根据文件在不同用户组的和表示数字形式的权限。
例如上面的 www 文件,他的权限就是:755

4+2+1=7(rwx)4+0+1=5(r-x)4+0+1=5(r-x)

权限修改方法

可以通过 chmod 命令进行文件权限的修改,增加或减少用户对文件的权限。

指令名称 : chmod
使用权限 : 所有使用者
使用方式 : chmod [-cfvR][--help] [—version] mode file…
说明 : Linux/Unix 的档案调用权限分为三级 : 档案拥有者、群组、其他。利用 chmod 可以藉以控制档案如何被他人所调用。
参数 :
mode : 权限设定字串,格式如下 : [ugoa…][+-=][rwxx]…][,…],其中
u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
-c : 若该档案权限确实已经更改,才显示其更改动作
-f : 若该档案权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)
--help : 显示辅助说明
--version : 显示版本

范例-利用数字形式改变文件权限

chmod 新的权限 文件列表

以上文 www 文件为例,通过以下命令,可以为 www 文件附加 777 权限。

chmod 777 www  //等同于www拥有了drwxrwxrwx权限。

范例-利用字符形式改变文件权限

这个方式是直接利用用户组和权限字符来进行文件权限修改的,基本操作规则受下表约束:

chmod u
g
o
a
+
-
=
r
w
x
文件或目录

通过+符号可以增加权限,-符号可以减少权限,=符号可以直接赋予权限。就像下面这样:

chmod +x www  //为www文件附加所有用户组的执行权限。

数字形式可以一次改变文件的所有三种身份的四种权限,而字符形式则更为灵活,可以给某个身份的某个权限单独进行设置,例如上面的指令就是给三种身份都赋予执行的权限,你也可以分开单独设置:

chmod u+x www  //只给拥有者加上可执行权限
chmod g+x www  //只给群组身份加上可执行权限
chmod o+x www  //只给其他人身份加上可执行权限

以上三条指令综合在一起等价于上面的那一条指令,都是给所有身份都开启可执行权限的功能,也可以像下面这样来操作:

chmod a+x www

a 表示 all,代表所有的 3 种身份。

通过+符号可以增加权限,反之-符号可以减少权限。

chmod -x www  //为www文件去除所有用户组的执行权限。

最后来一个使用=符号的操作范例

chmod u=rwx,g=rwx,o=rwx www  //为www文件附加drwxrwxrwx(777)权限。

参考文章:
Linux 下用户组、文件权限详解
Linux 中的文件权限详解
Linux 新手入门:通过 chmod 改变文件权限
chmod 权限 命令详细用法