linux 文件系统与日志分析

一 indoe 表结构

每个inode都有一个号码,操作系统用inode号码来识别不同的文件,Linux系统内部不使用文件名

而使用inode号码来识别文件

表面上用户通过文件名来打开文件;实际上在系统内部这个过程分成三步

1 系统找到这个文件对应的inode号码

2 通过inode 号码,获得inode信息

3 根据inode信息,找到文件数据所在的block,读出数据

inode是有限的资源,他的多少与磁盘有关

ls -i   

可以直接查看文件对应的inode

stat 

通过查看文件inode信息而看到inode号码

df  -i  

查看每个硬盘分区的inode总数和已经使用的数量

二 Linux有3个时间属性:

最近访问atime:最后一次查看文件

最近更改mtime:最近更改文件内容的时间,注意:更改完内容之后,ctime也会改变

最近改动ctime:最近更改文件元信息的时间,比如改变权限等

 1 若访问一下,最近更改时间就会变化

2 修改文件属性改动时间就会变化

 软/硬连接

最大区别:硬 inode号与原文件相同;  软 不同

三   文件恢复 - extundelete

[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

包含文件元信息,不包含文件名;该工具恢复误删除文件

  • 文件的字节数
  • 文件拥有者的userID
  • 文件的groupID
  • 文件的读写、执行权限
  • 文件的时间戳

① 下载安装包

② 安装数据包 

  

③ 解压软件

④ 切换到目录下

⑤ 编译安装

 ⑦ 查看extundel 软件

# ls  /usr/local/bin/

⑧ 查看新建磁盘  格式化

 ⑨ 新建文件夹  挂载

⑩ 模拟删除并恢复

 

四  xfs类型备份和恢复

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

使用xfsdump  xfsrestore 工具进行备份

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

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

五 日志

内核及系统日志由系统服务 rsyslog 统一管理,根据其主配置文件 /etc/rsyslog.conf

Linux 操作系统本身和大部分服务器程序的日志文件都默认放在目录/var/log/下

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

1 日志文件的格式

  • 事件产生的时间。

  • 产生事件的服务器的主机名。

  • 产生事件的服务名或程序名。

  • 事件的具体信息。

[root@localhost ~]# vim /var/log/secure   #可以对比格式

2 内核和公共日志

日志的配置文件 在     /etc/rsyslog.conf             (找不着可以往下拉)

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

 3 信息的优先级别重要程度

在 Linux 内核中,根据日志消息的重要程度不同,将其分为不同 的优先级别(数字等级越小,优先级越高,消息越重要)。

0 EMERG(紧急):会导致主机系统不可用的情况。

1 ALERT (警告):必须马上采取措施解决的问题。

2 CRIT    (严重):比较严重的情况。

3 ERR    (错误):运行出现错误。

4 WARNING(提醒):可能影响系统功能,需要提醒用户的重要事件。

5 NOTICE(注意):不会影响正常功能,但是需要注意的事件。

6 INFO  (信息):一般信息。

7 DEBUG(调试):程序或系统调试信息等

4 内核和公共消息日志存储位置

内核及大多数系统消息被记录到公共日志文件/var/log/messages 中,而其他一些程序

消息被记录到各自独立的日志文件中,此外日志消息还能够记录到特定的存储设备中,或者

直接发送给指定用户。

其中每一行表示一条日志消息,每一条消息均包括以下四个字段。

  • 时间标签:消息发出的日期和时间。

  • 主机名:生成消息的计算机的名称。

  • 子系统名称:发出消息的应用程序的名称。

  • 消息:消息的具体内容。

5 用户日志

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

但是这些文件都是二进制的数据文件,不能直接使用 tail、less 等文本查看工具进行浏览,

 who、w、users、last 和 lastb 等用户查询命令来获取日志信息

wtmp         last查询

btmp         lastab查询

lastlog       last查询

6 查询当前登录的用户情况,逐次详细

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

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

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

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

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

[root@localhost ~]# lastb
 
btmp begins Mon Jan  8 11:27:43 2024

五 系统日志介绍

由系统服务rsyslog统一管理

  • 软件包:rsyslog-7.4.7-16.el7.x86_64
  • 主要程序:/sbin/rsyslogd
  • 配置文件:/etc/rsyslog.conf
[root@localhost ~]#vim /etc/rsyslog.conf
#查看rsyslog.conf 配置文件
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
#表示所有info等级以上的所有等级的信息都写到对应的日志文件里
mail.none
#表示某事件的信息不写到日志文件里(这里比如是邮件)

1 日志内容

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

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

2 rsysklogd 系统日志服务工具

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

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

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

非关系型分布式数据库基于apache软件基金会jakarta项目组的项目lucene

Elasticsearch是个开源分布式搜索引擎,可以处理大规模日志数据,比如:Nginx、Tomcat、系统日志等功能

Logstash对日志进行收集、分析,过滤,并将其存储供以后使用

Kibana 可以提供的日志分析友好的 Web 界面

3 rsyslog 系统日志服务

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

rsyslog最初是常规的syslogd,但发展成为一种瑞士军刀式的记录工具,能够接受来自各种来源的输

入,并将其转换,然后输出到不同的目的地。

当应用有限的处理时,RSYSLOG每秒可以将超过一百万的消息传递到本地目的地。即使在远程的

目的地和更精细的处理中,性能通常也被认为是惊人的”。

4 rsyslog 特性

  • 多线程

  • UDP, TCP, SSL, TLS, RELP

  • MySQL, PGSQL, Oracle实现日志存储

  • 强大的过滤器,可实现过滤记录日志信息中任意部分

  • 自定义输出格式 可以日志

  • 适用于企业级

5 系统日志术语

①日志等级

等级名称说 明
debug (LOG_DEBUG)一般的调试信息说明
info (LOG_INFO)基本的通知信息
notice (LOG_NOTICE)普通信息,但是有一定的重要性
warning(LOG_WARNING)警吿信息,但是还不会影响到服务或系统的运行
error(LOG_ERR)错误信息, 一般达到err等级的信息已经可以影响到服务成系统的运行了
crit (LOG_CRIT)临界状况信思,比err等级还要严®
alert (LOG_ALERT)状态信息,比crit等级还要严重,必须立即采取行动
emerg (LOG_EMERG)疼痛等级信息,系统已经无法使用了
*代表所有日志等级。比如,“authpriv.*”代表amhpriv认证信息服务产生的日志,所有的日志等级都记录

②服务名称

服务名称说 明
auth(LOG AUTH)安全和认证相关消息 (不推荐使用authpriv替代)
authpriv(LOG_AUTHPRIV)安全和认证相关消息(私有的)
cron (LOG_CRON)系统定时任务cront和at产生的日志
daemon (LOG_DAEMON)与各个守护进程相关的曰志
ftp (LOG_FTP)ftp守护进程产生的曰志
kern(LOG_KERN)内核产生的曰志(不是用户进程产生的)
Iocal0-local7 (LOG_LOCAL0-7)为本地使用预留的服务
lpr (LOG_LPR)打印产生的日志
mail (LOG_MAIL)邮件收发信息
news (LOG_NEWS)与新闻服务器相关的日志
syslog (LOG_SYSLOG)存syslogd服务产生的曰志信息(虽然服务名称己经改为reyslogd,但是很多配罝依然沿用了 syslogd服务的,所以这里并没有修改服务名称)
user (LOG_USER)用户等级类别的日志信息
uucp (LOG_UUCP>uucp子系统的日志信息,uucp是早期Linux系统进行数据传递的协议,后来 也常用在新闻组服务中

6 logrotate :日志存储 

[root@localhost ~]# cat /etc/logrotate.conf 

六 实操 :将ssh服务日志单独存在

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

1  进入rsyslog配置文件,添加自己的文件位置

  # vim /etc/rsyslog.conf

2 进入ssh配置文件,将ssh配置成使用local6

# vim /etc/ssh/sshd_config

3 重启服务,并查看本机日志

#systemctl restart rsyslog.service sshd 

4 在同一台虚拟机查看日志,每次看新日志都要再restart sshd rsyslog.service

 5 也可以另一台虚拟机登录本网址,再退出也可以看日志

[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.

#验证

七 实操: 通过网络将本地的日志远程备份到另一台机器

①关闭两台机器的防火墙与selinux

客户端与日志服务器都要关闭防火墙和临时防护
systemctl stop firewalld

setenfore  0

**************************
开启客户端和日志端服务器tcp514端口
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

②两台客户机都要这样做root@localhost ~]#vim /etc/rsyslog.conf

③与②一样

④重启rsyslog服务

root@localhost ~]#systemctl restart rsyslog
[root@localhost ~]#ss -ntap |grep 514

再配置日志主机文件@localhost ~]#vim /etc/rsyslog.conf


④ 再重启日志主机[root@localhost ~]#systemctl restart rsyslog.service 

⑤ 与此同时服务器主机也要重启[root@localhost ~]# systemctl restart rsyslog.service 

⑥ 在为客户端写进日志服务端oot@localhost ~]#logger "this is test log from 192.168.11.19”

⑦ 在服务端查看用户[root@localhost ~]# cat /var/log/messages

日志管理工具  journalctl

  # /etc/systemd/journald.conf 

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

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

[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  
                    
#显示最新的系统日志信息, 并尝试解释错误信息

journalctl  -xe  可以查看实时日志  以及日志的报错信息

2 内存信息统一由其管理

journalctl -xe --no-pager  可以查看日志详细信息

journalctl  -u  httpd  可以查看httpd的日志信息

3 内存中查看指定时间的日志

journalctl --since="2017-10-30 18:10:30"
journalctl --since "20 min ago"
journalctl --since yesterday
journalctl --since "2017-01-10" --until "2017-01-11 03:00"
journalctl --since 09:00 --until "1 hour ago"

4 如何查看8点到10点的日志文件

日志转储   logrotate

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

  • 计划任务:/etc/cron.daily/logrotate

  • 程序文件:/usr/sbin/logrotate

  • 配置文件: /etc/logrotate.conf

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
# 添加一个日期后缀

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

 

  分割日志:以httpd为例

①在/var/log/http目录下能看到两个文件,这是http服务的日志信息

因为在httpd的配置文件中规定:访问httpd服务通过的日志文件只能存放在/var/log/httpd/access_log中 

② 如果把access_log文件移动成一个新的文件,加载后又会生成新的文件

③因为在httpd的配置文件中规定:访问httpd服务通过的日志文件只能存放在/var/log/httpd/access_log中

  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值