一、权限的分类

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.修改某一类或某些类用户的权限:ugo, 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


同时改变三类用户的权限,可以用 aAll)来表示 ugo,如改变文件message 三类用户为读写权限:

# chmod a=rw message


可以用逗号分隔,来同时改变多类用户的不同权限,如改变文件message的属组为只读权限,其他用户没有任何权限:

# chmod g=r,o=--- message


18_Linux基础知识及命令————改变文件的权限_Linux 文件 权限 更改


3.只操作某类用户的某位权限或某些权限

可以使用ugoa +/-等符号来进行此项操作:

如给message的属组加上写权限:

# chmod g+w message


如给message的所有用户都加上/去掉执行权限,注意 a 可以省略:

# chmod +x message

# chmod -x message


如去掉message属主用户的读写权限:

# chmod u-rw message


18_Linux基础知识及命令————改变文件的权限_Linux 文件 权限 更改_02


注意以上的权限修改改的是文件本身的权限,如果文件是目录,那么修改的就是目录的权限,而非目录里的文件权限。

如进行以下操作:

# ls /var/log

# cp /etc/inittab /var/log/cups

# cp /var/log/cups ./ -r

# ls -l

# ls -l cups

就会发现目录 cups cups里的文件各类用户的权限是不一样的

18_Linux基础知识及命令————改变文件的权限_Linux 文件 权限 更改_03

下面我们可以分别对目录cups 和其中的文件进行权限修改:

# chmod o=--- cups/

# ls -l

此时可以看到cups目录的权限已经被修改了,但是输入以下命令:

    # ls -l cups

则会发现其中的文件权限没有受到影响

18_Linux基础知识及命令————改变文件的权限_Linux 文件 权限 更改_04


如果想要修改目录权限的同时也修改目录中文件的权限,则可以使用-R 选项进行递归修改

如同时去掉目录cups 和其中的文件inittab的全部属组权限,可以进行如下操作:

# chmod -R g=--- cups/

#ls -l

#ls -l cups

18_Linux基础知识及命令————改变文件的权限_Linux 文件 权限 更改_05


改变文件权限时可以使用 --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 的权限一致了

18_Linux基础知识及命令————改变文件的权限_Linux 文件 权限 更改_06

-R --reference 两个选项可以一起使用,但这种情况并不常见,因为多数时候文件的权限并不相同。