Linux系统中的一切事物都是文件。

 

一、Linux文件种类

文件种类

1)、普通文件

2)、纯文本文件(ASCII):Linux中最多的一种文件类型

3)、二进制文件:Linux中的可执行文件就是这种格式

4)、目录:文件夹

5)、链接文件:类似windows下的快捷方式

6)、设备文件

a、块设备文件,就是一些存储数据以提供系统随机访问的接口设备,如硬盘等。

b、字符设备文件,就是一些串行端口的接口设备,如键盘鼠标。

7)、套接字(sockets)文件:通常被用在网络上的数据连接。我们可以启动一个程序来见他客户端的请求,二客户端就可以通过这个socket来进行顺序的通信。通常在/var/run这个目录中。

 

二、权限与归属

在Linux系统中,文件和目录是重要的组成部分,经常使用root用户登录系统没有感觉,什么都可以操作,但是一旦使用普通用户的时候,就会发现权限这个棘手的问题。

 

1、文件权限组成

首先查看文件权限怎么查看呢?

 

可以用以下命令去查看:

 ll  /etc/passwd

centos 以某用户执行文件 centos可执行权限_目录权限

输出结果为:

-rwsr-xr-x 1 root root 430540 Dec 20 18:27  /etc/passwd

可将其分割成以下样子:

①-②rws③r-x④r-x ⑤1 ⑥root ⑦root ⑧430540 ⑨Dec 20 18:27  ⑩/etc/passwd

 

说明:

①. 首字符,表示该文件是什么类型

         -,普通文件;

 

         d,目录文件;

 

         l,符号链接;

 

         c,字符设备文件;

 

         b,字节设备文件;

 

         p,先进先出文件;

 

         s,套接字文件。

 

②. 第2~4个字符,表示所有者(owner)的权限

 

③. 第5~7个字符,表示所属组(group)的权限

 

④. 第8~10个字符,表示其他用户(other)的权限

 

⑤. 第11个字符,表示硬链接数

 

⑥. 是文件所有者的用户名称(owner)

 

⑦. 是文件所属组的用户组名称(group)

 

⑧. 是文件大小,以块为单位。

 

⑨. 是最后修改日期

 

⑩. 是文件或目录的绝对路径

 

从上述内容我们可以得知Linux下的权限角色有三种,分别是所有者(owner)、所属组(group)和其他用户(other)。

 

2、基本权限和归属关系

1)、访问权限:

读取:允许查看内容-read

读取权限对目录来说,是否可以查看该目录中的内容

对文件来说,也是是否可以查看该文件中的文本内容

 

写入:允许修改内容-write

写入权限对目录来说,是否可以在该目录下创建、删除、重命名目录等操作;

而对文件来说,则是是否允许修改文件中的文本内容。

 

 

可执行:允许运行-excute

可执行权限对于目录来说,对应的位置有x权限,意为是否可进入该目录;

而对于文件来说,有x权限,意为该文件可执行,如程序(命令)的所有者权限中都有x权限。

 

2)权限的表示形式

a)、字母法表示

 r,读权限;

 w,写权限;

 x,可执行权限。

 

b)、数字法表示:

4,读权限;

2,写权限;

1,可执行权限。

 

3、特殊权限

1)SUID——在所有者权限上出现个“s”

普通用户运行某程序时,会把该程序文件的所有者的权限授予给普通用户,让其临时拥有所有者的权限。

只对二进制程序文件有效。

centos 以某用户执行文件 centos可执行权限_文件权限_02

注:如果本身具有x,为s,否则为S

如图,passwd这个命令,我们经常用来设置用户密码,普通用户也可以使用“passwd”来设置自己的密码。当普通用户去运行它的时候,其实是以其所有者“root”的身份去运行。

 

2)SGID——在所属组权限出现“s”

在某目录下,新建的文件或目录,所属组的权限和所属组跟该目录一致。

centos 以某用户执行文件 centos可执行权限_文件权限_03

注:如果本身具有x,为s,否则为S

centos 以某用户执行文件 centos可执行权限_centos_04

从上图可以看到,当使用普通用户tom创建目录后,器所属组还是属于root,且所属组权限与test的权限一致。

 

3)sticky——针对目录设置,会在其他人权限位上出现一个“t”

从单词字面上理解,叫粘滞位。就像被胶水粘住一样,所有也叫做防删除位,目的是为了防止被别的用户删除(PS: root 用户除外,它是超级管理员,防止不了)

centos 以某用户执行文件 centos可执行权限_centos_05

作用:

除了该文件的创建者和root用户可以删除和修改,其他人只能修改查看,不可删除。

centos 以某用户执行文件 centos可执行权限_文件权限_06

 

 

4、归属关系:

 

属主:拥有此文件或目录的用户-user

 

属组:拥有此文件或目录的组-group

 

其他用户:除属主、属组以外的用户-other

 

最终权限:访问权限和归属关系共同决定最终权限、

 

 

三、设置权限

1、chmod命令——设置文件的权限

有两种方式设置权限:

1)、数字类型设置权限:

格式:  chmod   xyz  文件名

其中,x代表所有者权限,y代表所属组权限,z代表其他人权限

 

注:xyz是一串整数。

 

r=4,w=2,x=1

以上三种身份的权限每个都是r+w+x的和,如果没有相应权限,则值为0。

x=所有者=rwx=4+2+1=7

y=所属组=rwx=4+2+1=7

z=其他人=---=0+0+0=0

注:

当执行“chmod  7  文件名”,是对文件的其他人权限设置

当执行“chmod  77  文件名”,是对文件的所属组和其他人权限设置

当执行“chmod  777  文件名”,是对文件的所有者、所属组和其他人权限设置

 

2、字母类型设置权限:

格式:chmod   [augo][+-=][rwx]  文件名

其中:

u代表所有者

g代表所属组

o代表其他人

a代表所有人

 

读写执行的权限为r、w、x

 

“+”代表加入

“-”代表除去

“=”代表设置

 

例子:chmod  u+rwx,g+rwx,o+rx   文件名

给所有者全部权限,所属组所有权限,其他人只有读和执行权限。

 

注:通常跟“-R”一起使用,代表递归的持续更改,即连同子目录下的所有文件、目录。

 

添加一个SUID权限:

方法一:chmod u+s  文件名

方法二:chmod  4777  文件名

注:4是suid权限的数字形式。

 

添加一个SGID权限:

方法一:chmod g+s  文件名

方法二:chmod  2777  文件名

注:2是sgid的数字形式。

 

添加一个S:ticky (BIT):

方法一:chmod   o+t   文件名

方法二:chmod   1777   文件名

注:1是ticky的数字形式。

 

2、chown——设置归属

格式:

     chown 属主 文件或目录    //修改文件或目录的所有者

     chown :属组 文件或目录   //修改文件或目录的所属组

     chown 属主:属组 文件或目录   //修改文件或目录的所有者和所属组

 

例子:

chown  [-R]  user   file   #设置file的所有者为user

 

chown  [-R]  .group   file    #设置file的所属组为group

 

chown  [-R]  user.group   file   #设置file的所有者为user,所属组为group

 

chown  [-R]  user:group   file   #设置file的所有者为user,所属组为group

 

3、chgrp——设置所属组

格式:  chgrp   [-R]   组名   文件名

例子:

chgrp   root   /opt/test/aa

centos 以某用户执行文件 centos可执行权限_centos_07

centos 以某用户执行文件 centos可执行权限_linux_08

 

 

4、umask——反掩码,用于设置默认权限

一般文件默认不给x执行权限

其他取决于umask设置

umask值可以进行设置(为临时,umask 0027即讲umask值设置为0027,可使用umask查看)

 

注:由于文件默认不给x权限,所以创建一个新文件的最大权限为666,创建一个目录的最大权限为777

       umask默认值为022。

新创建的文件权限 = 文件的最大权限  -  umask值

新创建的目录权限 = 目录的最大权限  -  umask值

 

总结:

chmod,chown,chgrp这三个命令虽然参数很少,但是总是容易搞混,不过用的多了,用的熟练了就能记住了,chmod修改的是权限,chown修改的是所属用户和组,chgrp修改的是所属组。

最需要注意的是umask的值的设定,新建文件和文件夹时的默认权限!