目录
一、Inode表
1.1、inode的结构
1.2、inode表
1.3、inode的工作原理
1.4、软链接与硬链接的区别
1.5、查看inode
二、日志文件
2.1、常见日志
2.2、查看用户及用户日志的命令
2.2.1、w,who
2.2.2、last,lastb,lastlog
三、系统日志管理之rsyslog
3.1、日志优先级
3.2、rsyslog
3.1、rsyslog配置文件格式
3.2、rsyslog日志规则
3.3、示例:将ssh服务的日志输出到指定文件
3.3.1、修改ssh服务配置文件
3.3.2、修改rsyslog配置文件
3.3.3、关闭selinux安全策略,重启相关服务
3.4、示例:实现远程传输日志功能
3.4.1、修改服务端rsyslog配置文件
3.4.2、修改客户端rsyslog配置文件
3.4.3、通过客户端查看服务端日志信息
四、journalctl日志管理工具
Inode时一种数据结构,用于存储文件或目录的元数据。每个文件或目录都有一个唯一的inode,用于存储元数据和指向文件实际数据块的指针。而inode表则是文件系统中所有inode的集合,记录了文件系统中所有文件的元信息。
inode表存储了所有文件和目录的inode,文件系统在创建时会分配一个inode表,并在其中为文件系统中的每个文件分配一个inode。
特性 | 硬链接 | 软链接 |
本质 | 直接指向文件的inode,是同一个文件的另一个文件名 | 独立的文件,存储目标文件的路径(类似快捷方式) |
inode | 与源文件共享相同的inode | 独立的inode,与目标文件不同 |
链接数 | 创建或删除的硬链接,链接数随之增加减少 | 链接数不会改变 |
文件夹 | 不支持 | 支持 |
删除源文件 | 链接文件的访问不受影响,链接数减一 | 无法访问链接文件 |
文件类型 | 与源文件相同 | 独立于源文件 |
文件大小 | 与源文件相同 | 源文件的路径长度为其大小 |
[root@localhost data]# df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
devtmpfs 228606 391 228215 1% /dev
tmpfs 232875 1 232874 1% /dev/shm
tmpfs 232875 893 231982 1% /run
tmpfs 232875 16 232859 1% /sys/fs/cgroup
/dev/mapper/centos-root 5242880 162616 5080264 4% /
/dev/sda1 524288 341 523947 1% /boot
tmpfs 232875 9 232866 1% /run/user/42
tmpfs 232875 1 232874 1% /run/user/0
[root@localhost /]# ls -i
72110 apps 26796625 data 25165939 home 84 media 1 proc 74282 sbin 8388680 tmp
74278 bin 3 dev 81 lib 8388814 mnt 16797761 root 25165940 srv 16816383 usr
64 boot 8388673 etc 83 lib64 16816446 opt 8917 run 1 sys 25165889 var
[root@localhost /]# stat /etc/passwd
文件:"/etc/passwd"
大小:2355 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:8396702 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:system_u:object_r:passwd_file_t:s0
最近访问:2025-02-22 17:20:01.508625054 +0800
最近更改:2025-02-21 17:12:08.337766159 +0800
最近改动:2025-02-21 17:12:08.337766159 +0800
创建时间:-
日志文件位置 | 日志文件说明 |
---|---|
/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等命令查看 |
w命令:who的缩写,显示已登录用户及其正在执行的进程。
who命令:显示当前登录用户的基本信息,比w命令更简洁。
[root@localhost /]# w
22:23:36 up 9:20, 1 user, load average: 0.07, 0.03, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.153.1 21:13 0.00s 0.09s 0.00s w
[root@localhost /]# who
root pts/0 2025-02-22 21:13 (192.168.153.1)
last命令:显示用户历史登录情况。
lastb命令:显示用户错误的登录列表,用于发现系统的登陆异常。
lastlog命令:lastlog文件在每次由用户登录时被查询,通过lastlog命令显示系统中所有用户最近一次登录信息。
[root@localhost /]# last
root pts/0 192.168.153.1 Sat Feb 22 21:13 still logged in
root pts/1 192.168.153.1 Fri Feb 21 16:58 - 17:16 (00:18)
root pts/0 192.168.153.1 Fri Feb 21 16:56 - 17:16 (00:20)
reboot system boot 3.10.0-1160.el7. Fri Feb 21 16:55 - 22:32 (1+05:36)
[root@localhost ~]# lastb
root pts/0 Sat Feb 22 22:32 - 22:32 (00:00)
btmp begins Sat Feb 22 22:32:50 2025
[root@localhost ~]# lastlog
用户名 端口 来自 最后登陆时间
root pts/0 六 2月 22 22:32:57 +0800 2025
bin **从未登录过**
daemon **从未登录过**
adm **从未登录过**
日志系统中,优先级是用于分类和过滤日志消息的机制
优先级 | 含义 |
0(EMERG) | 紧急情况,系统不可用级别 |
1(ALERT) | 需要立即采取行动 |
2(CRIT) | 严重错误 |
3(ERR) | 一般错误,不影响系统运行 |
4(WARNING) | 警告信息,存在潜在问题 |
5(NOTICE) | 不影响正常功能,需要注意的重要事件 |
6(INFO) | 一般消息 |
7(DEBUG) | 调试信息 |
rsyslog是syslog协议的扩展,它在标准syslog的基础上增加了许多功能,支持更复杂的日志管理、日志的多种传输方式(如TCP、UDP、Relp等)、日志的分类过滤和更灵活的配置。rsyslog支持高性能日志传输,还可以将日志发送到远程服务器、数据库或其他系统,并能够根据日志内容进行动态过滤和处理。
rsyslog配置文件的基本结构通常由以下几个部分组成:
MODULES(模块加载):加载输入、输出和处理模块。
GLOBAL DIRECTIVES(全局配置):设置全局参数,控制rsyslog的行为。
RULES(日志规则):定义如何处理不同来源和不同类型的日志。
[root@localhost ~]# cat /etc/rsyslog.conf
# rsyslog configuration file
# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
#### MODULES #### //模块加载
# The imjournal module bellow is now used as a message source instead of imuxsock.
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
#$ModLoad imklog # reads kernel messages (the same are read from journald)
#### GLOBAL DIRECTIVES #### //全局配置
# Where to place auxiliary files
$WorkDirectory /var/lib/rsyslog
# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
#### RULES #### //日志规则
# Log all the mail messages in one place.
mail.* -/var/log/maillog
# Log cron stuff
cron.* /var/log/cron
# Everybody gets emergency messages
*.emerg :omusrmsg:*
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log
# ### begin forwarding rule ###
# The statement between the begin ... end define a SINGLE forwarding
# rule. They belong together, do NOT split them. If you create multiple
# forwarding rules, duplicate the whole block!
# Remote Logging (we use TCP for reliable delivery)
#
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
#$ActionQueueFileName fwdRule1 # unique name prefix for spool files
#$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible)
#$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
#$ActionQueueType LinkedList # run asynchronously
#$ActionResumeRetryCount -1 # infinite retries if host is down
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
#*.* @@remote-host:514
# ### end of the forwarding rule ###
日志规则由三部分组成:
设施名称 | 说 明 |
---|---|
auth(LOG AUTH) | 安全和认证相关消息 (不推荐使用authpriv替代) |
authpriv(LOG_AUTHPRIV) | 安全和认证相关消息(私有的) |
cron (LOG_CRON) | 系统定时任务cront和at产生的日志 |
daemon (LOG_DAEMON) | 与各个守护进程相关的曰志 |
ftp (LOG_FTP) | ftp守护进程产生的曰志 |
kern(LOG_KERN) | 内核产生的曰志(不是用户进程产生的) |
Iocal0-local7 (LOG_LOCAL0-7) | 为本地使用预留的服务 某软件 无记录日志的功能,他又支持rsyslog 可以使用 此项来 定义日志 |
lpr (LOG_LPR) | 打印产生的日志 |
mail (LOG_MAIL) | 邮件收发信息 |
news (LOG_NEWS) | 与新闻服务器相关的日志 |
syslog (LOG_SYSLOG) | 存syslogd服务产生的曰志信息(虽然服务名称己经改为reyslogd,但是很多配罝依然沿用了 syslogd服务的,所以这里并没有修改服务名称) |
user (LOG_USER) | 用户等级类别的日志信息 |
uucp (LOG_UUCP> | uucp子系统的日志信息,uucp是早期Linux系统进行数据传递的协议,后来 也常用在新闻组服务中 |
等级名称 | 说 明 |
---|---|
debug (LOG_DEBUG) | 一般的调试信息说明 |
info (LOG_INFO) | 基本的通知信息 |
notice (LOG_NOTICE) | 普通信息,但是有一定的重要性 |
warning(LOG_WARNING) | 警吿信息,但是还不会影响到服务或系统的运行 |
error(LOG_ERR) | 错误信息, 一般达到err等级的信息已经可以影响到服务成系统的运行了 |
crit (LOG_CRIT) | 临界状况信思,比err等级还要严® |
alert (LOG_ALERT) | 状态信息,比crit等级还要严重,必须立即采取行动 |
emerg (LOG_EMERG) | 疼痛等级信息,系统已经无法使用了 |
* | 代表所有日志等级。比如,“authpriv.*”代表amhpriv认证信息服务产生的日志,所有的日志等级都记录 |
示例:
# 将 auth 设施的所有日志(所有严重性)保存到 /var/log/auth.log
auth.* /var/log/auth.log
# 将所有日志(所有设施、所有严重性)保存到 /var/log/syslog
*.* /var/log/syslog
# 只保存 cron 设施的警告及以上级别日志到 /var/log/cron.log
cron.warning /var/log/cron.log
[root@localhost ~]# rpm -qc openssh-server //找到ssh服务配置文件位置
/etc/pam.d/sshd
/etc/ssh/sshd_config
/etc/sysconfig/sshd
[root@localhost ~]# vim /etc/ssh/sshd_config //打开配置文件
30 # Logging
31 #SyslogFacility AUTH
32 SyslogFacility local6 //将日志的设施改为local6
33 #LogLevel INFO
[root@localhost ~]# vim /etc/rsyslog.conf //打开rsyslog配置文件
71
72 # Save boot messages also to boot.log
73 local7.* /var/log/boot.log
74 local6.* /opt/ssh.log //新增一条规则,将local6输出到指定文件
75
[root@localhost ~]# setenforce 0 //关闭selinux
[root@localhost ~]# systemctl restart rsyslog.service sshd //重启服务
[root@localhost ~]# ssh 192.168.153.23 //连接本机,产生日志信息
[email protected]'s password:
Last login: Sun Feb 23 13:40:59 2025
[root@localhost ~]# cd /opt
[root@localhost opt]# ls
ssh.log
localhost opt]# cat ssh.log //查看日志信息
Feb 23 13:43:13 localhost sshd[122058]: Received signal 15; terminating.
Feb 23 13:43:13 localhost sshd[122516]: Server listening on 0.0.0.0 port 22.
Feb 23 13:43:13 localhost sshd[122516]: Server listening on :: port 22.
Feb 23 13:43:34 localhost sshd[122645]: Address 192.168.153.23 maps to localhost.localdomain, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
Feb 23 13:43:36 localhost sshd[122645]: Accepted password for root from 192.168.153.23 port 37588 ssh2
为了实现传输日志共享,将服务端的日志通过tcp或udp协议存储到客户端。
修改两台主机的rsyslog配置文件打开514端口,重启rsyslog服务使配置生效。
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0 //关闭防火墙与selinux
[root@localhost ~]# vim /etc/rsyslog.conf //修改服务端rsyslog配置文件
18 # Provides TCP syslog reception
19 $ModLoad imtcp //取消注释
20 $InputTCPServerRun 514 //取消注释,开启514端口
[root@localhost ~]# systemctl restart rsyslog.service
[root@localhost ~]# ss -natp |grep 514 //514端口已开启
LISTEN 0 25 *:514 *:* users:(("rsyslogd",pid=125967,fd=3))
LISTEN 0 25 [::]:514 [::]:* users:(("rsyslogd",pid=125967,fd=4))
[root@localhost ~]# vim /etc/rsyslog.conf
46 #### RULES ####
47
48 # Log all kernel messages to the console.
49 # Logging much else clutters up the screen.
50 #kern.* /dev/console
51
52 # Log anything (except mail) of level info or higher.
53 # Don't log private authentication messages!
54 *.info;mail.none;authpriv.none;cron.none /var/log/messages
55 *.info;mail.none;authpriv.none;cron.none @@192.168.153.233 //新增共享日志的客户端地址
[root@localhost ~]# hostname aabb //修改服务端主机名,以确认实验是否成功
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0 //关闭防火墙与selinux
[root@localhost ~]# vi /etc/rsyslog.conf //修改客户端rsyslog配置文件
18 # Provides TCP syslog reception
19 $ModLoad imtcp //取消注释
20 $InputTCPServerRun 514 //取消注释,开启514端口
[root@localhost ~]# systemctl restart rsyslog.service
[root@localhost ~]# ss -natp |grep 514 //514端口已开启
LISTEN 0 25 *:514 *:* users:(("rsyslogd",pid=125967,fd=3))
LISTEN 0 25 [::]:514 [::]:* users:(("rsyslogd",pid=125967,fd=4))
[root@localhost ~]# tail -f /var/log/messages //在客户端可以看到服务端日志,实验完成
Feb 24 00:14:58 localhost systemd: Stopped System Logging Service.
Feb 24 00:14:58 localhost systemd: Starting System Logging Service...
Feb 24 00:14:58 localhost rsyslogd: [origin software="rsyslogd" swVersion="8.24.0-55.el7" x-pid="126302" x-info="http://www.rsyslog.com"] start
Feb 24 00:14:58 localhost systemd: Started System Logging Service.
Feb 24 00:16:21 aabb systemd: Stopping System Logging Service...
Feb 24 00:16:21 aabb rsyslogd: [origin software="rsyslogd" swVersion="8.24.0-55.el7" x-pid="126302" x-info="http://www.rsyslog.com"] exiting on signal 15.
Feb 24 00:16:21 aabb systemd: Stopped System Logging Service.
Feb 24 00:16:21 aabb systemd: Starting System Logging Service...
Feb 24 00:16:22 aabb rsyslogd: [origin software="rsyslogd" swVersion="8.24.0-55.el7" x-pid="126403" x-info="http://www.rsyslog.com"] start
Feb 24 00:16:22 aabb systemd: Started System Logging Service.
在CentOS7版本的Linux系统中,systemd服务统一管理了所有服务的启动日志,其好处则是可以只用journalctl一个命令来查看全部的日志信息。
语法格式:journalctl 参数 对象
-k | 显示内核日志 | -n | 设置日志条数 |
-b | 显示本次系统启动的日志信息 | -f | 追踪日志内容 |
-u | 显示指定服务的日志 | -p | 依据优先级筛选 |
参考示例:
#查看所有日志(默认情况下 ,只保存本次启动的日志)
journalctl
#查看内核日志(不显示应用日志)
journalctl -k
#查看系统本次启动的日志
2 实战案例
journalctl -b
journalctl -b -0
#查看上一次启动的日志(需更改设置)
journalctl -b -1
#查看指定时间的日志 -S=since -U=unit
journalctl --since="2017-10-30 18:10:30"
journalctl --since "20 min ago"
journalctl --since yesterday
journalctl -S "2023-07-31 2:00" -U "2023-07-31 03:00"
journalctl --since 09:00 --until "1 hour ago"
#显示尾部的最新10行日志
journalctl -n
#显示尾部指定行数的日志
journalctl -n 20
#实时滚动显示最新日志
journalctl -f