Linux文件权限

Published: by Creative Commons Licence

  • Tags:

遇到的坑

最近做开发的时候,发现项目的部署脚本无法正确运行。检查了一下发现脚本首先会杀死之前启动的进程,但是之前启动的进程隶属与root,而脚本的执行者是另外一个用户。

于是我用root杀死了这个进程后,用当前用户重启了进程,但是发现进程无法启动,看了下报错,是说某个项目的日志文件无法写入。

利用ls命令看了下项目的日志文件的权限,发现当前用户是没有写权限的,于是乎我就把文件的所有者修改成了当前用户,所有问题也就解决了。

查看文件的所有者以及权限

我们可以利用ls命令查看文件和目录的所有者以及权限。

$ ls -l .
drwxr-xr-x 5 dalt root       49 12月 25  2018 aaa
-rw-r--r-- 1 dalt dalt 90715891  2月  5 11:14 bbb

我们从左到右分析。

第一列的10个字符显示的是文件权限。

  • 第一个字符如果为d则表示该项是目录,为-则表示该项为文件,如果是|则表示是连接文件,b代表设备文件。
  • 后续分为三个rwx组,rwx三个字符分别对应读权限,写权限和执行权限。三个组则对应当前用户,当前用户所在的组,其它用户。

现在来分析第一项的第一列drwxr-xr-xd说明它是一个目录,第一组是rwx表示当前用户可以完全控制这个目录,第二组是r-x说明同组用户可以读取和执行这个文件,而第三组r-x表示其它用户可以读取和执行这个文件。

第二列是一个数字表示这个项下面还包含多少子文件或目录。第一行是5表示aaa这个目录下右5个子目录或子文件。

第三列表示这个项的所有者,这里都是dalt

第四列表示这个项所归属的组,第一个文件归属于组root,第二个文件归属于组dalt

第五列表示项的大小,这里bbb文件的大小为90715891

后面的三列表示项的最后修改时间。

最后一列则代表这个项的名称。

修改文件所有人和所有组

要修改文件所有人和所有组,我们可以用chown命令。

$ chown [-R] Onwer[:Group] {File...|Directory...}

这里Owner表示文件的新的所有人,Group表示文件的新的所有组,后面可以跟文件和目录的名称。如果指定-R则会递归设置所有人和所有组。

修改文件的访问权限

要修改文件的访问权限,可以使用chmod命令。

$ chmod [-R] [u][g][o]+[r][w][x] {File...|Directory...}

这里u表示当前用户,g表示当前组,o表示其它用户。我们可以为几类用户同时加上读写执行权限。