深入理解linux文件系统与日志分析
2022/1/5 7:10:54
本文主要是介绍深入理解linux文件系统与日志分析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录
inode和block概述
硬链接与软连接
恢复误删除的文件
分析日志文件
内核及系统日志
日志管理策略
inode与block
inode和block概述
inode
inode包含文件的元信息
stat命令查看某个文件inode信息
Linux系统文件三个主要的时间属性
目录文件的结构
每个inode都有一个号码,操作系统用inode号码来识别不同文件
linux系统内部不使用文件名,而使用inode号码来识别文件
对于用户,文件名只是inode号码便于识别的别称
inode号码
用户通过文件名打开文件时,系统内部的过程
查看inode号码的方法
文件存储小结
硬盘分区后的结构
访问文件的简单流程
inode大小
inode也会消耗硬盘空间
格式化文件系统时确定inode的总数
使用df -i命令可以查看每个硬盘分区的inode总数和已经使用的数量
inode的特殊作用
由于inode号码与文件名分离,导致一些unix/linux系统具有以下的现象
扩展
硬链接与软连接
链接文件
硬链接
软链接
恢复误删除的文件
案列:恢复EXT类型的文件
编译安装extundelete软件包
模拟吧删除并执行恢复操作
EXT类型文件恢复
恢复误删除的文件xfs
分析日志文件
日志文件
日志的功能
日志文件的分类
日志保存位置
主要日志文件介绍
内核及系统日志
由系统服务rsyslog统一管理
日志消息的级别
用户日志分析
保存了用户登录、退出系统等相关信息
分析工具
程序日志分析
日志管理策略
及时做好备份和归档
延长日志保存期限
控制日志访问权限
集中管理日志
详细日志分析命令
有哪些系统常见日志
扩展
内核及系统日志
也可以自定义日志
inode与block
inode和block概述
一个文件必须占用一个inode,但至少占用一个block
1、文件数据包括元信息(inode)与实际数据( block)
2、文件存储再硬盘上,硬盘最小存储单位是扇区(512字节)
3、block(块)
-
连续的八个扇区组成一个block
-
是文件存取的最小单位
4、inode(索引节点)
-
中尉译名为“索引节点”,也叫i节点
-
用于存储文件元信息
inode
inode包含文件的元信息
-
文件的字节数
-
文件拥有者的User ID
-
文件的Group ID
-
文件的读、写、执行、权限
-
文件的时间戳
-
......
stat命令查看某个文件inode信息
示例
stat aa.txt
Linux系统文件三个主要的时间属性
-
ctime(change time)
-
最后一次改变文件或目录(属性)的时间
-
-
atime(access time)
-
最后一次访问文件或目录的时间
-
-
mtime(modify time)
-
最后一次修改文件或目录(内容)的时间
-
目录文件的结构
-
目录也是一种文件
-
目录文件的结构
每个inode都有一个号码,操作系统用inode号码来识别不同文件
linux系统内部不使用文件名,而使用inode号码来识别文件
对于用户,文件名只是inode号码便于识别的别称
inode号码
用户通过文件名打开文件时,系统内部的过程
-
系统找到这个文件名对应的inode号码
-
通过inode号码,获取inode信息
-
根据inode信息,找到文件数据所在的block,读出数据
查看inode号码的方法
ls -i命令:查看问价那对应的inode号码
ls -i aa.txt
stat命令:查看文件inode信息中的inode号码
stat aa.txt
一般inode表会占用文件系统磁盘空间1%,一个目录文件的内容就是一个该目录下所有文件目录项的列表
文件存储小结
硬盘分区后的结构
文件名 -------> 目录项 目录块
元信息 -------> inode inode 表区块
数据 --------> block block 数据块
访问文件的简单流程
用户访问文件-->系统查找文件对应的inode-->判断用户是否据备访问权限-->(是)指向对应的数据block -->(否)返回Permission denied
inode大小
每个inode结点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定了,一般是每1KB或每2KB就设置一个inode,假定在一块1GB硬盘中,每个inode节点大小为128字节,每1KB就设置一个inode,那么inode表(inode table)的大小就会达到128MB。占整块硬盘的12.8%
inode也会消耗硬盘空间
-
每个inode的大小
-
一般是128字节或256字节
格式化文件系统时确定inode的总数
使用df -i命令可以查看每个硬盘分区的inode总数和已经使用的数量
inode的特殊作用
由于inode号码与文件名分离,导致一些unix/linux系统具有以下的现象
-
文件名包含特殊字符,可能无法正常删除。这时直接删除inode,能够起到删除文件作用
-
移动文件或重命名文件,只是改变文件名,不影响inode号码
-
打开一个文件后,系统就以inode号码来识别这个文件,不再考虑文件名
-
文件数据被修改后,会生成一个新的inode号码:
find ./ -inum 52305140 -exec rm -i {} \ find ./ -inum 50464299 -delete
扩展
inode节点耗尽故障处理
#使用fdisk创建分区/dev / sdb1,分区大小30M即可 fdisk /dev/sdb mkfs.ext3 /dev/sdb1 mkdir /test mount /dev/sdb1 /test df -i #模拟inode节点耗尽故障 for ((i=1; i<=5680; i++)) ;do touch /test/file$i;done #或i=i+1或i+=1 touch {1..5680}.txt df -i df -hT #删除文件恢复 rm -rf /test/* df -i df -hT
硬链接与软连接
链接文件
-
为文件或目录建立链接文件
-
链接文件或分类
软连接 | 硬链接 | |
---|---|---|
删除原始文件后 | 失效 | 仍旧可用 |
使用范围 | 适用于文件或目录 | 只适用于文件 |
保存位置 | 与原始文件可以位于不同的文件系统中 | 必须与原始文件在同一个文件系统(如一个linux分区)内 |
硬链接
ln 源文件 目标位置
软链接
ln [-s] 源文件或目录... 链接文件或目标位置
恢复误删除的文件
案列:恢复EXT类型的文件
编译安装extundelete软件包
-
安装依赖包
e2fsprogs-libs-1.41.12-18.el6.x86_64.rpm e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm
.配置、编译及安装
extundelete-0.2.4.tar.bz2
模拟吧删除并执行恢复操作
EXT类型文件恢复
extundelete是一一个开源的Linux数据恢复工具,支持ext$、ext4文件系统。(ext4只能在centos6版本恢复)
#使用fdisk创建分区/dev/sdc1,格式化ext3文件系统fdisk /dev/sdc partprobe /dev/sdc mkfs.ext3 /dev/sdc1 mkdir /test mount /dev/sdc1/test df -hT #安装依赖包 yum -y install e2fsprogs-devel e2fsprogs-libs gcc gcc-C++ #编译安装extundelete cd /test wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2 tar jxvf extundelete-0.2.4.tar.bz2 cd extundelete-0.2.4/ ./configure --prefix=/usr/local/extundelete && make && make install 或 ./configure make && make install ln -s /usr/local/extundelete/bin/* /usr/bin/ #模拟删除并执行恢复操作 cd /test echo a>a echo a>b echo a>c echo a>d ls extundelete /dev/sdcl --inode 2 #查看文件系统/dev/sdc1下存在哪些文件,i节点是从2开始的,2代表该文件系统最开始的目录 rm -rf a b extundelete /dev/sdc1 --inode 2 cd ~ umount /test extundelete /dev/sdc1 --restore-all #恢复/dev/sdc1文件系统下的所有内容 #在当前目录下会出现一个RECOVERED_FILES/目录,里面保存了已经恢复的文件 ls RECOVERED FILES/
恢复误删除的文件xfs
xfs类型文件备份和恢复
Centos 7系统默认采用xfs类型的文件,xfs类型的文件可使用xfsdump 与xfsrestore 工具进行备份恢复。
xfsdump的备份级别有两种:0表示完全备份;1-9表示增量备份。xfsdump的备份级别默认为0。
xfsdump的命令格式为
xfsdump -f 备份存放位置 要备份的路径或设备文件
xfsdump命令常用的选项:
-
-f:指定备份文件目录
-
-L:指定标签session label
-
-M:指定设备标签media labe.......
-
-s:备份单个文件,-s后面不能直接跟路径
xfsrestore命令格式
xfsrestore -f 恢复文件的位置 存放恢复后文件的位置
xfsdump使用限制:
-
只能备份已挂载的文件系统
-
必须使用root的权限才能探作
-
只能备份XFS文件系统
-
备份后的数据只能让xfsrestore解析
-
不能备份两个具有相同UUID的文件系统(可用blkid命令查看)
#使用fdisk创建分区/dev/sdb1,格式化xfs文件系统 fdisk /dev/sdb partprobe /dev/sdb mkfs.xfs /dev/sdb1 #mkfs.xfs [-f]/ dev / sdb1 mkdir /data mount /dev/sdb1 /data/ cd /data cp /etc/passwd ./ mkdir test touch test/a #使用xfsdump命令备份整个分区 rpm -qa | grep xfsdump yum install -y xfsdump xfsdump -f /opt/dump_sdb1 /dev/sdb1 [-L dump_sdb1 -M sdb1] xfsdump -f /opt/dump_sdb /dev/sdb1 -L dump_sdb -M sdb1 #模拟数据丢失并使用xfsrestore命令恢复文件 cd /data/ rm -rf ./* ls xfsrestore -f /opt/dump_sdb1 /data/
分析日志文件
日志文件
日志的功能
-
用于记录系统、程序运行中发生的各种事件
-
通过阅读日志,有助于诊断和解决系统故障
日志文件的分类
-
内核及系统日志
-
由系统服务rsyslog统一进行管理,日志格式基本相似
-
-
用户日志
-
记录系统登录及退出系统的相关信息
-
-
程序日志
-
由各种应用程序独立管理的日志文件,记录格式不统一
-
日志保存位置
默认位于:/val/log目录下
主要日志文件介绍
-
#内核及公共消息日志:
/var/log/messages:记录Linux内核消息及各种应用程序的公共日志信息,包括启动、Io错误、网络错误、程序故障等。对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的事件记录信息。
-
#计划任务日志:
/var/log/cron:记录crond计划任务产生的事件信息。
-
#系统引导日志:
/var/log/dmesg:记录Linux系统在引导过程中的各种事件信息。
-
#邮件系统日志∶
/var/log/maillog:记录进入或发出系统的电子邮件活动。
-
#用户登录日志:
-
/var/log/secure: 记录用户认证相关的安全事件信息。
-
/var/log/lastlog:记录每个用户最近的登录事件。二进制格式
-
/var/log/wtmp:记录每个用户登录、注销及系统启动和停机事件。二进制格式
-
/var/run/btmp:记录失败的、错误的登录尝试及验证事件。二进制格式
-
内核及系统日志
由系统服务rsyslog统一管理
-
软件包:rsyslog-7.4.7-16.el7.x86_64
-
主要程序:/sbin/rsyslogd
-
配置文件:/etc/rsyslog.conf
日志消息的级别
级号 | 消息 | 级别 | 说明 |
---|---|---|---|
0 | EMERG | 紧急 | 会导致主机系统不可用的情况 |
1 | ALERT | 警告 | 必须马上采取措施解决问题 |
2 | CRIT | 严重 | 比较严重的情况 |
3 | ERR | 错误 | 运行出现错误 |
4 | WARNING | 提醒 | 可能会影响系统功能的事件 |
5 | NOTICE | 注意 | 不会影响系统但值得注意 |
6 | INFO | 信息 | 一般信息 |
7 | DEBUG | 调试 | 程序或系统调试信息等 |
用户日志分析
保存了用户登录、退出系统等相关信息
-
/var/log/lastlog:最近的用户登录事件
-
/var/log/wtmp:用户登录、注销及系统开、关机事件
-
/var/run/utmp:当前登录的每个用户的详细信息
-
/var/log/secure:与用户验证相关的安全性事件
分析工具
-
users 、who、w、last、lastb
程序日志分析
由相应的应用程序独立进行管理
-
Web服务:/var/log/httpd/
-
access log、error_log
-
-
代理服务: /var/loglsquidl
-
access.log、cache.log
-
-
FTP服务: /var/log/xferlog
分析工具
-
文本查看、grep过滤检索、Webmin管理套件中查看
-
awk、sed等文本过滤、格式化编辑工具
-
Webalizer、Awstats等专用日志分析工具
注:学生可研究日志工具可研究: webmin、 Webalizer、Awstats等专用日志分析工具
日志管理策略
及时做好备份和归档
延长日志保存期限
控制日志访问权限
日志中可能会包含各类敏感信息,如帐户、口令等
集中管理日志
-
将服务器的日志文件发到统一的日志文件服务器
-
便于日志信息的统一收集、整理和分析
-
杜绝日志信息的意外丢失、恶意篡改或删除
详细日志分析命令
-
users:命令只是简单地输出当前登录的用户名称,每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数
-
who:命令用于报告当前登录到系统中的每个用户的信息。使用该命令,系统管理员可以查看当前系统存在哪些不合法用户,从而对其进行审计和处理。who 的默认输出包括用户名、终端类型、登录日期及远程主机
-
w:命令用于显示当前系统中的每个用户及其所运行的进程信息,比users、who 命令的输出内容要丰富一些
-
last:命令用于查询成功登录到系统的用户记录,最近的登录情况将显示在最前面。通过last命令可以及时掌握Linux主机的登录情况,若发现未经授权的用户登录过,则表示当前主机可能已被入侵
-
lastb:命令用于查询登录失败的用户记录,如登录的用户名错误、密码不正确等情况都将记录在案。登录失败的情况属于安全事件,因为这表示可能有人在尝试猜解你的密码。除了使用lastb 命令查看以外,也可以直接从安全日志文件/var/log/secure 中获得相关信息
有哪些系统常见日志
/var/log/messages //系统主日志文件 [root@localhost ~]# cat /var/log/messages | wc -l 3784
tail -f或者tailf或tail -100查看
时间,主机名,服务,具体信息
/var/log/dmesg //开机后的内核自检信息,dmesg命令看的是一样的 /var/log/secure //涉及到登陆,验证之类的都会记录比如su
用户日志采用二进制格式,但可以用命令查看,避免认为修改内容,保证日志的有效性
/var/log/wtmp (last) /var/log/btmp (lastb) /var/log/lastlog (lastlog)所有账号的登录信息
还有一些服务的日志比如
/var/log/yum.log /var/log/cron
也并不是所有安装的程序的日志都会在/var/log下,只有rpm包安装的才会,源码装的在自己指定的目录中
例如
httpd,源码安装的日志目录在/usr/local/httpd/logs
扩展
journalctl工具是centos-7才有的工具
systemd统一管理所有Unit 的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。日志的配置文件/etc/systemd/journald.conf
ps -ef | grep journald journalctl -b //查看本次启动的日志 journalctl -k //查看内核日志 [root@localhost log]# journalctl | wc -l //查看系统总共的日志 2787 journalctl -xe经常用来查看最近报错的日志 -e:从结尾开始看 -x:提供问题相关的网址
ps -ef | grep journald journalctl -b //查看本次启动的日志 journalctl -k //查看内核日志 [root@localhost log]# journalctl | wc -l //查看系统总共的日志 2787 journalctl -xe经常用来查看最近报错的日志 -e:从结尾开始看 -x:提供问题相关的网址
熟悉了系统中的主要日志文件以后,下面将介绍针对日志文件的分析方法。分析日志文件的目的在于通过浏览日志查找关键信息、对系统服务进行调试,以及判断发生故障的原因等。本小节主要介绍三类日志文件的基本格式和分析方法。
对于大多数文本格式的日志文件(如内核及系统日志、大多数的程序日志),只要使用tail、more、less、cat等文本处理工具就可以查看日志内容。而对于一些二进制格式的日志文件(如用户日志),则需要使用特定的查询命令。
内核及系统日志
内核及系统日志功能主要由默认安装的 rsyslog-7.4.7-16.e17.x86_64.rpm 软件包提供。rsyslog 服务所使用的配置文件为/etc/rsyslog.conf。通过查看/etc/rsyslog.conf文件中的内容,可以了解到系统默认的日志设置
grep -v "^$"/etc/ rsyslog.conf //过滤掉空行 日志消息的等级 0-7
rsyslog服务
ps -ef | grep rsyslogd //查看服务是否开启 vim /etc/rsyslog.conf //rsyslog服务配置文件
mail.* 代表比*等级高的都记录,
-
*代表任何,也就是说任何日志都记录 *
-
*.none代表不记录日志
-
日志存放位置为*:所有日志高于疼痛这个等级就会对所有在线用户广播
-
.=代表只记录=后面级别的日志
-
.!代表除了!后面级别的日志不记录其他的都记录
-
存放路径之前有"-"代表先放入缓存足够大之后再存放在路径
也可以自定义日志
vim /etc/rsyslog.conf 加入一行内容 *.info/var/ log/info.log systemctl restart rsyslog //重启服务之后/var/log下面就生成了info.log了
这篇关于深入理解linux文件系统与日志分析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法