(四)Linux系统中文件属性详解

系列文章目录

(一) Linux入门概述
(二) Linux环境搭建
(三)Linux基本目录详解
(四)Linux系统中文件属性详解
(五)Linux命令详解—文件和目录管理



前言


1、文件属性信息概述

Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。
为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
在 Linux 中我们通常使用以下两个命令来修改文件或目录的所属用户与权限(详细介绍后面再讲):

  • chown (change owner) : 修改所属用户与组。
  • chmod (change mode) : 修改用户的权限。
    在这里插入图片描述
文件的属性信息(1-8)1. 文件数据的 inode 信息:index node -- 索引节点
    作用:快速从磁盘 block 中找到数据信息
2. 文件的数据类型:文件 目录 链接文件 设备文件 ……
    作用:指明文件的数据类型
3. 权限位信息: r(read)w(write)x(execute)执行
    作用:控制让不同用户对文件可以有不同的权限
4. 文件目录的硬链接数:类似于超市的多个门
    作用:可以多个路径查看数据信息
5. 文件所属用户信息(属主):
    作用:文件的创建者或者拥有者
6. 文件所属组信息(属组):
    作用:文件或数据的所属用户组
7. 文件的大小信息
8. 文件的时间信息(修改时间)

9. 文件名称

2、文件类型

Linux中文件的类型,可以根据多种方法来区分。比如颜色、属性信息、特殊命令等。

1、根据属性信息区分:

d       --目录
-       --文件
c       --字符文件
b       --块文件
l       --链接文件
s       --socket文件

2、根据颜色区分:

1.红色:压缩文件或者包文件
2.蓝色:目录
3.绿色:可执行文件,可执行的程序
4.白色:普通文件,如文本文件,配置文件,源码文件等
5.浅蓝色:链接文件,主要是使用ln命令建立的文件
6.红色闪烁:表示链接的文件有问题
7.黄色:表示设备文件,包括block,char,fifo
8.灰色:表示其它文件

3、根据特殊命令区分file 文件名

[root@localhost /]# file /bin/yum
/bin/yum: Python script, ASCII text executable --可执行文件

一些常见的文件类型

d       -- 目录文件类型
-       -- 普通文件
        1. 纯文本文件(text)  /etc/hosts  -- 文本文件,可以直接编辑查看
        2. 二进制文件(binary) /bin/ls    -- 命令文件,不可以编辑查看
        3. 数据型文件(data) /tmp/tar.gz  -- 压缩文件
l       -- 链接文件(快捷方式)
c/b     -- 字符文件/块文件(设备文件)
        块文件:存储的设备文件 光驱设备文件 磁盘
        字符文件:根本停不下来的输出字符信息
        
        磁盘设备文件 /dev/sda
        随机设备文件 /dev/urandom(产生随机字符信息)
        输出设备文件 /dev/zero(黑洞的出口文件)
        输入设备文件 /dev/null(黑洞的入口文件)

s       -- socket文件(网络编程)

3、文件权限

3.1、文件权限概述

每个文件的属性由 10 个字符来确定,可以分为 4 部分(如下图)。
在这里插入图片描述

  • 第1部分(0位):文件类型,上面已详细介绍。
  • 第2部分(1-3位):属主(该文件的所有者)拥有该文件的权限。
  • 第3部分(4-6位):属组(所有者的同组用户)拥有该文件的权限。
  • 第4部分(7-9位):其他用户拥有该文件的权限。

Linux 文件的基本权限:Linux 文件的基本权限有9个,分别是owner/group/others(拥有者/组/其他) 三种身份,每种身份各自有自己的 read/write/execute 权限。

权限的表示方法:

权限类型数字标识字符标识
读(read)4r
写(write)2w
执行(execute)1e
没权限(-)0-

身份的表示方法:

身份类型字符标识
用户(即文件所有者)(user)u
组(即文件所有者所属的组)(group)g
其他用户(others)o
所有(all)a

3.2、更改文件属性

3.2.1、chgrp:更改文件属组

语法:chgrp [-R] 属组名 文件名

--R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。

[root@localhost test]# ls -il
total 0
 76961 -rw-r--r--. 2 root root  0 Aug 17 07:58 h2 #现在属于root组
 76974 -rw-r--r--. 1 root root  0 Aug 17 08:05 h3
166935 drwxr-xr-x. 2 root root 26 Aug 17 08:08 tt1
[root@localhost test]# cat /etc/group #查询有哪些组
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
......
[root@localhost test]# chgrp sys h2 #更改文件 h2 的属组为sys
[root@localhost test]# ls -il
total 0
 76961 -rw-r--r--. 2 root sys   0 Aug 17 07:58 h2
 76974 -rw-r--r--. 1 root root  0 Aug 17 08:05 h3
166935 drwxr-xr-x. 2 root root 26 Aug 17 08:08 tt1

3.2.2、chown:更改文件属主,也可以同时更改文件属组

语法:chown [–R] 属主名 文件名
chown [-R] 属主名:属组名 文件名

  • -R:递归更改文件属主/组,就是在更改某个目录文件的主/组时,如果加上-R的参数,那么该目录下的所有文件的主/组都会更改。
[root@localhost test]# ls -il
total 0
 76961 -rw-r--r--. 2 root sys   0 Aug 17 07:58 h2 # 属主为 root
 76974 -rw-r--r--. 1 root root  0 Aug 17 08:05 h3
166935 drwxr-xr-x. 2 root root 26 Aug 17 08:08 tt1
[root@localhost test]# chown lzx h2 # 更改属主为 lzx
[root@localhost test]# ls -il
total 0
 76961 -rw-r--r--. 2 lzx  sys   0 Aug 17 07:58 h2 # 属主更改为了 lzx
 76974 -rw-r--r--. 1 root root  0 Aug 17 08:05 h3
166935 drwxr-xr-x. 2 root root 26 Aug 17 08:08 tt1

3.2.3、chmod:更改文件9个属性

Linux 文件的基本权限有9个,分别是owner/group/others(拥有者/组/其他) 三种身份,每种身份各自有自己的 read/write/execute 权限。所以我们按身份分为3组,每组都有读、写、执行权限。

Linux文件属性有两种设置方法:一种是数字,一种是符号

1数字方式更改权限

前面介绍过,每个身份有三个权限r(读)/w(写)/x(执行),三个权限的数字之和就表示一个身份的权限,比如:rwx = 4+2+1 = 7,就表示读、写、执行的权限。那三个身份就是三组数字。

语法:chmod [-R] xyz 文件或目录

  • xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。比如:rwx = 4+2+1 = 7
  • -R : 进行递归(recursive)的持续变更,以及连同次目录下的所有文件都会变更。
[root@localhost test]# ls -il
total 0
 76961 -rw-rw-rw-. 2 lzx  sys   0 Aug 17 07:58 h2
 76974 -rw-r--r--. 1 root root  0 Aug 17 08:05 h3 #更改前的权限
166935 drwxr-xr-x. 2 root root 26 Aug 17 08:08 tt1
[root@localhost test]# chmod 666 h3 #更改 h3 的文件权限,数字格式
[root@localhost test]# ls -il
total 0
 76961 -rw-rw-rw-. 2 lzx  sys   0 Aug 17 07:58 h2
 76974 -rw-rw-rw-. 1 root root  0 Aug 17 08:05 h3 #更改后的权限
166935 drwxr-xr-x. 2 root root 26 Aug 17 08:08 tt1

2符号方式更改权限
前面介绍过三种身份,分别用**u(用户)/g(组)/o(其他)来表示三个身份,用a(所有)**表示全部身份。也就是可以使用下表的方式来分配权限:

命令身份操作权限操作对象
chmodu(用户)/g(组)/o(其他)/a(所有)+(加入)/-(除去)/=(设定)r(读)/w(写)/x(执行)文件或目录
[root@localhost test]# ls -il
total 0
 76961 -rw-rw-rw-. 2 lzx  sys   0 Aug 17 07:58 h2
 76974 -r--r--r--. 1 root root  0 Aug 17 08:05 h3
166935 drwxr-xr-x. 2 root root 26 Aug 17 08:08 tt1
[root@localhost test]# chmod u=rw-,g=rw-,o=rw- h3 #设置u读写、g读写、o读写权限
[root@localhost test]# ls -il
total 0
 76961 -rw-rw-rw-. 2 lzx  sys   0 Aug 17 07:58 h2
 76974 -rw-rw-rw-. 1 root root  0 Aug 17 08:05 h3
166935 drwxr-xr-x. 2 root root 26 Aug 17 08:08 tt1
[root@localhost test]# chmod o-w h3 #取消o(其他用户)w()权限
[root@localhost test]# ls -il
total 0
 76961 -rw-rw-rw-. 2 lzx  sys   0 Aug 17 07:58 h2
 76974 -rw-rw-r--. 1 root root  0 Aug 17 08:05 h3
166935 drwxr-xr-x. 2 root root 26 Aug 17 08:08 tt1
[root@localhost test]# chmod a=r h3 #所有的身份时候设置成r()权限
[root@localhost test]# ls -il
total 0
 76961 -rw-rw-rw-. 2 lzx  sys   0 Aug 17 07:58 h2
 76974 -r--r--r--. 1 root root  0 Aug 17 08:05 h3
166935 drwxr-xr-x. 2 root root 26 Aug 17 08:08 tt1

4、用户信息(属主/属组)

Linux系统是一个多用户多任务的分时操作系统,换句话说,Linux 系统支持多个用户在同一时间内登陆,不同用户可以执行不同的任务,并且互不影响。任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。(详细信息后面介绍)

5、索引节点 inode

5.1 概述

索引节点相当于书籍的目录,用于存储文件属性的信息和文件或数据在磁盘中保存的位置。首先了解ext文件系统(即Linux 文件系统)的原理,而我们Linux目前使用ext4文件系统。如下图:

在这里插入图片描述

ext4 文件系统主要把分区分为两大部分:inode(i节点)block

  • inode :占用小部分空间。大小默认为 128 Byte,用来记录文件的权限(r、w、x)、文件的所有者和属组、文件的大小、文件的状态改变时间(ctime)、文件的最近一次读取时间(atime)、文件的最近一次修改时间(mtime)、文件的数据真正保存的 block 编号。每个文件需要占用一个 inode。
  • block:占用大部分空间。大小可以是 1KB、2KB、4KB,默认为 4KB。block 用于实际的数据存储,文件名也保存在block中。如果一个 block 放不下数据,则可以占用多个 block。比如:15KB的文件要占用4个block。

总结
1、每个文件都独自占用一个 inode,文件内容由 inode 的记录来指向。
2、如果想要读取文件内容,就必须借助目录中记录的文件名找到该文件的 inode,才能成功找到文件内容所在的 block 块(即文件内容)。

5.2 查看 inode 和 block 信息

1、inode 查看方法:

[root@localhost /]# df -i
Filesystem       Inodes  IUsed    IFree IUse% Mounted on
devtmpfs         120512    377   120135    1% /dev
tmpfs            124455      1   124454    1% /dev/shm
tmpfs            124455    871   123584    1% /run
tmpfs            124455     16   124439    1% /sys/fs/cgroup

2、block 查看方法:

[root@localhost /]# df 
Filesystem     1K-blocks    Used Available Use% Mounted on
devtmpfs          482048       0    482048   0% /dev
tmpfs             497820       0    497820   0% /dev/shm
tmpfs             497820    8464    489356   2% /run
tmpfs             497820       0    497820   0% /sys/fs/cgroup

(命令详细信息后面介绍)

5.3、读取数据的原理

1、找到指定数据
2、读取数据内容,先获取文件数据的 inode 信息
3、根据 inode 信息在磁盘中找到对应的 block
4、根据 block 信息获取文件真实内容
在这里插入图片描述

6、时间信息

6.1、文件数据时间类型

访问时间    Access time -- atime
修改时间    Modify time -- mtime    
改变时间    Change time -- ctime    数据属性信息发生改变

6.2 如何查看文件详细属性信息

stat 文件名
[root@yunxuanedu data]# stat index.conf 
  File: ‘index.conf’
  Size: 4           Blocks: 8          IO Block: 4096   regular file
Device: fd01h/64769d    Inode: 1572874     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2021-08-14 12:21:34.931911740 +0800
Modify: 2021-08-14 12:17:58.855963278 +0800
Change: 2021-08-14 12:17:58.855963278 +0800
 Birth: -

6.3、时间属性改变案例

# 查看当前时间属性信息
[root@yunxuanedu data]# stat index.conf 
  File: ‘index.conf’
  Size: 4           Blocks: 8          IO Block: 4096   regular file
Device: fd01h/64769d    Inode: 1572874     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2021-08-14 13:58:18.350433799 +0800
Modify: 2021-08-14 13:58:18.350433799 +0800
Change: 2021-08-14 13:58:18.350433799 +0800
 Birth: -
 
# 修改文件属性,ctime 将会变动
[root@yunxuanedu data]# chmod 600 index.conf 
[root@yunxuanedu data]# stat index.conf 
  File: ‘index.conf’
  Size: 4           Blocks: 8          IO Block: 4096   regular file
Device: fd01h/64769d    Inode: 1572874     Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2021-08-14 13:58:18.350433799 +0800
Modify: 2021-08-14 13:58:18.350433799 +0800
Change: 2021-08-16 10:38:35.779929115 +0800
 Birth: -
 
# 修改文件内容,mtime 和 ctime 都会变动(修改文件内容时,文件属性信息也发生改变)
[root@yunxuanedu data]# echo "qwer" >> index.conf 
[root@yunxuanedu data]# stat index.conf 
  File: ‘index.conf’
  Size: 9           Blocks: 8          IO Block: 4096   regular file
Device: fd01h/64769d    Inode: 1572874     Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2021-08-14 13:58:18.350433799 +0800
Modify: 2021-08-16 10:39:04.322112606 +0800
Change: 2021-08-16 10:39:04.322112606 +0800
 Birth: -
 
# 查看文件内容,atime 发生变动(访问时间)
[root@yunxuanedu data]# cat index.conf 
123
qwer
[root@yunxuanedu data]# stat index.conf 
  File: ‘index.conf’
  Size: 9           Blocks: 8          IO Block: 4096   regular file
Device: fd01h/64769d    Inode: 1572874     Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2021-08-16 10:39:24.691957234 +0800
Modify: 2021-08-16 10:39:04.322112606 +0800
Change: 2021-08-16 10:39:04.322112606 +0800
 Birth: -

7、硬链接

7.1 硬链接文件特征

  • 一个硬链接文件相当于访问该文件内容的一个入口
  • 硬链接数相当于访问该文件内容的入口数量
  • 同一个分区中,inode号相同的文件互为硬链接文件
  • 不能给目录创建硬链接
  • 硬链接可以防止误删除,但是不能防止误修改。因此修改文件之前,做好备份。

7.2 软链接文件特征

  • 软链接文件相当于 Windows 系统中文件的快捷方式
  • 软链接文件用于存放指向源文件的路径信息
  • 软链接创建最好采用绝对路径,否则容易失效
  • 链接的源文件删除,容易影响软连接。建立相同名的文件后,软链接恢复,但是当前新建文件并不是被删除的文件,两者的inode号不相同

软硬链接的区别:

  • 链接后的文件大小不一致
  • 链接后的文件权限和类别不一致
  • 连接后的文件和原文件inode信息有出入(硬链接与原文件inode一致,软链接与原文件inode不同)
  • 原文件被删除,硬链接文件依然有效,软链接文件失效(可创建同名文件进行恢复)
  • 软硬链接文件创建过程不一致
  • 系统中的目录不能创建硬链接

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值