深入理解Linux文件系统与日志分析

文章介绍了Linux文件系统中的inode概念,包括inode包含的元信息、如何查看inode信息以及inode在文件存储中的作用。此外,还详细讨论了日志文件的功能、分类、管理和分析,特别提到了rsyslog服务在系统日志管理中的角色。
摘要由CSDN通过智能技术生成


inode和block概述

文件数据包括元信息与实际数据
文件存储在硬盘上,硬盘最小存储单位是“扇区”,每个扇区存储512字节
block (块)

  • 连续的八个扇区组成一个 block(4K)
  • 是文件存取的最小单位

inode (索引节点)

  • 中文译名为“索引节点”,也叫i节点
  • 用于存储文件元信息

inode包含文件的元信息

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

用stat命令可以查看某个文件的inode信息

示例: stat aa.txt

stat /etc/passwd
  文件:"/etc/passwd"
  大小:2393      	块:8          IO 块:4096   普通文件
设备:fd00h/64768d	Inode:67200784    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:system_u:object_r:passwd_file_t:s0
最近访问:2023-04-16 11:42:05.010000148 +0800
最近更改:2023-04-13 16:18:59.475504675 +0800
最近改动:2023-04-13 16:18:59.478504700 +0800
创建时间:-

Linux系统文件三个主要的时间属性

  • ctime(change time)
    • 最后一次改变文件或目录 (属性)的时间
  • atime(access time)
    • 最后一次访问文件或目录的时间
  • mtime(modify time)
    • 最后一次修改文件或目录 (内容)的时间

目录文件的结构

  • 目录也是一种文件
  • 目录文件的结构
    在这里插入图片描述

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

Linux系统内部不使用文件名,而使用inode号码来识
别文件

对于用户,文件名只是inode号码便于识别的别称

inode的号码

  • 用户通过文件名打开文件时,系统内部的过程

      1. 系统找到这个文件名对应的inode号码
      1. 通过inode号码,获取inode信息
      1. 根据inode信息,找到文件数据所在的block,读出数据
  • 查看inode号码的方法

    • ls -i命令: 查看文件名对应的inode号码

    ls -i aa.txt

    • stat命令: 查看文件inode信息中的inode号码

    stat aa.txt

文件存储

  • 硬盘分区后的结构
    在这里插入图片描述
  • 访问文件的简单流程
    在这里插入图片描述

inode的大小

  • inode也会消耗硬盘空间
    • 每个inode的大小
    • 一般是128字节或256字节
  • 格式化文件系统时确定inode的总数
  • 使用df-i命今可以查看每个硬盘分区的inode总数和已经使用的数量
[root@localhost ~]#  df -i
文件系统                   Inode 已用(I)  可用(I) 已用(I)% 挂载点
devtmpfs                  499015     426   498589       1% /dev
tmpfs                     503270       1   503269       1% /dev/shm
tmpfs                     503270    1517   501753       1% /run
tmpfs                     503270      16   503254       1% /sys/fs/cgroup
/dev/mapper/centos-root 19417088  161085 19256003       1% /
/dev/sda1                 524288     340   523948       1% /boot
/dev/mapper/centos-home  9480192     188  9480004       1% /home
tmpfs                     503270      20   503250       1% /run/user/0
/dev/sr0                       0       0        0        - /run/media/root/CentOS 7 x86_64

inode的特殊作用

  • 由于inode号码与文件名分离,导致一些Unix/Linux系统具有以下的现象
    • 当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件
    • 移动或重命名文件时,只改变文件名,不影响inode号码
    • 打开一个文件后,系统通过inode号码来识别该文件,不再考虑文件名

日志文件

日志的功能

  • 用于记录系统、程序运行中发生的各种事件
  • 通过阅读日志,有助于诊断和解决系统故障

日志文件的分类

  • 内核及系统日志

    • 由系统服务rsyslog统一进行管理,日志格式基本相似
    • 主配置文件/etc/rsyslog.conf
  • 用户日志

    • 记录系统用户登录及退出系统的相关信息
  • 程序日志

    • 由各种应用程序独立管理的日志文件,记录格式不统一
  • 日志保存位置

    • 默认位于: /var/log目录下
  • 主要日志文件介绍

内核及公共消息日志       /var/log/messages
计划任务日志            /var/log/cron
系统引导日志            /var/log/dmesg
邮件系统日志            /var/log/maillog
用户登录日志            /var/log/lastlog
                      /var/log/secure
                      /var/log/wtmp
                      /var/run/btmp

内核及系统日志

  • 由系统服务rsyslog统一管理

    • 软件包: rsyslog-7.4.7-16.el7.x86 64
    • 主要程序: /sbin/rsyslogd
    • 配置文件: /etc/rsyslog.conf
  • 日志消息的级别
    在这里插入图片描述

  • 日志记录的一般格式

[root@localhost ~]# more /var/log/messages
Apr 16 12:22:01 localhost rsyslogd: [origin software="rsyslogd" swVersion="8.24.0-55.el7" x-pid="1
300" x-info="http://www.rsyslog.com"] rsyslogd was HUPed
Apr 16 12:30:02 localhost systemd: Started Session 7 of user root.
Apr 16 12:40:01 localhost systemd: Started Session 8 of user root.
Apr 16 12:50:01 localhost systemd: Started Session 9 of user root.
Apr 16 17:17:19 localhost journal: Runtime journal is using 8.0M (max allowed 196.5M, trying to le
ave 294.8M free of 1.9G available → current limit 196.5M).
Apr 16 17:17:19 localhost kernel: Initializing cgroup subsys cpuset
Apr 16 17:17:19 localhost kernel: Initializing cgroup subsys cpu
Apr 16 17:17:19 localhost kernel: Initializing cgroup subsys cpuacct

在这里插入图片描述
设备字段说明:
在这里插入图片描述

程序日志分析

  • 由相应的应用程序独立进行管理
    • Web服务: /var/log/httpd/
      • access log                 //记录客户访问事件
      • error_log                   //记录错误事件
    • 代理服务: /var/log/squid/
      • access.log、cache.log
    • 分析工具
    • 文本查看、grep过滤检索、Webmin管理套件中查看
    • awk、sed等文本过滤、格式化编辑工具
    • Webalizer、Awstats等专用日志分析工具

日志管理策略

  • 及时作好备份和归档
  • 延长日志保存期限
  • 控制日志访问权限
    • 日志中可能会包含各类敏感信息,如账户、口令等
  • 集中管理日志
    • 将服务器的日志文件发到统一的日志文件服务器
    • 便于日志信息的统一收集、整理和分析
    • 杜绝日志信息的意外丢失、恶意篡改或删除

远程收集日志

配置日志服务器收集日志
rsyslog是一个 C/S 架构,可以通过套接字来进行监听记录工作,可以基于TCP和UDP工作,默认的监听端口是514,只需要在MODULES 打开即可。

模拟远程收集日志
发送服务器:客户端 192.168.80.20
收集服务器:服务端 192.168.80.30

//关闭服务端和客户端防火墙、selinux
setenforce 0
systemctl stop firewalld
systemctl disable firewalld

//修改客户端配置文件,并启动服务
vim /etc/rsyslog.conf
####MODULES ####
#将下面四行前的注释取消掉
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514

####RULES ####
#添加下列内容
$template myFormat, “%timestamp% %hostname% %syslogseverity-text% %syslogtag% %msg%\n”
$ActionFileDefaultTemplate myFormat
*.info;mail.none;authpriv.none;cron.none @@192.168.80.30:514

#%timestamp% :时间戳
#%fromhost-ip% :接收的信息来自于哪个节点的 IP
#%hostname% :主机名
#%syslogseverity-text% :日志等级
#%syslogtag% :服务进程
#%msg% :日志内容
#接收方 IP 前面一个 @ 表示 TCP 传输,两个 @ 表示 UDP 传输

systemctl restart rsyslog

//修改服务端配置文件,并启动服务
vim /etc/rsyslog.conf
#将下面四行前的注释取消掉
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514

#添加以下内容
$AllowedSender tcp, 192.168.80.0/24		#允许 192.168.80.0 网段内的主机以tcp协议来传输
$template Remote,"/data/log/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log"		#定义模板,接受日志文件路径,区分了不同主机的日志
:fromhost-ip, !isequal, "127.0.0.1" ?Remote		#过滤掉 server 本机的日志
systemctl restart rsyslog

//在服务端创建/data/log目录,以接受大量日志信息,配置文件中的路径应当与该路径一致
mkdir -p /data/log

//验证
#客户端的终端命令行输入或者重启一个服务
logger “hello world”

#在服务端查看日志文件
tree /data/log/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值