Linux学习第三课-文件基本属性

发布时间 2023-03-27 18:07:45作者: XQ-Yang

1. 文件基本属性

​ 在Linux中,可以使用llls -l命令来显示一个目录或文件的属性以及所属的用户和组

​ 如在根目录下:

image-20230325150355000

​ 如上图所示,每列的含义为:

  • 第一列表示属性;
  • 第二列对于普通文件是链接数,对于目录文件是第一级子目录数;
  • 第三列表示所属用户;
  • 第四列表示所属组;
  • 第五列表示文件大小,单位是字节;
  • 第六、七、八列表示最后修改时间;
  • 第十列表示文件名

​ 下面对第一列进行详细理解,以Hello.java文件的属性-rw-r--r--来说,

  • 权限显示位一共为10位,分为四段,从第二位算起,每三个一组;
  • 第一位代表文件类型(-表示普通文件,d表示目录);
  • 第2-4位表示文件所属用户拥有的权限(rw-:4+2=6);
  • 第5-7位表示该用户所属组拥有的权限(r--:4);
  • 第8-10位表示其他用户拥有的权限(r--:4);

为什么会有这样的属性呢:

Linux系统是典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限,为了保护系统的安全,Liunx系统对不同的用户访问同一文件(包括目录)的权限做了不同的规定。

​ 在Linux中可以使用一下两个命令来修改文件或目录的所属用户和权限:

  • chown(change owner):修改所属用户与组
  • chmod(change mode):修改文件的权限

2. 更改文件属性

​ 为了演示效果,先创建用户组group1,之后创建用户user1,并将user1加入用户组group1中,再创建用户user2

image-20230325154652158

2.1 更改文件属组

​ 命令:chgrp [-R] 组名 文件名或目录名

-R表示递归更改文件数组,如更改某个目录的属组时,加上-R参数,那么该目录下的所有文件或目录的属组都会改变

​ 分别将根目录下的Hello.java文件和yxq目录的属组更改为刚创建的group1:

image-20230325155457898

image-20230325155644936

2.2 更改文件属主

​ 命令:chown [-R] 属主名 文件名chown [-R] 属主名:属组名 文件名
将usr/local/Hello.java文件的属主名改为user2,再将其改为属主名为user1、属组为group1:

image-20230325161146441

2.3 更改文件属性

​ Linux文件属性有两种设置方式,一种是数字,一种是符号。符号r对应数字4、符号w对应数字2、符号x对应数字1。

2.3.1 数字方式更改

​ 从上面的文件基本属性所讲到的权限共9位,每3位一组,在更改文件属性的时候需要将三个组各自的权限累加,如-rwxrwx---的为:

  • owner = rwx = 4 + 2 + 1 = 7
  • group = rwx = 4 + 2 + 1 = 7
  • others = --- = 0 + 0 + 0 = 0

​ 所以更改文件属性时,文件的权限数字为770。

​ 命令:chmod [-R] xyz 文件或目录

xyz表示属性数值相加后的表示结果770,-R表示进行递归更改,该目录下的所有目录或文件属性都会更改。

​ 将根目录下的Hello.java文件的属性全改为只可读:

image-20230325163541932

​ 将该文件的属性改为只读后,使用vi对该文件内容进行编辑,在保存时会有如下信息:

image-20230325164346949

​ 将根目录下的自创建的yxq目录及子目录的属性更改为可读可写可执行:

image-20230325164233586

image-20230325164255828

2.3.2 符号方式更改

​ 使用u, g, o来代表三种身份的权限,此为,可以使用a表示全部身份,权限可以写成r, w, x,演示如下:

image-20230325165054203

​ 创建新文件123.cnf,查看该文件的默认属性,之后使用符号方式更改其属性,属主的权限为rwx,属组的权限为rw,其他用户的权限为r。

3. 访问权限演示

​ 将根目录下的Hello.java文件属性改为-rw-r-----,该文件的属主为root用户,拥有对该文件的可读可写权限,属组为group1,权限为只读,当切换用户为user1后,用户user1的用户组为group1,那么用户user1对该文件只读,若使用vi对该文件进行编辑会有报错提示这是一个只读文件。当切换用户为user2后,用户user2不属于用户组group1,对该文件属于其他用户,其他用户对该文件没有任何权限。

image-20230325170816776

注意:当用户所属组对某个文件有权限,但该文件的属主用户是属于这个用户组的,如果该用户对这个文件没有权限,那么该文件是以用户的权限为准。就是Hello.java的属主是用户user1,且user1是属于group1用户组的,group1用户组对这个文件有读写权限,但user1用户对这个文件没有读写权限,user1用户在访问这个文件时,以user1的权限为准:

image-20230325171758496

root用户,这个超级用户,不受权限控制,在Linux下可以做任何事