2024年最全深入理解Linux文件系统和日志分析_linux日誌分析工具,2024年最新C C++面试资料集合

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 目录也是一种文件
  • 目录文件的结构
文件名1inode号码1
文件名2inode号码2
…………

ps:每一行称为一个目录项

  • 每个inode都有一个号码,操作系统用inode号码来识别不同的文件
  • Linux系统内部不使用文件名,而使用inode号码来识别文件
  • 对于用户,文件名只是inode号码便于识别的别称
用户通过文件名打开文件时,系统内部的过程
  1. 系统找到这个文件名对应的inode号码
  2. 通过inode号码,获取inode信息
  3. 根据inode信息,找到文件数据所在的block,读出数据
查看inode号码的方法
ls -i命令:查看文件名对应的inode号码

ls -i aa.txt

stat命令:查看文件inode信息中的inode号码

stat aa.txt
硬盘分区后的结构

3)inode的大小

inode也会消耗硬盘空间

  • 每个inode的大小
  • 一般时128字节或256字节

格式化文件系统时确认inode的总数

使用df -i命令可以查看每个硬盘分区的inode总数和已使用的数量

indoe号的数量是文件数量的限制
mount /dev/sdb1 /shiyan   //创建一个分区,文件系统类型为ext4  ,挂载到新创文件夹
cd  /shiyan               //切换到挂载的文件夹
df -i                     //查看空余的indoe号
 
for ((i=1;i<=1270;i++))
do 
touch file$i
done
                          //脚本创建1270个文件,占满所有的indoe号

 
df -i     //再次查看可用indoe号
touch a   //尝试创建一个新文件
df -h     //查看可用空间

结论:一个分区能够创建多少个空文件,除了取决于它的容量之外,还和它所拥有的indoe号息息相关,indoe号的数量决定文件的最大数量上限

4)inode的特殊作用

由于inode号码与文件名分离,导致一些Unix/Linux系统具有以下的现象

  • 当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件
  • 移动或重命名文件时,只改变文件名,不影响inode号码
  • 打开一个文件后,系统通过inode号码来识别该文件,不再考虑文件名

5)执行文件命令对indoe号的影响

cp命令

分配一个空闲的inode号,在inode表中生成新条目在目录中创建一个目录项,将名称与inode编号关联拷贝数据生成新的文件

rm命令

硬链接数递减,从而释放的inode号可以被重用,块放在空闲列表中,删除目录项

数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖。

mv命令

如果mv命令的目标和源在同一设备,不影响inode表(除时间戳)或磁盘上的数据位置;系统会删除旧的目录对应关系,新建目录对应关系。

vim编辑器

vim编辑器改变文件内容,是先创建一个新的swp文件,编辑的内容也是在swp文件中进行,当用户保存时,swp文件就会替换当前文件,因此indoe号会发生改变

利用echo命令往文件中加内容

对原文件进行操作,只改变原文件的内容,其他没有任何影响,indoe号不发生改变

6)通过indoe号删除rm常规方法删除不掉的文件

 find /opt  -inum 67320322 -delete
 find /opt  -inum 67320322 -exec rm -rf {} \;
                                                
 find /opt  -inum 67320322| xargs rm -rf

总结

扇区:硬盘的最小存储单位 512B

块block 文件存取的最小单位 通常由连续8个扇区组成 4069B

文件 —>文件名 —> 目录 —>文件名 与 inode号的对应关系

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

实际数据 —> 块block —>文件内容

访问文件 —>通过文件名找到inode号 —>通过inode号获取inode信息 —>根据inode信息判断用户是否具有访问权限 —>获取文件数据所在的block,读取数据(如果没有权限,则拒绝访问)

文件的时间

atime mtime ctime

查看inode号

stat 文件

ls -i 文件


二、硬链接和软连接

1)链接文件

为文件或目录建立链接文件

链接文件分类
软连接(符号链接)硬链接
删除原文件后失效仍旧可用
使用范围适用于文件或目录只可用于文件
保存位置与原始文件可以位于不同的文件系统中必须与原始文件在同一个文件系统(如一个Linux分区)内

硬链接

ln 源文件 目标位置

软链接

ln [-s] 源文件或目录…… 链接文件或目标文件位置

三、恢复误删除的文件

1)恢复EXT类型的文件

编译安装extundelete软件包
  • 安装依赖包

  • 配置、编译及安装

模拟删除并执行恢复操作

2)xfs类型文件备份和恢复

xfsdump命令格式
xfsdump -f 备份存放位置 要备份的路径或设备文件
xfsdump备份级别(默认为0)
0:完全备份

1-9:增量备份
xfsdump常用选项
-f:指定备份文件目录
-L:指定标签 session label
-M:指定设备标签 media label
-s:备份单个文件,-s后面不能直接跟路径
xfsdump使用限制
  1. 只能备份已挂载的文件系统
  2. 必须使用root的权限才能操作
  3. 只能备份XFS文件系统
  4. 备份后的数据只能让xfsrestore解析
  5. 不能备份两个具有相同UUID的文件系统(可用blkid命令查看)
xfsrestore命令格式
xfsrestore -f 恢复文件的位置 存放恢复后文件的位置
模拟删除并执行恢复操作

3)示例extundelete

extundelete 是一个开源的 Linux 数据恢复工具,支持 ext3、ext4文件系统。(ext4只能在centos6版本恢复),本示例模拟ext3文件系统损坏,借助extundelete,修复文件数据

环境列举

wgethttp://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2

所需依赖包: yum -y install e2fsprogs-devel e2fsprogs-libs

该软件涉及到c++,所以安装一个c++编译工具: yum install -y gcc gcc-c++ make

准备一台centos 的虚拟机,新添加一块硬盘,开辟出一块主分区,建立ext3文件系统。(本次实验是要centos7运行)

fdisk /dev/sdb
mkfs.ext3 /dev/sdb1
mkdir /test
mount /dev/sdb1  /test
lsblk

安装extundelete 以及涉及到的工具
yum -y install e2fsprogs-devel e2fsprogs-libs

cd /test
wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2

tar xf extundelete-0.2.4.tar.bz2 
cd extundelete-0.2.4/
yum install -y gcc gcc-c++ make

./configure --prefix=/usr/local/extundelete && make && make install
ln -s /usr/local/extundelete/bin/* /usr/bin/

②删除ext3文件系统中的文件
echo 123>a.txt
echo 123>b.txt   //创建两个文件 ab  ,写入数据

extundelete /dev/sdb1 --inode 2
//查看文件系统/dev/sdb1下存在哪些文件,i 节点是从 2 开始的,2 代表该文件系统最开始的目录。

rm -rf a.txt
rm -rf b.txt        //将两个ext3文件删除

③恢复删除ext3文件系统中的文件
umount /test
extundelete /dev/sdb1 --restore-all
 

④查看结果
ls
ls RECOVERED_FILES/

实验结论: 以上实验来看,文件最后并没有恢复成功,这个工具也连续用了几次,都是概率性的恢复文件,无法确保文件的百分百恢复。所以对文件做备份,一定是最优的选择

4)xfs 类型文件备份和恢复

CentOS 7 系统默认采用 xfs类型的文件,xfs 类型的文件可使用 xfsdump 与 xfsrestore 工具进行备份恢复,目前市面上并没有开源的xfs文件恢复工具,但是利用备份恢复依旧是最优的选择方案。本次实验就是模拟对重要的xfs文件进行备份,在误删后,进行恢复

①创建xfs系统文件环境
#使用fdisk创建分区/dev/sdb1,格式化xfs文件系统
fdisk /dev/sdb
partprobe /dev/sdb
mkfs.xfs [-f] /dev/sdb1
mkdir /date
mount /dev/sdb1 /date/
cd /data
cp /etc/passwd ./
mkdir test
touch test/a

②备份整个分区
#使用 xfsdump 命令备份整个分区
 
xfsdump -f /opt/dump_sdb1 /dev/sdb1 [-L dump_sdb1 -M sdb1]
 
#如果没有xfsdump 
rpm -qa | grep xfsdump
yum install -y xfsdump

③模拟数据丢失
#模拟数据丢失并使用 xfsrestore 命令恢复文件
cd /data/
rm -rf ./*
ls

④恢复操作
xfsrestore -f /opt/dump_sdb1 /date/

实验总结

对创建好的文件系统进行一整个分区的备份,存放在足够的空间中。当该分区中的重要文件被误删后,可以利用备份分区,进行数据还原。

总结

两个实验都展示了重要数据丢失后的恢复手段,但是第二个实验比第一个完成的更加顺利,数据保存的更加完整。在运维环境中,一定要本着数据无价的态度来进行工作,对重要的数据文件进行好备份处理

误删恢复

extundelete

lsof

备份恢复

tar

xfsdump xfsrestore

cpio find ……|cpio -ocvB>……

cpio -idvcu <


四、分析日志文件

1)日志的功能

  • 用于记录系统、程序运行中发生的各种事件
  • 通过阅读日志,有助于诊断和解决系统故障

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个字段的固定格式组成:

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

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

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

消息:消息的具体内容

3)日志主要配置文件

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

vim /etc/rsyslog.conf                   #查看rsyslog.conf配置文件

规则配置格式:【设备.级别 动作】

设备字段说明
auth用户认证时产生的日志
authprivssh、ftp等登录信息的验证信息
daemon一些守护进程产生的日志
ftpFTP产生的日志
lpr打印相关活动
markrsyslog服务内部的信息,时间标识
news网络新闻传输协议(nntp)产生的消息
syslog系统日志
uucpUnix-to-Unix Copy 两个unix之间的相关通信
console针对系统控制台的消息
cron系统执行定时任务产生的日志
kern系统内核日志
local0~local7自定义程序使用
mail邮件日志
user用户进程
Linux系统内核日志消息
优先级信息名称解释
0EMERG(紧急)会导致主机系统不可用的情况。如系统崩溃
1ALERT(警告)必须马上采取措施解决的问题。如数据库被破坏
2CRIT(严重)比较严重的情况。如硬盘错误,可能会阻碍程序的部分功能
3ERR(错误)运行出现错误。不是非常紧急,尽快修复的
4WARNING(提醒)可能影响系统功能,需要提醒用户的重要事件。不是错误,如磁盘用了85%等
5NOTICE(注意)不会影响正常功能,但是需要注意的事件。无需处理
6INFO(信息)一般信息。正常的系统信息
7DEBUG(调试)程序或系统调试信息等。包含详细开发的信息,调试程序时使用
none没有优先级,不记录任何日志消息

注意:数字等级越小,优先级越高,消息越重要

举例

mail.info /var/log/maillog

//比指定级别更高的日志级别,包括指定级别自身,保存到/var/log/maillog中

mail.=info /var/log/maillog

//明确指定日志级别为info,保存至/var/log/maillog

mail.!info /var/log/maillog

//除了指定的日志级别(info)所有日志级别信息,保存至/var/log/maillog

.info /var/log/maillog



![img](https://img-blog.csdnimg.cn/img_convert/0c5016d58775f3da82027778e9072172.png)
![img](https://img-blog.csdnimg.cn/img_convert/157b88ccebec5f895a33f347e9e87670.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

)** | **一般信息。正常的系统信息** |
| **7** | **DEBUG(调试)** | **程序或系统调试信息等。包含详细开发的信息,调试程序时使用** |
| **none** | **空** | **没有优先级,不记录任何日志消息** |


**注意:数字等级越小,优先级越高,消息越重要**


**举例**



mail.info /var/log/maillog

//比指定级别更高的日志级别,包括指定级别自身,保存到/var/log/maillog中

mail.=info /var/log/maillog

//明确指定日志级别为info,保存至/var/log/maillog

mail.!info /var/log/maillog

//除了指定的日志级别(info)所有日志级别信息,保存至/var/log/maillog

.info /var/log/maillog

[外链图片转存中…(img-5640ZAy5-1715616984549)]
[外链图片转存中…(img-rV2fVkkB-1715616984550)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值