Linux文件系统与日志分析

一.inode与block

1. inode和block概述

文件数据包括 元信息 与 实际数据

元信息: 文件的属性、文件大小、权限、时间戳

实际数据: 文件的内容

文件存储在硬盘上,硬盘最小存储单位是“扇区”,每个扇区存储512字节

block(块)

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

inode(索引节点)

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

Linux文件系统与日志分析_第1张图片

2. inode的内容

2.1 inode 包含文件的元信息
  • 文件的字节数
  • 文件的拥有者的UserID
  • 文件的GroupID
  • 文件的读、写、执行权限
  • 文件的时间戳

  • 文件类型

  • 链接数

  • 有关文件的其他数据

注意:inode不包含文件名

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

Linux文件系统与日志分析_第2张图片

2.2 linux文件系统的三个时间戳
  • ctime(change time):最后一次改变文件或目录(属性)的时间,

  • atime(access time):是最近一次访问文件或目录的时间

  • mtime(modify time):是最后一次修改文件或目录(内容)的时间

atime:

Linux文件系统与日志分析_第3张图片

mtime 和 ctime

Linux文件系统与日志分析_第4张图片

ctime:

Linux文件系统与日志分析_第5张图片

2.3 目录文件结构

inode不包含文件名,文件名是存放在目录当中的,Linux系统中一切皆文件,因此目录也是一种文件

Linux文件系统与日志分析_第6张图片

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

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

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

3. inode的号码

1. 表面上,用户通过文件名,打开文件

2. 实际上,系统内部这个过程分成三步:

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

  • 通过inode号码 ,获取inode信息

  • 根据inode信息,找到文件数据所在的block

3. 读出数据使用Is -i命令,可以看到文件名对应的inode号码:

4. 使用stat命令,查看文件inode信息中的inode号码:

Linux文件系统与日志分析_第7张图片

  • 访问文件的简单流程:
    • 当一个用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找它的 inode ,看该用户是否具有访问这个文件的权限

    • 如果有,就指向相对应的数据block

    • 如果没有,就返回Permission denied

Linux文件系统与日志分析_第8张图片

4. inode的大小

  • inode也会消耗硬盘空间,每个inode的大小,一般是128字节或256字节

  • inode的总数,在格式化时就确定

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

Linux文件系统与日志分析_第9张图片

注意:

inode 号 在同一个设备上是唯一的

小问题:

磁盘空间还剩余很多,但是无法继续建立文件

原因:inode号用完了

解决:普通分区  删除没有用的空文件

          lvm 扩容

5. inode的特点

由于inode 号码与文件名分离,导致Linux系统具备以下几种特有的现象:

  • 文件名包含特殊字符,可能无法正常删除,这是直接删除inode,能够起到删除文件的作用
  • 移动文件或重命名文件,只是改变文件名,不影响inode号码
  • 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名
  • 文件数据被修改保存后,会生成一个新的inode号

1.删除inode ,能够起到删除文件的作用

删除 inode 号的方法:

法一: find 文件位置 -inum inode号码 -exec rm -i {} \;

法二: find 文件位置 -inum inode号码 -delete

Linux文件系统与日志分析_第10张图片

2. mv移动文件或重命名文件,只是改变文件名,不影响inode 号(这里指的是非挂载磁盘)

Linux文件系统与日志分析_第11张图片

Linux文件系统与日志分析_第12张图片

 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名

3. 文件数据被修改保存后,会生成一个新的 inode 号码

4. cp命令与inode:

  • 分配一个空闲的inode号

  • 在inode表中生成新条目在目录中创建一个目录项

  • 将名称与inode编号关联拷贝数据生成新的文件

5. rm命令与inode

  • 链接数递减,从而释放的inode号可以被重用把数据块放在空闲列表中

  • 删除目录项

  • 数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖

6. mv命令和inode

如果mv命令的目标和源在同一设备,不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!

删除旧的目录对应关系新建目录对应关系

文件存储小结:

Linux文件系统与日志分析_第13张图片

linux中使用文件:

根据文件夹的文件名和inode号的关系 找到对应的inode表,再根据inode表当中的指针找到磁盘上的真实数据。

6. 软连接和硬连接

创建格式:

ln [-s] 源文件或目录...链接文件或目标位置(加-s为软连接,不加为硬链接)

对比项 硬连接 软连接
本质 本质是同一个文件 本质不是同一个文件
inode 相同 不同
连接数 创建新的硬链接,链接数会增加,删除硬链接,链接数减少 删除新建不会改变
文件夹 不支持 支持
删除源文件 只是链接数减一,但链接文件的访问不受影响 无法访问连接文件
文件类型 和源文件相同 链接文件,和源文件无关
文件大小 和源文件相同 源文件的路径的长度

7. 恢复EXT类型的文件

8. xfs类型备份和恢复

二.分析日志文件

1. 日志的功能

  • 用于记录系统、程序运行中发生的各种事件

  • 通过阅读日志,有助于诊断和解决系统故障

日志保存位置默认位于:/var/log目录下

2. 日志文件的分类

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

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

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

3. 日志文件的格式

Linux文件系统与日志分析_第14张图片

  • 事件产生的时间。

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

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

  • 事件的具体信息。

4. 常见的日志文件

① 内核及公共消息日志  /var/log/messages

        记录Linux内核消息及各种应用程序的公共日志信息,包括启动、I0错误、网络错误、程序故障等。 对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的事件记录信息。

Linux文件系统与日志分析_第15张图片

② 计划任务日志  /var/log/cron

记录crond计划任务产生的事件信息。

Linux文件系统与日志分析_第16张图片

③ 系统引导日志  /var/log/dmesg

记录Linux系统在引导过程中的各种事件信息。

Linux文件系统与日志分析_第17张图片

④ 邮件系统日志   /var/log/maillog

记录进入或发出系统的电子邮件活动。

⑤ 用户登录日志

/var/log/secure: 记录用户认证相关的安全事件信息。

/var/log/lastlog: 记录每个用户最近的登录事件。二进制格式     lastlog查看

/var/log/wtmp: 记录每个用户登录、注销及系统启动和停机事件。二进制格式   last查看

/var/run/btmp: 记录失败的、错误的登录尝试及验证事件。二进制格式   lastb查看
 

5. 日志文件分析

5.1 系统日志服务
5.1.1 rsyslog 系统日志服务

是一个软件,帮助管理日志

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

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

rsyslog 特性

  • 多线程

  • UDP, TCP, SSL, TLS, RELP

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

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

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

  • 适用于企业级

Linux文件系统与日志分析_第18张图片

5.1.2 ELK  日志收集

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

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

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

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

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

  • kafka消息队列

小实验:通过 rsyslog 软件将 sshd 程序的日志独立出来

sshd软件的日志是放在 /var/log/secure 日志中,和很多其他软件放在一起

这个软件比较重要,所以我们要把sshd软件的日志单独存放

步骤:

① 修改 rsyslog 软件的配置文件

Linux文件系统与日志分析_第19张图片

② 修改 sshd 里面配置文件

Linux文件系统与日志分析_第20张图片

③ 重启服务

Linux文件系统与日志分析_第21张图片

5.1.3 网络日志(远程日志功能)

192.168.44.20  -->  192.168.44.30

步骤:

① 关闭两边的防火墙和防护

Linux文件系统与日志分析_第22张图片

② 192.168.44.20上的操作

Linux文件系统与日志分析_第23张图片

Linux文件系统与日志分析_第24张图片

Linux文件系统与日志分析_第25张图片

③ 192.168.44.30 上的操作

Linux文件系统与日志分析_第26张图片

Linux文件系统与日志分析_第27张图片

5.2 内核及系统日志配置文件及日志消息等级

[root@localhost mnt]# cat /etc/rsyslog.conf 
查看/etc/rsyslog.conf配置文件
* . info;mail.none;authpriv.none;cron.none  /var/log/messages

*.info          #表示info等级及以上的所有等级的信息都写到对应的日志文件里
mail.none       #表示某事件的信息不写到日志文件里(这里比如是邮件)
 

5.2.1 内核日志消息的优先级别

(数字等级越小,优先级越高,消息越重要)

Linux文件系统与日志分析_第28张图片

5.3 用户日志分析

在wtmp、btmp、 lastlog等日志文件中 ,保存了系统用户登录、 退出等相关的事件消息。 但是这些文件都是二进制的数据文件,不能直接使用tail、less等文本查看工具进行浏览,需要使用who、w、users、 last和lastb等用户查询命令来获取日志信息。

5.3.1 查询当前登录用户的用户情况 users  w  who

5.3.2 查询用户登录的历史记录
① last  --  用于查询成功登录到系统的用户记录

(若发现未授权的用户登录,可能当前主机已被入侵)

Linux文件系统与日志分析_第29张图片

② lastb  --  用于查询登录失败的用户记录

③ lastlog  --  最后一次登录

Linux文件系统与日志分析_第30张图片

5.4 程序日志分析
  • 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等专用日志分析工具

5.5 日志管理
  • 及时做好备份和归档

  • 延长日志保存期限

  • 控制日志访问权限

    • 日志中可能会包含各类敏感信息,如账户和口令等

  • 集中管理日志

    • 将服务器的日志文件发到统一-的日志文件服务器

    • 便于日志信息的统- -收集、 整理和分析

    • 杜绝日志信息的意外丢失、恶意篡改或删除

5.5 总结:
  • /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的日志操作系统安装时安装的软件信息

5.6 日志管理工具 journalctl

日志配置文件:

/etc/systemd/journald.conf

journalctl命令格式:

journalctl    [OPTIONS...]   [MATCHES...]

选项:

选项 说明
-e  在分页工具内立即跳转到日志的尾部。
-x 在日志的输出中增加一些解释性的短文本, 以帮助进一步说明日志的含义
-a 完整显示所有字段内容
-f 只显示最新的日志项,并且不断显示新生成的日志项。
-r 反转日志行的输出顺序, 也就是最先显示最新的日志
-o 控制日志的输出格式
-q 当以普通用户身份运行时, 不显示任何警告信息与提示信息
-m 混合显示包括远程日志在内的所有可见日志
-b 显示特定于某次启动的日志
-k 仅显示内核日志
-t 仅显示 syslog[1] 识别符为 SYSLOG_IDENTIFIER 的日志项
-u 仅显示属于特定单元的日志
-p 根据日志等级(包括等级范围)过滤输出结果。
-c  从指定的游标(cursor)开始显示日志。
-S 显示晚于指定时间(--since=)的日志、显示早于指定时间(--until=)的日志
--no-full 如果字段内容超长则以省略号(...)截断以适应列宽
--no-tail 显示所有日志行
--utc 以世界统一时间(UTC)表示时间
--no-hostname 不显示来源于本机的日志消息的主机名字段
--no-pager 不将程序的输出内容管道(pipe)给分页程序
--rotate 要求日志守护进程滚动日志文件
--flush 要求日志守护进程
--verify 检查日志文件的内在一致性

Linux文件系统与日志分析_第31张图片

Linux文件系统与日志分析_第32张图片

小问题:

想看到几点几分到几点几分之间的日志?

内存中:

Linux文件系统与日志分析_第33张图片

日志文件:

sed

awk  查看

5.7  logrotate 分割日志

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

相关文件:

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

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

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

  • 日志文件:/var/lib/logrotate/logrotate.status

配置参数 说明
compress 通过gzip压缩转储以后的日志
nocompress 不压缩
copytruncate 用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate 备份日志文件但是不截断
create mode ownergroup 转储文件,使用指定的权限,所有者,所属组创建新的日志文件
nocreate 不建立新的日志文件
delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress 覆盖 delaycompress 选项,转储同时压缩
errors address 专储时的错误信息发送到指定的Email地址
ifempty 即使是空文件也转储,此为默认选项
notifempty 如果是空文件的话,不转储
mail address 把转储的日志文件发送到指定的E-mail 地址
nomail 转储时不发送日志文件
olddir directory 转储后的日志文件放入指定目录,必须和当前日志文件在同一个文件系统
noolddir 转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript 在转储以前需要执行的命令,这两个关键字必须单独成行
postrotate/endscript 在转储以后需要执行的命令,这两个关键字必须单独成行
daily 指定转储周期为每天
weekly 指定转储周期为每周
monthly 指定转储周期为每月
rotate count 指定日志文件删除之前转储的次数,0指没有备份,5指保留5个备份
tabooext [+] list 让logrotate*不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig,.rpmsave, v, 和~
size size 当日志文件到达指定的大小时才转储bytes(缺省)及KB或MB
sharedscripts 默认,对每个转储日志运行prerotate和postrotate脚本,日志文件的绝对路径作为第一个参数传递给脚本。 这意味着单个脚本可以针对与多个文件匹配的日志文件条目多次运行(例如/ var / log / news /.example)。 如果指定此项sharedscripts,则无论有多少个日志*与通配符模式匹配,脚本都只会运行一次
nosharedscripts 针对每一个转储的日志文件,都执行一次prerotate和 postrotate脚本,此为默认值
missingok 如果日志不存在,不提示错误,继续处理下一个
nomissingok 如果日志不存在,提示错误,此为默认值

Linux文件系统与日志分析_第34张图片Linux文件系统与日志分析_第35张图片

你可能感兴趣的:(Linux,linux,运维)