一、前言

本文主要介绍Linux文件属性的重要性,这些属性是如何管理文件和目录的,以及如何影响文件的访问和操作。

二、Linux文件属性组成

2.1 实例说明Linux文件属性

使用ls -lhi命令查看文件

$ ll -hi
total 12K
67144780 -rw-------. 1 root root 1.6K Sep 27 23:01 anaconda-ks.cfg
67159841 -rw-r--r--. 1 root root  210 Oct 13 20:15 a.txt
67159842 -rw-r--r--. 1 root root    8 Oct 13 18:38 b.txt

文件内容主要分为七部分:

  • 部分一:第一列是inode号码,比如上面的67144780等
  • 部分二:第二列又可以细分为3部分
  • 第1位是文件类型,比如上面的-
  • 第2-10位是文件或目录权限,比如上面的rw-r--r--
  • 第11位(.)大部分不会影响文件权限,只是文件的一部分。但如果在特殊环境中使用SELinux或其他安全性扩展,它可能会表示安全上下文信息
  • 部分三:第三列表示硬链接数量
  • 部分四:第四列表示文件的所有者;第五列表示文件的所属组
  • 部分五:第六列表示文件大小
  • 部分六:第七列表示文件修改时间
  • 部分七:最后一列表示文件名

2.2 inode和block

2.2.1 什么是inode和block

Inode(索引节点):

  • Inode是文件系统的元数据结构,用于存储有关文件或目录的信息,如文件的权限、所有者、文件大小、时间戳等。
  • 每个文件或目录在文件系统中都与一个唯一的inode关联。inode由一个唯一的inode号标识。
  • Inode通常包含文件的元数据信息,但不包括文件的实际内容。这些元数据信息包括访问权限、文件类型、所有者、所属组、文件大小、硬链接计数和指向数据块的指针等。

Block(块):

  • Block是文件系统中的数据存储单位,通常是固定大小的数据块,如4KB或8KB。
  • 文件和目录的实际内容(数据)被存储在文件系统的数据块中。
  • 文件系统通过inode中的指针来记录哪些数据块包含了文件的实际内容。这允许文件系统检索和保存文件的内容。

2.2.2 Inode和Block的关系

Inode和Block的关系如下:

  • Inode和Block之间存在密切的关系。每个inode中都包含指向数据块的指针,这些指针指向存储文件实际内容的数据块。
  • Inode包含有关文件的元数据信息,而数据块包含文件的实际内容。
  • 当你访问文件时,文件系统首先查找与该文件相关联的inode。然后,inode中的指针将被用来查找存储文件内容的数据块。
  • 文件系统使用inode和block的组合来有效地管理和存储文件和目录。这种分离元数据和实际内容的方式允许文件系统进行高效的数据检索和存储管理。
  • 当文件变得更大时,文件系统会动态分配更多的数据块,并相应地更新inode中的指针。

现在通过一个具体的实例说明Inode和Block的关系,假设用户访问查看a.txt文件内容,具体流程如下:

  • 首先用户访问a.txt的时候,系统会找出他对应的 inode空间(根据inode号码)
  • 接着访问来到inode空间后,确认用户,确认权限
  • 最后权限信息正确就准许通过,可以访问inode对应的block区域(数据)

2.2.3 inode和block特点

inode和block特点总结如下:

  • inode索引节点,存放文件属性信息,block位置
  • 每创建1个非空文件至少占用1个inode,1个block,一般文件都要有1个inode
  • 1个block默认是4k
  • inode,block数量是在格式化的时候创建的
  • 正常情况下block的使用会更快
  • 创建小文件不足4k,1个block还有剩余空间,无法给其他文件使用
  • 创建文件大于4k,占用多个block

2.2.4 如何查看inode和block使用情况

查看block的使用情况

$ df -h

查看inode的使用情况

$ df -i

三、Linux文件类型

ll查看输出内容为参考,第一列内容就显示Linux文件类型

Linux文件类型-1

列举一下Linux常见文件类型

Linux常见文件类型 说明
- 文件 file,范围较广
d 目录
l 软连接,类似于windows快捷方式
c 字符设备
b 块设备
s 套接字
p 管道文件

除了上面标识外,我们也可以通过file命令进行查看

$ file /etc/hostname
/etc/hostname: ASCII text

$ file /etc/
/etc/: directory

四、Linux文件权限

  • 解释Linux文件权限的三个主要部分:用户权限、组权限和其他用户权限。
  • 展示如何使用chmod命令来更改文件权限,包括数字和符号方式。
  • 提供示例,说明不同的权限设置对文件访问的影响。

五、Linux文件时间戳

5.1 Linux文件三种时间戳

在Linux和类Unix系统中,每个文件和目录都有三种时间戳,它们分别是:

  • 访问时间(Access Time,atime): 访问时间指的是最后一次文件或目录被访问(读取)的时间。当文件或目录被读取时,atime会被更新。
  • 修改时间(Modify Time,mtime): 修改时间表示文件或目录的内容最后一次被修改的时间。当文件的内容被更改时,mtime会被更新。
  • 更改时间(Change Time,ctime): 更改时间表示文件或目录的元数据(例如权限、所有者、所属组)最后一次被更改的时间。当文件或目录的元数据被更改时,ctime会被更新。

5.2 如何查看Linux文件时间戳

查看时间戳可以使用 stat 命令进行查看

$ stat a.txt

5.3 怎么用Linux文件三种时间戳

平常使用中,我们通常使用mtime时间戳居多,而且一般都会搭配find命令进行删除备份日志。

删除 /etc/hostname 目录中访问时间在过去7天内的文件

$ find /etc/hostname -type f -atime -7 -exec rm {} \;

删除 /etc/hostname 目录中修改时间在过去7天内的文件

$ find /etc/hostname -type f -mtime -7 -exec rm {} \;

删除 /etc/hostname 目录中更改时间在过去7天内的文件

$ find /etc/hostname -type f -ctime -7 -exec rm {} \;
mtime modify 修改时间,最常用
atime access 访问时间
ctime change 文件属性的变化时间