目录
一、inode和block概述
文件数据包括元信息与实际数据
文件存储在硬盘上,硬盘最小存储单位是“扇区”,每个扇区存储512字节
block(块)
连续的八个扇区组成一个block
是文件存取的最小单位
inode(索引节点)
中文译名为“索引节点”,也叫i节点
用于存储文件元信息 (比如文件的创建者、创建日期、文件大小、文件权限等)
一个文件必须占用一个inode,至少占用一个block
当用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找它对应的inode号码;通过inode号码,获取inode信息;根据inode信息,看该用户是否具有访问这个文件的权限;如果有,就指向相对应的数据block,并读取数据。
1、inode
1)inode包含文件的元信息
文件的字节数
文件拥护者的User ID
文件的Group ID
文件的读、写、执行权限
文件的时间戳
文件的类型
链接数
有关文件的其他数据
2)Linux系统文件三个主要的时间属性
ctime (change time)
最后一次改变文件或目录(属性)的时间
atime (access time)
最后一次访问文件或目录的时间
mtime (modify time)
最后一次修改文件或目录(内容)的时间
- 不打开文件的话,atime不变。例如使用echo追加内容,atime不会变,因为文件没有被打开访问。
- 修改文件内容的话,mtime会变,ctime也会变。
- 如果只修改文件的权限,ctime变,mtime不变。
3)Linux目录文件的结构
文件名1 | inode号1 |
文件名2 | inode号2 |
... | ... |
目录也是一种文件
每个inode都有一个号码,操作系统用inode号码来识别不同的文件
Linux系统内部不使用文件名,而使用inode号码来识别文件
对于用户,文件名只是inode号码便于识别的别称
对于系统来说,文件名只是inode号码便于识别的别称,文件名和inode号码是一 一对应关系,每个inode号码对应一个文件名
4)inode号码
1.用户访问文件时 先去查找 自己 文件夹中的目录项
2.文件名和inode之间对应的关系
3.通过 inode号利用指针 去指向 实际数据
查看inode号码
ls -i命令 :查看文件名对应的inode号码
stat命令 :查看文件inode信息中的inode号码
5)inode的大小
inode也会消耗硬盘空间
每个inode的大小一般是128字节或256字节
格式化文件系统时确定inode的总数
使用df -i命令可以查看每个硬盘分区的inode总数和已经使用的数量
6)删除inode号
find ./ -inum 68201002 -exec rm -i {} \;
find ./ inum 68201002 -delete
find . /-inum 68201002 | xargs rm -rf
find命令
find pathname -option [-print ] [ -exec | -ok command ] {} ;
find命令的参数;
pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为command { } ;,注意{ }和\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
xargs命令
构造参数列表并运行命令,即将接收的参数传递给后面的command 命令执行
将多行输入转换为单行
将输入参数整理后,去除换行符,以一个列表形式处理
避免参数过长引发的问题,使用xargs -n 参数适当控制,对于经常产生大量输出的命令如find、locate和grep来说非常有用
XXcomand | xargs -x comand initial-args
echo "/etc/inittab" | cat # 直接将标准输入的内容传递给cat
echo "/etc/inittab" | xargs cat # 将标准输入的内容经过xargs处理后传递给cat
find /etc -maxdepth 1 -name "*.conf" -print0 | xargs -0 -i grep "hostname" -l {} # 将搜索的文件传递给grep的参数位进行搜索,若不使用xargs,则grep将报错
7)cp命令与inode
分配一个空闲的inode号,在inode表中生成新条目
在目录中创建一个目录项,将名称与inode编号关联
拷贝数据生成新的文件
8)rm命令
硬链接数递减,从而释放的inode号可以被重用
把数据块放在空闲列表中
删除目录项
数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖
9)mv和inode
如果mv命令的目标和源在同一设备,
不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!
删除旧的目录对应关系新建目录对应关系
二、软链接和硬链接
对比项 | 硬链接 | 软链接 |
本质 | 本质是同一个文件 | 本质不是同一个文件 |
inode | 相同 | 不同 |
链接数 | 创建新的硬链接,链接数会增加,删除硬链接,链接数减少 | 删除新建不会改变 |
文件夹 | 不支持 | 支持 |
删除源文件 | 只是链接数减一,但链接文件的访问不受影响 | 无法访问连接文件 |
文件类型 | 和源文件相同 | 链接文件,和源文件无关 |
文件大小 | 和源文件相同 | 源文件的路径的长度 |
1、创建链接文件
ln 源文件 目标文件 //创建硬链接文件
ln -s 源文件或目录 目标文件 //创建软链接文件
(创建软链接时,源文件要使用绝对路径)
2、inode节点耗尽故障处理
inode会消耗硬盘空间,当inode的空间消耗完以后,即便硬盘还有空间,也无法使用
1)操作步骤
使用fdisk创建分区/dev/sdb1,分区大小30M
fdisk /dev/ sdb
mkfs.ext4 /dev/ sdb1
mkdir /data mount /dev/sdb1 /data
df -i
模拟inode节点耗尽故障
for ( (i=1; i<=2549; i++) )
>do
>touch /test/ file$i
>done<br><br>或者直接touch {1. . 2549} . txt
df -i
df -hT
删除文件恢复
rm -rf /data/ *
df -i
df -hT
2)实例演示
新增磁盘并分区
格式化并挂载
利用for循环创建文件,将inode空间占满,模拟inode节点耗尽故障
可用inode号为0
无法创建文件
删除占用文件后,创建成功
三、恢复误删除文件(EXT类型)
extundelete是一个 开源的Linux数据恢复工具, 支持ext3、 ext4文件系统。 (ext4只能在centos6版 本恢复)
1、编译安装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
使用fdisk创建分区/dev/sdc1,格式化ext3文件系统
fdisk /dev/sdb
partprobe /dev/sdb
mkfs.ext3 /dev/ sdb1
mkdir /data
mount /dev/sdb1 /data
df -hT
安装依赖包
yum -y install e2fsprogs-devel e2 fsprogs-libs
编译安装extundelete
cd /opt
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/jz/ && make && make install
ln -s /usr/ local/jz/bin/* /usr/bin/
2、模拟删除并执行恢复操作
查看文件系统/dev/sdc1下存在哪些文件,i节点是从2开始的,2代表该文件系统最开始的目录
cd /data
echo 111 > 123.txt
echo 222 > 234.txt
echo 333 > 456.txt
ls
extundelete /dev/sdb1 --inode 2
恢复/dev/sdc1文件系统下的所有内容
rm-rf 123.txt 234.txt 456.txt
extundelete /dev/sdd1 -- inode 2
cd ~
umount /data/
extundelete /dev/sdb1 --restore-all
在当前目录下会出现一-个RECOVERED_ FILES/目录,里面保存了已经恢复的文件
ls RECOVERED_FILES/</code>
四、日志分析
1、系统日志
Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息
日志记录的内容
历史事件:时间,地点,人物,事件
日志级别:事件的关键性程度,Loglevel
日志文件所处的位置都在/var/log目录下,前提是没有对日志配置文件/etc/syslog.conf进行过特别的配制
1)sysklogd 系统日志服务
CentOS5之前版本采用的日志管理系统服务
syslogd:system application 记录应用日志
klogd:linux kernel记录内核日志
2)rsyslog系统日志服务
rsyslog是CentOS6以后版本的系统管理服务:它提供了高性能,出色的安全性和模块化设计
优点
持多线程
支持TCP、SSL、TLS、RELP等协议
强大的过滤器,可实现过滤日志信息中的任意部分
支持自定义输出格式
适用于企业级别日志记录需求
模块化
Linux系统内核日志消息的优先级别
消息 | 等级号 | 级别 | 说明 |
EMERG | 0 | 紧急 | 会导致主机系统不可用的情况 |
ALERT | 1 | 警告 | 必须马上采取解决措施的问题 |
CRIT | 2 | 严重 | 比较严重的情况 |
ERR | 3 | 错误 | 运行出现错误,一般达到ERR等级的信息已经可以影响到服务成系统的运行了 |
WARNING | 4 | 提醒 | 可能会影响系统功能的事件 |
NOTICE | 5 | 注意 | 不会影响系统但需要注意 |
INFO | 6 | 信息 | 一般信息 |
DEBUG | 7 | 调试 | 程序或系统调试信息等 |
服务名称
服务名称 | 说明 |
auth(LOG_AUTH) | 安全和认证相关消息 (不推荐使用authpriv替代) |
authpriv(LOG_AUTHPRIV) | 安全和认证相关消息(私有的) |
cron (LOG_CRON) | 系统定时任务cront和at产生的日志 |
daemon (LOG_DAEMON) | 与各个守护进程相关的曰志 |
ftp (LOG_FTP) | ftp守护进程产生的曰志 |
kern(LOG_KERN) | 内核产生的曰志(不是用户进程产生的) |
Iocal0-local7 (LOG_LOCAL 0-7) | 为本地使用预留的服务 |
lpr (LOG_LPR) | 打印产生的日志 |
mail (LOG_MAIL) | 邮件收发信息 |
news (LOG_NEWS) | 与新闻服务器相关的日志 |
syslog (LOG_SYSLOG) | 存syslogd服务产生的曰志信息(虽然服务名称己经改为reyslogd,但是很多配罝依然沿用了syslogd服务的,所以这里并没有修改服务名称) |
user (LOG_USER) | 用户等级类别的日志信息 |
uucp (LOG_UUCP) | uucp子系统的日志信息,uucp是早期Linux系统进行数据传递的协议,后来也常用在新闻组服务中 |
分析工具
user、who、W、last、lastb
last命令用于查询成功登录到系统的用户记录
lastb命令用于查询登陆失败的用户记录