之前在windows下面从来没想过权限的事情,而在ubuntu中这点就很受重视,可谓时时都会遇到权限管理的问题。即使如此,搞崩ubuntu的次数还是比windows要多的,不过好像心也没那么痛,可能ubuntu就是拿来玩的。虽然不是每次搞崩都是因为权限,但还是有必要理一理。
References:
参考文献:
[1]完美应用ubuntu(第3版)
权限
在linux系统中,我们可以在终端使用ls -l
查看目录下所有子目录和文件的权限属性。其输出结果中每一列的含义如下:
- 第一列:文件类型和权限。
- 第二列:i节点,即硬链接数。
- 第三列:文件的属主,即文件的所有者。
- 第四列:文件的属组。
- 第五列:文件的大小。
- 第六列:mtime,即最后一次修改时间。
- 第七列:文件或者目录名。
其实不做服务器的话没必要搞那么懂,我就讲一下我认为最重要的第一列。
首先,第一个字母表示的是文件类型,主要有下面几种:
- -:表示普通文件。
- d:表示目录。
- l:表示链接文件。
- b:表示块设备文件,比如硬盘的存储设备等。
- c:表示字符设备文件,比如键盘。
- s:表示套接字文件,主要跟网络程序有关。
- p:表示管道文件。
其次,之后的九个字母三个为一组,分别表示的是文件所有者(u)的权限、同组用户(g)的权限和其他用户(o)的权限。这里属主一般就是sudo
赋权进入的那个用户,一般在个人系统中就是特权用户root。另外,可以用“a”表示all users。
在每个三个字母组成的一组中,依次分别为读(r)、写(w)和执行(x)权限。若是字母,则表示可;若是“-”,则表示不可。例如“rw-”表示的是“可读可写不可执行”。
为了方便,还可以用数字代表权限:用4代表读权限,用2代表写权限,用1代表执行权限。可以发现,这样的三个数字之和(0-7)可以表示任何一种权限组合。
较为常用权限组合的有:
- 7(可读可写可执行——rwx——4+2+1=7)
- 6(可读可写不可执行——rw-——4+2+0=6)
- 4(可读不可写不可执行——r———4+0+0=4)
chmod
一般通过chmod
命令来修改权限,主要有两种方法。
数字法
这种方法最简洁,其基本格式是
chmod (-R) 模式 文件名
。这里的-R
可以用来进行多级目录的权限设定,也就是将指定文件夹内的所有文件都修改权限。
以两个较为常用的使用为例。1
2
3
4
5sudo chmod 666 文件名
#赋予所有用户读和写的权限,一般没有权限时我都会使用这个命令
sudo chmod 600 文件名
#赋予文件所有者读和写的权限,给group和other只读权限参数法
这种方法适用于只需要改变单个用户的权限而又不想考虑或者计算别的用户的权限情况,其基本格式是
chmod [u/g/o/a] [+/-/=] (rwxst) 文件名
。
这里先解释一下几个重要的参数和符号。
u:所属用户。
g:同组用户。
o:其他用户。
a:所有用户,相当于ugo。
+:原权限基础上增加权限。
-:原权限基础上减少权限。
=:无论原权限是什么,最后的权限都修改为这里指定的权限。
r:不解释,不懂的话没好好看前文。
w:不解释,不懂的话没好好看前文。
x:不解释,不懂的话没好好看前文。
s:运行时可置UID。
t:运行时可置GID。
来看例子:1
2
3
4
5
6
7
8sudo chmod u+rw 文件名
#给用户增加读写权限
sudo chmod o-rwx 文件名
#不允许其他用户读写执行
sudo chmod g=rx 文件名
#使同组用户只能读和执行