Linux文件权限
遇到的坑
最近做开发的时候,发现项目的部署脚本无法正确运行。检查了一下发现脚本首先会杀死之前启动的进程,但是之前启动的进程隶属与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-x
,d
说明它是一个目录,第一组是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
表示其它用户。我们可以为几类用户同时加上读写执行权限。