深入理解linux文件系统与日志分析

194 阅读6分钟

image.png

Indoe和block:

文件是存储在硬盘上的,硬盘的最小存储单位叫做"扇区”(sector),每个扇区存储512字节。 一般连续八个扇区组成一个"块"(block),一个块是4K大小,是文件存取的最小单位。操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取的。文件数据包括实际数据与元信息(类似文件属性)。文件数据存储在"块"中,存储文件元信息(比如文件的创建者、创建日期、文件大小、文件权限等)的区域就叫做inode。因此,一个文件必须占用一个inode,并且至少占用一个block。

inode不包含文件名。文件名是存放在目录当中的。Linux系统中一切皆文件,因此目录也是一种文件。每个inode都有一个号码,操作系统用inode号码来识别不同的文件。Limux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是irnote号码便于识别的别称,文件名和inode号码是一一对应关系,每个inode号码对应一个文件名。

所以,当用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找它对应的inode号码:通过inode号码,获取inode信息,根据inode信息,看该用户是否具有访问这个文件的权限; 如果有,就指向相对应的数据block,并读取数据

image.png

image.png

image.png

image.png

image.png

tips:

1.根据文件名查找到indoe号

2.根据indoe号找到indoe信息

3.根据indoe信息

4.读取数据 拒绝访问

inode也会消耗硬盘空间,所以格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode 区,存放 inode所包含的信息。每个inode的大小,一般是128 字节或256字节。

通常情况下不需要关注单个inode的大小,而是需要重点关注inode 总数。inode的总数在格式化时就给定了,执行 "df -i" 命令即可香看每个硬盘分区对应的inode总数和已经使用的inode数量。

由于 inode 号码与文件名分离,导致Linux系统具备以下几种特有的现象:

1.文件名包含特殊字符,可能无法正常删除。这时直接删除 inode,能够起到删除文件的作用;

2.移动文件或重命名文件,只是改变文件名,不影响inode号码;

3.打开一个文件以后,系统就以inode 号码来识别这个文件,不再考虑文件名。

4.使用vi编辑器修改文件数据保存后,会生成一个新的 inode号码。

image.png

总结:

文件存储在硬盘上

硬盘 最小存储单元 扇区 512字节

系统存取文件数据时 是通过 块(block)来读取,

块(block)由连续8个扇区组成,4kb大小,块是文件存取的最小单元

文件 存储时 文件名 和 文件数据 分开存储的

文件数据 包含 元信息 和 实际数据

文件名——>目录文件

元信息(包含除了文件名以外的文件属性)—> inode

实际数据——>块(block )

用户访问文件时,通过文件名找到对应的inode号,

通过indoe号获取inode信息,

根据inode信息判断用户是否有权限访问文件,

有则指向对于的数期block并读取数据,无则拒绝访问

查看inode号:

ls -i

stat

atime 最近的文件访问时间

mtime 最近的文件内容修改时间

ctime 最近的文件属性修改时间

每个文件系统(分区)中indoe数量是有限的,可通过 df -i 查看

20220810110100.png

移动文件或修改文件名,使用echo修改文件内容都不会改变 inode 号

使用vi 编辑器修改文件会改变 inode号,因为 vi 编辑器是会替换源文件的

linux系统下载文件:

wget http://.... [-o] 小o

curl -L http:// [-O] 大O

image.png

image.png

实验1:模拟inode号

先分磁盘 20220810134913.png

使用ext4格式化 20220810134930.png

建立data文件并挂载 20220810134746.png

创键文件名,填满inode号

20220810134756.png

20220810134655.png

实验2:

20220810112727.png

实验3: 20220810170623.png

MJ2``039M15(H7{NEDP2MH6.png

20220810172109.png

20220810172120.png

20220810172136.png

xfsrestore -f /opt/dump_sdb1 /data/ 使用xfsrestore

20220810172213.png

20220810172221.png

日志分析:

image.png

image.png

公共日志/var/ log / messages文件的记录格式

时间标签:消息发出的目期和时间。

主机名:生成消息的计算机的名称。

子系统名称:发出消息的应用程序的名称。

消息:消息的具体内容。

内核及系统日志由系统服务rsyslog 统一管理,主配置文件为/etc/rsyslog.conf

Linux操作系统本身和大部分服务器程序的日志文件都默认放在目录/var/log/下。

常见的一些日志文件:

#内核及公共消息日志:

/var/log/messages:记录1inux内核消息及各种应用程序的公共日志信息,包括启动、Io错误、网络错误、程序故障等。对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的事件记录信息。

#计划任务日志:

/var/ log/ cron:记录crond计划任务产生的事件信息。

#系统引导日志:

/var/log / dmesg:记录Linux系统在引导过程中的各种事件信息。

#邮件系统日志:

/var/ log/maillog:记录进入或发出系统的电子邮件活动。

#用户登录日志:

/var/log/secure:记录用户认证相关的安全事件信息。

/var/log/lastlog:记录每个用户最近的登录事件。二进制格式

/var/log/wtmp:记录每个用户登录、注销及系统启动和停机事件。二进制格式

/var/run/btmp:记录失败的、错误的登录尝试及验证事件。二进制格式

vim /etc/rsyslog.conf #查看rsyslog.conf配置文件,规则配置格式:【设备.级别 动作】

*.info;mail.none ; authpriv.none ; cron. none /var/ log/ messages

*.info #表示info等级及以上的所有等级的信息都写到对应的日志文件里

mail.none #表示某事件的信息不写到日志文件里(这里比如是邮件)

系统日志 /var/ log / messages

用户登录日志 / var/log/ secure

20220810164453.png

image.png

image.png

image.png

公共日志/var/ log / messages文件的记录格式

时间标签:消息发出的目期和时间。

主机名:生成消息的计算机的名称。

子系统名称:发出消息的应用程序的名称。

消息:消息的具体内容。

image.png

image.png

image.png

本章总结

block与inode

硬链接与软链接恢复误删除的文件

Linux主要包含的日志文件

Linux系统的日志消息级别

Linux系统中用户日志的查询命令

journalctl 可以直接查看 /var/log/messages 日志内容

-r 倒序看,从最新的日志开始查看

-u 指定服务,用于之查看某个服务的日志

-f 可以实时跟踪日志的更新

程序自己维护日志记录,httpd 网站服务程序使用两个日志文件:

access_log #记录客户访问事件

error_log #记录错误事件。

20220810152218.png

20220810152234.png