随笔- 91  文章- 0  评论- 2  阅读- 8960 

inode和block

概述

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

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

  • block(块)

    • 连续的八个扇区组成一个block
    • 是文件存取的最小单位
  • inode(索引节点)

    • 中文译名为“索引节点”,也叫 i 节点
    • 用于存储文件元信息
  • 一个文件必须占用一个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

inode 表结构

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

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

每一个inode表记录对应保存了文件的元信息:

  • inode number 节点号
  • 文件类型
  • 文件的读、写、执行权限
  • 文件属主的UID
  • 文件属组的GID
  • 链接数(指向这个文件名路径名称个数)
  • 该文件的大小和不同的时间戳
  • 指向磁盘上文件的数据块指针
  • 有关文件的其他数据

Linux系统文件三个主要的时间属性

  • atime(access time):最近访问

    最后一次访问文件的时间

  • mtime(modify):最近更改

    最后一次更改文件内容的时间

  • ctime(change time):最近改动

    最后一次改变文件元信息的时间

注意:

  • 不打开文件的话,atime不变。例如使用echo追加内容,atime不会变,因为文件没有被打开访问。
  • 修改文件内容的话,mtime会变,ctime也会变。
  • 如果只修改文件的权限,ctime变,mtime不变。

目录文件的结构

目录是个特殊文件,目录文件的内容保存了此目录中文件的列表,以及inode number对应关系。

  • 目录文件的结构非常简单,就是一系列目录项(dirent)的列表。
  • 每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。
  • 一个目录是目录下的文件名和文件inode号之间的映射。
  • 每个inode都有一个号码,操作系统用inode号码来识别不同的文件。
  • Linux系统内部不使用文件名,而使用inode号码来识别文件。
  • 对于用户,文件名只是Inode号码便于识别的别称。

inode的号码

用户通过文件名打开文件时,系统内部的过程:

  1. 用户访问文件时,系统先去查找文件所属目录中的目录项,根据文件名找到对应的inode号码。

  2. 通过inode号码,获取inode信息。

  3. 根据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 与文件存储

硬盘分区后的结构

 

 

inode 的大小

  • inode也会消耗硬盘空间

    • 每个inode的大小一般是128字节或256字节
  • 格式化文件系统时确定inode的总数

    • 如果磁盘还有空间,但inode号被全部占用,也无法创建新文件。
    • inode号在同一个文件系统内唯一,在不同的文件系统中可以重复。
  • 使用 "df -i" 命令可以查看每个硬盘分区的inode总数和已经使用的数量


复制代码
复制代码

[root@localhost ~]# df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/mapper/centos-root 26214400 122074 26092326 1% /
devtmpfs 221158 402 220756 1% /dev
tmpfs 225137 1 225136 1% /dev/shm
tmpfs 225137 602 224535 1% /run
tmpfs 225137 16 225121 1% /sys/fs/cgroup
/dev/sda1 2621440 328 2621112 1% /boot
tmpfs 225137 6 225131 1% /run/user/42
tmpfs 225137 18 225119 1% /run/user/0
/dev/sr0 0 0 0 - /run/media/root/CentOS 7 x86_64

复制代码
复制代码

 

 

inode的特殊作用

查看文件名对应的inode号码的方式

查看文件名对应的inode号码:           ls -i 文件名
 
查看文件信息中的inode号码:            stat 文件名

 

 

 

inode的特殊作用

由于inode号码与文件名分离,导致一些Unix/Linux系统具有以下的现象:

当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件。

 

 

 

 

复制代码
复制代码
[root@localhost ~]# ls -i       //查看文件的inode号

67160130 anaconda-ks.cfg 102432444 公共 2426413 文档
68780574 initial-setup-ks.cfg 67160141 模板 34233170 下载
2438205 test 102432447 视频 34233171 音乐
67639853 twst 67160142 图片 2426412 桌面

[root@localhost ~]# find -inum 2438205 -delete      //通过inode号删除文件
[

[root@localhost ~]# ls             //查看目录内容,文件已被删除

anaconda-ks.cfg twst 模板 图片 下载 桌面
initial-setup-ks.cfg 公共 视频 文档 音乐

复制代码
复制代码

命令和inode号之间的关系

cp 命令:

  • 分配一个空闲的inode号,在inode表中生成新条目
  • 在目录中创建一个目录项,将名称与inode编号关联
  • 拷贝数据生成新的文件

rm 命令:

  • 硬链接数递减,从而释放的inode号可以被重用
  • 把数据块放在空闲列表中
  • 删除目录项
  • 数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖

mv命令:

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

    不影响inode表(除时间戳)或磁盘上的数据位置;

    系统会删除旧的目录对应关系,新建目录对应关系。

硬链接和软链接


对比项 硬链接 软链接(符号链接)
本质 本质是同一个文件 本质不是同一个文件
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
复制代码
复制代码

 

注意:删除文件前,一定要确认清除该文件是否为有效文件。

日志文件介绍与分析

日志文件介绍

日志的功能:

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

日志文件的分类:

  • 内核及系统日志:

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

  • 用户日志:

    记录用户登录及退出系统的相关信息,包括用户名、登录的终端、登录时间、来源主机、正在使用的进程操作等。

  • 程序日志:


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

日志保存位置:

  • 默认位于:/var/log 目录下

主要日志文件介绍:

日志 位置 描述
内核即公共消息日志 /var/log/messages 它是核心系统日志文件,其中包含了系统启动时的引导信息,以及系统运行时的其他状态消息。I/O 错误、网络错误和其他系统错误都会记录到此文件中。其他信息,比如某个人的身份切换为 root,以及用户自定义安装软件的日志,也会在这里列出。
计划任务日志 /var/log/cron 记录与系统定时任务相关的曰志
系统引导日志 /var/log/dmesg 记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息。
邮件系统日志 /var/log/maillog 记录邮件信息的曰志
用户登录日志 /var/log/lastlog 记录系统中所有用户最后一次的登录时间的曰志。这个文件是二进制文件.不能直接用 vi 查看,而要使用 lastlog 命令查看
  /var/log/secure 记录验证和授权方面的倍息,只要涉及账户和密码的程序都会记录。比如系统的登录、ssh的登录、su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中
  /var/log/wtmp 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样,这个文件也是二进制文件,不能直接用 vi 查看,而要使用 last 命令查看
  /var/tun/ulmp 记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。同样,这个文件不能直接用 vi 查看,而要使用w、who、users等命令查看
## 内核及系统日志    

 

由系统服务 rsyslog 统一管理,根据其主配置文件 /etc/rsyslog.conf。

  • 软件包:rsyslog-8.24.0-12.el7.x86_64 (可使用 ”rpm -q“ 命令查看)
  • 主要程序:/sbin/rsyslogd
  • 配置文件:/etc/rsyslog.conf (可使用 ”rpm -qc“ 命令查看)

日志消息的级别:


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

日志记录的一般格式:

  • 事件产生的时间。
  • 产生事件的服务器的主机名。
  • 产生事件的服务名或程序名。
  • 事件的具体信息。

 

 

用户日志分析

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

  • /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 命令只是简单地输出当前登录的用户名称,每个显示的用户名对应一个登录会话。 如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数。

[root@localhost ~]# users
root root root root

 

 

who:查看当前登录的用户、终端、登录时间、IP地址。

who命令用于报告当前登录到系统中的每个用户的信息。使用该命令,系统管理员可

以查看当前系统存在哪些不合法用户,从而对其进行审计和处理。who 的默认输出包括用

户名、终端类型、登录日期及远程主机。

[root@localhost ~]# who
root :0 2022-09-15 10:19 (:0)
root pts/1 2022-10-10 14:45 (:0)
root pts/2 2022-10-10 14:47 (192.168.68.1)

 

 

 

w:查看当前登录的用户、终端、IP地址、登录时间、占用CPU的情况、进程等。

w 命令用于显示当前系统中的每个用户及其所运行的进程信息,比 users、who 命令的 输出内容要丰富一些。

复制代码
复制代码

[root@localhost ~]# w
17:39:27 up 5:09, 3 users, load average: 0.05, 0.03, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root :0 :0 159月22 ?xdm? 1:05 0.16s /usr/libe
root pts/1 :0 14:45 2:52m 0.02s 0.02s bash
root pts/2 192.168.68.1 14:47 7.00s 0.07s 0.02s w

复制代码
复制代码

 

 

last: 读取 /var/log/wtmp 文件,显示登录系统的用户信息。

last 命令用于查询成功登录到系统的用户记录,最近的登录情况将显示在最前面。通过 last 命令可以及时掌握 Linux 主机的登录情况,若发现未经授权的用户登录过,则表示当前 主机可能已被入侵。

复制代码
复制代码
[root@localhost ~]# last -n 3
root     pts/2        192.168.32.1     Sat Aug 13 17:06   still logged in   
111      :1           :1               Sat Aug 13 16:27   still logged in   
root     pts/1        192.168.32.1     Sat Aug 13 16:16   still logged in   

wtmp begins Sat Jul 30 21:18:11 2022


[root@localhost ~]# last -t 202208013200000 |head -5
last: Invalid time value "202208013200000"
Usage: last [-num | -n num] [-f file] [-t YYYYMMDDHHMMSS] [-R] [-adioxFw] [username..] [tty..]
复制代码
复制代码

 

 

 

 

 

lastb:读取 /var/log/btmp 文件,显示登入系统失败的用户信息。

lastb 命令用于查询登录失败的用户记录,如登录的用户名错误、密码不正确等情况都将记录在案。登录失败的情况属于安全事件,因为这表示可能有人在尝试猜解你的密码。除 了使用 lastb 命令查看以外,也可以直接从安全日志文件/var/log/secure 中获得相关信息。


1
2
3
4
5
6
[root@localhost ~]# lastb
root     pts/1                         Sat Aug 13 15:16 - 15:16  (00:00)   
222      pts/1                         Sat Aug 13 15:14 - 15:14  (00:00)   
root     pts/1                         Sat Aug 13 15:04 - 15:04  (00:00)   
 
btmp begins Sat Aug 13 15:04:33 2022

  

 

 

程序日志分析

由相应的应用程序独立进行管理:

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

日志管理策略

及时做好备份和归档

延长日志保存期限

控制日志访问权限

  • 日志中可能会包含各类敏感信息,如账户、口令等。 集中管理日志

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

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

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

内核及系统日志管理

系统日志相关服务

sysklogd 系统日志服务介绍

CentOS 5 之前版本采用的日志管理系统服务

  • syslogd: system application 记录应用日志
  • klogd: linux kernel 记录内核日志

事件记录格式:

  • 日期时间 主机 进程[pid]: 事件内容

C/S架构:

  • 通过TCP或UDP协议的服务完成日志记录传送,将分布在不同主机的日志实现集中管理

rsyslog 系统日志服务

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

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

rsyslog 特性:

  • 多线程
  • UDP, TCP, SSL, TLS, RELP
  • MySQL, PGSQL, Oracle实现日志存储
  • 强大的过滤器,可实现过滤记录日志信息中任意部分
  • 自定义输出格式
  • 适用于企业级中继

rsyslog管理

系统日志术语

  • facility:设施,从功能或程序上对日志进行归类
1
2
3
4
 #内置分类
 auth(验证), authpriv, cron(定时任务), daemon,ftp,kern, lpr, mail, news, security(auth), user, uucp, syslog
 #自定义的分类
 local0-local7

  

  • Priority 优先级别,从低到高排序
1
 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
    复制代码
    复制代码
  • 日志等级:
级别消息级别具体描述
0 EMERG 紧急 会导致主机系统不可用的情况
1 ALERT 警告 必须马上采取措施解决的问题
2 CRIT 严重 比较严重的情况
3 ERR 错误 运行出现错误
4 WARNING 提醒 可能影响系统功能,需要提醒用户的重要事件
5 NOTICE 注意 不会影响正常功能,但是需要注意的事件
6 INFO 信息 一般信息
7 DEBUG 调试 程序或系统调试信息等

 

  • 服务名称(即什么服务产生的日志):
服务名称 说 明
auth(LOG AUTH) 安全和认证相关消息 (不推荐使用authpriv替代)
cron (LOG_CRON) 安全和认证相关消息(私有的)
daemon (LOG_DAEMON) 系统定时任务cront和at产生的日志
(LOG_DAEMON) 与各个守护进程相关的曰志
ftp (LOG_FTP) ftp守护进程产生的曰志
kern(LOG_KERN) 内核产生的曰志(不是用户进程产生的)
Iocal0 ~ local7 (LOG_LOCAL0-7) 为本地使用预留的服务
lpr (LOG_LPR) 打印产生的日志
mail (LOG_MAIL) 邮件收发信息
news (LOG_NEWS) 与新闻服务器相关的日志
syslog (LOG_SYSLOG) 存syslogd服务产生的曰志信息(虽然服务名称己经改为reyslogd,但是很多配罝依然沿用了 syslogd服务的,所以这里并没有修改服务名称)
user (LOG_USER) 用户等级类别的日志信息
uucp (LOG_UUCP> uucp子系统的日志信息,uucp是早期Linux系统进行数据传递的协议,后来 也常用在新闻组服务中

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

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,转发给其它命令处理。
复制代码
复制代码

日志管理工具 journalctl

CentOS 7 以后,利用Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核及系统日志和应用日志)。

日志的配置文件:

 /etc/systemd/journald.conf

journalctl命令格式:

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

示例:

journalctl,查看所有日志。 默认情况下,只保存本次启动的日志。

复制代码
复制代码

[root@localhost ~]# journalctl | head
-- Logs begin at 一 2022-10-10 22:27:49 CST, end at 一 2022-10-10 22:28:46 CST. --
10月 10 22:27:49 localhost.localdomain systemd-journal[97]: Runtime journal is using 8.0M (max allowed 87.9M, trying to leave 131.9M free of 871.4M available → current limit 87.9M).
10月 10 22:27:49 localhost.localdomain kernel: Initializing cgroup subsys cpuset
10月 10 22:27:49 localhost.localdomain kernel: Initializing cgroup subsys cpu
10月 10 22:27:49 localhost.localdomain kernel: Initializing cgroup subsys cpuacct
10月 10 22:27:49 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
10月 10 22:27:49 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 LANG=zh_CN.UTF-8
10月 10 22:27:49 localhost.localdomain kernel: e820: BIOS-provided physical RAM map:
10月 10 22:27:49 localhost.localdomain kernel: BIOS-e820: [mem 0x0000000000000000-0x000000000009e7ff] usable
10月 10 22:27:49 localhost.localdomain kernel: BIOS-e820: [mem 0x000000000009e800-0x000000000009ffff] reserved

复制代码
复制代码

 

 

journalctl -k, 只查看内核日志(不显示应用日志)。

复制代码
复制代码

[root@localhost ~]# journalctl -k | head
-- Logs begin at 一 2022-10-10 22:27:49 CST, end at 一 2022-10-10 22:30:01 CST. --
10月 10 22:27:49 localhost.localdomain kernel: Initializing cgroup subsys cpuset
10月 10 22:27:49 localhost.localdomain kernel: Initializing cgroup subsys cpu
10月 10 22:27:49 localhost.localdomain kernel: Initializing cgroup subsys cpuacct
10月 10 22:27:49 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
10月 10 22:27:49 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 LANG=zh_CN.UTF-8
10月 10 22:27:49 localhost.localdomain kernel: e820: BIOS-provided physical RAM map:
10月 10 22:27:49 localhost.localdomain kernel: BIOS-e820: [mem 0x0000000000000000-0x000000000009e7ff] usable
10月 10 22:27:49 localhost.localdomain kernel: BIOS-e820: [mem 0x000000000009e800-0x000000000009ffff] reserved
10月 10 22:27:49 localhost.localdomain kernel: BIOS-e820: [mem 0x00000000000dc000-0x00000000000fffff] reserved

复制代码
复制代码

 

 

journalctl -b ,查看本次启动的日志。

journalctl -b -0,查看本次启动的日志。

journalctl -b -1,查看上一次启动的日志。

查看指定时间的日志。

  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-10-10 22:27:49 CST. --
10月 10 22:28:46 localhost.localdomain dbus-daemon[783]: dbus[783]: [system] Activating service name='org.freedesktop.problems' (using servicehelper)
10月 10 22:28:46 localhost.localdomain dbus[783]: [system] Successfully activated service 'org.freedesktop.problems'
10月 10 22:28:46 localhost.localdomain dbus-daemon[783]: dbus[783]: [system] Successfully activated service 'org.freedesktop.problems'
10月 10 22:30:01 localhost.localdomain systemd[1]: Started Session 3 of user root.
10月 10 22:30:01 localhost.localdomain systemd[1]: Starting Session 3 of user root.
10月 10 22:30:01 localhost.localdomain CROND[2655]: (root) CMD (/usr/lib64/sa/sa1 1 1)
10月 10 22:32:45 localhost.localdomain chronyd[836]: Selected source 202.118.1.81
10月 10 22:32:45 localhost.localdomain chronyd[836]: System clock wrong by 42.451070 seconds, adjustment started
10月 10 22:33:28 localhost.localdomain chronyd[836]: System clock was stepped by 42.451070 seconds
10月 10 22:33:28 localhost.localdomain systemd[1]: Time has been changed
10月 10 22:34:28 localhost.localdomain gnome-software-service.desktop[2162]: 14:34:28:0811 Gs no app for changed alternate-tab@gnome-shell-extensions.gcampax.github.com
10月 10 22:34:28 localhost.localdomain gnome-software-service.desktop[2162]: 14:34:28:0814 Gs no app for changed apps-menu@gnome-shell-extensions.gcampax.github.com
10月 10 22:34:28 localhost.localdomain gnome-software-service.desktop[2162]: 14:34:28:0816 Gs no app for changed window-list@gnome-shell-extensions.gcampax.github.com
10月 10 22:34:28 localhost.localdomain gnome-software-service.desktop[2162]: 14:34:28:0818 Gs no app for changed places-menu@gnome-shell-extensions.gcampax.github.com
10月 10 22:34:28 localhost.localdomain gnome-software-service.desktop[2162]: 14:34:28:0819 Gs no app for changed launch-new-instance@gnome-shell-extensions.gcampax.github.com


 

复制代码
复制代码

 

 

查看指定服务的日志

 journalctl /usr/lib/systemd/systemd

查看指定进程的日志

 journalctl _PID=1            //查看某个路径的脚本的日志
 journalctl /usr/bin/bash

查看指定用户的日志

 journalctl _UID=33 --since today
复制代码

查看某个 Unit 的日志

实时滚动显示某个 Unit 的最新日志

 journalctl -u nginx.service
 journalctl -u nginx.service --since today
 ​
 journalctl -u nginx.service -f    //实时滚动显示某个 Unit 的最新日志

查看指定优先级的日志,表示仅显示小于或等于此等级的日志 (也就是重要程度等于或高于此等级的日志)。

复制代码
复制代码
 共有8级 
 0: emerg
 1: alert
 2: crit
 3: err
 4: warning
 5: notice
 6: info
 7: debug
 ​
 journalctl -p 3 -b    //显示重要程度等于和高于err的日志
复制代码
复制代码

其他选项

复制代码
复制代码
 #日志默认分页输出,--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
复制代码
复制代码
 posted on   游明诚  阅读(357)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示