Linux文件系统与日志分析

一、inode号和block

1、inode号和block概述

每个文件的属性信息,比如:文件的大小,时间,类型,权限等,称为文件的元数据(meta data 元信息 )。

元数据是存放在inode(index node)表中。inode 表中有很多条记录组成,第一条记录对应的存放了一个文件数据包括 元信息 与 实际数据。

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

实际数据: 文件的内容

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

block(块)

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

inode(索引节点)

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

2、inode内容

每一个inode表记录对应的保存了以下信息

  • inode number 节点号

  • 文件类型

  • 权限

  • UID

  • GID

  • 链接数(指向这个文件名路径名称个数)

  • 该文件的大小和不同的时间戳

  • 指向磁盘上文件的数据块指针

  • 有关文件的其他数据

3、如何查看inode号

ls  -i   
ll  -i
stat

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

4、inode号码

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

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

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

通过inode号码 ,获取inode信息

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

5、Linux文件系统的三个时间戳

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

atime:时间是只有打开过以后才会变

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

mtime:最近更改时间

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

ctime:最近改动时间。属性、元信息改变

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

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

原因:inode号用完了

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

          lvm 扩容 

6、inode的特点

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

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

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

删除 inode 号的方法:
(1): find 文件位置 -inum inode号码 -exec rm -i {} \;
(2): find 文件位置 -inum inode号码 -delete

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

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

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

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

Linux文件系统与日志分析_第7张图片
4.cp和inode

  • 分配一个空闲的inode号,在inode表中生成新条目

  • 在目录中创建一个目录项,将名称与inode编号关联

  • 拷贝数据生成新的文件

5.rm和inode

  • 硬链接数递减,从而释放的inode号可以被重用

  • 把数据块放在空闲列表中

  • 删除目录项

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

6.mv和inode

  • 如果mv命令的目标和源在同一设备,

        不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!

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

7、硬链接与软链接

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

二、文件恢复extundelete

1、ext3类型恢复

2、xfs类型备份和恢复

三、分析日志文件

1、日志的功能

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

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

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

2、日志的分类

分为三类:

1.系统日志

/var/log/messages:系统中的大部分信息日志

/var/log/secure:系统安全日志(用户登录)

/var/log/boot.log:系统服务启动的相关信息,文本格式

/var/log/anaconda : anaconda的日志操作系统安装时安装的软件信息

2.用户日志

/var/log/btmp:当前系统用户登录失败的信息,使用lastb命令查看,因为btmp是一个二进制文件

/var/log/wtmp:用户正常登录信息,使用last命令查看

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

/var/log/lastalog:每一个用户最近一次的登录信息,二进制格式,lastlog命令可以查看

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

3.程序日志

和程序有关,有的程序有独立日志,有的没有独立日志

比如sshd,这是一个远程登录的程序,它的日志文件就放在/var/log/secure文件下

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

3、日志的文件格式

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

日志文件的格式包含以下 4 列:

  • 事件产生的时间。

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

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

  • 事件的具体信息。  

4、常见的日志文件

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

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

2.计划任务日志  /var/log/cron

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

3. 系统引导日志  /var/log/dmesg

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

4.邮件系统日志   /var/log/maillog

四、日志文件分析

1、rsyslog 系统日志服务

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

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

rsyslog 特性:

  • 多线程

  • UDP, TCP, SSL, TLS, RELP

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

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

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

  • 适用于企业级

2、日志等级

日志内的信息等级越高(数值越小等级越高),说明此信息越重要,要优先处理。按0-7分为8级

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

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

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

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

修改 rsyslog 软件的配置文件

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

修改 sshd 里面配置文件

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

重新启动服务,并实时查看

3、远程日志功能

1.查询当前登录的用户情况

  • users

  • who

  • w

2.程序日志分析

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

3.日志管理

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

4、journalctl ------- 日志管理工具

journalctl的命令格式:

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

日志的配置文件:

/etc/systemd/journald.conf

选项:

选项 说明
-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文件系统与日志分析_第18张图片

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

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

5、logrotate 分割日志

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

1.logrotate配置

相关文件

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

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

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

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

在/etc/logrotate.conf下配置

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

配置参数 说明
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 如果日志不存在,提示错误,此为默认值

配置主要的参数如下:

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

你可能感兴趣的:(linux,运维,服务器)