文章目录
1. inode概述
1.1什么是inode
文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。 这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"
1.2Inode和block的区别?
inode 号是用于标识和管理文件的唯一索引节点的标识符,inode表包含文件的元数据。
block 块是文件系统中用于存储文件实际数据的最小单位,由文件系统进行分配和管理,并通过 inode 号中的指针关联到对应的文件。
1.3什么是inode号
每个inode都有一个号码,文件名和inode号码是一一对应关系,操作系统用inode号码来识别不同的文件。
同一设备下文件inode号不可以相同
不同设备下文件inode号可以相同
1.4什么是inode表
每个文件的属性信息,比如:文件的大小,时间,类型,权限等,称为文件的元数据 (meta data 元信息 )
元数据是存放在inode(index node)表中。inode 表中有很多条记录组成,第一条记录对应的存放了一个文件的元数据信息。
1.4.1 inode表内容
每一个inode表记录对应的保存了以下信息:
- inode number 节点号
- 文件类型
- 权限
- UID
- GID
- 链接数(指向这个文件名路径名称个数)
- 该文件的大小和不同的时间戳
- 指向磁盘上文件的数据块指针
- 有关文件的其他数据
如何查看inode号
ls -i
查看当前文件夹下文件的inode号
stat +文件名
查看文件的全部信息
df -i
查看文件系统下的inode号
1.4.2 目录
目录是个特殊文件,目录文件的内容保存了此目录中文件的列表及inode number对应关系
文件引用一个是 inode号
是通过文件名来引用一个文件
一个目录是目录下的文件名和文件inode号之间的映射
文件是如何找到实际数据的
linux 通过文件夹中会有一张 文件名和inode一一对应关系的表 (名字) 去找inode号 inode指向对应的实际数据
1.用户访问文件时 先去查找 自己 文件夹中的目录项
2.文件名和inode之间对应的关系
3.通过 inode号利用指针 去指向 实际数据
ls -i +文件夹名
#显示该文件夹下所以文件及inode号
cp 和 inode:
cp 命令:
- 分配一个空闲的inode号,在inode表中生成新条目
- 在目录中创建一个目录项,将名称与inode编号关联
- 拷贝数据生成新的文件
rm 命令:
- 硬链接数递减,从而释放的inode号可以被重用
- 把数据块放在空闲列表中
- 删除目录项
- 数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖
mv和inode
-
如果mv命令的目标和源在同一设备,
不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!
删除旧的目录对应关系新建目录对应关系
[root@localhost a]#find -inum 69 -exec rm {} \;
#通过find命令查找indoe号来删除指定的文件
[root@localhost a]#find -inum 69 -delete
1.4.3三种时间戳
当新创建一个文件时,这个文件的最后访问时间、最后内容修改时间、最后状态更新时间都是一致的。
修改一个文件的权限状态信息,只会更新这个文件的最后状态修改时间
当查看文件时,文件的 Access time 会更新。
当需要了解这个文件有没有被修改过 - Modify Time
当需要了解这个文件最后被查看的时间 - Access Time
当需要了解这个文件权限最后变动的时间 - Change Time
为什么磁盘空间还有很大空间,但是不能继续创建文件
inode号是有限的
电脑发完就没有了
解决方法:删除空文件或者扩容
2.日志
2.1什么是日志
所谓日志(Log)是指系统所指定对象的某些操作和其操作结果按时间有序的集合
2.2日志的功能
- 用于记录系统、程序运行中发生的各种事件
- 通过阅读日志,有助于判断和解决系统故障
遇事不决看日志
2.3日志保存位置
- 默认保存在 /var/log目录下
2.4日志文件的格式
日志文件的格式包含以下 4 列:
- 事件产生的时间。
- 产生事件的服务器的主机名。
- 产生事件的服务名或程序名。
- 事件的具体信息。
#以 /var/log/messages/为例
tail -f /var/log/messages/
##实时查看/var/log/messages/文件日志记录后十行
2.5日志的类别
- 用户日志:记录用户登录、退出相关信息
- 内核和系统日志:由系统服务rsyslog统一管理,日志格式基本类似
- 程序日志:由各种应用程序独立管理的日志文件,记录格式不统一
2.5.1用户日志
用户日志 | |
---|---|
/var/log/lastlog | 记录系统中所有用户最后一次的登录时间的曰志。这个文件也是二进制文件.不能直接用Vi 查看。而要使用lastlog命令查看 |
/var/log/secure | 记录验证和授权方面的倍息,只要涉及账户和密码的程序都会记录,比如系统的登录、ssh的登录、su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中 |
/var/log/wtmp | 永久记录所有用户的登陆、注销信息,同时记录系统的启动、重启、关机事件。同样,这个文件也是二进制文件.不能直接用Vi查看,而要使用last命令查看 |
/var/tun/ulmp | 记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。同样,这个文件不能直接用Vi查看,而要使用w、who、users等命令查看 |
查询当前登录的用户情况
users
#users 命令只是简单地输出当前登录的用户名称,
每个显示的用户名对应一个登录会话。
如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数
who
#who命令用于报告当前登录到系统中的每个用户的信息。使用该命令,系统管理员可
以查看当前系统存在哪些不合法用户,从而对其进行审计和处理。
who 的默认输出包括 :用户名、终端类型、登录日期及远程主机
w
#w 命令用于显示当前系统中的每个用户及其所运行的进程信息,比 users、who 命令的 输出内容要丰富一些。
查询用户登录的历史记录
last
#last 命令用于查询成功登录到系统的用户记录,
#最近的登录情况将显示在最前面。
#通过 last 命令可以及时掌握 Linux 主机的登录情况,若发现未经授权的用户登录过,则表示当前 主机可能已被入侵。
lastb
lastb 命令用于查询登录失败的用户记录,
如: 登录的用户名错误、密码不正确等情况都 将记录在案。
登录失败的情况属于安全事件,因为这表示可能有人在尝试猜解你的密码。
除了使用 lastb 命令查看以外,也可以直接从安全日志文件/var/log/secure 中获得相关信息。
2.5.2内核和系统日志
日志的配置文件 位置在 /etc/rsyslog.conf
vim /etc/rsyslog.conf
#查看rsyslog.conf 配置文件
*.info;mail.none;authpriv.none;cron.none /var/log/messages
#表示所有info等级以上的所有等级的信息都写到对应的日志文件里
mail.none
#表示某事件的信息不写到日志文件里(这里比如是邮件)
信息的优先级别重要程度
在 Linux 内核中,根据日志消息的重要程度不同,将其分为不同 的优先级别(数字等级越小,优先级越高,消息越重要)。
数字等级 | 信息类别 | 含义 |
---|---|---|
0 | EMERG(紧急): | 会导致主机系统不可用的情况。 |
1 | ALERT(警告): | 必须马上采取措施解决的问题。 |
2 | CRIT(严重): | 比较严重的情况。 |
3 ERR(错误): | 运行出现错误。 | |
4 | WARNING(提醒): | 可能影响系统功能,需要提醒用户的重要事件。 |
5 | NOTICE(注意): | 不会影响正常功能,但是需要注意的事件。 |
6 | NFO(信息): | 一般信息。 |
7 | DEBUG(调试): | 程序或系统调试信息等 |
内核和公共消息日志存储位置
内核及大多数系统消息被记录到公共日志文件/var/log/messages 中,而其他一些程序
消息被记录到各自独立的日志文件中,此外日志消息还能够记录到特定的存储设备中,或者
直接发送给指定用户。
对于 rsyslog 服务统一管理的大部分日志文件,使用的日志记录格式基本上是相同的。
以公共日志/var/log/messages 文件的记录格式为例
每 一条消息均包括以下四个字段
- 时间标签:消息发出的日期和时间。
- 主机名:生成消息的计算机的名称。
- 子系统名称:发出消息的应用程序的名称。
- 消息:消息的具体内容。
3.rsyslog
rsyslog是CentOS 6以后版本的系统管理服务:它提供了高性能,出色的安全性和模块化设计。
当应用有限的处理时,RSYSLOG每秒可以将超过一百万的消息传递到本地目的地。即使在远程的目的地和更精细的处理中,性能通常也被认为是惊人的”。
http://www.rsyslog.com/
官网
3.1rsyslog 特性
- 多线程
- UDP, TCP, SSL, TLS, RELP
- MySQL, PGSQL, Oracle实现日志存储
- 强大的过滤器,可实现过滤记录日志信息中任意部分
- 自定义输出格式 可以日志
- 适用于企业级
rpm -qi rsyslog #服务器
3.2rsyslog配置文件
/etc/rsyslog.conf
#配置文件所在
MODULES:相关模块配置
GLOBAL DIRECTIVES:全局配置
RULES:日志记录相关的规则配置
全局配置没有日志记录相关的规则配置的优先级高
只有没有日志记录相关的规则配置时,才会使用全局配置
#自定义的分类
local0-local7
3.3服务名称
服务名称 | 说 明 |
---|---|
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) | 为本地使用预留的服务 |
lpr (LOG_LPR) | 打印产生的日志 |
mail (LOG_MAIL) | 邮件收发信息 |
news (LOG_NEWS) | 与新闻服务器相关的日志 |
syslog (LOG_SYSLOG) | 存syslogd服务产生的曰志信息(虽然服务名称己经改为reyslogd,但是很多配罝依然沿用了 syslogd服务的,所以这里并没有修改服务名称) |
user (LOG_USER) | 用户等级类别的日志信息 |
uucp (LOG_UUCP> | uucp子系统的日志信息,uucp是早期Linux系统进行数据传递的协议,后来 也常用在新闻组服务中 |
实际应用
将ssh服务的日志单独设置:
ssh服务功能:远程连接其他主机
但ssh的服务日志在 /var/log/secure 与其他软件日志混杂在一起
所以要将ssh日志单独存放
1.查看ssh服务的日志位置
tail -f /var/log/secure
2.编辑ssh配置文件
vim /etc/ssh/sshd_config
#修改配置文件
SyslogFacility LOCAL6
3.添加路径
vim /etc/rsyslog.conf
#在rsyslog 配置文件中添加路径
local6.* /var/log/ssh.log
systemctl restart rsyslog.service sshd
#重启服务
4.使用另一台主机远程连接
完成
网络日志(远程日志功能)
将n台主机的日志汇聚到一台主机上
192.168.67.100
1.查看环境
rpm -ql rsyslog
#查看该软件是否支持TCP和UDP
ss -natp | grep 514
#查看514端口是否被占用
未显示被占用
2.配置文件
vim /etc/rsyslog.conf
#rsyslog的配置文件
再次查看端口是否被占用
显示514端口已被占用
配置192.168.67.101
重复以上步骤
修改配置文件
54 *.info;mail.none;authpriv.none;cron.none /var/log/messages
#复制54行 改成ip地址
55 *.info;mail.none;authpriv.none;cron.none @@192.168.67.100
#两个@ 代表使用 tcp 一个代表udp
如果修改 的是udp @192.168.91.100
如果要想指定端口 @192.168.91.100:端口号
写日志进去
logger "1111111"
#发送日志
成功
四、日志管理工具 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"