一、inode 与block
1. inode 与block详解
在文件存储硬盘上,硬盘的最小存储单位叫做"扇区",每个为512字节。 操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块" ( block )。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小 ,最常见的是4KB ,即连续八个扇区组成一个块
block(块)
连续的八个扇区组成一个block 是文件存取的最小单位
![](https://img-blog.csdnimg.cn/direct/1c2bbd9d3a7c49178666196f7507c86e.png)
inode (索引节点)
文件数据存储在"块"中,那么还必须找到一个地方存储文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种存储文件元信息的区域就叫inode(索引节点),也叫i节点。 文件数据存储在block块中,文件属性存储在inode
中文译名为:索引节点 ,也叫i节点 用于存储文件元信息
每一个inode大小一般是128字节或256字节
![](https://img-blog.csdnimg.cn/direct/b078a51c951f43979e052abc87328440.png)
2.inode 作用
1.文件名包含特殊字符,可能无法正常删除。这时直接删除inode,能够起到删除文件的作用;
2.移动文件或重命名文件,只是改变文件名,不影响inode 号码;
3.打开一个文件以后,系统就以inode 号码来识别这个文件,不再考虑文件名。
4.文件数据被修改保存后,会生成一个新的inode 号码。
直接查看、修改文件内容或者改变文件名都不会影响 inode号,使用 vi 编辑器修改文件保存退出后会影响 inode号
![](https://img-blog.csdnimg.cn/direct/23aac4d9ef62479880699e35065f7b64.png)
针对无法正常删除文件名含有特殊符号的文件时,可根据 inode号 来删除文件
![](https://img-blog.csdnimg.cn/direct/9c018d9ce49849218cfa6900a1c8bd82.png)
二、恢复误删除的文件 ext3
extundelete 是一个开源的Linux 数据恢复工具,支持ext3、 ext4文件系统。 ( ext4只能在centos6版本恢复)
首先创建sdb1 ,格式化为ext3 类型:
进行挂载:
![](https://img-blog.csdnimg.cn/direct/d4810a9c7c244f96925cc5ecaadfba3d.png)
安装依赖包:
![](https://img-blog.csdnimg.cn/direct/85a08e639bab44df855f53ddd5fdecbe.png)
编译安装extundelete:
![](https://img-blog.csdnimg.cn/direct/372fdf41511a4030bf53275fa6e44212.png)
![](https://img-blog.csdnimg.cn/direct/a60fe2ac8ffd4360812540b97a4294b2.png)
![](https://img-blog.csdnimg.cn/direct/2b5b4e87ba1744198b69f3996cde7c32.png)
![](https://img-blog.csdnimg.cn/direct/ec4ed3e057a743f394102ee9c67b696a.png)
在opt下找到extundelete:
![](https://img-blog.csdnimg.cn/direct/340c16fbe5a240b49138dd441dcfdb8f.png)
生成几个文件:
![](https://img-blog.csdnimg.cn/direct/7161dea3a03e4b82b0b186585b63561c.png)
extundelete /dev/sdc1 --inode 2 #查看文件系统/dev/sdc1下存在哪些文件:
![](https://img-blog.csdnimg.cn/direct/2b793672681c4414bba277b1c16b9e77.png)
删除pkm.txt , jqg.txt 文件
![](https://img-blog.csdnimg.cn/direct/e9d31b1f29f549aba8feb1906959cacb.png)
extundelete /dev/sdc1 --inode 2 查询这两个文件状态以删除
![](https://img-blog.csdnimg.cn/direct/e9922ad72cf74dc4a37e1d77de5b81d8.png)
将挂载解除:
![](https://img-blog.csdnimg.cn/direct/f026806509134e69ab8091d5ac324c00.png)
extundelete /dev/sdc1 --restore-all #恢复/dev/sdc1 文件系统下的所有内容:
![](https://img-blog.csdnimg.cn/direct/80aeb8428d934cf4b033489ec3788a02.png)
在当前目录下会出现一个RECOVERED_FILES/目录,里面保存了已经恢复的文件:
![](https://img-blog.csdnimg.cn/direct/156ab86e2e3946269c0acea8a1620347.png)
三、 恢复误删除的文件 xfs
xfs类型文件备份和恢复
CentOs 7系统默认采用xfs类型的文件,xfs类型的文件可使用xfsdump 与xfsrestore 工具进行备份恢复
xfsdump命令常用的选项:
-f: 指定备份文件目录
-L: 指定标签session label
-M: 指定设备标签media labe........ 。
-s:备份单个文件,-s后面不能直接跟路径
xfsdump使用限制:
1.只能备份已挂载的文件系统
2.必须使用root的权限才能操作
3.只能备份XFS文件系统
4.备份后的数据只能让xfsrestore解析
5.不能备份两个具有相同UUID的文件系统(可用blkid命令查看)
首先建立sdb2 ,建立xfs格式的文件系统:
![](https://img-blog.csdnimg.cn/direct/487da1f1a66946e2b958ef4e0a4f649d.png)
进行挂载:
![](https://img-blog.csdnimg.cn/direct/192f3c4bdc2f4aaab3494330489b5c53.png)
检查xfsdump是否安装,若没有可yum安装:
![](https://img-blog.csdnimg.cn/direct/5861e121f30f4c7fbf36546f3420360f.png)
在mnt下创建文件:
![](https://img-blog.csdnimg.cn/direct/953e6bb03dcb46208c84962db98dd43d.png)
xfsdump -f /opt/dump_sdb /dev/sdb2 -L dump_sdb -M sdb2 #备份sdb2文件到/opt/dump_sdb下
![](https://img-blog.csdnimg.cn/direct/9c8e2033798e4d71a5751f24087d0ce9.png)
将mnt下的文件删除:
![](https://img-blog.csdnimg.cn/direct/19e33756ddc042bab4a368aa4b2b45f1.png)
使用xfsrestore -f /opt/dump_sdb /opt/mnt 将备份的数据恢复到mnt下:
![](https://img-blog.csdnimg.cn/direct/cc263f0bb41a482da6b005c22bc3f057.png)
查看mnt下,删除文件已恢复:
![](https://img-blog.csdnimg.cn/direct/ad4cd7436acd4648b6dd7d5fb09421e5.png)
四、 Linux 系统日志文件
1. 日志的功能
用于记录系统、程序运行中发生的各种事件
通过阅读日志,有助于诊断和解决系统故障
2. 日志文件的分类
内核及系统日志
由系统服务rsyslog统一进行管理,日志格式基本相似
用户日志
记录系统用户登录及退出系统的相关信息
程序日志
由各种应用程序独立管理的日志文件,记录格式不统一
3. 常见的一些日志文件及位置
![](https://img-blog.csdnimg.cn/direct/e6c7747d3ebb4e93b40a6f9b437529cc.png)
内核及公共消息日志:
/var/log/messages: 记录Linux内核消息及各种应用程序的公共日志信息,包括启动、IO错误、网络错误、程序故障等
对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的事件记录信息
计划任务日志:
/var/1og/cron: 记录crond计划任务产生的事件信息
系统引导日志:
/var/log/dmesg: 记录Linux系统在引导过程中的各种事件信息
邮件系统日志:
/var/log/maillog: 记录进入或发出系统的电子邮件活动
用户登录日志:
/var/log/secure: 记录用户认证相关的安全事件信息
/var/log/lastlog: 记录每个用户最近的登录事件。二进制格式
/var/1og/wtmp: 记录每个用户登录、注销及系统启动和停机事件。二进制格式
/var/run/btmp: 记录失败的、错误的登录尝试及验证事件。二进制格式
vim /etc/rsyslog.conf #查看rsyslog.conf 配置文件
![](https://img-blog.csdnimg.cn/direct/a32f48d1d44a411e8d21549b9f02e32b.png)
4. 系统内核日志消息的优先级别
Linux系统内核日志消息的优先级别(数字等级越小,优先级越高,消息越重要) :
![](https://img-blog.csdnimg.cn/direct/897f682ac7c34dcbad5fd4ed8e9265f4.png)
5. 公共日志/var/log/messages文件的记录格式
![](https://img-blog.csdnimg.cn/direct/f4c7500dbdcb4cdd856458b7af8a2d3c.png)
时间标签:消息发出的日期和时间。
主机名:生成消息的计算机的名称。
子系统名称:发出消息的应用程序的名称。
消息:消息的具体内容
![](https://img-blog.csdnimg.cn/direct/0e30337d5b44439fb58743b0c31a193b.png)
6.用户日志分析
![](https://img-blog.csdnimg.cn/direct/d46e9d253bbf449190f8e92f3636e8ce.png)
分析工具:users , w , who , last , lastb
**users:**命令只是简单地输出当前登录的用户名称,每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数
who: 命令用于报告当前登录到系统中的每个用户的信息。使用该命令,系统管理员可以查看当前系统存在哪些不合法用户,从而对其进行审计和处理。who 的默认输出包括用户名、终端类型、登录日期及远程主机
**w:**命令用于显示当前系统中的每个用户及其所运行的进程信息,比 users、who 命令的输出内容要丰富一些
![](https://img-blog.csdnimg.cn/direct/d120f0000b8049009652d624987d0c19.png)
**last:**命令用于查询成功登录到系统的用户记录,最近的登录情况将显示在最前面。通过last 命令可以及时掌握 Linux 主机的登录情况,若发现未经授权的用户登录过,则表示当前主机可能已被入侵
![](https://img-blog.csdnimg.cn/direct/542ec2f2ab8c4a11b423899d08e0ecfa.png)
**lastb:**命令用于查询登录失败的用户记录,如登录的用户名错误、密码不正确等情况都将记录在案。登录失败的情况属于安全事件,因为这表示可能有人在尝试猜解你的密码。除了使用 lastb 命令查看以外,也可以直接从安全日志文件/var/log/secure 中获得相关信息
![](https://img-blog.csdnimg.cn/direct/0bda2c1f3588449c89e0cb7977497879.png)
我们在192.168.192.20主机上可以查看到有登录失败的信息:
![](https://img-blog.csdnimg.cn/direct/309fa56a670049b2a06bb1a53a7dfc1f.png)
五、 日志文件管理
1. journalctl 工具
journalctl工具是CentOS-7才有的工具
Systemd 统一管理所有 Unit 的启动日志。带来的好处就是 ,可以只用journalctl一个命令,查看所有日志(内核日志和 应用日志)
journalctl -b #查看本次启动的日志
journalctl -k #查看内核日志
journalctl -e #从结尾开始看
journalctl -x: #提供问题相关的网址
journalctl -u·httpd #指定某个服务报错
journalctl -p #日志级别查看
journalctl -xe #经常用来查看最近报错的日志
在httpd服务文件内写错:
![](https://img-blog.csdnimg.cn/direct/231f2e5d16fe470199aa58c992ae93f5.png)
![](https://img-blog.csdnimg.cn/direct/8b6f86c35d804a16ac5f9055adbd5618.png)
此时启动httpd服务时报错:
![](https://img-blog.csdnimg.cn/direct/44f918e4bbff42a5b1cb039fcbca4b45.png)
我们可以使用journalctl -xe 命令查看报错:
![](https://img-blog.csdnimg.cn/direct/68c4b06eb4b541709f55a9088bab262f.png)
2. rsyslog服务
rsyslog是CentOS 6以后的系统使用的日志系统,rsyslog是用来管理、记录日志的程序
首先查看服务是否开启:
![](https://img-blog.csdnimg.cn/direct/09de89d8a3014bc8b9d6200c146d19c2.png)
mail.* 代表比*等级高的都记录,*代表任何,也就是说任何日志都记录
.none 代表不记录日志
日志存放位置为*:所有日志高于疼痛这个等级就会对所有在线用户广播
.=代表只记录=后面级别的日志
.!代表除了!后面级别的日志不记录其他的都记录
存放路径之前有"-"代表先放入缓存足够大之后再存放在路径
![](https://img-blog.csdnimg.cn/direct/5539366fa34843b695d2fe65a1eaf1a6.png)
我们可进入/etc/rsyslog.conf 自定义日志:
![](https://img-blog.csdnimg.cn/direct/019f431f06114debb8223aa5d31439ec.png)
重启 rsyslog.service 服务:
![](https://img-blog.csdnimg.cn/direct/1ae53582f589453f9f73993a04bb8db0.png)
在/var/log 下可查看到存在info.conf 文件:
![](https://img-blog.csdnimg.cn/direct/415530943125442a9d7c5a7524750ad8.png)
![](https://img-blog.csdnimg.cn/direct/231fcec2ce8b4ed7ad7a418abd440cc8.png)