目录
一、inode于block
inode于block概括
inode的内容
inode包含文件的元信息
用stat命令可以查看某个文件的inode信息
Linux系统文件三个主要的时间属性
目录文件架构
用户通过文件名打开文件时,系统内部的过程
查看inode号码的实操
硬盘分区后的结构 👇
用户访问一个文件的简单流程👇
inode的大小
inode的特殊作用
如何删除特殊符号创建的文件名
二、硬链接和软连接
三、恢复误删除的文件
四、磁盘有空间,但是仍然无法写入新文件
五、恢复XFS类型的文件
xfsdump使用限制👇
XFS类型文件恢复步骤实操👇
从备份恢复编辑
六、分析日志文件
日志的功能
日志文件的分类及其说明
日志分类表
日志的主要配置文件 👇
日志分析
Linux系统日志管理(journalctl 日志管理工具)
一、inode于block
1.inode于block概括
在Linux系统中,一切皆文件。文件系统中的两个关键概念是inode和block。每个文件都有一个唯一的inode号码,inode存储了文件的元数据信息,如权限、所有者、大小等,以及指向文件实际数据存储位置的指针。文件的实际数据存储在分配的块中,块是文件系统中分配存储空间的最小单位。因此,文件在文件系统中至少占用一个inode和一个或多个块
文件数据包元信息与实际数据
文件存储在硬盘上,硬盘最小存储单位是“扇区”,每个扇区存储512字节
block(块)
- 连续的八个扇区组成一个block(4K)
- 是文件存取的最小单位
inode(索引节点)
- 中文译名为“索引节点”,也叫i节点
- 用于存储文件元信息
2.inode的内容
inode包含文件的元信息
- inode number 节点号
- 文件类型
- 文件的读、写、执行权限
- 文件属主的UID
- 文件属组的GID
- 链接数(指向这个文件名路径名称个数)
- 该文件的大小和不同的时间戳
- 指向磁盘上文件的数据块指针
- 有关文件的其他数据
用stat命令可以查看某个文件的inode信息
ls -istat 文件路径
ll -i #查看inode号
Linux系统文件三个主要的时间属性
atime(access time):最近访问
最后一次访问文件的时间
mtime(modify):最近更改
最后一次更改文件内容的时间
ctime(change time):最近改动
最后一次改变文件元信息的时间
目录文件架构
目录也是一种文件
目录文件的结构
文件名1 | inode号码1 |
文件名2 | inode号码2 |
。。。。 | 。。。。 |
ps:每一行称为一个目录项
- 每个inode都有一个号码,操作系统用inode号码来识别不同的文件
- Linux系统内部不使用文件名,而使用inode号码来识别文件
- 对于用户,文件名只是inode号码便于识别的别称
用户通过文件名打开文件时,系统内部的过程
- 系统找到这个文件名对应的inode号码
- 通过inode号码,获取inode信息
- 根据inode信息,找到文件数据所在的block,读出数据
查看inode号码的实操
ls -i命令 #显示文件或目录的inode号码,以及其名称比如:ls -i abc.txt 输出abc.txt文件的inode号码以及其名称stat命令 #显示文件的详细信息,包括文件的inode号码比如:stat abc.txt 输出abc.txt文件的详细信息,其中包括inode号码
硬盘分区后的结构 👇
用户访问一个文件的简单流程👇
- 用户访问文件时,系统首先通过文件名查找对应的inode号码。
- 通过inode号码,系统获取文件的元数据信息。
- 根据用户的访问权限,系统判断用户是否有权访问该文件。
- 如果用户有权访问文件,则系统根据inode中的指针信息找到相应的数据块,并读取文件内容。
- 如果用户没有权访问文件,则系统拒绝访问,并返回相应的错误信息。
inode的大小
inode也会消耗硬盘空间
- 每个inode的大小
- 一般时128字节或256字节
格式化文件系统时确认inode的总数
使用df -i命令可以查看每个硬盘分区的inode总数和已使用的数量
inode的特殊作用
由于inode号码与文件名分离,导致一些Unix/Linux系统具有以下的现象
- 当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件
- 移动或重命名文件时,只改变文件名,不影响inode号码
- 打开一个文件后,系统通过inode号码来识别该文件,不再考虑文件名
如何删除特殊符号创建的文件名
find ./ -inum 67414967 -deletefind ./ -inum 67414967 -exec rm -rf {} \;find ./ -inum 67414967| xargs rm -rf
操作前先创建名叫 *12345,12345的文件👇
ls -i查看*12345的inode号
在当前目录及其子目录中查找inode号为 67414967
的文件 ,然后-delete删除
二、硬链接和软连接
链接文件👇
为文件或目录建立链接文件
链接文件分类👇
软连接 | 硬链接 | |
删除原文件后 | 失效 | 仍旧可用 |
使用范围 | 适用于文件或目录 | 只可用于文件 |
保存位置 | 与原始文件可以位于不同的文件系统中 | 必须与原始文件在同一个文件系统(如一个Linux分区)内 |
硬链接
ln 源文件 目标位置
创建符号链接(软链接)
ln -s 源文件或目录 链接文件或目标文件位置
三、恢复误删除的文件
恢复EXT类型的文件
编译安装extundelete软件包
安装依赖包👇
EXT类型文件恢复步骤
1.使用fdisk创建分区/dev/sdb1,格式化ext3文件系统;
2.安装依赖包
3.编译安装extundelete
4.对extundelete做软连接 👆 ln -s /usr/local/extundelete/bin/extundelete /usr/local/bin/
5.模拟删除并执行恢复操作
后面跟着deleted的就是删除的文件👆
四、磁盘有空间,但是仍然无法写入新文件
原因:
- inode号被占满;
- 磁盘出现问题的情况又分为:磁盘坏道和文件系统出现问题
1.使用fdisk创建分区/dev/sdc1,格式化ext4文件系统
五、恢复XFS类型的文件
xfsdump使用限制👇
1.只能备份已挂载的文件系统;
2.必须使用root的权限才能操作;
3.只能备份XFS文件系统;
4.备份后的数据只能让xfsrestore解析;
5.不能备份两个具有相同UUID的文件系统
XFS类型文件恢复步骤实操👇
1.fdisk先做/dev/sdc2的分区,然后xfs格式化
2.备份、模拟删除
从备份恢复
六、分析日志文件
日志的功能
- 用于记录系统、程序运行中发生的各种事件
- 通过阅读日志,有助于诊断和解决系统故障
日志文件的分类及其说明
Linux 操作系统本身和大部分服务器程序的日志文件都默认放在目录/var/log/下
内核及系统日志
- 由系统服务rsyslog统一进行管理,日志格式基本相似
- 主配置文件/etc/rsyslog.conf
用户日志
- 记录系统用户登录及退出系统的相关信息
程序日志
- 由各种应用程序独立管理的日志文件,记录格式不统一
日志分类表
日志种类 | 位置 | 功能描述 |
内核及公共消息日志 | /var/log/messages | 记录Linux内核消息及各种应用程序的公共日志信息,包括启动、Io错误、网络错误、程序故障等 对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的事件记录信息 |
计划任务日志 | /var/log/cron | 记录与系统定时任务相关的曰志 |
系统引导日志 | /var/log/dmesg | 记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息 |
邮件系统日志 | /var/log/maillog | 记录邮件信息的曰志 |
用户登录日志 | /var/log/lastlog | 记录系统中所有用户最后一次的登录时间的曰志。这个文件是二进制文件.不能直接用 vi 查看,而要使用 lastlog 命令查看 |
用户验证授权日志 | /var/log/secure | 记录验证和授权方面的倍息,只要涉及账户和密码的程序都会记录。比如系统的登录、ssh的登录、su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中 |
用户登录注销和系统开机相关日志 | /var/log/wtmp | 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样,这个文件也是二进制文件,不能直接用 vi 查看,而要使用 last 命令查看 |
当前登录用户信息日志 | /var/run/utmp | 记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。同样,这个文件不能直接用 vi 查看,而要使用w、who、users等命令查看 |
more /var/log/messages //以查看message目录为例子
内核及系统日志文件中的每一行表示一条信息,每个信息由4个字段的固定格式组成:
时间标签:消息发出的日期和时间
主机名:生成消息的计算机的名称
子系统名称:发出消息的应用程序的名称
消息:消息的具体内容
日志的主要配置文件 👇
日志消息的级别表👇
设备字段说明 👇
auth | 用户认证时产生的日志 |
authpriv | ssh、ftp等登录信息的验证信息 |
daemon | 一些守护进程产生的日志 |
ftp | FTP产生的日志 |
ftp | FTP产生的日志 |
mark | rsyslog服务内部的信息,时间标识 |
news | 网络新闻传输协议(nntp)产生的消息 |
syslog | 系统日志 |
uucp | Unix-to-Unix Copy 两个unix之间的相关通信 |
console | 针对系统控制台的消息 |
cron | 系统执行定时任务产生的日志 |
kern | 系统内核日志 |
local0~local7 | 自定义程序使用 |
邮件日志 | |
user | 用户进程 |
日志分析
用户日志分析(保存了用户登录、退出系统等相关信息)
/var/log/lastlog::最近的用户登录事件
/var/log/wtmp:用户登录、注销及系统开、关机事件
/var/run/utmp:当前登录的每个用户的详细信息
/var/log/secure:与用户验证相关的安全性事件
日志分析工具的引入
users 查看当前用户名称
who 查看当前登录的用户、终端、登录时间、IP地址。
W 查看当前登录的用户、终端、IP地址、登录时间、占用CPU的情况、进程等。
last 命令用于查询成功登录到系统的用户记录
lastb 命令用于查询登录失败的用户记录
程序日志分析
由相应的应用程序独立进行管理
Web服务:/var/log/httpd/access log //记录客户访问事件
error log //记录错误事件
代理服务:/var/log/squid/*access.log、cache.log
分析工具
文本查看、grep过滤检索、Webmin管理套件中查看awk、sed等文本过滤、格式化编辑工具
Webalizer、Awstats等专用日志分析工具
Linux系统日志管理(journalctl 日志管理工具)
journalctl:查看所有日志。默认情况下,仅显示本次启动的日志。
journalctl -r:以倒序方式查看日志,从尾部开始查看,通常用于查看最新的日志记录。
journalctl -k:仅查看内核日志,不显示应用程序日志。
journalctl -b:查看系统本次启动的日志。
journalctl -b -1:查看上一次启动的日志。
journalctl -n 20:显示最后20行日志。
journalctl -f:实时跟踪日志的变化,类似于 tail -f 命令。
journalctl -u nginx.service:查看指定服务(例如 nginx)的日志。
journalctl _PID=1:查看指定进程(例如PID为1的进程)的日志。
journalctl _UID=0 --since today:查看指定用户(例如UID为0的用户,即root用户)在当天产生的日志。
journalctl -xe:查看详细的日志,并在每条错误信息下附加解决问题的网址
举个🌰 journalctl -r:以倒序方式查看日志👇