一、inode和block
文件数据包括元信息与实际数据,文件存储在硬盘上,硬盘最小存储单位是扇区,每个扇区存储512字节
1.block(块):文件系统中用于存储文件实际数据的最小单位,由文件系统进行分配和管理,并通过inode号中的指针关联到对应的文件,连续的八个扇区组成一个block,是文件存取的最小单位
2.inode(索引节点):用于标识和管理文件的唯一索引节点的标识符,用于存储文件的元信息
1.inode
Inode(索引节点)用于表示文件或目录的数据结构,每个inode有唯一的编号标识,文件系统使用这些编号来查找和访问文件,文件名和inode之间建立了映射关系,通过文件系统的目录结构可以将文件名与相应的inode关联起来,从而可以通过文件名来访问文件,当文件被删除时,只删除了与文件名相关联的inode,而文件的实际数据并没有立即被清除,只有当文件没有任何指向它的inode时,系统才会释放文件的存储空间。
2.inode表
元信息是每个文件的属性信息,比如:文件的大小、时间、类型、权限等,称为文件的元数据(meta data 元信息)。元数据是存放在inode(index node)表中,inode表由很多条记录组成,第一条记录对应的存放了一个文件的元数据信息。
inode表结构:
1.inode number文件的字节数
2.文件类型
3.文件的读、写、执行权限
4.文件拥有者的UID
5.文件的GID
6.链接数(指向这个文件名路径的名称个数)
7.该文件的大小和不同的时间戳
8.指向磁盘上文件的数据块指针
9.有关文件的其他数据
3.inode号
每个inode都有一个号,文件名和inode号是一一对应关系,操作系统用inode号码来识别不同的文件,inode号是是有限资源,如果消耗完毕,无法继续新建文件,解决方法就是删除空文件或无用文件。inode号是唯一的,在同一设备中是唯一的,在不同设备中inode号是可以相同的
用stst命令可以查看某个文件的inode信息(详细信息)
命令格式:inode 文件名
查看文件系统的inode号
命令格式:df -i
查看某文件的inode号
命令格式:ls -i 文件名
3.Linux系统文件三个主要文件的时间属性(三个时间戳)
atime:访问文件时间,需要打开文件时间才会发生变化
mtime:最近更改时间,文件内容发生改变,时间才会变化
ctime:最近改动时间,文件的元信息发生改变,时间才会改动,时间权限包括属主属组大小
注:只有用vim打开此文件才会更新此文件的最近访问时间
注:在使用find找文件时间时建议使用mtime
4.目录文件结构
inode号不包含文件名,文件名是存放在目录当中的,Linux系统中一切皆文件,因此目录也是一种文件,目录文件的结构就是目录项的列表,每个目录项由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码
查看目录下所有文件的inode号
命令格式:ls -i 目录(绝对路径)
二、日志*
内核及系统日志由系统服务rsyslog统一管理,根据其主配置文件/etc/rsyslog.conf,linux操作系统本身和大部分服务器程序的日志文件都默认放在目录/var/log下。
1.日志的功能
1.用于记录系统、程序运行中发生的各种事件
2.通过阅读日志,有助于诊断和解决系统故障
2.日志分类
1.内核系统日志:
由系统服务rsyslog统一进行管理,日志格式基本相似,记录了操作系统做了什么事,发生了什么故障
2.用户日志:
记录系统用户登录及退出系统的相关信息
3.程序日志:
由各种应用程序独立管理的日志文件,记录格式不统一,记录了某一程序做了什么事,发生了什么故障
3.日志默认保存的位置
默认位于:/var/log目录下,如果想改变日志位置,需要用到rsyslog软件
1.日常的日志记录(内核和公共日志)
核心系统日志文件,其中包含了系统启动时的引导信息,以及系统运行时的其他状态信息,I/O错误、网络错误和其他系统错误都会记录到此文件中。其他信息,比如某个人的身份切换为 root,已及用户自定义安装软件的日志,也会在这里列出
日志 | 命令 | 作用 |
btmp | lastb | 查看登录失败的用户 |
lastlog | lastlog | 查看用户最后一次登录的情况 |
wtmp | last | 用户成功登录的日志 |
文件位置:/var/log/message
文件格式:文本文件
作用:系统中大部分的信息
2.系统安全的日志
文件位置:/var/log/secure
文件格式:文本文件
作用:系统安全日志,比如登陆失败等信息会记录下来
3.登录失败的日志
文件位置:/var/log/btmp
文件格式:二进制无法直接查看
作用:登录失败日志
lastb:查看登陆失败的用户
4.记录用户最后一次登录日志
文件位置:/var/log/lastlog
文件格式:非文本
lastlog:查看用户最后一次登录的情况
5.目前用户成功登录日志
文件位置:/var/log/wtmp
文件格式:非文本
last:查看用户成功登录的日志(wtmp)
last |tail:查询成功登录到系统的用户记录,只显示最后十行
6.记录硬件信息日志
文件位置:/var/log/dmesg
文件格式:文本
作用:记录硬件信息日志
7.记录系统启动服务
文件位置:/var/log/boot.log
文件格式:文本
作用:系统服务启动的相关信息
用vim打开查看相关信息
8.记录安装系统的相关信息
文件位置:/var/log/anaconda:anaconda
文件格式:文本
作用:安装系统时的相关信息
9.计划任务的日志
文件位置:/var/log/cron
作用:记录与系统定时任务相关的日志
10.查询当前登录用户
users:仅显示登录的用户名
w:显示当前系统上登录的用户以及活动情况
USER:登录的用户名
TTY:用户当前所使用的终端
FROM:登录用户的IP地址或主机名
LOGIN@:登陆时间
IDIE:用户在终端处于空闲状态的时间
JCPU:用户所有进程的累计CPU时间
PCPU:当前正在运行的进程的CPU时间
WHAT:用户正在做的事情(命令或程序的简短描述)
who:当前登陆用户的信息(包括用户名、登录终端和登陆时间等)
4.系统日志管理rsyslog
1.日志优先级/级别:描述了事件的严重程度
根据日志消息的重要程度不同,将其分为不同的优先级别(数字等级越小,优先级越高,消息越重要)
级号 | 消息 | 级别 | 说明 |
0 | EMERG | 紧急 | 会导致主机不可用的情况 |
1 | ALERT | 警告 | 必须马上采取措施解决的问题 |
2 | CRIT | 严重 | 比较严重的情况 |
3 | ERR | 错误 | 运行出现错误 |
4 | WARNING | 提醒 | 可能会影响系统功能的事件 |
5 | NOTICE | 注意 | 不会影响系统但值得注意 |
6 | INFO | 信息 | 一般信息 |
7 | DEBUG | 调试 | 程序或系统调试信息等 |
2.rsyslog特性
1.多线程
2.UDP,TCP,SSL,TLS,RELP
3.MySQL,PGSQL,Oracle实现日志存储
4.强大的过滤器,可实现过滤记录日志信息中任意部分
5.自定义输出格式,可以日志
6.适用于企业级
3.rsyslog配置文件
配置文件/etc/rsyslog.conf由3个模块组成
1.MODULES相关配置模块
只有安装了功能模块,才会有相关的模块配置
2.GLOBAL DIRECTIVES全局配置模块
全局配置没有局部配置的优先级高,只有在没有局部配置时,才会使用全局配置
3.RULES局部配置
3.sysklogd系统日志服务
CentOS5之前版本采用的日志管理系统服务
1.syslogd(system application):记录应用日志
2.klogd(Linux kernel):记录内核日志
5.ELK日志
ELK(Elasticsearch,Logstash,Kibana)由三个软件组成
1.Elasticsearch:开源分布式搜索引擎,可以处理大规模日志数据,比如:Nginx、Tomcat、系统日志等功能
2.Logstash:对日志进行收集、分析、过滤,并将其存储供以后使用
3.kibana:可以提供的日志分析友好的Web界面
4.kafka:消息队列
6.logrorate分割日志文件
日志是需要进行分割的
1.写脚本,制定crontab计划任务每天执行
2.logrorate centos7
三、实操实验
1.实验的两个目的
1.有些软件程序是没有单独的日志服务,我们可以利用rsyslog软件给一些重要的程序生成独立的日志文件,把ssh远程登录程序的日志独立出来,ssh软件默认的日志在/var/log/secure,是很多程序一起使用的,并不是独立的。
2.搭建日志服务器
配置文件中的rules
通式:服务程序.记录的日志级别(sshd.error)日志文件的位置应该使用绝对路径
2.rsyslog实例1(设置ssh的单独日志)
目的:单独显示某一服务器的日志,以ssh服务为例
1.编辑rsyslog配置文件
vim /etc/rsyslog.conf
2.添加的内容
local6:日志源 *:表示任意级别 /var/log/nssh.log:新的日志路径
3.编辑ssh服务的配置文件/etc/ssh/sshd_config,改变日志路径
vim /etc/ssh/sshd_config
4.在32行添加自定义切换日志源为local6
SyslogFacility LOCAL6
5.重启服务
systemctl restart rsyslog.service sshd
6.远程连接其他主机
这里看到生成了一个登录信息的日志,显示最后一次登录的基础信息
7.查看ssh服务的日志是否独立列出
cat /var/log/nssh.log
2.rsyslog实例2(创建一个专门的日志服务器)
目的:将远程主机的日志备份到本机,现有esdeath、eva和es三台主机,现将es作为日志服务器用于记录esdeath和eva的日志存储
1.关闭防火墙
2.打开es的rsyslog的配置文件并加载es的rsyslog的ICMP和TCP模块
3.这里可以看到在提供TCP syslog接收功能中的两个模块开头有#号,说明是注释状态,并没有被开启,我们把#号去掉以开启此模块
$ModLoad imtcp:加载rsyslog的imtcp模块,imtcp模块用于接收通过TCP协议发送的日志消息
$InputTCPServerRun 514:用于启动rsyslog的TCP服务器模式,监听TCP端口514以接收日志消息
4.去掉注释状态,wq保存
5.重启使模块生效
systemctl restart rsyslog.service
6.查看514端口是否被开启
ss -ntap |grep 514
7.修改主机esdeath和eva的rsyslog配置文件,两个主机配置一样,这里只拿一个主机做演示
打开/etc/rsyslog.conf编辑配置
8.将TCP下的两个模块退出注释状态并wq保存退出
9.添加日志服务器的IP地址
*.info;mail.none;authpriv.none;cron.none @@192.168.7.132(这里的IP地址选择日志服务器的IP地址)
10.重启使之生效
systemctl restart rsyslog.service
11.关闭防火墙
systemctl stop filewalld.service
12.观察主机es能否收到主机esdeath和eva的消息,主机esdeath和主机eva使用logger命令模拟日志
13.用tail -f -n2 /var/log/messages:实时追踪消息日志的最后两行,收到了主机esdeath和主机eva的测试日志
四、日志管理工具journalctl
1.journalctl日志的配置文件
/etc/systemd/journald.conf
2.journalctl命令格式与选项
命令格式:journalctl 选项
选项 | 功能 |
journalctl | 查看所有日志(默认情况下,只保存本次启动的日志) |
journalctl -x | 提示信息 |
journalctl -e | 显示到末尾 |
journalctl --no-pager | 分页,显示全自动换行 |
journalctl -k | 查看内核日志(不显示应用日志) |
journalctl -b -0 | 查看系统本次启动的日志 |
journacltl -b -1 | 查看上一次启动的日志(需更改设置) |
journacltl -n | 显示尾部的最新10行日志 |
journacltl -n 数字 | 显示尾部指定行数的日志 |
journalctl -f | 实时滚动显示最新日志 |
journalctl 绝对路径 | 查看指定服务的日志 |
journalctl _PID=1 | 查看某个路径的脚本的日志 |
journalctl --disk-usage | 显示日志占据的硬盘空间 |
journalctl --vacuum-size=1G | 指定日志文件占据的最大空间 |
journalctl --vacuum-time=1years | 指定日志文件保存多久 |