●文件数据包括元信息与实际数据
●文件存储在硬盘上,硬盘最小存储单位是扇区,每个扇区存储512字节
512字节*8=4096字节,最常见的4k
●block(块)
连续的八个扇区组成一个block
是文件存取的最小单位
●inode(索引节点)
中文译名为“索引节点”,也叫i节点
用于存储文件元信息
文件的字节数
文件拥有者的User ID
文件的Group ID
文件的读、写、执行权限
文件的时间戳
(不包含文件名)
……
ctime(change time)
最后一次改变文件或目录(属性)的时间
atime(access time)
最后一次访问文件或目录的时间
mtime(modify time)
最后一次修改文件或目录(内容)的时间
目录文件的结构
目录也是一种文件
目录文件的结构
每个incode都有一个号码,操作系统用incode号码来识别不同的文件
Linux系统内部不使用文件名,而使用incode号码来识别文件
对于用户,文件名只是incode号码便于识别的别称
用户通过文件名打开文件时,系统内部的过程
1.系统找到这个文件名对应的inode号码
2.通过inode号码,获取inode信息
3.根据inode信息,找到文件数据所在的block,读出数据
查看inode号码的方法
ls -i命令:查看文件名对应的inode号码
ls -ai 命令查看当前目录的文件及隐藏文件的所对应的inode号码
stat命令:查看某个文件的inode信息而查看到inode号码
硬盘分区后的结构
访问文件的简单流程
●inode也会消耗硬盘空间
每个inode的大小
一般是128字节或256字节
●格式化文件系统时确定inode的总数
●使用df -i命令可以查看每个硬盘分区的inode总数和已经使用的数量
由于inode号码与文件名分离,导致一些Unix/Linux系统具有以下的现象
●当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件
●移动或重命名文件时,只改变文件名,不影响inode号码
●打开一个文件后,系统通过inode号码来识别该文件,不再考虑文件名
●在Linux下面的链接文件有两种:
●一种类似于Windows的快捷方式功能的文件,可以快速连接到目标文件或目录,这种称为软链接
●另一种则是通过文件系统的inode链接文件来产生新的文件名,而不是产生新文件,这种称之为硬链接
一般情况下,文件名和inode号码是一一对应关系,每个inode号码对应一个文件名。
但是Linux系统允许,多个文件名指向同一个inode号码。这表示可以用不同的文件名来访问同样的内容。
ln 源文件 目标位置
运行此命令后,源文件和目标文件的inode号码相同,都指向同一个inode。inode信息中的“链接数”此时就会增加1
当一个文件拥有多个硬链接时,对文件内容修改,会影响到所有文件名。但删除一个文件名,不会影响另一个文件名的访问。删除一个文件名,就会使得inode信息中的“链接数”减少1
ln -s 源文件或目录 链接文件或目标位置
软链接就是再创建一个独立的文件,而这个文件会让数据的读取指向它连接的那个文件的文件名
文件2依赖于文件1而存在,如果删除了文件1 ,打开文件2就会报错
删除一个文件,实际上并不清除 inode 节点和 block 的数据,只是在这个文件的父目录里面的 block 中删除这个文件的名字。Linux 是通过 Link 的数量来控制文件删除的,只有 当一个文件不存在任何 Link 的时候,这个文件才会被删除。 在 Linux 系统运维工作中,经常会遇到因操作不慎、操作错误等导致文件数据丢失的情况,尤其对于客户企业中一些新手。
1.编译安装extundelete
第一步,
先安装两个依赖包 e2fsprogs-libs 和 e2fsprogs-devel, 这两个包在系统安装光盘的/Package 目录下就有,安装wget,使用wget去现网下载extundelete 软件包。
yum -y install e2fsprogs-libs e2fsprogs-devel wget
wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
第二步,
安装完依赖包之后,再解压、配置、编译、安装。
tar jxf extundelete-0.2.4.tar.bz2
cd extundelete-0.2.4进入软件包找到configure配置的脚本
./configure --prefix=/usr/local/extundelete
make 编译
make install安装
第三步,实验验证,格式化后一个分区后挂载到目录,在目录中创建几个文件,删除一个文件模拟误删文件,
先取消挂载,防止新数据写入将误删数据覆盖掉,
使用软件恢复,extundelete /dev/sdb1 --restore-all
在/root中找到恢复的文件存放处:RECOVERED_FILES
注意:如果报错显示extundelete命令未找到,需要先给该软件的命令位置创建软链接到/usr/sbin目录下,才能使用该命令
ln -s /usr/local/extundelete/bin/* /usr/sbin/
extundelete 工具仅可以恢复 EXT 类型的文件,无法恢复 CentOS 7 系统默认采用 xfs 类型的文件。针对 xfs 文件系统目前也没有比较成熟的文件恢复工具,所以建议提前做好数 据备份,以避免数据丢失。xfs 类型的文件可使用 xfsdump 与 xfsrestore 工具进行备份恢复。若系统中未安装 xfsdump与xfsrestore工具,可以通过yum install -y xfsdump命令安装。xfsdump 按照inode 顺序备份一个 xfs 文件系统。
xfsdump 的备份级别有两种:0 表示完全备份;1-9 表示增量备份。
xfsdump 的备份级别默认为 0。
xfsdump 的命令格式为:xfsdump -f 备份存放位置要备份路径或设备文件。常用的备份参数包括以下几种:
-f:指定备份文件目录;
-L:指定标签 session label;
-M:指定设备标签 media label;
-s:备份单个文件,-s 后面不能直接跟路径
xfsdump命令格式
xfsdump -f 备份存放位置 要备份的路径或者设备文件
xfsrestore命令格式
xfsrestore -f 恢复文件的位置 存放恢复后文件的位置
●只能备份已挂载的文件系统
●必须使用root的权限才能操作
●只能备份xfs文件系统
●备份后的数据只能用xfsrestore解析
●不能备份两个具有相同UUID的文件系统
1.先格式化一个分区 mkfs.xfs /dev/sdb1 (如果该分区已经被格式化过,需要加- f 强制格式化)
将其挂载到/1目录中,mount /dev/sdb1 /1
2.准备需要备份和恢复实验需要的文件
[root@localhost ~]# cp /etc/passwd /1
[root@localhost 1]# mkdir /1/2
[root@localhost 1]# echo “this is test”>/1/2/test.txt ###复制和创建写入些数据到/1目录中,用于恢复数据实验
[root@localhost 1]# yum -y install tree ###安装tree软件查看/1目录树
[root@localhost 1]# tree /1
/1
├── 2
│ └── test.txt
[root@localhost 1]# yum -y install xfsdump ###安装所需软件
[root@localhost 1]# xfsdump -f /opt/xfs_dump /dev/sdb1 ###将/dev/sdb1分区备份到/opt/xfs_dump(会出现交互性界面让我们确认备份到的位置和需要备份的文件 -> xfs_dump和 -> /dev/sdb1)
4.恢复
[root@localhost 1]# rm -rf /1/* ###删除/1目录中的内容准备恢复
[root@localhost 1]# xfsrestore -f /opt/xfs_dump /1 ###恢复/opt/xfs_dump的数据到/1中
●用于记录系统,程序运行中发生的各种事件
●通过阅读日志,有助于诊断和解决系统故障
●内核及系统日志
由系统服务rsyslog统一进行管理,日志格式基本相似
●用户日志
记录系统用户登录及退出系统的相关信息
●程序日志
由各种应用程序独立管理的日志文件,记录格式不统一
默认位于:/var/log目录下
/var/log/messages:记录Linux内核消息和各种应用程序的公共日志信息,包括启动,I/O错误,网络错误,程序故障等
对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的时间记录信息
/var/log/cron:记录crond计划任务产生的事件信息
/var/log/dmesg:记录Linux系统在引导过程中的各种事件信息
/var/log/maillog:记录进入或发出系统的电子邮件活动
/var/log/lastlog:记录每个用户最近的登录时间
/var/log/secure:记录用户认证相关的安全事件信息
/var/log/wtmp:记录每个用户登录,注销及系统启动和停机事件
/var/log/btmp:记录失败的,错误的登录尝试及验证事件
yum安装的都存放在/var/log/yum.log中;手工编译安装的都是自己指定的目录
●分析日志文件的目的在于通过浏览日志查找关键信息,对系统服务进行调试,以及判断发生故障的原因等
●对于大多数文本格式的日志文件(如内核及系统日志,大多数的程序日志),只要使用tail,more,less,cat等文本处理工具就可以查看日志内容
●对于一些二进制格式的日志文件(如用户日志),需要使用特定的查询命令
软件包:rsyslog-7.4.7-16.el7.x86_64
主要程序:/sbin/rsyslogd
配置文件:/etc/rsyslog.conf
保存了用户登录,退出系统等相关信息
/var/log/lastlog:最近的用户登录事件
/var/log/wtmp:用户登录,注销及系统开,关机事件
/var/log/utmp:当前登录的每个用户的详细信息
/var/log/secure:与用户验证相关的安全性事件
分析工具
users,who,w,last,lastb
查询当前登录的用户情况:users,who,w命令
users命令只简单的输出当前登录的用户名称,每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数
who命令的默认输出包括用户名,终端类型,登录日期及远程主机,从而系统管理员可以查看当前系统存在哪些不合法用户
w命令用于显示当前系统中的每个用户及其所运行的进程信息,比users,who命令的输出内容要更加丰富一些
查询用户登录的历史记录:last,lastb命令
last命令用于查询成功登录到系统的用户记录,最近的登录情况将显示在最前面
通过last命令可以及时掌握Linux主机的登录情况,若发现未经授权的用户登录过,则表示当前主机可能已被入侵
lastb命令用于查询登录失败的用户记录,如登录的用户名错误,密码不正确等情况都会记录在案。
登录失败的情况属于安全事件,因为这表示可能有人在尝试猜出你的密码
除了使用lastb命令查看以外,还可以直接从安全日志文件/var/log/secure中获得相关信息
web服务:/var/log/httpd/
access_log,error_log(httpd网站服务程序使用的两个日志文件access_log和error_log,分别记录客户访问事件,错误事件。)
代理服务:/var/log/squid/
access.log , cache.log
FTP服务:/var/log/xferlog
文本查看,grep过滤检索,webmin管理套件中查看
awk,sed等文本过滤,格式化编辑工具
webalizer,awstats等专用日志分析工具
●及时做好备份和归档
●延长日志保存期限
●控制日志访问权限
日志中可能会包含各类敏感信息,如账户,口令等
●集中管理日志
将服务器的日志文件发到统一的日志文件服务器
便于日志信息的统一收集,整理和分析
杜绝日志信息的意外丢失,恶意篡改或删除