文件系统与日志分析

181 阅读9分钟

Inode和Block阐述

inode和block是两个在文件系统中扮演不同角色的概念,它们都是用来管理文件和数据存储的重要组成部分。

Inode

Inode是文件系统中的一种数据结构,用于存储文件或目录的元数据(metadata)信息,如文件类型、权限、所有者、大小、时间戳等。 每个文件或目录都有一个唯一的inode号码来标识自己。

Inode不包含文件名或实际的文件数据,而是用于快速定位和管理文件的元数据。

当打开一个文件时,操作系统会查找对应文件的inode,从中获取文件的元数据,并根据inode中的数据块地址信息找到文件实际的数据块。

Inode的包含内容

  • 文件类型:指示inode对应的是文件、目录、符号链接等类型。
  • 文件权限:指定谁可以对该文件执行读取、写入和执行操作。
  • 文件所有者和所属组:标识文件的所有者和所属组。
  • 文件大小:指示文件的大小,以字节为单位。
  • 创建时间、修改时间和访问时间:记录了文件的创建、最后修改和最后访问的时间戳。
  • 硬链接计数:表示有多少个硬链接指向这个inode。一个inode可以有多个硬链接,每个硬链接都可以看作是文件系统中相同文件的不同别名。
  • 文件数据块地址:指示文件数据存储在哪些数据块中。文件的内容被分成一个或多个数据块来存储。

三个主要的时间属性

stat 文件

image.png

atime:最近访问 最后一次访问文件的时间

mtime:最近更改 最后一次更改文件内容的时间

ctime:最近改动 最后一次改变文件元信息的时间

注意:

  • 不打开文件的话,atime不变。例如使用echo追加内容,atime不会变,因为文件没有被打开访问。
  • 修改文件内容的话,mtime会变,ctime也会变。
  • 如果只修改文件的权限,ctime变,mtime不变。

inode 的大小

inode也会消耗硬盘空间

每个inode的大小一般是128字节或256字节

格式化文件系统时确定inode的总数

如果磁盘还有空间,但inode号被全部占用,也无法创建新文件。

inode号在同一个文件系统内唯一,在不同的文件系统中可以重复。

使用 "df -i" 命令可以查看每个硬盘分区的inode总数和已经使用的数量

inode实例

ll -i //查看inode号

image.png

find /opt -inum inode号| xargs rm -rf //通过inode删除内容

image.png

Block

数据块是文件系统中用来存储文件实际数据的基本单位。 当一个文件被创建时,它的数据被分割成一个或多个数据块,并按顺序存储在不同的数据块中。 文件数据块的大小可以是固定的(例如4KB、8KB)或动态的,这取决于文件系统的设计。 一个inode中包含指向文件数据块的地址,这样操作系统就能够通过inode找到文件实际的数据块。

用户访问文件的过程

用户需要访问文件时,先去inode表中寻找inode号,随后进行判断,主要判断是否有执行文件的权限,如果有则直接指向对应的inode号,若无则直接报错。

日志分析

日志文件介绍

日志的功能:

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

日志文件的分类:

内核及系统日志: 这种日志数据由系统服务rsyslog统一管理,根据其主配置文件/etc/rsyslog.conf中的设置,决定将内核消息及各种系统程序消息记录到什么位置。日志格式基本相似。

用户日志: 记录用户登录及退出系统的相关信息,包括用户名、登录的终端、登录时间、来源主机、正在使用的进程操作等。

程序日志: 有些应用程序会选择由自己独立管理一份日志文件(而不是交给rsyslog服务管理),用于记录本程序运行过程中的各种事件信息。记录格式不统一。

日志保存位置:

默认位于:/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等命令查看。

日志文件分析

内核及系统日志

由系统服务 rsyslog 统一管理,根据其主配置文件 /etc/rsyslog.conf。

软件包:rsyslog-8.24.0-12.el7.x86_64 (可使用 ”rpm -q“ 命令查看) 主要程序:/sbin/rsyslogd 配置文件:/etc/rsyslog.conf (可使用 ”rpm -qc“ 命令查看)

日志消息的级别:

1ALERT警告必须马上采取措施解决的问题2CRIT严重比较严重的情况3ERR错误运行出现错误4WARNING提醒可能会影响系统功能的事件5NOTICE注意不会影响系统但值得注意6INFO信息一般信息7DEBUG调试程序或系统调试信息等

级号消息级别说明
0EMERG紧急会导致主机系统不可用的情况
0EMERG紧急会导致主机系统不可用的情况
0EMERG紧急会导致主机系统不可用的情况
0EMERG紧急会导致主机系统不可用的情况
0EMERG紧急会导致主机系统不可用的情况
0EMERG紧急会导致主机系统不可用的情况

日志记录的一般格式:

  • 事件产生的时间。
  • 产生事件的服务器的主机名。
  • 产生事件的服务名或程序名。
  • 事件的具体信息。

用户日志分析

保存了用户登录、退出系统等相关信息:

  • /var/log/lastlog:最近都用户登录事件。二进制文件,使用 lastlog 命令查看。
  • /var/log/secure:与用户验证有关的安全性事件。
  • /var/log/wtmp:用户登录、注销,及系统开、关机事件。二进制文件,使用 last 命令查看。
  • /var/run/utmp:当前登录的每个用户的详细信息。二进制文件,使用w、who、users等命令查看。

日志分析工具

  • users 查看当前用户名称
  • who 查看当前登录的用户、终端、登录时间、IP地址。
  • W 查看当前登录的用户、终端、IP地址、登录时间、占用CPU的情况、进程等。
  • last 命令用于查询成功登录到系统的用户记录
  • lastb 命令用于查询登录失败的用户记录

程序日志分析

由相应的应用程序独立进行管理:

Web服务:/var/log/httpd/

access_log、error_log

代理服务:/var/log/squid

access.log、cache.log

FTP服务:/var/log/xferlog

分析工具:

  • 文本查看、grep过滤检索、Webmin管理套件中查看
  • awk、sed等文本过滤、格式化编辑工具
  • Webalizer、Awstats等专用日志分析工具

journalctl 日志管理工具

日志管理工具journalctl是centos7上专有的日志管理工具,该工具是从messages这个文件里读取信息。 Systemd统一管理所有Unit的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。 日志的配置文件是/etc/systemd/journald.conf

查看所有日志(默认情况下,只保存本次启动的日志)

  • journalctl
  • journalctl -r //-r倒序

image.png

查看某个服务的日志

journalctl -u firewalld.service //查看防火墙服务

image.png

查看指定进程的日志

journalctl _PID=1

image.png

查看指定用户的日志

journalctl _UID=0 --since today

journalctl -x //-x 是目录的意思,在报错的信息下会附加解决问题的网址

image.png

image.png

rsyslog

rsyslog是CentOS 6以后版本的系统管理服务:它提供了高性能,出色的安全性和模块化设计。尽管rsyslog最初是常规的syslogd,但发展成为一种瑞士军刀式的记录工具,能够接受来自各种来源的输入,并将其转换,然后输出到不同的目的地。

当应用有限的处理时,RSYSLOG每秒可以将超过一百万的消息传递到本地目的地。即使在远程的目的地和更精细的处理中,性能通常也被认为是惊人的”。

rsyslog 特性

  • 多线程
  • UDP, TCP, SSL, TLS, RELP
  • MySQL, PGSQL, Oracle实现日志存储
  • 强大的过滤器,可实现过滤记录日志信息中任意部分
  • 自定义输出格式
  • 适用于企业级中继

查看/etc/rsyslog.conf 文件中的RULES模块:

image.png

rsyslog 应用实例

将ssh服务的日志单独设置

修改rsyslog服务的配置文件/etc/rsyslog.conf,设置LOCAL0对应的日志路径。

image.png

修改ssh服务的配置文件/etc/ssh/sshd_config,将ssh的日志修改为记录在LOCAL0对应的路径下

image.png

设置完成后重启服务

image.png

打开第二台机器,远程连接原服务器。故意输错2次密码,稍后查看原服务器的日志。

image.png

查看原服务器的日志记录。/var/log/sshd.log 成功记录了第二台机器的行为。

image.png