本文主要介绍如何修改 Linux 中文件的权限。

如果您对文件还不了解,可以参考这篇文章:Linux文件的基本属性

Linux 一切皆文件, 所以对于 Linux 下文件的管理就十分的重要。

Linux 下的文件权限分为三种:r(读), w(写), x(执行)。

权限修改方法

Linux 用 chmod 命令修改用户权限,其用法大致分为两种

  • 指定某类用户的权限;
  • 同时指定三类用户的权限。

这里两种方式都依次介绍一下。

指定某类用户的权限

语法为:

chmod [u/g/o/a] [+/-/=] [r/w/x] file

上面有三种选项:

  • [u / g / o / a] 为修改谁的权限,其中:

    • u:User, 即文件或目录的拥有者
      • g:Group, 即文件或目录的所属群组
      • o:Other, 除了文件或目录拥有者和所属群组外的其他用户
      • a:All, 即全部用户
  • 权限操作

    • +:表示增加权限
    • -:表示取消权限
    • =:表示取消之前的权限,并给予唯一的权限
  • 权限代号
    • r:读取权限, 数字代号为 “4”

    • w:写入权限, 数字代号为 “2”

    • x:执行权限, 数字代号为 “1”
    • -:不具备任何权限,数字代号为 “0”

参数: file:文件名(路径), 即你需要修改权限的文件或者目录

举例

现在有一个 Shell 脚本文件,权限如下:

可以看出,当前文件对于所有用户来说只允许读操作。

首先我们给当前用户添加helloworld.sh 脚本的写和执行权限:

chmod u+wx helloworld.sh
ls -l helloworld.sh

接着我们再给文件所在组的用户设置 helloworld.sh 脚本的执行权限:

chmod g+x helloworld.sh
ls -l helloworld.sh

那么我们现在突然不想让该组的其他用户执行该脚本,又该怎么做呢?

这时候就不能使用 + 权限操作了,应该使用 - 权限操作:

chmod g-x helloworld.sh
ls -l helloworld.sh

那么进一步思考,能否同时指定多个权限呢?

我们来试试便知,这次我们给其他用户添加 helloworld.sh 脚本的写入和执行权限:

chmod o+wx helloworld.sh
ls -l helloworld.sh 

事实证明这是完全可行的。

那有人就说我现在想取消同组用户的读权限,同时增加写入和执行权限该怎么做呢?

有两种方法:

  • 一种是先使用 - 选项取消读权限,然后使用 + 选项增加写入和执行权限
chmod g-r helloworld.sh
chmod g+wx helloworld.sh
  • 另一种更简便推荐的方法是使用 = 选项
chmod g=wx helloworld.sh

同时指定三类用户的权限

上面介绍的都是每次单独指定某一类用户的权限,有时候需要同时指定多类用户的权限,一个一个的设置也是可以的,但是就要多写几条命令不是那么方便了。

语法为:

chmod 权限代号 文件/目录

这里需要知道这个 权限代号 是指什么。

上文种有提到:

  • r:读取权限, 数字代号为 “4”

  • w:写入权限, 数字代号为 “2”

  • x:执行权限, 数字代号为 “1”
  • -:不具备任何权限,数字代号为 “0”

而这里的权限代号就是三种权限的代号相加之后的结果,比如说:

  • 读权限的代号是:4
  • 读写权限的代号是: 4 + 2 = 6
  • 读写执行权限的代号是: 4 + 2 + 1 = 7
  • ... ...

下面直接通过几个例子来说明具体的用法。

举例

现在有一个文件 test.txt,权限如下:

可以看出,当前用户对该文件拥有读、写权限,同组用户对该文件拥有读、写权限,其余用户只拥有读权限。

现在我们来设置:使当前用户具有读、写权限,同组用户和其余用户只有读权限。

首先我们计算一下权限代号:

当前用户具有读、写权限,代号为:4( r ) + 2( w ) = 6;

同组用户具有读权限,代号为:4( r )

其余用户具有读权限,代号为:4( r )

然后组合起来的权限代号就是:644

所以命令如下:

chmod 644 test.txt
ls -l test.txt

如果要取消所有权限,那么权限代号就是 000,如果要增加所有权限,那么权限代号就是 777,其余的按照需要都进行计算即可。


前天遇到了小鹿,昨天是小兔子,今天是你。