一、Inode(索引节点)概述
1.1 什么是Inode
-
Inode(索引节点)用于表示文件或目录的数据结构。
-
每个inode有唯一的编号标识,文件系统使用这些编号来查找和访问文件。
文件名和inode之间建立了映射关系,通过文件系统的目录结构可以将文件名与相应的inode关联起来,从而可以通过文件名来访问文件。 -
当文件被删除时,只删除了与文件名相关联的inode,而文件的实际数据并没有立即被清除。
只有当文件没有任何指向它的inode时,系统才会释放文件的存储空间。
1.2 Inode和block的区别?
- inode 号是用于标识和管理文件的唯一索引节点的标识符,inode表包含文件的元数据。
- block 块是文件系统中用于存储文件实际数据的最小单位,由文件系统进行分配和管理,并通过 inode 号中的指针关联到对应的文件。
1.3 Inode表
存储文件元信息(比如文件的创建者、创建日期、文件大小、文件权限等)的区域叫做inode表。
1.3.1 Inode表内容
- inode number 节点号
- 文件类型
- 权限
- UID
- GID
- 链接数(指向这个文件名路径名称个数)
- 该文件的大小和不同的时间戳
- 指向磁盘上文件的数据块指针
- 有关文件的其他数据
1.3.2 硬盘分区后的结构
1.3.3 访问文件的简单流程
当用户在Linux系统中试图访问一个文件时
- 系统会先根据文件名去查找它对应的inode号码:通过inode号码,获取inode信息;
- 根据inode信息,看该用户是否具有访问这个文件的权限
- 如果有,就指向相对应的数据block,并读取数据;
如果没有,拒绝用户访问
1.4 Inode号(inode number)
1.4.1 什么是Inode号?
每个inode都有一个号码,文件名和inode号码是一一对应关系,操作系统用inode号码来识别不同的文件。
同一设备下,inode号不可以相同
不同设备下,inode可以相同
1.4.2 查看Inode号的方式
stat 文件名
查看文件的Inode号
df -i
查看文件系统的Inode号
ls -i 文件名/目录 //查看Inode号 , 目录要用绝对路径
1.5 三个时间戳
-
atime(access time) 最后一次查看文件的时间
-
mtime(modify time) 最近更改文件内容的时间,更改完内容之后,ctime也会改变
-
ctime(change time) 最近更改文件元信息的时间,比如改变权限等
1.6 目录文件结构
inode不包含文件名。文件名是存放在目录当中的。Linux系统中一切皆文件,因此目录也是一种文件。
目录文件的结构非常简单,就是一系列目录项(dirent)的列表。
每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。
ls -i 目录 //查看目录下所有文件的Inode号
二、日志概述
2.1 日志的功能
- 用于记录系统、程序运行中发生的各种事件
- 通过阅读日志,有助于诊断和解决系统故障
2.2 日志的分类
- 内核及系统日志
由系统服务rsyslog统一进行管理,日志格式基本相似 - 用户日志
记录系统用户登录及退出系统的相关信息。 - 程序日志
由各种应用程序独立管理的日志文件,记录格式不统一
2.3 日志文件格式
日志一般保存在 /var/log/目录下。
以/var/log/messages文件为例
tail -f /var/log/messages //实时追踪后十行
日志文件的格式包含以下 4 列:
1.事件产生的时间(什么时候)
2.产生事件的服务器的主机名
3.产生事件的服务名或程序名(做了什么)
4.事件的具体信息 (谁)
2.4 用户日志
日志文件位置 | 日志文件说明 |
---|---|
/var/log/lastlog | 记录系统中所有用户最后一次的登录时间的曰志。这个文件也是二进制文件.不能直接用Vi 查看。而要使用lastlog命令查看 |
/var/log/secure | 记录验证和授权方面的倍息,只要涉及账户和密码的程序都会记录,比如系统的登录、ssh的登录、su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中 |
/var/log/wtmp | 永久记录所有用户的登陆、注销信息,同时记录系统的启动、重启、关机事件。同样,这个文件也是二进制文件.不能直接用Vi查看,而要使用last命令查看 |
/var/tun/ulmp | 记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。同样,这个文件不能直接用Vi查看,而要使用w、who、users等命令查看 |
2.4.1 查询当前登录用户
users //仅显示登录的用户名
w [选项] //显示当前系统上登录的用户以及活动情况
USER:登录的用户名。
TTY:用户当前所使用的终端。
FROM:登录用户的IP地址或主机名。
LOGIN@:登录时间。
IDLE:用户在终端处于空闲状态的时间。
JCPU:用户所有进程的累计CPU时间。
PCPU:当前正在运行的进程的CPU时间。
WHAT:用户正在做的事情(命令或程序的简短描述)。
who //当前登录用户的信息,包括用户名、登录终端和登录时间等
root 登录的用户名
pts/0 用户所使用的终端。
2023-07-31 02:29 登录时间和日期。
192.168.2.103 登录用户的IP地址或主机名。
2.4.2 查询历史登录用户
last 查询成功登录到系统的用户记录
last | tail //查询登录成功的用户,只显示最后十行
lastb 查询登录失败的用户记录
lastb //查询登录失败的用户记录
三、系统日志管理 rsyslog
3.1 日志优先级/等级
在 Linux 内核中,根据日志消息的重要程度不同,将其分为不同 的优先级别(数字等级越小,优先级越高,消息越重要)
0 EMERG(紧急):会导致主机系统不可用的情况。
1 ALERT(警告):必须马上采取措施解决的问题。
2 CRIT(严重):比较严重的情况。
3 ERR(错误):运行出现错误。
4 WARNING(提醒):可能影响系统功能,需要提醒用户的重要事件。
5 NOTICE(注意):不会影响正常功能,但是需要注意的事件。
6 INFO(信息):一般信息。
7 DEBUG(调试):程序或系统调试信息等
3.2 rsyslog
3.3 rsyslog 配置文件
配置文件 /etc/rsyslog.conf
MODULES:相关模块配置
只有安装了功能模块,才会有相关的模块配置。
GLOBAL DIRECTIVES:全局配置,相当于通用配置
全局配置没有局部配置的优先级高
只有没有局部配置时,才会使用全局配置
RULES:局部配置
局部配置的格式
facility.priority;facility.priority........日志文件的位置
facility 设施 (从功能划分,分类)
-
系统的分类: auth(验证),authpriv,cron(定时任务), daemon,ftp,kern, lpr, mail, news, security(auth), user, uucp, syslog
-
自定义的分类:local0-local7
-
*代指任意
priority 优先级0-7 详见本文3.1 日志优先级/等级
- *: 所有级别
- none:没有级别,即不记录
- PRIORITY:指定级别(含)以上的所有级别
- =PRIORITY:仅记录指定级别的日志信息
3.4 rsyslog实际应用一:单独显示某一服务的日志
以 ssh服务为例
1.编辑rsyslog配置文件
vim /etc/rsyslog.conf
74 local6.* /var/log/nssh.log #添加的内容
//local6为日志源 *表示任意级别 /var/log/nssh.log为日志路径
2.编辑ssh服务的配置文件/etc/ssh/sshd_config,改变日志路径
vim /etc/ssh/sshd_config
#修改ssh配置文件,32下一行添加自己的自定义
32 #SyslogFacility AUTHPRIV
33 SyslogFacility LOCAL6
3. 重启服务,使用ssh
systemctl restart rsyslog.service sshd //重启服务
ssh 192.168.2.103 //远程连接其他主机
4.查看ssh服务的日志是否独立列出
cat /var/log/nssh.log //查看
3.5 rsyslog实际应用二:将远程主机的日志备份到本机
1.加载主机C的rsyslog的ICMP和TCP模块
vim /etc/rsyslog.conf //编辑配置文件
19 $ModLoad imtcp //加载rsyslog的imtcp模块,imtcp模块用于接收通过TCP协议发送的日志消息
20 $InputTCPServerRun 514 //用于启动rsyslog的TCP服务器模式,监听TCP端口514以接收日志消息
systemctl restart rsyslog.service //重启使生效
ss -ntap |grep 514 //查看端口是否开启
2.修改主机A和主机B的rsyslog配置文件
以主机A为例,主机B的配置过程相同。
vim /etc/rsyslog.conf //编辑配置文件
19 $ModLoad imtcp
20 $InputTCPServerRun 514 //加载模块
#复制54行 改成主机C的ip地址
55 *.info;mail.none;authpriv.none;cron.none @@192.168.91.100
systemctl restart rsyslog.service //重启使生效
systemctl stop firewalld.service //关闭防火墙
3.观察主机C能否收到主机A和主机B的消息
使用logger命令,模拟日志
主机A
logger 'Hello 222 from A '
主机B
logger "Hello 222 from B"
实时追踪主机C的消息日志
tail -f -n2 /var/log/messages //实时追踪消息日志的最后两行
四、日志管理工具 journalctl
命令格式
journalctl [选项]
常用选项
-u 仅显示特定系统服务或单元的日志消息
-b 仅显示特定引导过程的日志消息
-p 仅显示特定优先级的日志消息
-n 显示指定行数的日志消息
-f 实时跟踪日志,持续显示新的日志消息
--since=<time> 和 --until=<time>: 仅显示指定时间范围内的日志消息。
查看指定时间的日志
journalctl --since""
journalctl --since="年-月-日 时间" //查看从某个具体时间开始的日志
journalctl --since "" --until "" //某个时间段的日志
journalctl --since="" --until="" //查看某一具体时间段的日志
查看昨天的日志
journalctl --since "yesterday"
查看20分钟之前的日志
journal --since"20 min ago"
查看2023.7.11 19:00后的日志
journalctl --since="2023.7.11 19:00:00"