一、inode和block
1、inode和block概述
-
文件数据包括元信息与实际数据。
-
文件存储在硬盘上,硬盘最小存储单位是“扇区”,每个扇区存储512字节。
-
block(块)
- 连续的八个扇区组成一个block
- 是文件存取的最小单位
-
inode(索引节点)
- 中文译名为“索引节点”,也叫 i 节点
- 用于存储文件元信息
- 一个文件必须占用一个inode ,至少占用一个block
2、inode和block关系
-
文件是存储在硬盘上的,硬盘的最小存储单位叫做“扇区”(sector),每个扇区存储512字节。
-
一般连续八个扇区组成一个"块”(block),一个块是4K大小,是文件存取的最小单位。操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取的。
-
文件数据包括实际数据与元信息(类似文件属性)。文件数据存储在“块"中,存储文件元信息(比如文件的创建者、创建日期、文件大小、文件权限等)的区域就叫做inode。 因此,一个文件必须占用一个inode,并且至少占用一个block。
-
inode不包含文件名。文件名是存放在目录文件夹当中的。Linux 系统中一切皆文件,因此目录也是一种文件。
-
每个inode都有一个号码,操作系统用inode号码来识别不同的文件。Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称,文件名和inode号码是一一对应关系,每个inode号码对应一个或多个文件名。
-
所以,当用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找自己文件夹中的目录项,之后找到对应的inode号码;通过inode号码,获取inode信息;根据inode信息,看该用户是否具有访问这个文件的权限;如果有,就指向相对应的数据block,并读取数据。
二、inode 详细介绍
1、inode 的内容
1)inode 表结构
每个文件的属性信息,比如:文件的大小,时间,类型,权限等,称为文件的元数据(meta data)。
元数据是存放在inode(index node)表中。inode 表中有很多条记录组成,第一条记录对应的存放了一个文件的元数据信息。
每一个inode表记录对应保存了文件的元信息:
- inode number 节点号
- 文件类型
- 文件的读、写、执行权限
- 文件属主的UID
- 文件属组的GID
- 链接数(指向这个文件名路径名称个数)
- 该文件的大小和不同的时间戳
- 指向磁盘上文件的数据块指针
- 有关文件的其他数据
2)Linux系统文件三个主要的时间属性
-
atime(access time):最近访问 最后一次访问文件的时间
-
mtime(modify):最近更改 最后一次更改文件内容的时间
-
ctime(change time):最近改动 最后一次改变文件元信息的时间
注意:
- 不打开文件的话,atime不变。例如使用echo追加内容,atime不会变,因为文件没有被打开访问。
- 修改文件内容的话,mtime会变,ctime也会变。
- 如果只修改文件的权限,ctime变,mtime不变。
3)目录文件的结构
目录是个特殊文件,目录文件的内容保存了此目录中文件的列表,以及inode number对应关系。
- 目录文件的结构非常简单,就是一系列目录项(dirent)的列表。
- 每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。
- 一个目录是目录下的文件名和文件inode号之间的映射。
- 每个inode都有一个号码,操作系统用inode号码来识别不同的文件。
- Linux系统内部不使用文件名,而使用inode号码来识别文件。
- 对于用户,文件名只是Inode号码便于识别的别称。
ps:
目录文件本身的大小,是根据所含目录项统计的,不是目录内所有子文件的大小总和。
三、inode的号码
用户通过文件名打开文件时,系统内部的过程:
-
用户访问文件时,系统先去查找文件所属目录中的目录项,根据文件名找到对应的inode号码。
-
通过inode号码,获取inode信息。
-
根据inode信息,判断用户是否具备访问权限。
- 如果有访问权限,则利用指针去指向实际数据所在的block,读出数据。
- 如果没有访问权限,则返回Permission denied。根据inode信息,利用指针去指向实际数据所在的block,读出数据。
查看inode号码的方法:
- ls -i 命令:查看文件名对应的inode号码
- stat 命令:查看文件inode信息中的inode号码
[root@localhost data]# ls -i
64 aa 64 bb 64 mail
[root@localhost data]# stat /data/aa
文件:"/data/aa"
大小:37 块:0 IO 块:4096 目录
设备:811h/2065d Inode:64 硬链接:2
权限:(0755/drwxr-xr-x) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2022-03-08 08:48:00.762262741 +0800
最近更改:2022-03-08 08:47:58.462261957 +0800
最近改动:2022-03-08 08:47:58.462261957 +0800
创建时间:-
四、inode 与文件存储
1、硬盘分区后的结构
2 访问文件的简单流程
五、inode 的大小
-
inode也会消耗硬盘空间
- 每个inode的大小一般是128字节或256字节
-
格式化文件系统时确定inode的总数
- 如果磁盘还有空间,但inode号被全部占用,也无法创建新文件。
- inode号在同一个文件系统内唯一,在不同的文件系统中可以重复。
-
使用 "df -i" 命令可以查看每个硬盘分区的inode总数和已经使用的数量
[root@localhost ~]# df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/mapper/centos-root 5242880 147510 5095370 3% /
devtmpfs 229398 441 228957 1% /dev
tmpfs 233378 1 233377 1% /dev/shm
tmpfs 233378 655 232723 1% /run
tmpfs 233378 16 233362 1% /sys/fs/cgroup
/dev/sda1 524288 330 523958 1% /boot
/dev/sdb5 1048576 3 1048573 1% /data/bb
/dev/mapper/vg01-lvmail 6815744 3 6815741 1% /data/mail
/dev/sdb1 5242880 7 5242873 1% /data/aa
tmpfs 233378 9 233369 1% /run/user/42
tmpfs 233378 1 233377 1% /run/user/0
六、inode的特殊作用
由于inode号码与文件名分离,导致一些Unix/Linux系统具有以下的现象:
1)当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件。
包含特殊字符的文件,也可以 "rm -rf ./-f1.txt" 或 "rm -- -f.txt" 进行删除。 示例:
[root@localhost aaa]# ls -i //查看文件的inode号
8922118 -f1.txt 8922126 -f2.txt
[root@localhost aaa]# find -inum 8922118 -delete //通过inode号删除文件
[root@localhost aaa]# find -inum 8922126 -exec rm -rf {} ; //通过inode号删除文件
[root@localhost aaa]# ls //查看目录内容,文件已被删除
[root@localhost aaa]#
2)在同一个文件系统中移动或重命名文件时,只改变文件名,不影响inode号码。
[root@localhost aaa]# ls -i ff.txt
8922129 ff.txt
[root@localhost aaa]# mv ff.txt ../dir01/kk.txt
[root@localhost aaa]# ls -i ../dir01/kk.txt
8922129 ../dir01/kk.txt
3)打开一个文件后,系统通过inode号码来识别该文件,不再考虑文件名。
七、命令和inode号之间的关系
cp 命令:
- 分配一个空闲的inode号,在inode表中生成新条目
- 在目录中创建一个目录项,将名称与inode编号关联
- 拷贝数据生成新的文件
rm 命令:
- 硬链接数递减,从而释放的inode号可以被重用
- 把数据块放在空闲列表中
- 删除目录项
- 数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖
mv命令:
-
如果mv命令的目标和源在同一设备,
不影响inode表(除时间戳)或磁盘上的数据位置;
系统会删除旧的目录对应关系,新建目录对应关系。
八、硬链接和软链接
ln 源文件 目标文件 //创建硬链接文件
ln -s 源文件或目录 目标文件 //创建软连接文件
注意:
创建软链接时,源文件必须使用绝对路径。
九、删除文件后空间不释放的处理方法
删除文件后,如果磁盘空间没有释放,是因为文件正在被其他人打开。 其他人退出使用该文件后空间会被释放。
可以使用 w 命令或 lsof 命令查看是否有人在使用该文件。
[root@localhost ~]# w
22:23:08 up 1:14, 4 users, load average: 0.17, 0.14, 0.08
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.72.1 21:17 4.00s 0.12s 0.03s vim 1.txt
root pts/1 192.168.72.1 21:17 1:05m 4.45s 4.43s top
root pts/2 192.168.72.1 22:22 4.00s 0.02s 0.00s w
root pts/3 192.168.72.1 22:22 11.00s 0.04s 0.01s top
如果确定有人打开了该文件,可以使用三种方法释放空间:
1.echo " " > f1.txt //将被打开的文件变成空文件,依赖shell环境
2.cat /dev/null > f1.txt //导入空文件
3.lsof | grep f1.txt //查看被删除的文件和对应PID,之后杀死该进程
kill -9 PID
注意:
删除文件前,一定要确认清除该文件是否为有效文件。
十、日志文件介绍与分析
1、日志文件介绍
日志的功能:
- 用于记录系统、程序运行中发生的各种事件
- 通过阅读日志,有助于诊断和解决系统故障
日志文件的分类:
-
内核及系统日志:
这种日志数据由系统服务rsyslog统一管理,根据其主配置文件/etc/rsyslog.conf中的设置,决定将内核消息及各种系统程序消息记录到什么位置。日志格式基本相似。
-
用户日志:
记录用户登录及退出系统的相关信息,包括用户名、登录的终端、登录时间、来源主机、正在使用的进程操作等。
-
程序日志:
有些应用程序会选择由自己独立管理一份日志文件(而不是交给rsyslog服务管理),用于记录本程序运行过程中的各种事件信息。记录格式不统一。
日志保存位置:
- 默认位于:/var/log 目录下
主要日志文件介绍:
2、内核及系统日志
由系统服务 rsyslog 统一管理,根据其主配置文件 /etc/rsyslog.conf。
- 软件包:rsyslog-8.24.0-12.el7.x86_64 (可使用 ”rpm -q“ 命令查看)
- 主要程序:/sbin/rsyslogd
- 配置文件:/etc/rsyslog.conf (可使用 ”rpm -qc“ 命令查看)
日志消息的级别:
日志记录的一般格式:
- 事件产生的时间。
- 产生事件的服务器的主机名。
- 产生事件的服务名或程序名。
- 事件的具体信息。
3、用户日志分析
保存了用户登录、退出系统等相关信息:
- /var/log/lastlog:最近都用户登录事件。二进制文件,使用 lastlog 命令查看。
- /var/log/secure:与用户验证有关的安全性事件。
- /var/log/wtmp:用户登录、注销,及系统开、关机事件。二进制文件,使用 last 命令查看。
- /var/run/utmp:当前登录的每个用户的详细信息。二进制文件,使用w、who、users等命令查看。
分析工具:
- users、who、w、last、lastb
示例:
1)users:查询最近三次登录的用户信息。
users 命令只是简单地输出当前登录的用户名称,每个显示的用户名对应一个登录会话。 如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数。
2)who:查看当前登录的用户、终端、登录时间、IP地址。
who命令用于报告当前登录到系统中的每个用户的信息。使用该命令,系统管理员可
以查看当前系统存在哪些不合法用户,从而对其进行审计和处理。who 的默认输出包括用
户名、终端类型、登录日期及远程主机。
3)w:查看当前登录的用户、终端、IP地址、登录时间、占用CPU的情况、进程等。
w 命令用于显示当前系统中的每个用户及其所运行的进程信息,比 users、who 命令的 输出内容要丰富一些。
4)last: 读取 /var/log/wtmp 文件,显示登录系统的用户信息。
last 命令用于查询成功登录到系统的用户记录,最近的登录情况将显示在最前面。通过 last 命令可以及时掌握 Linux 主机的登录情况,若发现未经授权的用户登录过,则表示当前 主机可能已被入侵。
5)lastb:读取 /var/log/btmp 文件,显示登入系统失败的用户信息
lastb 命令用于查询登录失败的用户记录,如登录的用户名错误、密码不正确等情况都将记录在案。登录失败的情况属于安全事件,因为这表示可能有人在尝试猜解你的密码。除 了使用 lastb 命令查看以外,也可以直接从安全日志文件/var/log/secure 中获得相关信息。
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、日志管理策略
-
及时做好备份和归档
-
延长日志保存期限
-
控制日志访问权限
- 日志中可能会包含各类敏感信息,如账户、口令等。
-
集中管理日志
- 将服务器的日志文件发到统一的日志文件服务器
- 便于日志信息的统一收集、整理和分析
- 杜绝日志信息的意外丢失、恶意篡改或删除
十一、内核及系统日志管理
1、系统日志相关服务
CentOS 5 之前版本采用的日志管理系统服务
- syslogd: system application 记录应用日志
- klogd: linux kernel 记录内核日志
事件记录格式:
- 日期时间 主机 进程[pid]: 事件内容
C/S架构:
- 通过TCP或UDP协议的服务完成日志记录传送,将分布在不同主机的日志实现集中管理
1、sysklogd 系统日志服务介绍
CentOS 5 之前版本采用的日志管理系统服务
- syslogd: system application 记录应用日志
- klogd: linux kernel 记录内核日志
事件记录格式:
- 日期时间 主机 进程[pid]: 事件内容
C/S架构:
- 通过TCP或UDP协议的服务完成日志记录传送,将分布在不同主机的日志实现集中管理
2、rsyslog 系统日志服务
rsyslog是CentOS 6以后版本的系统管理服务:它提供了高性能,出色的安全性和模块化设计。尽管rsyslog最初是常规的syslogd,但发展成为一种瑞士军刀式的记录工具,能够接受来自各种来源的输入,并将其转换,然后输出到不同的目的地。
当应用有限的处理时,RSYSLOG每秒可以将超过一百万的消息传递到本地目的地。即使在远程的目的地和更精细的处理中,性能通常也被认为是惊人的”。
官网:
rsyslog 特性:
- 多线程
- UDP, TCP, SSL, TLS, RELP
- MySQL, PGSQL, Oracle实现日志存储
- 强大的过滤器,可实现过滤记录日志信息中任意部分
- 自定义输出格式
[root@localhost ~]#rpm -qi rsyslog
Name : rsyslog
Version : 8.24.0
Release : 12.el7
Architecture: x86_64
Install Date: 2021年08月06日 星期五 20时59分53秒
Group : System Environment/Daemons
Size : 2001814
License : (GPLv3+ and ASL 2.0)
Signature : RSA/SHA256, 2017年08月11日 星期五 03时43分05秒, Key ID 24c6a8a7f4a80eb5
Source RPM : rsyslog-8.24.0-12.el7.src.rpm
Build Date : 2017年08月07日 星期一 08时56分12秒
Build Host : c1bm.rdu2.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://www.rsyslog.com/
Summary : Enhanced system logging and kernel message trapping daemon
Description :
Rsyslog is an enhanced, multi-threaded syslog daemon. It supports MySQL,
syslog/TCP, RFC 3195, permitted sender lists, filtering on any message part,
and fine grain output format control. It is compatible with stock sysklogd
and can be used as a drop-in replacement. Rsyslog is simple to set up, with
advanced features suitable for enterprise-class, encryption-protected syslog
relay chains.
3、ELK
ELK:由Elasticsearch、Logstash、Kibana三个软件组成。
- 非关系型分布式数据库基于apache软件基金会jakarta项目组的项目lucene
- Elasticsearch是个开源分布式搜索引擎,可以处理大规模日志数据,比如:Nginx、Tomcat、系统日志等功能
- Logstash对日志进行收集、分析,过滤,并将其存储供以后使用
- Kibana 可以提供的日志分析友好的 Web 界面
2、rsyslog管理
1 系统日志术语
- facility:设施,从功能或程序上对日志进行归类
#内置分类
auth(验证), authpriv, cron(定时任务), daemon,ftp,kern, lpr, mail, news, security(auth), user, uucp, syslog
#自定义的分类
local0-local7
- Priority 优先级别,从低到高排序
debug, info, notice, warn(warning), err(error), crit(critical), alert, emerg(panic)
- 参看帮助: man 3 syslog,man logger
[root@localhost ~]# yum -y install man-pages
[root@localhost ~]# man 3 syslog
level
This determines the importance of the message. The levels are, in order of decreasing impor‐
tance:
LOG_EMERG system is unusable
LOG_ALERT action must be taken immediately
LOG_CRIT critical conditions
LOG_ERR error conditions
LOG_WARNING warning conditions
LOG_NOTICE normal, but significant, condition
LOG_INFO informational message
LOG_DEBUG debug-level message
服务名称(即什么服务产生的日志):
2 rsyslog 相关文件
- 程序包:rsyslog
- 主程序:/usr/sbin/rsyslogd
- CentOS 6:/etc/rc.d/init.d/rsyslog {start|stop|restart|status}
- CentOS 7,8:/usr/lib/systemd/system/rsyslog.service
- 配置文件:/etc/rsyslog.conf,/etc/rsyslog.d/*.conf
- 库文件: /lib64/rsyslog/*.so
3 rsyslog 配置文件
/etc/rsyslog.conf 配置文件格式(由三部分组成):
- MODULES:相关模块配置
- GLOBAL DIRECTIVES:全局配置
- RULES:日志记录相关的规则配置
查看/etc/rsyslog.conf 文件中的RULES模块:
RULES配置格式:
facility.priority;
#分类 优先级
# priority 的表示 #
*: 所有级别
none:没有级别,即不记录
PRIORITY:指定级别(含)以上的所有级别
=PRIORITY:仅记录指定级别的日志信息
文件路径:通常在/var/log/,文件路径前的-表示异步写入。
用户:将日志事件通知给指定的用户,* 表示登录的所有用户。
日志服务器:@host,把日志送往至指定的远程UDP日志服务器;@@host,将日志发送到远程TCP日志服务器。
管道: | COMMAND,转发给其它命令处理。
3、rsyslog 应用实例
1 将ssh服务的日志单独设置
实验步骤:
步骤1:修改rsyslog服务的配置文件/etc/rsyslog.conf,设置LOCAL0对应的日志路径。
[root@localhost ~]# vim /etc/rsyslog.conf
------------------------
local0.* /var/log/sshd.log
步骤2:修改ssh服务的配置文件/etc/ssh/sshd_config,将ssh的日志修改为记录在LOCAL0对应的路径下。
(ssh服务的日志默认放在authpriv服务对应的路径下,需先将该行注释掉。)
[root@localhost ~]# vim /etc/ssh/sshd_config
------------------------
#SyslogFacility AUTHPRIV //原路径,注释掉这一行
SyslogFacility LOCAL0 //添加自定义路径
步骤3:重启 rsyslog 服务和 ssh 服务。
[root@localhost ~]# systemctl restart {rsyslog,sshd}
步骤4:打开第二台机器,远程连接原服务器。故意输错2次密码,稍后查看原服务器的日志。
[root@192 ~]# ssh 192.168.72.10
root@192.168.72.10's password:
Permission denied, please try again.
root@192.168.72.10's password:
Permission denied, please try again.
root@192.168.72.10's password:
步骤5:查看原服务器的日志记录。/var/log/sshd.log 成功记录了第二台机器的行为。
[root@localhost ~]# tail -3 /var/log/sshd.log
Mar 12 01:32:04 localhost sshd[8398]: Connection closed by 192.168.72.129 port 55592 [preauth]
Mar 12 01:32:29 localhost sshd[9433]: Failed password for root from 192.168.72.129 port 55594 ssh2
Mar 12 01:32:48 localhost sshd[9433]: Failed password for root from 192.168.72.129 port 55594 ssh2
2 网络日志(远程日志功能)
远程日志,即通过网络,将本地的日志远程备份到另一台机器,这样,就算本机系统崩溃,我们可以查看另一台机器备份的日志,来排查故障。
实验思路:
假设服务器A需要将日志备份到服务器B,那么A是发送方,B是接收方。
接收方需要开启TCP功能(或UDP功能)和514接口,发送方需填写想要传输的日志和接收方的地址。
实验步骤:
步骤1:接收方开启TCP功能和514端口(编辑rsyslog的配置文件 /etc/rsyslog.conf)。
关闭防火墙
systemctl stop firewalld //关闭防火墙
编辑配置文件,开启TCP功能和514端口(去掉这两行原有的#号);
重启rsyslog 服务;
检查514端口是否开启。
[root@192 ~]# systemctl stop firewalld //关闭防火墙
[root@192 ~]# vim /etc/rsyslog.conf //编辑配置文件
------------------------
# Provides TCP syslog reception
$ModLoad imtcp //开启TCP功能
$InputTCPServerRun 514 //开启514端口
[root@192 ~]# systemctl restart rsyslog //重启日志服务
[root@192 ~]# ss -ntap | grep 514 //检查514端口是否开启
LISTEN 0 25 *:514 *:* users:(("rsyslogd",pid=12528,fd=3))
FIN-WAIT-2 0 0 192.168.72.129:514 192.168.72.10:42556
LISTEN 0 25 :::514 :::* users:(("rsyslogd",pid=12528,fd=4))
步骤2:发送方填写需要传输的日志和接收方的IP地址(编辑配置文件 /etc/rsyslog.conf)。
关闭防火墙;
编辑配置文件,填写需要传输的日志和接收方地址;
重启rsyslog 服务;
测试日志打印。
(@地址表示使用UDP功能;@@地址表示使用TCP地址)
[root@localhost log]# systemctl stop firewalld //关闭防火墙
[root@localhost log]# vim /etc/rsyslog.conf //编辑配置文件
------------------------
*.info;mail.none;authpriv.none;cron.none @@192.168.72.129
[root@localhost log]# systemctl restart rsyslog //重启日志服务
[root@localhost log]# logger "this test 777777" //测试日志打印
[root@localhost log]# tail -1 /var/log/messages //查看日志记录
Mar 8 12:14:51 localhost root: this test 777777
步骤3:查看接收方能否成功接收日志记录。
接收方服务器成功记录测试日志。
[root@192 ~]# grep 7777 /var/log/messages
Mar 8 12:12:44 localhost root: this test 777777
Mar 8 12:14:51 localhost root: this test 777777
Mar 8 12:21:20 localhost root: this test 777777
Mar 8 12:23:30 localhost root: this test 777777
十一、日志管理工具 journalctl
CentOS 7 以后,利用Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核及系统日志和应用日志)。
日志的配置文件:
/etc/systemd/journald.conf
journalctl命令格式:
journalctl [OPTIONS...] [MATCHES...]
示例:
1)journalctl,查看所有日志。 默认情况下,只保存本次启动的日志。
[root@localhost ~]# journalctl | head
-- Logs begin at 六 2022-03-12 18:55:23 CST, end at 六 2022-03-12 19:05:17 CST. --
3月 12 18:55:23 localhost.localdomain systemd-journal[87]: Runtime journal is using 8.0M (max allowed 91.1M, trying to leave 136.7M free of 903.6M available → current limit 91.1M).
3月 12 18:55:23 localhost.localdomain kernel: Initializing cgroup subsys cpuset
3月 12 18:55:23 localhost.localdomain kernel: Initializing cgroup subsys cpu
3月 12 18:55:23 localhost.localdomain kernel: Initializing cgroup subsys cpuacct
3月 12 18:55:23 localhost.localdomain kernel: Linux version 3.10.0-693.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) ) #1 SMP Tue Aug 22 21:09:27 UTC 2017
3月 12 18:55:23 localhost.localdomain kernel: Command line: BOOT_IMAGE=/vmlinuz-3.10.0-693.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet
3月 12 18:55:23 localhost.localdomain kernel: Disabled fast string operations
3月 12 18:55:23 localhost.localdomain kernel: e820: BIOS-provided physical RAM map:
3月 12 18:55:23 localhost.localdomain kernel: BIOS-e820: [mem 0x0000000000000000-0x000000000009ebff] usable
2)journalctl -k, 只查看内核日志(不显示应用日志)。
[root@localhost ~]# journalctl -k |head
-- Logs begin at 六 2022-03-12 18:55:23 CST, end at 六 2022-03-12 19:13:14 CST. --
3月 12 18:55:23 localhost.localdomain kernel: Initializing cgroup subsys cpuset
3月 12 18:55:23 localhost.localdomain kernel: Initializing cgroup subsys cpu
3月 12 18:55:23 localhost.localdomain kernel: Initializing cgroup subsys cpuacct
3月 12 18:55:23 localhost.localdomain kernel: Linux version 3.10.0-693.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) ) #1 SMP Tue Aug 22 21:09:27 UTC 2017
3月 12 18:55:23 localhost.localdomain kernel: Command line: BOOT_IMAGE=/vmlinuz-3.10.0-693.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet
3月 12 18:55:23 localhost.localdomain kernel: Disabled fast string operations
3月 12 18:55:23 localhost.localdomain kernel: e820: BIOS-provided physical RAM map:
3月 12 18:55:23 localhost.localdomain kernel: BIOS-e820: [mem 0x0000000000000000-0x000000000009ebff] usable
3月 12 18:55:23 localhost.localdomain kernel: BIOS-e820: [mem 0x000000000009ec00-0x000000000009ffff] reserved
3)journalctl -b ,查看本次启动的日志。
journalctl -b -0,查看本次启动的日志。
journalctl -b -1,查看上一次启动的日志。
以此类推。
[root@localhost ~]# journalctl -b -0 |head -5 //查看本次启动的日志
-- Logs begin at 六 2022-03-12 18:55:23 CST, end at 六 2022-03-12 19:20:01 CST. --
3月 12 18:55:23 localhost.localdomain systemd-journal[87]: Runtime journal is using 8.0M (max allowed 91.1M, trying to leave 136.7M free of 903.6M available → current limit 91.1M).
3月 12 18:55:23 localhost.localdomain kernel: Initializing cgroup subsys cpuset
3月 12 18:55:23 localhost.localdomain kernel: Initializing cgroup subsys cpu
3月 12 18:55:23 localhost.localdomain kernel: Initializing cgroup subsys cpuacct
4)查看指定时间的日志。
journalctl --since="2022-03-05 18:10:30"
journalctl --since "20 min ago"
journalctl --since yesterday
journalctl --since "2022-03-05" --until "2022-03-10 03:00"
journalctl --since 09:00 --until "1 hour ago"
5) journalctl -n <数字>,显示尾部指定行数。默认10行。
journalctl -n //显示尾部的最新10行日志
journalctl -n 20 //显示尾部的最新20行日志
6)journalctl -f,实时滚动显示最新日志(显示最新10行)
[root@localhost ~]# journalctl -f
-- Logs begin at 六 2022-03-12 18:55:23 CST. --
3月 12 19:11:12 localhost.localdomain systemd[1]: Starting Cleanup of Temporary Directories...
3月 12 19:11:12 localhost.localdomain systemd[1]: Started Cleanup of Temporary Directories.
3月 12 19:13:14 localhost.localdomain chronyd[815]: Selected source 111.230.189.174
3月 12 19:20:01 localhost.localdomain systemd[1]: Started Session 6 of user root.
3月 12 19:20:01 localhost.localdomain systemd[1]: Starting Session 6 of user root.
3月 12 19:20:01 localhost.localdomain CROND[20970]: (root) CMD (/usr/lib64/sa/sa1 1 1)
3月 12 19:30:01 localhost.localdomain systemd[1]: Started Session 7 of user root.
3月 12 19:30:01 localhost.localdomain systemd[1]: Starting Session 7 of user root.
3月 12 19:30:01 localhost.localdomain CROND[33816]: (root) CMD (/usr/lib64/sa/sa1 1 1)
3月 12 19:32:32 localhost.localdomain chronyd[815]: Source 84.16.67.12 replaced with 139.199.214.202
7) 查看指定服务的日志
journalctl /usr/lib/systemd/systemd
8)查看指定进程的日志
journalctl _PID=1 //查看某个路径的脚本的日志
journalctl /usr/bin/bash
9)查看指定用户的日志
journalctl _UID=33 --since today
10)查看某个 Unit 的日志;
实时滚动显示某个 Unit 的最新日志
journalctl -u nginx.service
journalctl -u nginx.service --since today
journalctl -u nginx.service -f //实时滚动显示某个 Unit 的最新日志
11)合并显示多个 Unit 的日志
journalctl -u nginx.service -u php-fpm.service --since today
12)查看指定优先级的日志,表示仅显示小于或等于此等级的日志 (也就是重要程度等于或高于此等级的日志)。
共有8级
0: emerg
1: alert
2: crit
3: err
4: warning
5: notice
6: info
7: debug
journalctl -p 3 -b //显示重要程度等于和高于err的日志
13)其他选项
#日志默认分页输出,--no-pager 改为正常的标准输出
journalctl --no-pager
#以 JSON 格式(单行)输出
journalctl -b -u nginx.service -o json
#以 JSON 格式(多行)输出,可读性更好
journalctl -b -u nginx.serviceqq -o json-pretty
#显示日志占据的硬盘空间
journalctl --disk-usage
#指定日志文件占据的最大空间
journalctl --vacuum-size=1G
#指定日志文件保存多久
journalctl --vacuum-time=1years