目录
inode和block概述
文件是存储在硬盘上的,硬盘的最小存储单位叫做“扇区(sector)”,每个扇区存储为512字节。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块(block)”。这种由多个扇区组成的“块”,是文件存取的最小单位。“块”的大小,最常见的是4kb,即连续八个sector组成一个block
文件数据存储在“块”中,那么还必须找到一个地方存储文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种存储文件元信息的区域就叫做inode,中文译名为“索引节点”,也叫i节点。因此,一个文件必须占用一个inode,但至少占用一个block
inode的内容
inode包含很多的文件元信息,但不包含文件名,例如:文件的字节数,文件拥有者的UserID,文件的GroupID,文件的读,写、执行权限,文件的时间戳......
Linux系统文件有三个主要的时间属性,分别是ctime(change time)、aitime(access time)、mtime(modify time)。
ctime(change time):是最后一次改变文件或目录(属性)的时间,例如执行chmod、chown等命令
aitime(access time):是最后一次访问文件或目录的时间
mtime(modify time):是最后一次修改文件或目录(内容)的时间。
使用stat命令可查看某个文件的inode信息
[root@localhost var]# stat log
文件:"log"
大小:4096 块:8 IO 块:4096 目录
设备:fd00h/64768d Inode:67158950 硬链接:19
权限:(0755/drwxr-xr-x) Uid:( 0/ root) Gid:( 0/ root)
环境:system_u:object_r:var_log_t:s0
最近访问:2021-09-24 17:12:16.869291388 +0800
最近更改:2021-09-09 14:36:39.071861275 +0800
最近改动:2021-09-09 14:36:39.071861275 +0800
创建时间:-
inode的内容
每个inode都有一个号码,操作系统用inode号码来识别不同的文件,Linux系统内部不使用文件名,而使用inode号码来识别文件,对于用户,文件名只是inode号码便于识别的别称。
表面上,用户是通过文件名来打开文件,实际上,在系统内部这个过程分为三步
1)系统找到这个文件名对应的inode 号码。
2)通过inode号码,获取inode信息
3)根据inode信息,找到文件数据所在的block,读出数据。
由此可知,当一个用户在Linux系统中试图访问一个文件时,系统会根据文件名去查找它的inode,看该用户是否具有访问这个文件的权限,如果有,就指向相对应的数据block,如果没有,就返回Permission denied。而一块硬盘分区后的结构则是
恢复误删除的文件
删除一个文件,实际上并不清除inode节点和block的数据,只是在这个文件的父目录里面的block中,删除这个文件的名字。Linux是通过link的数量来控制文件删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除
在工作中,经常会遇到,操作不慎、操作错误导致文件数据丢失的情况,尤其对于客户企业中的一些新手,当然,这是指彻底删除,即不能通过“回收站”找回的情况,比如使用“rm -rf”来删除数据,针对Linux下的ext文件系统,可用的恢复工具有debugfs,ex3grep、extundelete等,其中extundelete是一个开源的Linux数据恢复工具,支持ext3文件系统
使用extundelete工具恢复误删除的文件
在编译安装extundelete之前需要安装两个依赖包e2fsprogs-devel,在/Package目录下就有。
[root@localhost ~]# yum install e2fsprogs-devel e2fsprogs-libs -y
把extundelete压缩包拖进去
[root@localhost ~]# tar -jxvf extundelete-0.2.4.tar.bz2 -C /opt
//解压到opt目录下
编译安装
[root@localhost opt]# cd extundelete-0.2.4/
[root@localhost extundelete-0.2.4]# ./configure
Configuring extundelete 0.2.4
Writing generated files to disk
验证恢复
[root@localhost ~]# mkdir /lala
[root@localhost ~]# mount /dev/sdb1 /lala 挂载
[root@localhost ~]# cd /lala/
[root@localhost lala]# echo a > a
[root@localhost lala]# echo a > b
[root@localhost lala]# echo a > c
[root@localhost lala]# echo a > d
[root@localhost lala]# ls
a b c d
查看文件系统/dev/sdb1下存在哪些文件
[root@localhost lala]# extundelete /dev/sdb1 --inode 2
具体使用情况,其中-- inode2代表从i节点为2的文件开始查看,一般文件系统格式化挂载后,i节点是从2开始的,2代表该文件系统最开始的目录
模拟删除并恢复
[root@localhost lala]# rm -rf a b
[root@localhost ~]# umount /lala //解挂载
查看该分区有哪些文件
[root@localhost lala]# extundelete /dev/sdb1 --inode 2
使用恢复
[root@localhost ~]# extundelete /dev/sdb1 --restore-all
此时会有RECOVERED_FILES这个文件
ls查看,就会有被删除的文件
恢复xfs类型的文件
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 时,需要注意以下的几个限制:
-
不支持没有挂载的文件系统备份,所以只能备份已挂载的;
-
必须使用 root 的权限才能操作;
-
只能备份 XFS 文件系统;
-
备份下来的数据只能让 xfsrestore 解析;
-
不能备份两个具有相同 UUID 的文件系统(可使用blkid查看)。
步骤
分区
[root@localhost ~]# fdisk /dev/sdb //分区
[root@localhost ~]# mkfs.xfs -f /dev/sdb1 //强制格式化
创建文件
[root@localhost ~]# mkdir /data
模拟
模拟数据丢失后恢复
删除/date下的文件
再ls查看
分析日志文件
内核及系统日志由系统服务 rsyslog 统一管理,根据其主配置文件 /etc/rsyslog.conf
Linux 操作系统本身和大部分服务器程序的日志文件都默认放在目录/var/log/下
常见的一些日志文件:
日志文件位置 | 日志文件说明 |
---|---|
/var/log/messages内核和公共日志 | 它是核心系统日志文件,其中包含了系统启动时的引导信息,以及系统运行时的其他状态消息。I/O 错误、网络错误和其他系统错误都会记录到此文件中。其他信息,比如某个人的身份切换为 root,已及用户自定义安装软件的日志,也会在这里列出。 |
/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/tun/ulmp | 记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。同样,这个文件不能直接用Vi查看,而要使用w、who、users等命令查看 |
日志文件的格式:
日志文件的格式包含以下 4 列:
-
事件产生的时间。
-
产生事件的服务器的主机名。
-
产生事件的服务名或程序名。
-
事件的具体信息
查看/var/log/secure 日志,这个日志中主要记录的是用户验证和授权方面的信息
内核和公共日志
日志的配置文件 位置在 /etc/rsyslog.conf
[root@localhost ~]#vim /etc/rsyslog.conf
信息的优先级别重要程度
在 Linux 内核中,根据日志消息的重要程度不同,将其分为不同 的优先级别(数字等级越小,优先级越高,消息越重要)。
0 EMERG(紧急):会导致主机系统不可用的情况。
1 ALERT(警告):必须马上采取措施解决的问题。
2 CRIT(严重):比较严重的情况。
3 ERR(错误):运行出现错误。
4 WARNING(提醒):可能影响系统功能,需要提醒用户的重要事件。
5 NOTICE(注意):不会影响正常功能,但是需要注意的事件。
6 INFO(信息):一般信息。
7 DEBUG(调试):程序或系统调试信息等
内核和公共消息日志存储位置
内核及大多数系统消息被记录到公共日志文件/var/log/messages 中,而其他一些程序
消息被记录到各自独立的日志文件中,此外日志消息还能够记录到特定的存储设备中,或者
直接发送给指定用户。
对于 rsyslog 服务统一管理的大部分日志文件,使用的日志记录格式基本上是相同的。
以公共日志/var/log/messages 文件的记录格式为例,其中每一行表示一条日志消息,每
一条消息均包括以下四个字段。
-
时间标签:消息发出的日期和时间。
-
主机名:生成消息的计算机的名称。
-
子系统名称:发出消息的应用程序的名称。
-
消息:消息的具体内容。
用户日志
在 wtmp、btmp、
lastlog 等日志文件中,保存了系统用户登录、退出等相关的事件消息。
但是这些文件都是二进制的数据文件,不能直接使用 tail、less 等文本查看工具进行浏览,
需要使用 who、w、users、last 和 lastb 等用户查询命令来获取日志信息
查询当前登录的用户情况
users
users 命令只是简单地输出当前登录的用户名称,每个显示的用户名对应一个登录会话。 如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数
[root@localhost log]#users
root root root root
who
who命令用于报告当前登录到系统中的每个用户的信息。使用该命令,系统管理员可
以查看当前系统存在哪些不合法用户,从而对其进行审计和处理。who 的默认输出包括用
户名、终端类型、登录日期及远程主机
w
w 命令用于显示当前系统中的每个用户及其所运行的进程信息,比 users、who 命令的 输出内容要丰富一些。-
查询用户登录的历史记录
last
last 命令用于查询成功登录到系统的用户记录,
最近的登录情况将显示在最前面。通过 last 命令可以及时掌握 Linux 主机的登录情况,若发现未经授权的用户登录过,则表示当前 主机可能已被入侵。
lastb
lastb 命令用于查询登录失败的用户记录,
如登录的用户名错误、密码不正确等情况都 将记录在案。登录失败的情况属于安全事件,因为这表示可能有人在尝试猜解你的密码。除 了使用 lastb 命令查看以外,也可以直接从安全日志文件/var/log/secure 中获得相关信息。