Linux文件系统与日志分析
Linux文件系统与日志分析
日志是解决问题的唯一手段
1.inode表结构
1.1 元数据
元数据(元信息)是存放在inode表中
- 文件数据包括元信息和实际数据
- 文件存储在硬盘上,硬盘最小存储单位是“扇区”,每个扇区存储512字节
- block(块)
- 连续的八个扇区组成一个block
- 是文件存取的最小单位
- inode(索引节点)
- 索引节点也叫i节点
- 用于存储文件元信息
1.2 inode内容
一个文件必须占用一个inode,但至少占用一个block
查看某个文件的inode信息
stat [文件名]
如:stat aa.txt
每个文件都必须占用一个inode,inode表会占用文件系统磁盘空间的1%,有时inode已经用光,但硬盘还未存满,所以无法在硬盘上创建新文件。
有空间,但无法创建,原因有:
1.inode号用完
2.磁盘有坏道,badblocks查看,fsck修复
1.3 inode内容
- Linux系统文件三个主要的时间属性
- ctime(change time)
- 最后一次改变文件或目录(属性)的时间
- atime(access time)
- 最后一次访问文件或目录的时间
- mtime(modify time)
- 最后一次修改文件或目录(内容)的时间
- ctime(change time)
1.4 目录文件的结构
-
目录也是一种文件
-
每个inode都有一个号码,操作系统用inode号码来识别不同的文件
-
Linux系统内部不使用文件名,而使用inode号码来识别文件
-
文件名便于用户识别,文件名是inode号的别称
1.5 inode的号码
- 用户通过文件名打开文件时,系统内部的过程
- 系统找到这个文件名对应的inode号码
- 通过inode号码,获取inode信息
- 根据inode信息,找到文件数据所在的block,读出数据
- 查看inode号码的方法
- ls -i命令:查看文件名对应的inode号码
- ls -i 文件名
- stat命令:查看文件inode信息中的inode号码
- stat 文件名
- ls -i命令:查看文件名对应的inode号码
1.6 恢复XFS类型的文件
- xfsdump命令格式
- xfsdump -f 备份存放位置,要备份的路径或设备文件
- xfsdump备份级别(默认0)
- 0:完全备份
- 1-9:增量备份
- xfsdump常用选项:-f、-L、-M、-s
- xfsrestore命令格式
- xfsrestore -f 恢复文件的位置 存放恢复后文件的位置
- 模拟删除并执行恢复操作
xfsdump使用限制
- 只能备份已挂载的文件系统
- 必须使用root的权限才能操作
- 只能备份XFS文件系统
- 备份后的数据只能让xfsrestore解析
- 不能备份两个具有相同UUID的文件系统
2. 日志服务管理
2.1 系统日志介绍
日志记录的内容包括
- 历史事件:时间、地点、人物、事件
- 日志级别:事件的关键性程序,Loglevel
日志等级
等级名称 | 说明 |
---|---|
error(LOG_ERR) | 错误信息,一般达到err等级的信息已经可以影响到服务或系统的运行了 |
info(LOG_INFO) | 基本的通知信息 |
warning(LOG_WARNING) | 警告信息,但是还不会影响到服务或系统的运行 |
2.2 rsyslog系统日志服务
收集、管理、记录日志
性能强
rsyslog 特性
- 多线程
- UDP, TCP, SSL, TLS, RELP
- MySQL, PGSQL, Oracle实现日志存储
- 强大的过滤器,可实现过滤记录日志信息中任意部分
- 自定义输出格式 可以日志
- 适用于企业级
2.3 rsyslog日志管理
可以自定义日志文件的位置
该软件要支持rsyslog
日志管理策略
- 及时作好备份和归档
- 延长日志保存期限
- 控制日志访问权限
- 日志中可能会包含各类敏感信息,如账户、口令等
- 集中管理日志
- 将服务器的日志文件发到统一的日志文件服务器
- 便于日志信息的统一收集、整理和分析
- 杜绝日志信息的意外丢失、恶意篡改和删除
2.3.1 系统日志术语
- facility 设施,从功能或程序上对日志进行归类
- Priority 级别,从低到高排序
日志消息的级别
级号 | 消息 | 级别 | 说明 |
---|---|---|---|
0 | EMERG | 紧急 | 会导致主机系统不可用的情况 |
1 | ALERT | 警告 | 必须马上采取措施解决的问题 |
2 | CRIT | 严重 | 比较严重的情况 |
3 | ERR | 错误 | 运行出现错误 |
4 | WARNING | 提醒 | 可能会影响系统功能的事件 |
5 | NOTICE | 注意 | 不会影响系统但值得注意 |
6 | INFO | 信息 | 一般信息 |
2.4 日志文件
一个程序报错
systemctl status 程序名 #程序日志
-
日志的功能
- 用于记录系统、程序运行中发生的各种事件
- 通过阅读日志,有助于诊断和解决系统故障
-
日志文件的分类
-
内核及系统日志
- 由系统服务rsyslog统一进行管理,日志格式基本相似
-
用户日志
- 记录系统用户登录及退出系统的相关信息
-
程序日志
- 由各种应用程序独立管理的日志文件,记录格式不统一
-
-
日志保存位置
- 默认位于:/var/log目录下
2.5 last命令
last #最后一次成功登录
lastb #登录失败
lastlog #查看所有用户最后一次登录
-u:查看指定用户
-t:表示几天之内的
lastlog -u root
lastlog -t 30(30天)
2.6 日志管理工具 journalctl
[root@localhost ~]#journalctl -xe
[root@localhost ~]yum install epel-release.noarch -y
[root@localhost ~]yum install nginx -y
2.7 查询当前用户登录情况
[root@localhost ~]#users
#users 命令简单地输出当前登录的用户名称,每个显示的用户名对应一个登录会话。 如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数。
[root@localhost ~]#who
#who命令用于报告当前登录到系统中的每个用户的信息。使用该命令,系统管理员可以查看当前系统存在哪些不合法用户,从而对其进行审计和处理。who 的默认输出包括用户名、终端类型、登录日期及远程主机。
#who 命令只能显示当前登录的用户信息,无法知晓每个用户正在执行的命令
[root@localhost ~]#w
#w 命令用于显示当前系统中的每个用户及其所运行的进程信息,比 users、who 命令的 输出内容要丰富一些。
#w 命令查询已登录到主机的用户信息
[root@localhost ~]#whoami
#查看当前登录用户信息
问题 找几点到几点之间的日志
#查看指定时间的日志
[root@localhost ~]#journalctl --since "2023-07-30" --until 2023-07-31 13:00"" -u nginx
3. 日志实际操作
3.1 将ssh服务的日志单独设置
[root@localhost ~]#tail -f /var/log/secure
#查看ssh服务的日志位置
[root@localhost ~]#vim /etc/ssh/sshd_config
#进入配置文件
修改第32行
保存退出
[root@localhost ~]#vim /etc/rsyslog.conf
#进入另一个配置文件
注释第57行
第74行添加自己的文件位置
[root@localhost ~]#systemctl restart rsyslog.service sshd
#重启服务
[root@localhost ~]#ssh 192.168.8.100
#启动ssh服务
[root@localhost ~]#tail -f /var/log/ssh.log
#查看ssh日志
3.2 网络日志(远程日志功能)
3.2.1 在192.168.8.100上开启日志的远程传输功能
[root@localhost ~]#vim /etc/rsyslog.conf
#vim进入配置文件
19、20行取消注释
[root@localhost ~]#ss -ntap | grep 514
#查看514端口是否打开
3.2.2 在192.168.8.101上设置发送到哪台主机去
[root@localhost ~]#vim /etc/rsyslog.conf
#vim进入配置文件
修改配置文件,将第54行复制到第55行,并将IP地址改为自己的IP地址
[root@localhost ~]#systemctl restart rsyslog.service
#重启服务
[root@localhost ~]#logger “this is test log from 192.168.8.101”
#测试日志
[root@localhost ~]#tail -f /var/log/messages
#在192.168.8.100上查看日志