Inode概述
什么是inode
-
inode用于表示文件或目录的数据结构
-
每个inode都是唯一的,文件系统通过inode来查找和访问文件
- 文件名和inode之间建立了映射关系,通过文件系统的目录结构可以将文件名与相应的inode关联起来,从而可以通过文件名来访问文件
-
当文件被删除时,只删除了文件名相关联的inode,而文件的实际数据并没有立即被清除。只有当文件没有任何指向它的inode时,系统才会释放文件的存储空间 (另外一种说法:当磁盘或分区空间显示还有剩余时,而无法创建新的文件,说明该磁盘或分区的inode已被使用完,这时需要查找磁盘或分区中无用的文件将其删除后才能释放更多的inode来创建新的文件)
inode和block的区别
- inode时用于标识和管理文件的唯一索引节点的标识符,inode表包含文件的元数据
- block块是文件系统中用于存储文件实际数据的最小单位,由文件系统进行分配和管理,并通过inode号中的指针关联到对应的文件
inode表
存储文件元信息的区域叫做inode表
元信息一般包含文件的创建者,创建时间,文件大小,文件权限等
inode表内容
- inode number 节点号
- 文件类型
- 权限 UID
- GID
- 链接数(指向这个文件名路径名称个数)
- 该文件的大小和不同的时间戳
- 指向磁盘上文件的数据块指针
- 有关文件的其他数据
inode号
什么是inode号
每个inode都有一个号码、文件名和inode号是一 一对应的关系,操作系统用inode号来识别不同的文件
特征:
-
同一设备下,inode号不可以相同
- 当在同一块磁盘或分区下创建两个文件,其inode号不可能相同
-
不同设备下,inode可以相同
- 挡在不同磁盘和分区下创建两个文件,其inode号可能相同
-
硬链接的inode号相同
-
软连接的inode号不相同
如何查看inode号
- stat+文件名:查看文件的inode号
[root@localhost data]# stat test
文件:"test"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:102022092 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:default_t:s0
最近访问:2024-04-24 16:16:26.699981529 +0800
最近更改:2024-04-24 16:16:26.699981529 +0800
最近改动:2024-04-24 16:16:26.699981529 +0800
创建时间:-
- df -i:查看文件系统的inode号
[root@localhost data]# df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/mapper/centos-root 24414208 145377 24268831 1% /
devtmpfs 250009 422 249587 1% /dev
tmpfs 253989 1 253988 1% /dev/shm
tmpfs 253989 599 253390 1% /run
tmpfs 253989 16 253973 1% /sys/fs/cgroup
/dev/sda1 1952768 327 1952441 1% /boot
tmpfs 253989 9 253980 1% /run/user/42
tmpfs 253989 1 253988 1% /run/user/0
-
ls -i+文件名/目录 :查看inode号
- 这里的目录要用绝对路径
- ls -i默认查看当前目录下所有文件的inode号
[root@localhost data]# ls -i test
102022092 test
#查看文件的inode号
[root@localhost /]# ls -i /
34434 bin 33554497 etc 83 media 67156609 root 1 sys
64 boot 100664480 home 33555653 mnt 1160 run 33554504 tmp
102022079 data 80 lib 67167840 opt 34438 sbin 67167783 usr
1025 dev 82 lib64 1 proc 100664481 srv 100663361 var
#查看目录的inode号
-
三个时间戳
- atime:最后一次查看文件的时间
- mtime:最近更改文件内容的时间,更改完内容后,ctime也会改变
- ctime:最近更改文件元信息的时间,比如改变权限等
日志概述
日志的功能
- 用于记录系统、程序运行中发生的各种事件
- 通过阅读日志,有助于诊断和解决系统故障
日志的分类
-
内核及系统日志
- 由系统服务rsyslog统一进行管理,日志格式基本相似
-
用户日志
- 记录系统用户登录及退出系统的相关信息
-
程序日志
- 由各种应用程序独立管理的日志文件,记录格式不统一
日志文件格式
日志一般保存在/var/log目录下
[root@localhost data]# cd /var/log
[root@localhost log]# ls
anaconda firewalld ppp tuned
audit gdm qemu-ga vmware-vgauthsvc.log.0
boot.log glusterfs rhsm vmware-vmsvc.log
boot.log-20240415 grubby_prune_debug sa vmware-vmusr.log
boot.log-20240423 lastlog samba wpa_supplicant.log
boot.log-20240424 libvirt secure wtmp
btmp maillog secure-20240415 Xorg.0.log
chrony maillog-20240415 secure-20240423 Xorg.0.log.old
cron maillog-20240423 speech-dispatcher Xorg.1.log
cron-20240415 messages spooler Xorg.9.log
cron-20240423 messages-20240415 spooler-20240415 Xorg.9.log.old
cups messages-20240423 spooler-20240423 yum.log
dmesg ntpstats sssd
dmesg.old pluto tallylog
用户日志
- /var/log/lastlog:记录系统中所有用户最后一次的登录时间的曰志。这个文件也是二进制文件.不能直接用Vi 查看。而要使用lastlog命令查看
- /var/log/secure :记录验证和授权方面的倍息,只要涉及账户和密码的程序都会记录,比如系统的登录、ssh的登录、su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中
- /var/log/wtmp :永久记录所有用户的登陆、注销信息,同时记录系统的启动、重启、关机事件。同样,这个文件也是二进制文件.不能直接用Vi查看,而要使用last命令查看
- /var/tun/ulmp :记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。同样,这个文件不能直接用Vi查看,而要使用w、who、users等命令查看
查询当前登录用户
- users:仅显示登录的用户名
[root@localhost log]# users
root
- w [选项]:显示当前系统上登陆的用户以及活动情况
[root@localhost log]# w 16:38:29 up 2:31, 1 user, load average: 0.00, 0.01, 0.03USER TTY FROM LOGIN@ IDLE JCPU PCPU WHATroot pts/0 192.168.137.100 15:08 5.00s 0.12s 0.02s w•
-
表头含义
- USER:登录的用户名。
- TTY:用户当前所使用的终端。
- FROM:登录用户的IP地址或主机名。
- LOGIN@:登录时间。
- IDLE:用户在终端处于空闲状态的时间。
- JCPU:用户所有进程的累计CPU时间。
- PCPU:当前正在运行的进程的CPU时间。
- WHAT:用户正在做的事情(命令或程序的简短描述)。
- who:当前登录用户的信息,包括用户名、登录终端和登录时间等
[root@localhost log]# who
root pts/0 2024-04-24 15:08 (192.168.137.100)
内容含义
root:登录的用户名
pts/0:用户所使用的终端
2024-04-24 15:08:登录时间和日期
192.168.137.100:登录用户的IP地址或主机名
查询历史登录用户
- last:查询成功登录到系统的用户记录
[root@localhost log]# last
root pts/1 192.168.137.100 Wed Apr 24 15:22 - 15:27 (00:05)
root pts/0 192.168.137.100 Wed Apr 24 15:08 still logged in
reboot system boot 3.10.0-693.el7.x Wed Apr 24 22:07 - 16:59 (-5:-8)
root pts/0 192.168.137.100 Wed Apr 24 08:53 - 12:30 (03:36)
reboot system boot 3.10.0-693.el7.x Wed Apr 24 16:51 - 13:12 (-3:-39)
- lastb:查询登录失败的用户记录
[root@localhost log]# lastb
btmp begins Wed Apr 24 14:07:21 2024
#这里没有登录失败的用户信息,所以内容为空
系统日志管理 rsyslog
日志优先级/等级
在 Linux 内核中,根据日志消息的重要程度不同,将其分为不同 的优先级别 (数字等级越小,优先级越高,消息越重要)
0 EMERG(紧急):会导致主机系统不可用的情况。
1 ALERT(警告):必须马上采取措施解决的问题。
2 CRIT(严重):比较严重的情况。
3 ERR(错误):运行出现错误。
4 WARNING(提醒):可能影响系统功能,需要提醒用户的重要事件。
5 NOTICE(注意):不会影响正常功能,但是需要注意的事件。
6 INFO(信息):一般信息。
7 DEBUG(调试):程序或系统调试信息等
rsyslog配置文件
配置文件位置/etc/rsyslog.conf
#### 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)
#$ModLoad immark # provides --MARK-- message capability
# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514
# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514
MODULES:相关模块配置
#### GLOBAL DIRECTIVES ####
# Where to place auxiliary files
$WorkDirectory /var/lib/rsyslog
# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
# File syncing capability is disabled by default. This feature is usually not required,
# not useful and an extreme performance hit
#$ActionFileEnableSync on
# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf
# Turn off message reception via local log socket;
# local messages are retrieved through imjournal now.
$OmitLocalLogging on
# File to store the position in the journal
$IMJournalStateFile imjournal.state
GLOBAL DIRECTIVES:全局配置,相当于通用配置
全局配置没有局部配置的优先级高,所以没有局部配置时,才会使用全局配置
#### RULES ####
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# 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
RULES:局部配置
rsyslog实验一
配置ssh单一服务的日志
- 准备工作
[root@localhost log]# systemctl disable firewalld
[root@localhost log]# setenforce 0
#关闭防火墙和安全限制
- 编辑rsyslog配置文件
[root@localhost ~]# vim /etc/rsyslog.conf
# Provides TCP syslog reception #模块一定要打开!
$ModLoad imtcp
$InputTCPServerRun 514
72 # Save boot messages also to boot.log
73 local7.* /var/log/boot.log
74 local6.* /var/log/ssh.log
- 编辑ssh服务的配置文件
[root@localhost ~]# vim /etc/ssh/sshd_config
30 # Logging
31 #SyslogFacility AUTH
32 #SyslogFacility AUTHPRIV
33 SyslogFacility LOCAL6
:wq
- 重启rsyslog和ssh服务
[root@localhost log]# systemctl restart rsyslog.service sshd
- 远程登录其他主机
[root@localhost ~]# ssh 192.168.137.200
[email protected]'s password:
Last login: Fri Apr 26 14:59:47 2024 from 192.168.137.101
- 查看ssh服务的日志是否独立出来
[root@localhost /]# cat var/log/ssh.log
Apr 26 15:03:03 localhost sshd[7085]: Server listening on 0.0.0.0 port 22.
Apr 26 15:03:03 localhost sshd[7085]: Server listening on :: port 22.
rsyslog实验二
将远程主机的日志备份到主机
- 准备工作
[root@localhost log]# systemctl disable firewalld
[root@localhost log]# setenforce 0
#主机A和B均须要关闭防火墙和安全限制
- 主机A编辑rsyslog配置文件
[root@localhost ~]# vim /etc/rsyslog.conf
# Provides TCP syslog reception #模块一定要打开!
$ModLoad imtcp
$InputTCPServerRun 514
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
*.info;mail.none;authpriv.none;cron.none @@192.168.137.200 #主机B的IP地址
:wq
[root@localhost log]# systemctl restart rsyslog.service
- 主机B编辑rsyslog配置文件
[root@localhost ~]# vim /etc/rsyslog.conf
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
:wq
[root@localhost log]# systemctl restart rsyslog.service
- 主机B实时监测日志信息
[root@localhost ~]# tail -f -n2 /var/log/messages
Apr 26 16:03:04 localhost rsyslogd: action 'action 1' resumed (module 'builtin:omfwd') [v8.24.0 try http://www.rsyslog.com/e/2359 ]
Apr 26 16:03:04 localhost rsyslogd: action 'action 1' resumed (module 'builtin:omfwd') [v8.24.0 try http://www.rsyslog.com/e/2359 ]
Apr 26 16:03:23 localhost root: hello boy from 192.168.137.101
- 发送日志给B主机
[root@localhost /]# logger 'hello boy from 192.168.137.101'
journalcrl 日志管理工具
[root@localhost ~]# journalctl --help
journalctl [OPTIONS...] [MATCHES...]
选项
-U --until=DATE Show entries not newer than the specified date
#仅显示特定系统服务或单元的日志消息
-b --boot[=ID] Show current boot or the specified boot
--list-boots Show terse information about recorded boots
#仅显示特定引导过程的日志消息
-p --priority=RANGE Show entries with the specified priority
#仅显示特定优先级的日志消息
-n --lines[=INTEGER] Number of journal entries to show
--no-tail Show all lines, even in follow mode
#实时跟踪日志,持续显示新的日志消息
-f --follow Follow the journal
--since=/--until="年-月-日 时间"
#查看从某个具体时间开始的日志
--since""/--until""
#查看某个时间段的日志
[root@localhost ~]# journalctl --since "yesterday"
-- Logs begin at 四 2024-04-25 16:26:19 CST, end at 五 2024-04-26 16:10:01 CST. --
4月 25 16:26:19 localhost.localdomain systemd-journal[105]: Runtime journal is using 8.
4月 25 16:26:19 localhost.localdomain kernel: Initializing cgroup subsys cpuset
4月 25 16:26:19 localhost.localdomain kernel: Initializing cgroup subsys cpu
#查看昨天的日志
[root@localhost ~]# journalctl --since "10 min ago"
-- Logs begin at 四 2024-04-25 16:26:19 CST, end at 五 2024-04-26 16:20:01 CST. --
4月 26 16:20:01 localhost.localdomain systemd[1]: Started Session 22 of user root.
4月 26 16:20:01 localhost.localdomain systemd[1]: Starting Session 22 of user root.
4月 26 16:20:01 localhost.localdomain CROND[7515]: (root) CMD (/usr/lib64/sa/sa1 1 1)
#查看10分钟之前的日志
[root@localhost ~]# journalctl --since="2024.4.25 10:00:00"
#查看2024年4月25日10点之后的日志