一、权限的分类
Linux中,文件的权限主要有三类:
r:读权限(read)
w:写权限(write),创建新文件也属于w权限
x:执行权限(excute),如果文件具有x权限,则表示文件可以发起进程;若目录具有x权限,表示目录可以使用ls-l查看,可以使用cd切换至该目录中。
针对具体的文件,权限一共有9位,前三位属主,用u表示(user);中间三位属组,用g表示(group),最后三位属于其他,用o表示(other)。因此所有的权限如下表:
字母表示 |
二进制表示 |
八进制表示 |
描述 |
--- |
000 |
0 |
无权限 |
--x |
001 |
1 |
执行权限 |
-w- |
010 |
2 |
写权限 |
-wx |
011 |
3 |
写和执行权限 |
r-- |
100 |
4 |
只读权限 |
r-x |
101 |
5 |
读和执行权限 |
rw- |
110 |
6 |
读写权限 |
rwx |
111 |
7 |
读、写和执行权限 |
三位2进制数可以表示一个八进制数,因此在实际操作中,我们可以用阿拉伯数字数字来表示三类用户对文件的权限。例如:
777: rwxrwxrwx // 属主u:读、写和执行;属组g:读、写和执行;其他o:读、写和执行
755: rwxr-xr-x // 属主u:读、写和执行;属组g:读和执行;其他o:读和执行
750: rwxr-x---// 属主u:读、写和执行;属组g:读和执行;其他o:无权限
700: rwx------// 属主u:读、写和执行;属组g:无权限;其他o:无权限
644: rw-r--r--// 属主u:读写;属组g:读;其他o:读
640: rw-r----- // 属主u:读写;属组g:读;其他o:无权限
600: rw-------// 属主u:读、写;属组g:无权限;其他o:无权限
440: r--r-----// 属主u:只读;属组g:只读;其他o:无权限
400: r--------// 属主u:只读;属组g:无权限;其他o:无权限
二、改变文件权限(mode):
在Linux中,改变文件权限的常用命令如下所示:
# chmod [option] MODE FILE_NAME
权限定义的方式主要有如下两种:
1.同时修改三类用户的权限:采用8进制数字方式
2.修改某一类或某些类用户的权限:u,g,o, a
采用的形式可以是:
u=rw
u=rwx,g=r--
ug=r---wx
ugo=-w-r----x
a=rwx
如改变文件message的其他权限为只读:
# chmod o=r message
改变文件message的属组权限为读写:
# chmod g=rw message
改变文件message三类用户的权限为只读权限:
# chmod ugo=r message
改变文件message 属主属组为读写权限:
# chmod ug=rw message
同时改变三类用户的权限,可以用 a(All)来表示 ugo,如改变文件message 三类用户为读写权限:
# chmod a=rw message
可以用逗号分隔,来同时改变多类用户的不同权限,如改变文件message的属组为只读权限,其他用户没有任何权限:
# chmod g=r,o=--- message
3.只操作某类用户的某位权限或某些权限
可以使用u,g,o,a 和 +/-等符号来进行此项操作:
如给message的属组加上写权限:
# chmod g+w message
如给message的所有用户都加上/去掉执行权限,注意 a 可以省略:
# chmod +x message
# chmod -x message
如去掉message属主用户的读写权限:
# chmod u-rw message
注意以上的权限修改改的是文件本身的权限,如果文件是目录,那么修改的就是目录的权限,而非目录里的文件权限。
如进行以下操作:
# ls /var/log
# cp /etc/inittab /var/log/cups
# cp /var/log/cups ./ -r
# ls -l
# ls -l cups
就会发现目录 cups 和cups里的文件各类用户的权限是不一样的
下面我们可以分别对目录cups 和其中的文件进行权限修改:
# chmod o=--- cups/
# ls -l
此时可以看到cups目录的权限已经被修改了,但是输入以下命令:
# ls -l cups
则会发现其中的文件权限没有受到影响
如果想要修改目录权限的同时也修改目录中文件的权限,则可以使用-R 选项进行递归修改:
如同时去掉目录cups 和其中的文件inittab的全部属组权限,可以进行如下操作:
# chmod -R g=--- cups/
#ls -l
#ls -l cups
改变文件权限时可以使用 --reference 选项。此选项的使用格式为:
# chmod --reference=[PATH]/FILE_NAME1 FILE_NAME2
它的作用是将 FILE_NAME2 的权限改为 FILE_NAME1 的权限,例如:
# ls -ld /etc // -ld 选项是用来查看目录本身的权限的,这里查看的是目录 /etc的权限
# ls -l // 查看当前目录下cups的目录权限,可以发现cups和/etc的权限不一致
# chmod --reference=/etc cups //将 cups的权限改为etc的权限
# ls -l // 此时可以看到 cups 和 /etc 的权限一致了
-R 和 --reference 两个选项可以一起使用,但这种情况并不常见,因为多数时候文件的权限并不相同。