内容预知
1.文件系统的组成
在Linux 系统中一切皆文件,因此目录也是一种文件。一个文件的文件名是放在目录中的,文件数据存储在block(块)中,存储文件元信息(比如文件的创建者、创建日期、文件大小、文件权限等)的区域就叫做inode。因此,一个文件必须占用一个 inode,并且至少占用一个 block。

用户访问 一个文件的真实流程:
用户访问文件时,通过文件名找到对应的inode号,通过Inode号获取inode信息,根据inode信息判断用户是否有权限访问文件,有则指向对于的数据block并读取数据,无则拒绝访问
用户在创建一个文件后,这个文件就会生成一个相对应的inode号,文件中的文件名和文件数据是分开存放的,系统根据inode号来寻找真实数据
每个文件的属性信息,比如:文件的大小,时间,类型,权限等,称为文件的元数据(meta data)。
元数据是存放在inode(index node)表中。inode 表中有很多条记录组成,第一条记录对应的存放了一个文件的元数据信息。
每一个inode表保存的文件元信息:
- ls -i
-
- stat 文件路径

atime(access time):最近访问
最后一次访问文件的时间
mtime(modify):最近更改
最后一次更改文件内容的时间
ctime(change time):最近改动
最后一次改变文件元信息的时间

注意:
cp 命令:分配一个空闲的inode号,在inode表中生成新条目在目录中创建一个目录项,将名称与inode编号关联拷贝数据生成新的文件
rm 命令:硬链接数递减,从而释放的inode号可以被重用,块放在空闲列表中,删除目录项
数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖。
mv命令:如果mv命令的目标和源在同一设备,不影响inode表(除时间戳)或磁盘上的数据位置;系统会删除旧的目录对应关系,新建目录对应关系。
vim编辑器 :
vim编辑器改变文件内容,是先创建一个新的swp文件,编辑的内容也是在swp文件中进行,当用户保存时,swp文件就会替换当前文件,因此indoe号会发生改变
利用echo命令往文件中加内容 :
对原文件进行操作,只改变原文件的内容,其他没有任何影响,indoe号不发生改变
硬链接与软链接的区别:
在前面的博客Linux命令ln 有记录:初识“Linux中软硬件链接ln,mkdir,touch”_站在这别动,给你买橘子去的博客-CSDN博客
https://blog.csdn.net/qq_62462797/article/details/125959532?spm=1001.2014.3001.5501
- find /opt -inum 67320322-delete
- find /opt -inum 67320322 -exec rm -rf {} \;
-
- find /opt -inum 67320322| xargs rm -rf

2.实验验证——indoe号的数量是文件数量的限制
- mount /dev/sdb1 /shiyan /创建一个分区,文件系统类型为ext4 ,挂载到新创文件夹
- cd /shiyan //切换到挂载的文件夹
- df -i //查看空余的indoe号
-
- for ((i=1;i<=1270;i++))
- do
- touch file$i
- done
- //脚本创建1270个文件,占满所有的indoe号

-
- df -i //再次查看可用indoe号
- touch a //尝试创建一个新文件
- df -h //查看可用空间

结论: 一个分区能够创建多少个空文件,除了取决于它的容量之外,还和它所拥有的indoe号息息相关,indoe号的数量决定文件的最大数量上限
3.日志分析
日志的作用:记录系统和程序运行操作的事件,根据该记录,来判断系统中存在的安全隐患,性能状态,帮助管理员排错优化
Linux 操作系统本身和大部分服务器程序的日志文件都默认放在目录/var/log/下。
日志分类表:
| 日志种类 | 位置 | 功能描述 |
| 内核及公共消息日志 | /var/log/messages | 记录Linux内核消息及各种应用程序的公共日志信息,包括启动、Io错误、网络错误、程序故障等 对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的事件记录信息 |
| 计划任务日志 | /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/ulm | 记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。同样,这个文件不能直接用 vi 查看,而要使用w、who、users等命令查看。 |
more /var/log/messages //以查看message目录为例子
时间标签:消息发出的日期和时间。
主机名:生成消息的计算机的名称。
子系统名称:发出消息的应用程序的名称。
消息:消息的具体内容。
内核及系统日志由系统服务 rsyslog 统一管理,主配置文件为/etc/rsyslog.conf
vim /etc/rsyslog.conf #查看rsyslog.conf配置文件
规则配置格式:【设备.级别 动作】 
| auth | 用户认证时产生的日志 |
| authpriv | ssh、ftp等登录信息的验证信息 |
| daemon | 一些守护进程产生的日志 |
| ftp | FTP产生的日志 |
| lpr | 打印相关活动 |
| mark | rsyslog服务内部的信息,时间标识 |
| news | 网络新闻传输协议(nntp)产生的消息。 |
| syslog | 系统日志 |
| uucp | Unix-to-Unix Copy 两个unix之间的相关通信 |
| console | 针对系统控制台的消息。 |
| cron | 系统执行定时任务产生的日志。 |
| kern | 系统内核日志 |
| local0~local7 | 自定义程序使用 |
| 邮件日志 | |
| user | 用户进程 |
注意:数字等级越小,优先级越高,消息越重要
| 优先级 | 信息名称 | 解释 |
| 0 | EMERG(紧急) | 会导致主机系统不可用的情况。如系统崩溃 |
| 1 | ALERT(警告) | 必须马上采取措施解决的问题。如数据库被破坏 |
| 2 | CRIT(严重) | 比较严重的情况。如硬盘错误,可能会阻碍程序的部分功能 |
| 3 | ERR(错误) | 运行出现错误。不是非常紧急,尽快修复的 |
| 4 | WARNING(提醒) | 可能影响系统功能,需要提醒用户的重要事件。不是错误,如磁盘用了85%等 |
| 5 | NOTICE(注意) | 不会影响正常功能,但是需要注意的事件。无需处理 |
| 6 | INFO(信息) | 一般信息。正常的系统信息 |
| 7 | DEBUG(调试) | 程序或系统调试信息等。包含详细开发的信息,调试程序时使用 |
| none | 空 | 没有优先级,不记录任何日志消息。 |
举例:
mail.info /var/log/maillog :比指定级别更高的日志级别,包括指定级别自身,保存到/var/log/maillog中
mail.=info /var/log/maillog :明确指定日志级别为info,保存至/var/log/maillog
mail.!info /var/log/maillog :除了指定的日志级别(info)所有日志级别信息,保存至/var/log/maillog
.info /var/log/maillog :所有facility的info级别,保存至/var/log/maillog mail. /var/log/maillog :mail的所有日志级别信息,都保存至/var/log/maillog
mail.notice;news.info /var/log/maillog :mail的notice以上记得日志级别和news的info以上的级别保存至/var/log/maillog
mail,news.crit -/var/log/maillog :mail和news的crit以上的日志级别保存/var/log/maillog中;“-”代表异步模式
Web服务:/var/log/httpd/
代理服务:/var/log/squid/
4. journalctl 日志管理工具
journalctl 日志管理工具 的简介:
日志管理工具journalctl是centos7上专有的日志管理工具,该工具是从messages这个文件里读取信息。 Systemd统一管理所有Unit的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。 日志的配置文件是/etc/systemd/journald.conf
- #查看所有日志(默认情况下,只保存本次启动的日志)
- journalctl
- journalctl -r #-r表示倒序,从尾部看(推荐),可以看最新的

- #查看某个服务的日志
- journalctl -u firewalld.service

- #查看指定进程的日志
- journalctl _PID=1

- #查看指定用户的日志
- journalctl _UID=0 --since today
-
- journalctl -xe // -x 是目录(catalog)的意思,在报错的信息下会,附加解决问题的网址
-
- -e pager-end 从末尾开始看


- #查看系统本次启动的日志
-
- journalctl -b [-0]
-
- #查看上一次启动的日志(需更改设置,如上次系统崩溃,需要查看日志时,就要看上一次的启动日志)
-
- journalctl -b -1
-
- #显示尾部指定行数的日志 查看的是/var/log/messages的日志,但是格式上有所调整,如主机名格式不一样而已
-
- journalctl -n 20 [-f] // -f 实时动态追踪
-
-
- #日志默认分页输出,--no-pager 改为正常的标准输出
- journalctl --no-pager
-
- #以 JSON 格式(单行)输出
- journalctl -b -u nginx.service -o json
-
- #以 JSON 格式(多行)输出,可读性更好
- journalctl -b -u nginx.serviceqq -o json-pretty
-
- #显示日志占据的硬盘空间
- journalctl --disk-usage
-
- #指定日志文件占据的最大空间
- journalctl --vacuum-size=1G
-
- #指定日志文件保存多久
- journalctl --vacuum-time=1years
总结
1. 能够区分处block和indoe的区别,准确说出它们在文件系统中的身份作用
2. 掌握日志分析中内核日志信息中优先级的意思,以及对应名称(遵循数字越小优先级越大的规则)
3.系统日志 /var/log/messages , 由 rsyslog 服务来管理,主配置文件 /etc/rsyslog.conf 用户登录日志 /var/log/secure
4.journalctl 可以直接查看 /var/log/messages 日志内容,掌握常用选项 -r -u -f
5.日志收集的方案 服务器数量较少的: rsyslog shell/python脚本 服务器数量众多: ELK