目录
1.4.2 ls -i命令(查看文件名对应的inode号码)
示例一:journalctl:查看所有日志(默认情况下 ,只保存本次启动的日志) 编辑
示例二:journalctl -k:查看内核日志(不显示应用日志) 编辑
示例三:journalctl -b -0:查看系统本次启动的日志
示例四:journalctl -S=since或-U=unit:查看指定时间的日志
示例六:journalctl -f:实时滚动显示最新日志 编辑
示例七:journalctl /usr/lib/systemd/systemd:查看指定服务的日志编辑
示例八:journalctl /usr/bin/bash:查看指定进程的日志——————————————journalctl _PID=1:查看某个路径的脚本的日志
一、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 日志消息的级别(优先级)
级号 | 消息 | 级别 | 说明 |
0 | EMERG | 紧急 | 会导致主机系统不可用的情况 |
1 | ALERT | 警告 | 必须马上采取措施解决的问题 |
2 | CRIT | 严重 | 比较严重的情况 |
3 | ERR | 错误 | 运行出现错误 |
4 | WARNING | 提醒 | 可能会影响系统功能的事件 |
5 | NOTICE | 注意 | 不会影响系统但值得注意 |
6 | INFO | 信息 | 一般信息 |
7 | DERUG | 调试 | 程序或系统调试信息等 |
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= | 控制日志的输出格式 可以使用如下选项:
|
--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 是正数的时候, 将从日志头开始正向查找, 如果±offset 也省略了, 那么相当于"-b -0", 除非本次启动不是最后一次启动 (例如用--directory 指定了另外一台主机上的日志目录) |
--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) |
-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 只有到达这个值才轮替,跟时间无关