目录
一、inode与block
1.inode与block概述
文件是存储在硬盘上的,硬盘的最小存储单位叫做“扇区”(sector),每个扇区存储512字节。
一般连续八个扇区组成一个“块”(block),一个块是4K大小,是文件存取的最小单位。操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取。
文件数据包括实际数据与元信息(类似文件属性)。文件数据存储在“块”中,存储文件元信息(比如文件的创建者、创建日期、文件大小、文件权限等)的区域就叫做 inode。因此,一个文件必须占用一个 inode,并且至少占用一个 block。
inode不包含文件名。文件名是存放在目录当中的。Linux系统中一切皆文件,因此目录也是一种文件。
每个inode都有一个号码,操作系统用inode号码来识别不同的文件。Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称,文件名和inode号码是一一对应关系,每个inode号码对应一个文件名。
所以,当用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找它对应的inode号码;通过inode号码,获取inode信息,根据incde信息,看该用户是否具有访问这个文件的权限,如果有,就指向相对应的数据block,并读取数据。
2.查看文件inode号等详细信息
查看文件inode号
[root@localhost ~]# ls -i 文件或目录
[root@localhost ~]#ls -i 1.txt
68141264 1.txt
查看文件inode号等详细信息
[root@localhost ~]# stat 文件或目录
[root@localhost ~]#stat initial-setup-ks.cfg
文件:"initial-setup-ks.cfg"
大小:2080 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:67170387 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:system_u:object_r:admin_home_t:s0
最近访问:2022-07-29 21:48:52.562988764 +0800
最近更改:2022-07-29 21:48:52.563988763 +0800
最近改动:2022-07-29 21:48:52.563988763 +0800
创建时间:-
时间属性 | 解释 |
---|---|
最近访问(atime) | 最后一次访问文件或目录的时间 |
最近更改(mtime) | 最后一次修改文件或目录(内容)的时间 |
最近改动(ctime) | 最后一次改变文件或目录(属性)的时间 |
注: 当更改文件内容时,mtime改变,ctime也会随之改变。
3.inode大小
- inode也会消耗硬盘空间,每个inode的大小,一般是128字节或256字节。
- inode的总数,在格式化时就确定。
- 查看每个硬盘分区的inode总数和已经使用的数量,可以使用 df -i 。
[root@localhost ~]# df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/mapper/centos-root 26214400 145278 26069122 1% /
devtmpfs 221158 446 220712 1% /dev
tmpfs 225137 1 225136 1% /dev/shm
tmpfs 225137 646 224491 1% /run
tmpfs 225137 16 225121 1% /sys/fs/cgroup
/dev/sda1 524288 328 523960 1% /boot
/dev/mapper/centos-home 38400000 10 38399990 1% /home
tmpfs 225137 9 225128 1% /run/user/42
tmpfs 225137 1 225136 1% /run/user/0
4.inode特点
由于 inode 号与文件名分离,导致Linux系统会有以下几种特殊现象:
- 文件名包含特殊字符,可能无法正常删除。这时直接删除inode,能够起到删除文件的作用。
[root@localhost ~]# find 文件位置 -inum inode号 -exec rm -i {} \;
或 -delete
[root@localhost ~]#ls -i abc
67170385 abc
[root@localhost ~]#find ./ -inum 67170385 -delete
- mv移动文件或重命名文件,只是改变文件名,不影响inode号。
[root@localhost ~]#ls -i 1.txt
68141264 1.txt
[root@localhost ~]#mv 1.txt file1
[root@localhost ~]#ls -i file1
68141264 file1
- vim修改文件后,inode号会改变(这是由于vim编辑器是编辑原文件.swap,修改完成后替换原文件)
[root@localhost ~]#ls -i file1
68141264 file1
[root@localhost ~]#vim file1
[root@localhost ~]#ls -i file1
68141260 file1
二、恢复误删文件
1.恢复xfs文件系统的文件
CentOS 7系统默认采用 xfs类型的文件,xfs 类型的文件可使用 xfsdump 与 xfsrestore 工具进行备份恢复。
xfsdump的备份级别有两种:0表示完全备份;1-9表示增量备份。默认备份级别为0。
备份xfs类型文件
[root@localhost ~]# xfsdump -f 备份存放的位置 需要备份的文件或设备路径
-L //指定标签session label
-M //指定设备标签
上面两个选项如果不指定,会进入交互界面指定
-s //备份单个文件,后面不能直接跟路径
恢复备份文件
[root@localhost ~]# xfsrestore -f 备份存放的位置 恢复到的路径
xfsdump使用限制:
- 只能备份已挂载的文件系统
- 必须使用root的权限才能操作
- 只能备份XFS文件系统
- 备份后的数据只能让xfsrestore解析
- 不能备份两个具有相同UUID的文件系统(可用 blkid命令查看)
//挂载分区sdb1到/data(没有分区需要创建)
[root@localhost ~]#mkdir /data
[root@localhost ~]#mount /dev/sdb1 /data
//在挂载目录data下存一些文件(实际存放在sdb1分区)
[root@localhost ~]#cd /data
[root@localhost data]#cp /etc/passwd ./
[root@localhost data]#mkdir test
[root@localhost data]#touch test/a
[root@localhost data]#ls
passwd test
//下载xfsdump
[root@localhost data]#yum install -y xfsdump
//备份sdb1里的文件到/opt/dump,标签为dump_sdb1,设备标签为sdb1
[root@localhost data]#xfsdump -f /opt/dump /dev/sdb1 -L dump_sdb1 -M sbd1
xfsdump: Dump Status: SUCCESS
//模拟误删挂载目录里的文件
[root@localhost data]#rm -rf *
[root@localhost data]#ls
//使用xfsrestore将备份文件/opt/dump恢复到挂载目录
[root@localhost data]#xfsrestore -f /opt/dump /data/
xfsrestore: Restore Status: SUCCESS
//恢复成功
[root@localhost data]#ls
passwd test
2.恢复ext文件系统的文件
extundelete 是一个开源的 Linux 数据恢复工具,支持 ext3、ext4文件系统。(ext4只能在centos6版本恢复)
//建立sdc1分区
[root@localhost data]#fdisk /dev/sdc
//建立ext3文件系统
[root@localhost data]#mkfs.ext3 /dev/sdc1
//建立/test并挂载sdc1分区
[root@localhost data]#mkdir /test
[root@localhost data]#mount /dev/sdc1 /test
[root@localhost data]#df -Th
/dev/sdc1 ext3 4.8G 11M 4.6G 1% /test
//安装依赖环境
[root@localhost data]#yum -y install e2fsprogs-devel e2fsprogs-libs
//源码编译安装extundelete
[root@localhost test]#tar jxvf '//tmp/VMwareDnD/xZ45n3/extundelete-0.2.4.tar.bz2'
[root@localhost test]#ls
extundelete-0.2.4 lost+found
[root@localhost test]#cd extundelete-0.2.4/
[root@localhost extundelete-0.2.4]#./configure --prefix=/usr/local/extundelete &&make && make install
//软连接到/usr/bin/使其成为系统能识别的命令
[root@localhost extundelete-0.2.4]#ln -s /usr/local/extundelete/bin/* /usr/bin/
//新建一些文件
[root@localhost extundelete-0.2.4]#cd /test
[root@localhost test]#echo a > 1.txt
[root@localhost test]#echo a > 2.txt
[root@localhost test]#ls
1.txt 2.txt extundelete-0.2.4 lost+found
//查看文件系统/dev/sdc1下存在哪些文件,i 节点是从2开始的,2代表该文件系统最开始的目录
[root@localhost test]#extundelete /dev/sdc1 --inode 2
File name | Inode number | Deleted status
. 2
.. 2
lost+found 11
extundelete-0.2.4 98305
1.txt 12
2.txt 13
//模拟误删文件
[root@localhost test]#rm -rf 1.txt 2.txt
//此时再查看文件后显示Deleted
[root@localhost test]#extundelete /dev/sdc1 --inode 2
File name | Inode number | Deleted status
. 2
.. 2
lost+found 11
extundelete-0.2.4 98305
1.txt 12 Deleted
2.txt 13 Deleted
//恢复数据前必须解挂载
[root@localhost ~]#umount /test
//恢复数据
[root@localhost ~]#extundelete /dev/sdc1 --restore-all
//恢复的文件数据会放在当前目录下的RECOVERED_FILES
[root@localhost ~]#ls
anaconda-ks.cfg initial-setup-ks.cfg 公共 视频 文档 音乐
file1 RECOVERED_FILES 模板 图片 下载 桌面
[root@localhost ~]#ls RECOVERED_FILES/
1.txt 2.txt
三、分析日志文件
内核及系统日志由系统服务 rsyslog 统一管理,主配置文件为/etc/rsyslog.conf
Linux 操作系统本身和大部分服务器程序的日志文件都默认放在目录/var/log/下
1. 日志文件的分类
分类 | 记录信息 |
---|---|
内核及系统日志 | 这种日志数据由系统服务rsyslog统一管理,根据其主配置文件/etc/rsyslog.conf中的设置决定将内核消息及各种系统程序消息记录到什么位置。 |
用户日志 | 这种日志数据用于记录Linux系统用户登录及退出系统的相关信息,包括用户名、登 录的终端、登录时间、来源主机、正在使用的进程操作等。 |
程序日志 | 有些应用程序会选择由自己独立管理一份日志文件(而不是交给rsyslog服务管理),用于记录本程序运行过程中的各种事件信息。 |
2.常见的一些日志文件
分类 | 目录位置 | 记录信息 |
---|---|---|
内核及公共消息日志 | /var/log/messages | 记录Linux内核消息及各种应用程序的公共日志信息,包括启动、IO错误、网络错误、程序故障等。对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的事件记录信息。 |
计划任务日志 | /var/log/cron | 记录crond计划任务产生的事件信息。 |
系统引导日志 | /var/log/dmesg | 记录Linux系统在引导过程中的各种事件信息。 |
邮件系统日志 | /var/log/maillog | 记录进入或发出系统的电子邮件活动。 |
用户登录日志 | /var/log/secure | 记录用户认证相关的安全事件信息。 |
/var/log/lastlog | 记录每个用户最近的登录事件(二进制格式)。 | |
/var/log/wtmp | 记录每个用户登录、注销及系统启动和停机事件(二进制格式)。 | |
/var/run/btmp | 记录失败的、错误的登录尝试及验证事件(二进制格式)。 |
3.内核及系统日志配置文件
[root@localhost ~]# cat /etc/rsyslog.conf //查看/etc/rsyslog.conf配置文件
规则配置格式:设备.级别 动作
#### RULES ####
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
# Log cron stuff
cron.* /var/log/cron
# Everybody gets emergency messages
*.emerg :omusrmsg:*
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log
解读:
*.info;mail.none;authpriv.none;cron.none /var/log/messages
*.info 表示info等级及以上的所有等级信息都写入到对应的日志文件里。
mail.none 表示某事件的信息不写到日志文件里
Linux系统内核日志消息的优先级别(数字等级越小,优先级越高,消息越重要)
级别 | 显示 | 含义 | 具体描述 |
---|---|---|---|
0 | emerg | 紧急 | 会导致主机系统不可用的情况 |
1 | alter | 警告 | 必须马上采取措施解决的问题 |
2 | crit | 严重 | 比较严重的情况 |
3 | err | 错误 | 运行出现错误 |
4 | warning | 提醒 | 可能影响系统功能,需要提醒用户的重要事件 |
5 | notice | 注意 | 下会影响正常功能,但是需要注意的事件 |
6 | info | 信息 | 一般信息 |
7 | debug | 调试 | 程序或系统调试信息等 |
设备字段
设备名 | 解释 |
---|---|
auth | 用户认证时产生的日志 |
authpriv | ssh、ftp等登录信息的验证信息 |
daemon | 一些守护进程产生的日志 |
ftp | FTP产生的日志 |
lpr | 打印相关活动 |
mark | rsyslog服务内部的信息,时间标识 |
news | 网络新闻传输协议(nntp)产生的消息 |
syslog | 系统日志 |
uucp | Unix-to-Unix Copy 两个unix之间的相关通信 |
console | 针对系统控制台的消息 |
cron | 系统执行定时任务产生的日志 |
kern | 系统内核日志 |
local0~local7 | 自定义程序使用 |
邮件日志 | |
user | 用户进程 |
举例:
mail.=info /var/log/maillog :明确指定日志级别为info,保存至/var/log/maillog
mail.!info /var/log/maillog :除了指定的日志级别(info)所有日志级别信息,保存至/var/log/maillog
*.info /var/log/maillog :所有设备的info级别,保存至/var/log/maillog
mail.* /var/log/maillog :mail的所有日志级别信息,都保存至/var/log/maillog
mail.notice;news.info /var/log/maillog :mail的notice以上日志级别和news的info以上的级别保存至/var/log/maillog
mail,news.crit -/var/log/maillog :mail和news的crit以上的日志级别保存/var/log/maillog中;“-”代表异步模式
4.用户日志分析
在wtmp、btmp、 lastlog等日志文件中 ,保存了系统用户登录、 退出等相关的事件消息。 但是这些文件都是二进制的数据文件,不能直接使用tail、less等文本查看工具进行浏览,需要使用who、w、users、 last和lastb等用户查询命令来获取日志信息。
查询当前登录的用户情况——users,who,w
[zhangsan@localhost ~]$ users
root root root
[zhangsan@localhost ~]$ who
root pts/0 2022-08-10 08:58 (192.168.116.1)
root :0 2022-08-10 16:34 (:0)
root pts/1 2022-08-10 16:34 (:0)
[zhangsan@localhost ~]$ w
18:53:30 up 10:01, 3 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.116.1 08:58 2.00s 0.52s 0.00s w
root :0 :0 16:34 ?xdm? 1:55 0.12s /usr/libexec/gno
root pts/1 :0 16:34 2:01m 0.03s 0.03s bash
查询用户登录的历史记录——last,lastb
这两个命令的日志在/var/log/secure
[root@localhost zhangsan]# last //查看登录成功的日志
lastb //查看登录失败的日志
[root@localhost zhangsan]#last
root pts/1 :0 Wed Aug 10 16:34 still logged in
root :0 :0 Wed Aug 10 16:34 still logged in
root pts/0 192.168.116.1 Wed Aug 10 08:58 still logged in
reboot system boot 3.10.0-1160.el7. Wed Aug 10 08:52 - 18:57 (10:05)
root pts/1 :0 Tue Aug 9 16:53 - crash (15:58)
root pts/0 :0 Tue Aug 9 16:51 - crash (16:00)
[root@localhost zhangsan]#lastb
root tty4 Tue Aug 9 16:54 - 16:54 (00:00)
btmp begins Tue Aug 9 16:54:35 2022
5.程序日志分析
程序日志由相应的应用程序独立进行管理
Web服务:/var/log/httpd/
- access_log ——记录客户访问事件
- error_log ——记录错误事件
代理服务:/var/log/squid/
- access.log、cache.log
分析工具
- 文本查看、grep过来检索、Webmin管理套件中查看
- awk、sed等文本过滤、格式化编辑工具
- Webalizer、Awstats等专用日志分析工具
6.日志管理
- 及时做好备份和归档
- 延长日志保存期限
- 控制日志访问权限
- 集中管理日志(rsyslog、Shell/Python 脚本文件;ELK)