Linux文件系统与日志分析

目录

一、inode与block

1.1 inode与block概述

1.2 硬盘分区的结构

1.3 访问文件的简单流程

1.4 命令及补充

1.4.1 stat命令(查看文件的inode的信息)

1.4.2 ls -i命令(查看文件名对应的inode号码)

1.4.3 通过inode号删除文件命令

1.5 inode的大小

二、恢复误删的文件

2.1 恢复误删除的文件ext3

2.2 恢复误删除的文件XFS

三、分析日志文件

3.1 日志的概述

3.1.1 日志的功能

3.1.2 日志文件的分类

3.2 日志的简介

3.3 内核及系统日志

3.3.1 由系统服务 rsyslog 统一管理

3.3.2 日志消息的级别(优先级)

3.3.3 日志记录的一般格式

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

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

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

消息:           消息的具体内容

分析工具:users、who、w、last、lastb

扩展*****

一、journalctl工具

1.1 作用

1.2 命令

示例一:journalctl:查看所有日志(默认情况下 ,只保存本次启动的日志) ​编辑

示例二:journalctl -k:查看内核日志(不显示应用日志) ​编辑

示例三:journalctl -b -0:查看系统本次启动的日志

示例四:journalctl -S=since或-U=unit:查看指定时间的日志

示例五:journalctl -n:显示尾部的最新n行日志

示例六:journalctl -f:实时滚动显示最新日志 ​编辑

示例七:journalctl /usr/lib/systemd/systemd:查看指定服务的日志​编辑

示例八:journalctl /usr/bin/bash:查看指定进程的日志——————————————journalctl _PID=1:查看某个路径的脚本的日志

二、日志集中管理

三、日志轮替logrotate

3.1 logrotae简单理解

3.2 配置参数


一、inode与block

1.1 inode与block概述

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

       连续的八个扇区组成一个 block

       是文件存取的最小单位

  • inode(索引节点)

       1、中文译名为“索引节点”,也叫i节点

       2、用于存储文件源信息

       3、一个文件必须占用一个inode,至少一个block

       4、Linux系统内部通过inode来识别文件

1.2 硬盘分区的结构

1.3 访问文件的简单流程

1.4 命令及补充

1.4.1 stat命令(查看文件的inode的信息)

1.4.2 ls -i命令(查看文件名对应的inode号码)

1.4.3 通过inode号删除文件命令

  • find ./-inum 号 -exec rm -i {} \;
  • find ./-inum 号 -delete

1.5 inode的大小

  • inode也会消耗硬盘空间,每个inode的大小一般是128字节或256字节
  • 格式化文件系统时确定inode的总数
  • 使用df -i命令可以查看每个硬盘分区的inode总数和已经使用的数量

二、恢复误删的文件

2.1 恢复误删除的文件ext3

EXT类型文件恢复:extundelete 是一一个开源的Linux 数据恢复工具,支持ext3、 ext4文件系统。 ( ext4只能在centos6版本恢复)

示例

删除文件

恢复

2.2 恢复误删除的文件XFS


 

mkfs.xfs /dev/sdb1 (进行格式化)

创建文件

删除数据

恢复

三、分析日志文件

3.1 日志的概述

3.1.1 日志的功能

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

3.1.2 日志文件的分类

  • 内核及系统日志:由系统服务rsyslog统一进行管理,日志格式基本相似
  • 用户日志:记录系统用户登录及退出系统的相关信息
  • 程序日志:由各种应用程序独立管理的日志文件,记录格式不统一

3.2 日志的简介

日志默认存放位置:/var/log/

查看日志配置情况:more /etc/rsyslog.conf

大致了解:

简单理解:

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

内核及公共消息日志:

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

计划任务日志:

  • /var/1og/cron: 记录crond计划任务产生的事件信息

系统引导日志:

  • /var/log/dmesg: 记录Linux系统在引导过程中的各种事件信息

邮件系统日志:

  • /var/log/maillog: 记录进入或发出系统的电子邮件活动

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

  • /var/log/lastlog:最近的用户登录事件
  • /var/log/wtmp:用户登录、注销及系统开、关机事件
  • /var/run/utmp:当前登录的每个用户的详细信息
  • /var/log/secure:与用户验证相关的安全性事件

3.3 内核及系统日志

3.3.1 由系统服务 rsyslog 统一管理

rsylog

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

特性

  • 多线程
  • UDP, TCP, SSL, TLS, RELP
  • MySQL, PGSQL, Oracle实现日志存储
  • 强大的过滤器,可实现过滤记录日志信息中任意部分
  • 自定义输出格式 可以日志
  • 适用于企业级
  • 软件包:rsyslog-7.4.7-16.el7.x86 64
  • 主要程序:/sbin/rsyslogd
  • 配置文件:/etc/rsyslog.conf

3.3.2 日志消息的级别(优先级)

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

3.3.3 日志记录的一般格式

时间标签:    消息发出的日期和时间
主机名:       生成消息的计算机的名称
子系统名称:发出消息的应用程序的名称
消息:           消息的具体内容
分析工具:users、who、w、last、lastb
  • users:命令只是简单地输出当前登录的用户名称,每个显示的用户名对应一个登录会话

       如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数

  • who:命令用于报告当前登录到系统中的每个用户的信息。who 的默认输出包括用户名、终端类型、登录日期及远程主机

       使用该命令,系统管理员可以查看当前系统存在哪些不合法用户,从而对其进行审计和处理

  • w:命令用于显示当前系统中的每个用户及其所运行的进程信息,比 users、who 命令的输出内容要丰富一些
  • last:命令用于查询成功登录到系统的用户记录,最近的登录情况将显示在最前面。通过last 命令可以及时掌握 Linux 主机的登录情况,若发现未经授权的用户登录过,则表示当前主机可能已被入侵
  • lastb:命令用于查询登录失败的用户记录,如登录的用户名错误、密码不正确等情况都将记录在案

扩展*****

一、journalctl工具

1.1 作用

  • 可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)

1.2 命令

  • 日志的配置文件:/etc/systemd/journald.conf

选项说明:

--no-full, --full, -l

如果字段内容超长则以省略号(...)截断以适应列宽

默认显示完整的字段内容(超长的部分换行显示或者被分页工具截断)

老旧的 -l/--full 选项 仅用于撤销已有的 --no-full 选项,除此之外没有其他用处

-a, --all完整显示所有字段内容, 即使其中包含不可打印字符或者字段内容超长   
-f, --follow只显示最新的日志项,并且不断显示新生成的日志项。 此选项隐含了 -n 选项
-e, --pager-end

在分页工具内立即跳转到日志的尾部。 此选项隐含了 -n1000

以确保分页工具不必缓存太多的日志行。 不过这个隐含的行数可以被明确设置的 -n

选项覆盖。 注意,此选项仅可用于 less(1) 分页器

-n, --lines=

限制显示最新的日志行数。 --pager-end 与 --follow 隐含了此选项

此选项的参数:若为正整数则表示最大行数; 若为 "all" 则表示不限制行数

若不设参数则表示默认值10行

--no-tail显示所有日志行, 也就是用于撤销已有的 --lines= 选项(即使与 -f 连用)
-r, --reverse反转日志行的输出顺序, 也就是最先显示最新的日志
-o, --output=

控制日志的输出格式

可以使用如下选项:

  • short:这是默认值, 其输出格式与传统的 syslog[1] 文件的格式相                     似,每条日志一行
  • short-iso与 short 类似,只是将时间戳字段以 ISO 8601 格式显示
  • short-precise与 short 类似,只是将时间戳字段的秒数精确到微秒级                             别
  • short-monotonic:与 short 类似,只是将时间戳字段的零值从内核启                                     动时开始计算。
  • short-unix:与 short 类似,只是将时间戳字段显示为从"UNIX时间原                             点"  (1970-1-1 00:00:00UTC)以来的秒数。 精确到微秒级                           别
  • verbose:以结构化的格式显示每条日志的所有字段
  • export:将日志序列化为二进制字节流(大部分依然是文本) 以适用于备份                   与网络传输(详见Journal Export Format[2] 文档)
  • json:将日志项按照JSON数据结构格式化, 每条日志一行(详见 Journal             JSON Format[3]文档)
  • json-pretty:将日志项按照JSON数据结构格式化, 但是每个字段一行,                          以便于人类阅读。
  • json-sse:将日志项按照JSON数据结构格式化,每条日志一行,但是用大                    括号包围, 以适应Server-Sent Events[4] 的要求
  • cat仅显示日志的实际内容, 而不显示与此日志相关的任何元数据(包括             时间戳)
--utc以世界统一时间(UTC)表示时间
--no-hostname不显示来源于本机的日志消息的主机名字段。此选项仅对 short系列输出格式(见上文)有效
-x, --catalog在日志的输出中增加一些解释性的短文本, 以帮助进一步说明日志的含义、问题的解决方案、支持论坛、 开发文档、以及其他任何内容。并非所有日志都有这些额外的帮助文本, 详见 Message Catalog DeveloperDocumentation[5] 文档。注意,如果要将日志输出用于bug报告, 请不要使用此选项
-q, --quiet当以普通用户身份运行时, 不显示任何警告信息与提示信息
-m, --merge混合显示包括远程日志在内的所有可见日志

-b [ID][±offset]

--boot=[ID][±offset]

显示特定于某次启动的日志, 这相当于添加了一个 "_BOOT_ID=" 匹配条件

如果参数为空(也就是 ID 与 ±offset 都未指定), 则表示仅显示本次启动的日志

如果省略了 ID , 那么当 ±offset 是正数的时候, 将从日志头开始正向查找,
否则(也就是为负数或零)将从日志尾开始反响查找。 举例来说, "-b1"表示按时间顺序排列最早的那次启动, "-b 2"则表示在时间上第二早的那次启动; "-b-0"表示最后一次启动,"-b -1"表示在时间上第二近的那次启动, 以此类推。

如果±offset 也省略了, 那么相当于"-b -0", 除非本次启动不是最后一次启动

(例如用--directory 指定了另外一台主机上的日志目录)
如果指定了32字符的 ID , 那么表示以此 ID 所代表的那次启动为基准计算偏移量(±offset), 计算方法同上。 换句话说, 省略 ID 表示以本次启动为基准计算偏移量(±offset)

--list-boots列出每次启动的 序号(也就是相对于本次启动的偏移量)、32字符的ID、第一条日志的时间戳、最后一条日志的时间戳
-k, --dmesg仅显示内核日志。隐含了 -b 选项以及 "_TRANSPORT=kernel" 匹配项

-t--identifier=SYSLOG_IDENTIFIER

仅显示 syslog[1] 识别符为 SYSLOG_IDENTIFIER 的日志项。可以多次使用该选项以指定多个识别符
-u, --unit=UNIT|PATTERN

仅显示属于特定单元的日志。 也就是单元名称正好等于 UNIT 或者符合 PATTERN模式的单元。

这相当于添加了一个"_SYSTEMD_UNIT=UNIT" 匹配项(对于 UNIT 来说),或一组匹配项(对于 PATTERN 来说)。可以多次使用此选项以添加多个并列的匹配条件(相当于用"OR"逻辑连接)

--user-unit=仅显示属于特定用户会话单元的日志。 相当于同时添加了了"_SYSTEMD_USER_UNIT=" 与"_UID=" 两个匹配条件。
可以多次使用此选项以添加多个并列的匹配条件(相当于用"OR"逻辑连接)
-p, --priority=

根据日志等级(包括等级范围)过滤输出结果

日志等级数字与其名称之间的对应关系如下(参见 syslog(3)): "emerg" (0), "alert" (1), "crit" (2), "err" (3),"warning" (4), "notice" (5), "info" (6), "debug" (7) 
若设为一个单独的数字或日志等级名称, 则表示仅显示小于或等于此等级的日志(也就是重要程度等于或高于此等级的日志)。 若使用 FROM..TO.. 设置一个范围,则表示仅显示指定的等级范围内(含两端)的日志。 此选项相当于添加了 "PRIORITY="匹配条件

-c, --cursor=

从指定的游标(cursor)开始显示日志。

[提示]每条日志都有一个"__CURSOR"字段,类似于该条日志的指纹

--after-cursor=从指定的游标(cursor)之后开始显示日志。 如果使用了 --show-cursor 选项,则也会显示游标本身
--show-cursor

在最后一条日志之后显示游标,

类似下面这样,以"--"开头:-- cursor: s=0639...

游标的具体格式是私有的(也就是没有公开的规范), 并且会变化

--header此选项并不用于显示日志内容, 而是用于显示日志文件内部的头信息(类似于元数据)
-N, --fields输出所有日志字段的名称

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

示例二:journalctl -k:查看内核日志(不显示应用日志)
 

示例三:journalctl -b -0:查看系统本次启动的日志

示例四:journalctl -S=since或-U=unit:查看指定时间的日志

示例五:journalctl -n:显示尾部的最新n行日志

示例六:journalctl -f:实时滚动显示最新日志
 

示例七:journalctl /usr/lib/systemd/systemd:查看指定服务的日志

示例八:journalctl /usr/bin/bash:查看指定进程的日志——————————————journalctl _PID=1:查看某个路径的脚本的日志

示例九:journalctl --disk-usage:显示日志占据的硬盘空间

示例十:journalctl --vacuum-size=1G:指定日志文件占据的最大空间

示例十一:journalctl --vacuum-time=1years:指定日志文件保存多久
 

二、日志集中管理

(将日志文件全部放在日志文件服务器上)

配置方法:

服务端配置
[root@localhost ~]#vim /etc/rsyslog.conf 
#编辑文件取消第19 20 行注释允许服务器使用TCP 514端口接收日志

开启日志的远程传输功能在192.168.10.19

19 $ModLoad imtcp
20 $InputTCPServerRun 514
[root@localhost ~]#netstat -ntap |grep 514                           #查看514端口是否开启
[root@localhost ~]# systemctl restart  rsyslog                       #重启rsyslog日志服务

客户端配置
[root@www1 ~]# vim /etc/rsyslog.conf                                   #修改日志服务配置文件
90     *.*    @@192.168.10.19:514
行数   所有 TCP     服务端IP  端口
#把所有日志采用TCP协议发送到192.168.10.13的514端口上 ; #两个@ 代表使用  tcp  一个代表udp
[root@localhost ~]# systemctl restart  rsyslog
#重启rsyslog日志服务

实例演示:

服务端

客户端

测试阶段

三、日志轮替logrotate

3.1 logrotae简单理解

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

相关文件:

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

程序文件:/usr/sbin/logrotate

配置文件: /etc/logrotate.conf

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

3.2 配置参数

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

create                       新建新日志

dateext                     按日期改名,否则会自动改名为file.1、file.2等等

minsize                     一定达到这个值才轮替,否则就算时间到了也不轮替

size                           只有到达这个值才轮替,跟时间无关

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值