文章目录
inode和block概述
文件数据包括元信息与实际数据
文件存储在硬盘上,硬盘最小存储单位是“扇区”,每个扇区存储512字节
block (块)
- 连续的八个扇区组成一个 block(4K)
- 是文件存取的最小单位
inode (索引节点)
- 中文译名为“索引节点”,也叫i节点
- 用于存储文件元信息
inode包含文件的元信息
- 文件的字节数
- 文件拥有者的User ID
- 文件的Group ID
- 文件的读、写、执行权限
- 文件的时间戳
用stat命令可以查看某个文件的inode信息
示例: stat aa.txt
stat /etc/passwd
文件:"/etc/passwd"
大小:2393 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:67200784 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:system_u:object_r:passwd_file_t:s0
最近访问:2023-04-16 11:42:05.010000148 +0800
最近更改:2023-04-13 16:18:59.475504675 +0800
最近改动:2023-04-13 16:18:59.478504700 +0800
创建时间:-
Linux系统文件三个主要的时间属性
- ctime(change time)
- 最后一次改变文件或目录 (属性)的时间
- atime(access time)
- 最后一次访问文件或目录的时间
- mtime(modify time)
- 最后一次修改文件或目录 (内容)的时间
目录文件的结构
- 目录也是一种文件
- 目录文件的结构
每个inode都有一个号码,操作系统用inode号码来识别不同的文件
Linux系统内部不使用文件名,而使用inode号码来识
别文件
对于用户,文件名只是inode号码便于识别的别称
inode的号码
-
用户通过文件名打开文件时,系统内部的过程
-
- 系统找到这个文件名对应的inode号码
-
- 通过inode号码,获取inode信息
-
- 根据inode信息,找到文件数据所在的block,读出数据
-
-
查看inode号码的方法
- ls -i命令: 查看文件名对应的inode号码
ls -i aa.txt
- stat命令: 查看文件inode信息中的inode号码
stat aa.txt
文件存储
- 硬盘分区后的结构
- 访问文件的简单流程
inode的大小
- inode也会消耗硬盘空间
- 每个inode的大小
- 一般是128字节或256字节
- 格式化文件系统时确定inode的总数
- 使用df-i命今可以查看每个硬盘分区的inode总数和已经使用的数量
[root@localhost ~]# df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
devtmpfs 499015 426 498589 1% /dev
tmpfs 503270 1 503269 1% /dev/shm
tmpfs 503270 1517 501753 1% /run
tmpfs 503270 16 503254 1% /sys/fs/cgroup
/dev/mapper/centos-root 19417088 161085 19256003 1% /
/dev/sda1 524288 340 523948 1% /boot
/dev/mapper/centos-home 9480192 188 9480004 1% /home
tmpfs 503270 20 503250 1% /run/user/0
/dev/sr0 0 0 0 - /run/media/root/CentOS 7 x86_64
inode的特殊作用
- 由于inode号码与文件名分离,导致一些Unix/Linux系统具有以下的现象
- 当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件
- 移动或重命名文件时,只改变文件名,不影响inode号码
- 打开一个文件后,系统通过inode号码来识别该文件,不再考虑文件名
日志文件
日志的功能
- 用于记录系统、程序运行中发生的各种事件
- 通过阅读日志,有助于诊断和解决系统故障
日志文件的分类
-
内核及系统日志
- 由系统服务rsyslog统一进行管理,日志格式基本相似
- 主配置文件/etc/rsyslog.conf
-
用户日志
- 记录系统用户登录及退出系统的相关信息
-
程序日志
- 由各种应用程序独立管理的日志文件,记录格式不统一
-
日志保存位置
- 默认位于: /var/log目录下
-
主要日志文件介绍
内核及公共消息日志 /var/log/messages
计划任务日志 /var/log/cron
系统引导日志 /var/log/dmesg
邮件系统日志 /var/log/maillog
用户登录日志 /var/log/lastlog
/var/log/secure
/var/log/wtmp
/var/run/btmp
内核及系统日志
-
由系统服务rsyslog统一管理
- 软件包: rsyslog-7.4.7-16.el7.x86 64
- 主要程序: /sbin/rsyslogd
- 配置文件: /etc/rsyslog.conf
-
日志消息的级别
-
日志记录的一般格式
[root@localhost ~]# more /var/log/messages
Apr 16 12:22:01 localhost rsyslogd: [origin software="rsyslogd" swVersion="8.24.0-55.el7" x-pid="1
300" x-info="http://www.rsyslog.com"] rsyslogd was HUPed
Apr 16 12:30:02 localhost systemd: Started Session 7 of user root.
Apr 16 12:40:01 localhost systemd: Started Session 8 of user root.
Apr 16 12:50:01 localhost systemd: Started Session 9 of user root.
Apr 16 17:17:19 localhost journal: Runtime journal is using 8.0M (max allowed 196.5M, trying to le
ave 294.8M free of 1.9G available → current limit 196.5M).
Apr 16 17:17:19 localhost kernel: Initializing cgroup subsys cpuset
Apr 16 17:17:19 localhost kernel: Initializing cgroup subsys cpu
Apr 16 17:17:19 localhost kernel: Initializing cgroup subsys cpuacct
设备字段说明:
程序日志分析
- 由相应的应用程序独立进行管理
- Web服务: /var/log/httpd/
- access log //记录客户访问事件
- error_log //记录错误事件
- 代理服务: /var/log/squid/
- access.log、cache.log
- 分析工具
- 文本查看、grep过滤检索、Webmin管理套件中查看
- awk、sed等文本过滤、格式化编辑工具
- Webalizer、Awstats等专用日志分析工具
- Web服务: /var/log/httpd/
日志管理策略
- 及时作好备份和归档
- 延长日志保存期限
- 控制日志访问权限
- 日志中可能会包含各类敏感信息,如账户、口令等
- 集中管理日志
- 将服务器的日志文件发到统一的日志文件服务器
- 便于日志信息的统一收集、整理和分析
- 杜绝日志信息的意外丢失、恶意篡改或删除
远程收集日志
配置日志服务器收集日志
rsyslog是一个 C/S 架构,可以通过套接字来进行监听记录工作,可以基于TCP和UDP工作,默认的监听端口是514,只需要在MODULES 打开即可。
模拟远程收集日志
发送服务器:客户端 192.168.80.20
收集服务器:服务端 192.168.80.30
//关闭服务端和客户端防火墙、selinux
setenforce 0
systemctl stop firewalld
systemctl disable firewalld
//修改客户端配置文件,并启动服务
vim /etc/rsyslog.conf
####MODULES ####
#将下面四行前的注释取消掉
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
####RULES ####
#添加下列内容
$template myFormat, “%timestamp% %hostname% %syslogseverity-text% %syslogtag% %msg%\n”
$ActionFileDefaultTemplate myFormat
*.info;mail.none;authpriv.none;cron.none @@192.168.80.30:514
#%timestamp% :时间戳
#%fromhost-ip% :接收的信息来自于哪个节点的 IP
#%hostname% :主机名
#%syslogseverity-text% :日志等级
#%syslogtag% :服务进程
#%msg% :日志内容
#接收方 IP 前面一个 @ 表示 TCP 传输,两个 @ 表示 UDP 传输
systemctl restart rsyslog
//修改服务端配置文件,并启动服务
vim /etc/rsyslog.conf
#将下面四行前的注释取消掉
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
#添加以下内容
$AllowedSender tcp, 192.168.80.0/24 #允许 192.168.80.0 网段内的主机以tcp协议来传输
$template Remote,"/data/log/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log" #定义模板,接受日志文件路径,区分了不同主机的日志
:fromhost-ip, !isequal, "127.0.0.1" ?Remote #过滤掉 server 本机的日志
systemctl restart rsyslog
//在服务端创建/data/log目录,以接受大量日志信息,配置文件中的路径应当与该路径一致
mkdir -p /data/log
//验证
#客户端的终端命令行输入或者重启一个服务
logger “hello world”
#在服务端查看日志文件
tree /data/log/