一、inode和block
1.概述
在Linux操作系统中,文件数据包括实际内容和属性(元信息),属性包括文件权限和文件所有者。
文件存储在硬盘上,硬盘最小存储单元是“扇区”,每个扇区存储512字节。
操作系统读取硬盘的时候,不会一个个扇区的读取,这样效率太低,而是一次性连续读取8个扇区,即一次性读取一个“块”(block),块是文件存取的最小单位。
连续的八个扇区组成一个block,“块”的大小,容量4KB。
文件数据是存储在块中的,而文件的相关属性就保存在inode中,称为索引节点或i节点,一个文件占有一个i节点。
2.inode节点信息
inode包含很多的文件元信息,包括文件的字节数、文件拥有者UserID、文件的GroupID、文件的rwx权限(读、写、执行)、文件时间戳。
使用stat命令可以查看某个文件的inode信息
touch df.log
stat df.log
mv df.log df.dy ##改个文件名,看看那个时间会改变
stat df.dy
最近改动为改属性的时间
最近更改为改内容的时间
Linux系统文件有三个主要的时间属性,分别是ctime(change time), atime(access time), mtime(modify time),对应中文显示为最近更改时间、最近访问和最近改动。
ctime(change time) 是最后一次改变文件或目录(属性)的时间,例如执行 chmod, chown 等命令;
atime(access time)是最后一次访问文件或目录的时间;
mtime(modify time)是最后一次修改文件或目录(内容)的时间
3.inode号
当用户打开文件,系统内部分成三步:
(1)系统找到文件名的inode号码
(2)通过inode号码,获取inode信息
(3)根据inode信息,找到文件所在的block,并读取数据
ls -i 命令可以查看文件对应的inode号码;state命令会显示更详细的信息,也是可以从中查到inode号的。
ls -i df.dy ##查看inode号
4.inode的大小
使用命令df -i可以查看每个硬盘的inode节点数和已使用情况
df -i
由于inode号码与文件名分离,导致一些Unix/Linux系统具有以下的现象:
(1)当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件;
(2)移动或者重命名文件时,只改变文件名,不影响inode号码;
(3)打开一个文件后,系统通过inode号码来识别该文件,不再考虑文件名。
当数据更新时,只要将文件指向新的节点号就可以了。
二、软链接和硬链接
1.软链接和硬链接
因为在系统中很多不同的目录文件位置会需要用到相同的文件,如果在每个需要的地方都存放一份文件的话,那样十分占据磁盘空间,在需要使用文件的地方创建链接可以节约资源,又可以使用文件。
软链接是快速链接到目标文件或者目录,硬链接产生新的文件名且所以链接产生的文件名和源文件都是指向相同inode节点的。
命令格式:ln 源文件 目标
创建硬链接
touch a b
ln a c ##为源文件a创建硬链接
ls ##可看到c已存在
state c
state a ##看两个文件的i节点号是相同的
创建软链接
ln -s a d
ll ##可查看d指向a
state a
state d ##查看inode,d也是指到a
2.关于ll命令输出结果中字段信息
图中红框出来的数字,对于目录来说,这个数字是表示这个目录下的第一个子目录的数量,
比如test05这个目录,显示的是2,表示他目录下的.和…来个目录,其他的都不是目录。
对应其他文件来说,表示链接数,对于软链接一般为1,对于硬链接会显示的数量大于1(数字表示指向同个i节点号的文件数量,硬链接i节点号都相同)。
三、分析日志文件
日志文件是用于记录Linux系统中各种运行消息的文件,相当于Linux主机的“日记”。不同日志文件记录不同类型的信息。日志文件对排除故障有很大的帮助。
1.日志数据类型
(1)日志类型
内核及系统日志:由系统服务rsyslog统一进行管理,日志格式基本相似。
用户日志:记录系统用户登录及退出系统的相关信息,包括用户名,登录的终端,登录时间,来源主机,正在使用的进程操作等。
程序日志:由各种应用程序独立管理的日志文件,记录格式不统一,程序安装后不会生成日志文件,只有在启动的时候才会生成日志文件,没有访问它,日志文件就是空的。
(2)常见的日志文件
/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:记录失败的,错误的登录尝试及验证事件。
2.日志文件分析
对系统日志进行分析可以查找关键信息、对系统服务进行调试和可以判断出故障原因。
(1)内核和系统日志
内核和系统日志由rsyslog服务所使用的/etc/rsyslog.conf配置文件。
grep -v “^$” /etc/rsyslog.conf ##过滤空行
此文件中包含Linux文件中最主要的日志文件,他们记录了Linux系统中内核、用户认证、计划任务等最基本的系统消息。在Linux内核中,根据日志消息的重要程度,可分为不同的优先级别(数字越小优先级越高,越重要),类型如下:
0 EMERG(紧急) 会导致主机系统不可用的情况
1 ALERT(警告) 必须马上采取措施解决的问题
2 CRIT(严重) 比较严重的情况(某些功能不可用)
3 ERR(错误) 运行出现错误
4 WARNING(提醒) 可能会影响系统功能的事件
5 NOTICE(注意) 不会影响系统但值得注意
6 INFO(信息) 一般信息
7 DEBUG(调试) 程序或系统调试信息等(做维护的时候可能会用到)
在/var/log/messages,会有大多数的系统日志消息。
more /etc/messages ##查看日志文件,这里面的数据十分多
我们可以看到日志文件中的个字段,具体含义如下
时间标签:Jun 16 17:18:02:消息发出的日期和时间
主机名:localhost:生成消息的计算机的名称
子系统名称:kernel:发出消息的应用程序的名称
消息:Initializing cgroup subsys :消息的具体内容
(2)用户日志
几种用户日志如下:
/var/log/lastlog:最近的用户登录事件
/var/log/wtmp:用户登录,注销及系统开,关机事件
/var/log/utmp:当前登录的每个用户的详细信息
/var/log/secure:与用户验证相关的安全性事件
但这些文件都是二进制文件,不能直接查看,我们一般借助users、who、w、last和lastb等命令来获取日志信息。
1)查询当前登录的用户情况—users、who、w命令
user命令只简单的输出当前登录的用户名称,每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数
user ##root用户登录5个会话
who命令用户报告当前登录到系统中的每个用户的信息,使用该命令,系统管理员可以查看当前系统存在哪些不合法用户,从而对其进行审计和处理,who命令的默认输出包括用户名,终端类型,登录日期及远程主机
who
w命令用于显示当前系统中的每个用户及其所运行的进程信息,比users,who命令的输出内容要更加丰富一些
2)查询用户登录的历史命令记录–last、lastb命令
last命令用于查询成功登录到系统的用户记录,最近的登录情况将显示在最前面
通过last命令可以及时掌握Linux主机的登录情况,若发现未经授权的用户登录过,则表示当前主机可能已被入侵
last
lastb命令用于查询登录失败的用户记录,如登录的用户名错误,密码不正确等情况都会记录在案。
登录失败的情况属于安全事件,因为这表示可能有人在尝试猜出你的密码
除了使用lastb命令查看以外,还可以直接从安全日志文件/var/log/secure中获得相关信息
自己切换用户尝试几次输错密码,就可以在日志文件中查看到了
lastb
tail /var/log/messages
这样可以看出root用户用失败的登录
3.程序日志
在Linux系统中,还有相当一部分应用程序并没有使用rsyslog服务来管理日志,而是由程序自己维护日志记录。如,httpd网站服务程序使用两个日志文件access_log和error_log,分别记录客户访问记录、错误事件。
1)分析工具
文本查看,grep过滤检索,webmin管理套件中查看awk,sed等文本过滤,格式化编辑工具webalizer,awstats等专用日志分析工具
2)日志管理策略
及时做好备份和归档
延长日志保存期限
控制日志访问权限
日志中可能会包含各类敏感信息,如账户,口令等
几种管理日志
将服务器的日志文件发到统一的日志文件服务器便于日志信息的统一收集,整理和分析
四、实验部分
实验环境
centos 7.6
实验任务
恢复删除的文件
实验内容与步骤
恢复ext3文件类型
1.恢复误删除的ext3文件
1)编译安装 extundelete
在编译安装 extundelete 之前需要先安装两个依赖包 e2fsprogs-libs 和 e2fsprogs-devel,
这两个包在系统安装光盘的/Package 目录下就有,使用 rpm 或 yum 命令将其安装。
e2fsprogs-devel 安装依赖于 libcom_err-devel 包。 安装完依赖包之后,
即可将提前上传的 extundelete 软件包解压、配置、编译、安装
yum -y install e2fsprogs-devel e2fsprogs-libs
yum -y install wget
yum -y install gcc automake autoconf libtool make
yum install gcc gcc-c++
yum -y install bzip2
wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
tar xvf extundelete-0.2.4.tar.bz2
cd extundelete-0.2.4/
./configure --prefix=/usr/local/extundelete && make && make install ##编译指定安装路径
cd /usr/local/extundelete/bin
ln -s /usr/local/extundelete/bin/* /usr/sbin/
2)模拟删除与恢复
给虚拟机加一块硬盘,格式化为ext3类型挂载到/opt目录下,在该目录下新建一些文件;当我们要恢复删除的文件时,要先将硬盘从/opt目录下卸载下来,这样就不会在往里面写数据,避免之前的数据被覆盖,如果被覆盖那就可能不能恢复了。
cd /opt
echo 2 >a ##创建文件,也可以用touch、vi等方式来创建文件
echo 3 >b
ls
rm -rf a
cd ##开始恢复文件步骤
umonut /opt
cd /opt
extundelete /dev/sdb1 --restore-all
cd RECOVERED_FILES/
ls ##可以看到a文件,表示恢复成功
恢复误删除的xfs类型文件
2.恢复误删除的xfs文件
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 后面不能直接跟路径
下面通过一个案例来备份恢复 xfs 类型的文件。
1)制作环境
首先添加一款新硬盘并格式化为 xfs 类 型的文件系统,然后挂在到/opt 目录下,此过程不表述。然后在该目录下创建文件,用来删除测试。
cd /opt
cp /etc/passwd ./ ##复制一份文件到该目录下
mkdir test
touch test/a ##
使用xfsdump 命令备份整个分区
yum install -y xfsdump
xfsdump -f /opt/dump_sdc1 /dev/sdc1
####交互信息###
please enter label for this dump session (timeout in 300 sec)
-> dump_sdc1 ####指定备份会话标签
please enter label for media in drive 0 (timeout in 300 sec)
-> sdc1 ###指定设备标签,就是对要备份的设备做一个描述
2)删除与恢复
cd opt
ls
rm -rf *
ls
cd
xfsrestore -f /tmp/dump_sdc1 /opt ##恢复
ls /opt ##又可以看到我们的之前创建的文件了