Linux文件系统与日志分析管理

2024-01-08 19:34:44

目录

一、文件系统

1. inode表

2. 查看inode号

3. 文件目录

4.?三种时间戳

5.?删除文件空间不释放

6.?文件恢复extundelete

7.?xfs类型备份和恢复

二、日志分析

1. 日志的种类

2.?内核和公共日志

3.?用户日志

3.1?查询当前登录的用户情况

3.2?查询用户登录的历史记录

1. 日志记录的内容包括

2.?系统日志服务工具

3.?rsyslog管理

3.1 /etc/rsyslog.conf配置文件格式:由三部分组成

3.2 RULES配置格式*:所有级别

3.3 将ssh服务的日志单独设置

3.4?网络日志(远程日志功能)?

4.?日志文件

5.?日志管理工具 journalctl

6.?logrotate日志转储自动分割日志

6.1?主配置文件

6.2 程序独立的配置文件


一、文件系统

1. inode表

每个文件的属性信息,比如:文件的大小,时间,类型,权限等,称为文件的元数据(meta data元信息 )元数据是存放在inode(index node)表中。inode表中有很多条记录组成,第一条记录对应的存放了一个文件的元数据信息。

2. 查看inode号

可以使用ls -i、stat命令查看

3. 文件目录

目录是个特殊文件,目录文件的内容保存了此目录中文件的列表及inode number对应关系。文件引用一个是 inode号,是通过文件名来引用一个文件,一个目录是目录下的文件名和文件inode号之间的映射。

在Linux中使用文件的过程:

根据文件夹的文件名inode号的关系找到对应的inode表,再根据inode表中的指针找到磁盘上的真实数据。文件存储的最小单位为块8个扇区组成为4k。

4.?三种时间戳

最近访问atime:查看文件的时间
最近更改mtime:最近更改文件内容的时间,注意:更改完内容之后,ctime也会改变
最近改动ctime:最近更改文件元信息的时间,比如改变权限等

5.?删除文件空间不释放

[root@localhost ~]# cp /dev/zero /boot/bigfile    #模拟写入大文件
cp: 写入"/boot/bigfile" 出错: 设备上没有空间
cp: 扩展"/boot/bigfile" 失败: 设备上没有空间
[root@localhost opt]#lsof | grep deleted         
#列出当前系统已打开文件,但是deleted的状态,找到对应的进程kill掉
[root@localhost opt]#echo " " > /boot/bigfile     #重新写入空格至文件中

6.?文件恢复extundelete

删除一个文件,实际上并不清除inode节点和 block的数据,只是在这个文件的父目录里面的block 中,删除这个文件的名字。Linux是通过Link(硬链接)的数量来控制文件删除的,只有当一个文件不存在任何Link的时候,这个文件才会被删除。注意extundelete是一个开源的Linux数据恢复工具,支持ext3文件系统。

[root@localhost ~]#yum -y install e2fsprogs-devel e2fsprogs-libs
#安装依赖软件
[root@localhost ~]# tar -jxvf extundelete-0.2.4.tar.bz2 -C /opt
#解压软件
[root@localhost ~]# cd /opt/extundelete-0.2.4
#切换到目录下
[root@localhost ~]# yum -y install gcc gcc-c++ pcre-devel openssl-devel zlib-devel openss1 openss1-deve1
#安装编译工具
[root@localhost extundelete-0.2.4]# ./configure  
#编译安装
[root@localhost extundelete-0.2.4]#make                #翻译
[root@localhost extundelete-0.2.4]#make install        #复制  
Making install in src
  /usr/bin/install -c extundelete '/usr/local/bin'
[root@localhost extundelete-0.2.4]# cd /usr/local/bin
[root@localhost bin]# ls
extundelete
[root@localhost ~]# mkfs.ext3 /dev/sdb1                #格式化写入ext3类型,新增磁盘过程略
[root@localhost ~]# mkdir /test/ 
[root@localhost ~]# mount /dev/sdb1 /test/
[root@localhost ~]# cd /test/
[root@localhost test]# echo 123 > a;echo 456 > b
[root@localhost test]# ls 
a  b  lost+found
[root@localhost test]# rm -rf a b                      #模拟删除
[root@localhost test]# ls
lost+found
[root@localhost test]# cd 
[root@localhost ~]# umount /test/                      #解挂载
[root@localhost ~]#extundelete /dev/sdb1 --inode 2
#                  命令        查看的分区  从2节点开始
#查看该分区下的存在哪些文件,其中--inode 2代表从i节点为2的文件开始查看,一般文件系统格式化挂 
载之后,i节点是从2开始的,2代表该文件系统最开始的目录。
[root@localhost ~]# extundelete /dev/sdb1 --restore-all
#                     命令    需要恢复的分区设备    恢复选项,全都要
#使用恢复
[root@localhost ~]# ls
anaconda-ks.cfg            initial-setup-ks.cfg  公共  视频  文档  音乐
extundelete-0.2.4.tar.bz2  RECOVERED_FILES       模板  图片  下载  桌面
[root@localhost ~]# cd RECOVERED_FILES/
[root@localhost RECOVERED_FILES]# ls
a  b
[root@localhost RECOVERED_FILES]# cat a;cat b
123
456

7.?xfs类型备份和恢复

CentOS 7 系统默认采用 xfs 类型的文件。针对 xfs 文件系统目前也没有比较成熟的文件恢复工具,所以建议提前做好数据b,以避免数据丢失xfs类型的文件可使用xfsdump与xfsrestore工具进行备份恢复。

常用的备份参数包括以下几种:?

  • -f:指定备份文件目录
  • -L:指定标签 session label
  • -M:指定设备标签 media label
  • -s:备份单个文件,-s 后面不能直接跟路径

使用 xfsdump 时,需要注意以下的几个限制:

  • 不支持没有挂载的文件系统备份,所以只能备份已挂载的;
  • 必须使用 root 的权限才能操作;
  • 只能备份 XFS 文件系统;
  • 备份下来的数据只能让 xfsrestore 解析;
  • 不能备份两个具有相同 UUID 的文件系统(可使用blkid查看)。

二、日志分析

1. 日志的种类

日志文件位置日志文件说明
/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等命令查看

2.?内核和公共日志

日志的配置文件位置在/etc/rsyslog.conf

3.?用户日志

在wtmp、btmp、lastlog等日志文件中,保存了系统用户登录、退出等相关的事件消息。

wtmp:哪些用户正常登录到系统中,使用last命令可以查看

btmp:查看用户登录失败的信息,用lastab命令查看

lastlog:记录用户最后一次登录的信息,用lastlog查看

3.1?查询当前登录的用户情况

users 命令只是简单地输出当前登录的用户名称

[root@localhost ~]# users
root

who命令用于报告当前登录到系统中的每个用户的信息

[root@localhost ~]# who
root     pts/0        2024-01-08 11:36 (192.168.190.1)

w命令用于显示当前系统中的每个用户及其所运行的进程信息 ?

[root@localhost ~]# w
 15:52:55 up  4:25,  1 user,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.190.1    11:36    7.00s  0.44s  0.04s w

3.2?查询用户登录的历史记录

last命令用于查询成功登录到系统的用户记录

[root@localhost ~]# last
root     pts/0        192.168.190.1    Mon Jan  8 11:36   still logged in   
reboot   system boot  3.10.0-693.el7.x Mon Jan  8 11:27 - 15:29  (04:01)    
root     pts/1        192.168.190.1    Mon Jan  8 11:07 - down   (00:13)    
root     pts/0        :0               Sun Jan  7 02:28 - 11:21 (1+08:52)  
……

lastb 命令用于查询登录失败的用户记录,如登录的用户名错误、密码不正确等情况都将记录在案。登录失败的情况属于安全事件,因为这表示可能有人在尝试猜解你的密码。除了使用 lastb 命令查看以外,也可以直接从安全日志文件/var/log/secure 中获得相关信息。

[root@localhost ~]# lastb

btmp begins Mon Jan  8 11:27:43 2024

三、日志管理

1. 日志记录的内容包括

  • 历史事件:时间,地点,人物,事件

  • 日志级别:事件的关键性程度,Loglevel error notice info debug

2.?系统日志服务工具

sysklogd系统日志服务:CentOS 5 之前版本采用的日志管理系统服务

rsyslog 系统日志服务:syslog是CentOS 6以后版本的系统管理服务:它提供了高性能,出色的安全性和模块化设计

ELK:由Elasticsearch, Logstash, Kibana三个软件组成

3.?rsyslog管理

3.1 /etc/rsyslog.conf配置文件格式:由三部分组成

  • MODULES:相关模块配置
  • GLOBAL DIRECTIVES:全局配置
  • RULES:日志记录相关的规则配置

3.2 RULES配置格式*:所有级别

none:没有级别,即不记录
PRIORITY:指定级别(含)以上的所有级别
=PRIORITY:仅记录指定级别的日志信息

文件路径:通常在/var/log/,文件路径前的-表示异步写入
用户:将日志事件通知给指定的用户,* 表示登录的所有用户
日志服务器:@host,把日志送往至指定的远程UDP日志服务器 @@host 将日志发送到远程TCP日志服务器
管道: | COMMAND,转发给其它命令处理

3.3 将ssh服务的日志单独设置

通过rsyslog软件将sshd程序的日志,独立出来sshd软件的日志放在/var/log/secure日志中,很多其他软件放在一起,这个软件比较重要,所以要把sshd软件的日志单独存放。

① 修改rsyslog软件的配置文件

② 修改sshd

③ 重启服务

[root@localhost ~]# vim /etc/ssh/sshd_config

[root@localhost ~]# vim /etc/rsyslog.conf

[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl restart rsyslog.service sshd  #重启服务

[root@localhost ~]# tail -f /var/log/ssh.log
Jan  8 17:03:17 localhost sshd[2385]: Server listening on 0.0.0.0 port 22.
Jan  8 17:03:17 localhost sshd[2385]: Server listening on :: port 22.
Jan  8 17:08:35 localhost sshd[2435]: Accepted password for fql from 192.168.190.1 port 7692 ssh2
#验证

3.4?网络日志(远程日志功能)?

日志接收端
[root@localhost ~]# vim /etc/rsyslog.conf
[root@localhost ~]# cd /var/log/
[root@localhost ~]# tail -f messages

日志发送端
[root@localhost ~]# vim /etc/rsyslog.conf

发送端
[root@localhost ~]# logger "this is test log from 192.168.91.101"    #测试,写日志进去

接收端
[root@localhost log]# tail -1 messages
Jan  8 17:48:03 localhost root: this is test log from 192.168.91.101

4.?日志文件

  • /var/log/secure:系统安全日志,文本格式,应周期性分析
  • /var/log/btmp:当前系统上,用户的失败尝试登录相关的日志信息,二进制格式,lastb命令进行查看
  • /var/log/wtmp:当前系统上,用户正常登录系统的相关日志信息,二进制格式,last命令可以查看
  • /var/log/lastlog:每一个用户最近一次的登录信息,二进制格式,lastlog命令可以查看
  • /var/log/dmesg:CentOS7 之前版本系统引导过程中的日志信息,文本格式,开机后的硬件变化将不再记录专用命令dmesg查看,可持续记录硬件变化的情况
  • /var/log/boot.log 系统服务启动的相关信息,文本格式
  • /var/log/messages :系统中大部分的信息
  • /var/log/anaconda : anaconda的日志操作系统安装时安装的软件信息
[root@localhost ~]# lastlog  #最后一次登录

5.?日志管理工具 journalctl

CentOS 7以后版本,利用Systemd统一管理所有Unit的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。

模拟程序服务无法启动查看日志:

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf         #修改配置文件
[root@localhost ~]# systemctl restart httpd.service
Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.
[root@localhost ~]# journalctl -xe                      
#显示最新的系统日志信息, 并尝试解释错误信息

?

6.?logrotate日志转储自动分割日志

logrotate程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,称为日志转储或滚动。可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过cron程序来执行。

相关文件

  • 计划任务:/etc/cron.daily/logrotate
  • 程序文件:/usr/sbin/logrotate
  • 配置文件: /etc/logrotate.conf
  • 日志文件:/var/lib/logrotate/logrotate.status

6.1?主配置文件

[root@localhost ~]# vim /etc/logrotate.conf 
# see "man logrotate" for details
# rotate log files weekly
weekly 
#一周生成一个新的日志文件

# keep 4 weeks worth of backlogs
rotate 4
#只保留最近的4个文件

# use date as a suffix of the rotated file
dateext
# 添加一个日期后缀

6.2 程序独立的配置文件

[root@localhost ~]# cd /etc/logrotate.d/
[root@localhost logrotate.d]# cat httpd
/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
        /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
    endscript        #重新加载配置文件,即重新生成日志文件
}
[root@localhost logrotate.d]# cd /var/log/httpd/
[root@localhost httpd]# ls
access_log  error_log
[root@localhost httpd]# mv access_log access_log_2024_1_8
[root@localhost httpd]# ls
access_log_2024_1_8  error_log
[root@localhost httpd]# systemctl restart httpd
[root@localhost httpd]# ls
access_log  access_log_2024_1_8  error_log

?

文章来源:https://blog.csdn.net/qq_64612585/article/details/135455498
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。