文章目录
- 一、inode表结构
- 二、日志
- 日志介绍
- 日志保存位置
- 日志管理策略
一、inode表结构
每个文件的属性信息,如文件的大小,时间,类型,权限等,称为文件的元数据。元数据是存放在inode表中。inode 表中有很多条记录组成,第一条记录对应的存放了一个文件的元数据信息。
每一个inode表包含了以下信息:
- inode number 节点号
- 文件类型
- 权限
- UID
- GID
- 链接数(指向这个文件名路径名称个数)
- 该文件的大小和不同的时间戳
- 指向磁盘上文件的数据块指针
- 有关文件的其他数据
注意:
1.inode号是有限资源,如果消耗完毕,无法新建文件,解决方法是删除空文件。
2.inode号在同一设备中是唯一的,在不同存储设备上,inode号可以是重复的。
3.时间戳
时间戳 | 含义 |
---|---|
atime | 访问文件时间,需要打开文件时间才会发生变化 |
mtime | 最近更改时间,文件内容发生改变,时间才会变化 |
ctime | 最近改动时间,文件的元信息发生变化,时间才会变化 |
mtime改变ctime一定改变,但反之不一定。
其他基本概念:
- 文件是存储在硬盘上的,硬盘的最小存储单位叫做“扇区”(sector),每个扇区存储512字节。
- 一般连续八个扇区组成一个"块”(block),一个块是4K大小,是文件存取的最小单位。操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取的。4k一读,即8个扇区一读。
- 文件数据包括实际数据与元信息(类似文件属性)。文件数据存储在“块"中,存储文件元信息(比如文件的创建者、创建日期、文件大小、文件权限等)的区域就叫做inode表。 因此,一个文件必须占用一个inode,并且至少占用一个block。
- inode不包含文件名。文件名是存放在目录文件夹当中的。Linux 系统中一切皆文件,因此目录也是一种文件。
- 每个inode都有一个号码,操作系统用inode号码来识别不同的文件。Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称,文件名和inode号码是一 一对应关系,每个inode号码对应一个或多个文件名。
6.当用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找它对应的inode号码:通过inode号码,获取inode信息;根据inode信息,看该用户是否具有访问这个文件的权限;如果有,就指向相对应的数据block,并读取数据。
目录
目录是个特殊文件,目录文件的内容保存了此目录中文件的列表和inode号之间对应关系。
Linux中是如何找到文件的呢?
1.用户访问文件时,先去查找自己文件夹中的目录项;2.找到文件名和inode之间对应的关系;3.通过inode号利用指针去指向实际数据。
指针是指向实际数据,分为直接指针和间接指针。直接指针默认12个,直接指向实际数据的地址,最大文件为4k*12。由于文件过大,出现了间接指针,间接指针指向指针,而不是实际数据。
部分命令和indoe的关系
cp 命令:
- 分配一个空闲的inode号,在inode表中生成新条目
- 在目录中创建一个目录项,将名称与inode编号关联
- 拷贝数据生成新的文件
rm 命令:
- 硬链接数递减,从而释放的inode号可以被重用
- 把数据块放在空闲列表中
- 删除目录项
- 数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖
mv命令
- 如果mv命令的目标和源在同一设备,不影响inode表(除时间戳)或磁盘上的数据位置,没有数据被移动! 删除旧的目录对应关系新建目录对应关系。
二、日志
日志介绍
1.日志功能
- 用于记录系统、程序运行中发生的各种事件
- 通过阅读日志,有助于诊断和解决系统故障
2.日志文件的分类 - 内核及系统日志:由系统服务rsyslog统一进行管理,日志格式基本相似。
- 用户日志:记录系统用户登录及退出系统的相关信息
- 程序日志:由各种应用程序独立管理的日志文件,记录格式不统一。
3.日志级别(描述事件的严重程度)
等级名称 | 说 明 |
---|---|
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认证信息服务产生的日志,所有的日志等级都记录 |
4.rsyslog系统日志服务
rsyslog 是一个开源的系统日志服务程序,,提供了更强大的日志处理功能。
rsyslog 特性
- 多线程
- UDP, TCP, SSL, TLS, RELP
- MySQL, PGSQL, Oracle实现日志存储
- 强大的过滤器,可实现过滤记录日志信息中任意部分
- 自定义输出格式 可以日志
- 适用于企业级
- 适用于Windows、Linux
日志保存位置
默认保存在/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等命令查看 |
/var/log/btmp | 记录登录失败的日志,二进制文件无法直接查看,使用lastb命令查看 |
日志管理策略
方法:
1.及时作好备份和归档
2.延长日志保存日期
3.控制日志的访问权限:日志中可能会有包含各类敏感信息,如账户、口令等
4.集中管理日志:
- 将服务器的日志文件发到统一的日志文件服务器
- 便于日志信息的统一收集、整理和分析
- 杜绝日志信息的意外丢失、恶意篡改或删除
实验
1.利用tsyslog软件给一些重要程序生成独立的日志文件。
将ssh远程登录程序的日志独立出来
ssh软件默认的日志在 /var/log/secure下 是很多程序一起使用,并不是独立的。
/etc/rsyslog.conf 配置文件的位置
/etc/rsyslog.conf 配置文件格式:
由三部分组成
- MODULES:相关模块配置
- GLOBAL DIRECTIVES:全局配置
- RULES:日志记录相关的规则配置即你想怎么生成日志。
RULES配置格式:
facility.priority;
程序类型.日志级别
例子:shhd.info
记录shhd,info级别及以上的情况。
*: 所有级别
none:没有级别,即不记录
PRIORITY:指定级别(含)以上的所有级别
=PRIORITY:仅记录指定级别的日志信息
通式:服务程序.记录日志的级别(其余可以看官方文档)
文件路径:通常在/var/log/,文件路径前的 -表示异步写入
异步:记录一段日志后统一存入磁盘
同步:内存中磁盘上有一条写一条
local0-local7 给我们自定义使用
一个程序想利用rsyslog软件生成日志,首先得和rsyslog兼容
ssh程序的配置文件
/etc/ssh/sshd_config下
修改两个文件相对应的配置文件使得新建一个日志文件。
然后重启服务!systemctl restart sshd rsyslog.service 配置完毕!
2.搭建日志服务器
开启日志的远程传输功能
首先关闭防火墙,两端都需要关
#systemctl stop firewalld
#setenforce 0
vim /etc/rsyslog.conf
#打开19 20 行 两端都要开
19 #KaTeX parse error: Expected 'EOF', got '#' at position 18: …dLoad imtcp 20 #̲InputTCPServerRun 514
vim /etc/rsyslog.conf
#修改配置文件
54 *.info;mail.none;authpriv.none;cron.none /var/log/messages
#复制54行 改成ip地址
55 *.info;mail.none;authpriv.none;cron.none @@192.168.232.10
#两个@ 代表使用 tcp 一个代表udp
如果修改 的是udp @192.168.232.10
如果要想指定端口 @1192.168.232.10:端口号