文件系统
- 文件是存储在硬盘上的,硬盘的最小存储单位叫做"扇区”(sector)每个扇区存储512字节。
- 一般连续八个扇区组成一个"块"(block),一个块是4K大小,是文件存取的最小单位。操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取的
- 文件数据包括实际数据与元信息(类似文件属性)文件数据存储在"块"中,存储文件元信息(比如文件的创建者、创建日期、文件大小、文件权限等) 的区域就叫做inode。因此,一个文件必须占用一个 inode,并且至少占用一个 block
- inode不包含文件名。文件名是存放在目录当中的。linux 系统中一切皆文件,因此目录也是一种文件。
- 每个inode都有一个号码,操作系统用inode号码来识别不同的文件。Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称,文件名和inode号码是一 一对应关系,每个inode号码对应一个文件名。
- 所以,当用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找它对应的inode号码:通过inode号码,获取inode信息,根据indoe信息,看该用户是否具有访问这个文件的权限:如果有,就指向相对应的数据block,并读取数据。
inode和block概述
文件数据包括元信息与实际数据
文件存储在硬盘上,硬盘最小存储单位是“扇区”,每个扇区存储512字节
block (块)
连续的八个扇区组成一个 block(4K)
【这个大小可以修改,在磁盘格式化的时候修改。mkfs -b size=1024指定 (1024为字节数,最小512,最大为65536即64k)修改完后挂载才显示】
是文件存取的最小单位
inode (索引节点)
中文译名为“索引节点”,也叫i节点
用于存储文件元信息
-b 指定块大小(man mkfs.xfs查看)
blockdev命令
这里可以使用blockdev --getbsz来查看一个磁盘的块的大小
inode的内容
- 文件的字节数
- 文件的拥有者的user id
- 文件的group id
- 文件的读,写,执行权限
- 文件的时间戳
注意,inode不包含文件名,文件名存在目录当中
可以用stat命令去查看文件的inode信息
ls -i查看inode号
其中时间戳
Linux系统文件三个主要的时间属性
ctime(change time)最近改动
最后一次改变文件或目录 (属性) 的时间
atime(access time)最近访问
最后一次访问文件或目录的时间
mtime(modify time)最近更改
最后一次修改文件或目录 (内容)的时间
目录文件的结构
目录也是一种文件
目录文件的结构----会把文件名和inode号一 一对应起来
每个inode都有一个号码,操作系统用inode号码来识别不同的文件
Linux系统内部不使用文件名,而使用inode号码来识别文件
对于用户,文件名只是inode号码便于识别的别称
用户通过文件名打开文件时,系统内部的过程
- 1系统找到这个文件名对应的inode号码
- 2通过inode号码,获取inode信息
- 3根据inode信息,找到文件数据所在的block,读出数据
inode的大小
- inode也会消耗硬盘空间,每个inode的大小一般是128字节或256字节
- 格式化文件系统时确定inode的总数
- 使用df-i命令可以查看每个硬盘分区的inode总数和已经使用的数量
注意:inode数量用完,则就无法继续写入文件,不管磁盘空间还有空余空间
磁盘仍有空间但无法写入
- inode号不足,删除无用的文件来空余inode号
- 磁盘出问题了,用badblocks -v 来检测
- 文件系统出问题了,用fack尝试检测修复
inode的特殊作用
由于inode号码与文件名分离,导致一些Unix/Linux系统具有以下的现象
- 当文件名包含特殊字符,例如"/"等,可能无法正常删除文件,直接删除inode,也可以删除文件
- 移动或重命名文件时,只改变文件名,不影响inode号码
- 打开一个文件后,系统通过inode号码来识别该文件,不再考虑文件名
注意使用vi编辑器编辑文件时,inode号会变化,因为vi编辑器时会生成新的.swp隐藏文件用来编辑完成后替换原文件,而echo写入inode号不会发生变化
日志文件
日志的功能
- 用于记录系统、程序运行中发生的各种事件
- 通过阅读日志,有助于诊断和解决系统故障
日志文件的分类
- 内核及系统日志
由系统服务rsyslog统一进行管理,日志格式基本相似
主配置文件/etc/rsyslog.conf - 用户日志
记录系统用户登录及退出系统的相关信息 - 程序日志
由各种应用程序独立管理的日志文件,记录格式不统一
日志保存位置
默认位于: /var/log目录下
主要日志文件介绍
-
内核及公共消息日志
/var/log/messages------记录Linux内核消息及各种应用程序的公共日志信息,包括启动、IO错误、 网络错误、程序故障等。对于未使用独立日志文件的应用程序或服务,一般都可以以从该日志文件中获得相关的事件记录信息。 -
计划任务日志
/var/log/cron-----记录crond计划任务产生的事件信息 -
系统引导日志
/var/log/dmesg------记录Linux系统在引导过程中的各种事件信息 -
邮件系统日志
/var/log/maillog----记录进入或发出系统的电子邮件活动 -
用户登录日志
/var/log/lastlog;------记录每个-用户最近的登录事件
/var/log/secure;-------记录用户认证相关的安全事件信息
/var/log/wtmp;-------记录每个用户登录、注销及系统启动和停机事件
/var/run/btmp --------记录失败的、错误的登录尝试及验证事件 -
rpm包列表日志
/var/log/rpmpkgs--------记录系统中安装的各rpm包列表信息
日志消息的级别
数字等级越小,优先级越高,消息越重要
级号 | 消息 | 级别 | 说明 |
---|---|---|---|
0 | EMERG | 紧急 | 会导致主机系统不可用的情况,如系统崩溃 |
1 | ALERT | 警告 | 必须马上采取措施解决的问题,如数据库被破坏 |
2 | CRIT | 严重 | 比较严重的情况,如硬盘错误,可能会阻碍程序的部分功能 |
3 | ERR | 错误 | 运行出现错误,不是非常紧急,尽快修复的 |
4 | WARNING | 提醒 | 可能会影响系统功能的事件,需要提醒用户的重要事件。不是错误,如磁盘用了85号等 |
5 | NOTICE | 注意 | 不会影响系统但值得注意,但是需要注意的事件。无需处理 |
6 | INFO | 信息 | 一般信息,正常的系统信息 |
7 | DEBUG | 调试 | 程序或系统调试信息等,包含详细开发的信息,调试程序时使用 |
不常用的级别:none:没有优先级,不记录任何日志消息
日志的一般格式
more /var/log/messages
日志级别及记录服务内容由/etc/rsyslog.conf决定
格式:
其中常用的日志设备类型
日志设备类型 | 解释 |
---|---|
auth | 用户认证时产生的日志 |
authpriv | ssh、ftp等登录信息的验证信息 |
daemon | 一些守护进程产生的目志 |
ftp | ETP产生的日志 |
lpr | 打印相关活动 |
mark | rsyslog服务内部的信息,时间标识 |
news | 网络新闻传输协议(nntp) 产生的消息。 |
syslog | 系统日志 |
uucp | Unix-to-Unix Copy 两个unix之间的相关通信 |
console | 针对系统控制台的消息。 |
cron | 系统执行定时任务产生的日志。 |
kern | 系统内核日志 |
local0~local7 | 自定义程序使用 |
邮件日志 | |
user | 用户进程 |
举例:
- mail.info /var/log/maillog ------比指定级别更高的日志级别,包括指定级别自身,保存到/var/log/maillog中
- mail.=info /var/loq/mailloq --------明确指定日志级别为info,保存至/var/log/maillog
- mail.!info /var/loq/maillog -------除了指定的日志级别(info) 所有日志级别信息,保存至/var/log/mailloq
- *.info /var/log/maillog-------所有facility的info级别,保存至/var/log/maillog
- mail.* var/log/maillog ------- mal的所有日志级别信息,都保存至/var/log/maillog
- mail.notice;news.info /var/log/maillog ---------mail的notice以上记得日志级别和news的info以上的级别保存至/var/log/maillog
- mail,news.crit -/var/log/maillog ----------mail和nes的crit以上的日志级别保存/var/log/maillog中;"-"代表异步模式(你处理你的,我记录我的,即上一个日志没有记录完,继续记录的同时可以又记录下个日志)
同步模式(一起做上一个做完做下一个)
rsyslog收集apache(阿帕奇即httpd)日志
先vim /etc/httpd/conf/httpd.conf
再vim /etc/rsyslog.conf
用户日志分析
/var/log/lastlog;------记录每个-用户最近的登录事件
/var/log/secure;-------记录用户认证相关的安全事件信息
/var/log/wtmp;-------记录每个用户登录、注销及系统启动和停机事件
/var/run/btmp --------记录失败的、错误的登录尝试及验证事件
/var/run/utmp -----------当前登录的每个用户的详细信息
分析工具
- users 、who、w、last、 lastb
- last 命令用于查询成功登录到系统的用户记录
- lastb 命令用于查询登录失败的用户记录
程序日志分析
由相应的应用程序独立进行管理
Web服务: /var/log/httpd/
access_log//记录客户访问事件
error_log//记录错误事件
代理服务: /ar/log/squid/
access.log、cache.log
分析工具
文本查看、grep过滤检索、Webmin管理套件中查看
awk、sed等文本过滤、格式化编辑工具
Webalizer、Awstats等专用日志分析工具
日志管理策略
- 及时作好备份和归档
- 延长日志保存期限
- 控制日志访问权限
日志中可能会包含各类敏感信息,如账户、口令等 - 集中管理日志
将服务器的日志文件发到统一的日志文件服务器
便于日志信息的统一收集、整理和分析
杜绝日志信息的意外丢失、恶意篡改或删除
rsyslog配置日志服务器来收集日志
关闭服务端和客户端的防火墙,selinux
修改客户端配置文件,并启动服务
vim /etc/rsyslog.conf
再在同一个文件中找到RULES这一行,在结尾添加命令
变量 | 解释 |
---|---|
%timestamp% | 时间戳 |
%fromhost-ip% | 接收的信息来自于哪个节点的 IP |
%hostname% | 主机名 |
%syslogseverity-text% | 日志等级 |
%syslogtag% | 服务进程 |
%msg% | 日志内容 |
接收方 IP 前面一个 @ 表示 TCP 传输,两个 @表示 UDP 传输 |
重启rsyslog
转到服务器端编辑
取消注释
添加以下内容
重启rsyslog
创建目录
验证
客户端
服务端
journalctl日志管理工具(centos7专有)
是centos7上专有的日志管理工具,该工具是从message这个文件里读取信息
Systemd统一管理所有unit的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)
日志的配置文件是/etc/systemd/journald.conf
选项 | 解释 |
---|---|
-r | 倒序查看,从尾部看(尾部为最新的) |
-k | 查看内核日志,不显示应用日志 |
-b -0 | 查看系统本次启动的日志 |
-b -1 | 查看上一次启动的日志(需更改设置,如上次系统崩溃,需要查看日志时,就要看上一次的启动日志) |
-n 20 [-f] | 显示尾部指定行数的日志;-f 实时跟踪 |
journalctl _PID=1 | 查看指定pid号的进程的日志 |
journalctl _UID=0 --since today | 查看指定uid号的用户的日志;–since指定日期 |
-xe | -x 是目录(catalog)的意思,在报错的信息下会,附加解决问题的网址;-e pager-end 从末尾开始看 |
-u [-f] 服务名 | 查看某个服务的日志;-f 实时跟踪 |