Inode和Block阐述
inode和block是两个在文件系统中扮演不同角色的概念,它们都是用来管理文件和数据存储的重要组成部分。
Inode
Inode是文件系统中的一种数据结构,用于存储文件或目录的元数据(metadata)信息,如文件类型、权限、所有者、大小、时间戳等。 每个文件或目录都有一个唯一的inode号码来标识自己。
Inode不包含文件名或实际的文件数据,而是用于快速定位和管理文件的元数据。
当打开一个文件时,操作系统会查找对应文件的inode,从中获取文件的元数据,并根据inode中的数据块地址信息找到文件实际的数据块。
Inode的包含内容
- 文件类型:指示inode对应的是文件、目录、符号链接等类型。
- 文件权限:指定谁可以对该文件执行读取、写入和执行操作。
- 文件所有者和所属组:标识文件的所有者和所属组。
- 文件大小:指示文件的大小,以字节为单位。
- 创建时间、修改时间和访问时间:记录了文件的创建、最后修改和最后访问的时间戳。
- 硬链接计数:表示有多少个硬链接指向这个inode。一个inode可以有多个硬链接,每个硬链接都可以看作是文件系统中相同文件的不同别名。
- 文件数据块地址:指示文件数据存储在哪些数据块中。文件的内容被分成一个或多个数据块来存储。
三个主要的时间属性
stat 文件
atime:最近访问 最后一次访问文件的时间
mtime:最近更改 最后一次更改文件内容的时间
ctime:最近改动 最后一次改变文件元信息的时间
注意:
- 不打开文件的话,atime不变。例如使用echo追加内容,atime不会变,因为文件没有被打开访问。
- 修改文件内容的话,mtime会变,ctime也会变。
- 如果只修改文件的权限,ctime变,mtime不变。
inode 的大小
inode也会消耗硬盘空间
每个inode的大小一般是128字节或256字节
格式化文件系统时确定inode的总数
如果磁盘还有空间,但inode号被全部占用,也无法创建新文件。
inode号在同一个文件系统内唯一,在不同的文件系统中可以重复。
使用 "df -i" 命令可以查看每个硬盘分区的inode总数和已经使用的数量
inode实例
ll -i //查看inode号
find /opt -inum inode号| xargs rm -rf //通过inode删除内容
Block
数据块是文件系统中用来存储文件实际数据的基本单位。 当一个文件被创建时,它的数据被分割成一个或多个数据块,并按顺序存储在不同的数据块中。 文件数据块的大小可以是固定的(例如4KB、8KB)或动态的,这取决于文件系统的设计。 一个inode中包含指向文件数据块的地址,这样操作系统就能够通过inode找到文件实际的数据块。
用户访问文件的过程
用户需要访问文件时,先去inode表中寻找inode号,随后进行判断,主要判断是否有执行文件的权限,如果有则直接指向对应的inode号,若无则直接报错。
日志分析
日志文件介绍
日志的功能:
用于记录系统、程序运行中发生的各种事件 通过阅读日志,有助于诊断和解决系统故障
日志文件的分类:
内核及系统日志: 这种日志数据由系统服务rsyslog统一管理,根据其主配置文件/etc/rsyslog.conf中的设置,决定将内核消息及各种系统程序消息记录到什么位置。日志格式基本相似。
用户日志: 记录用户登录及退出系统的相关信息,包括用户名、登录的终端、登录时间、来源主机、正在使用的进程操作等。
程序日志: 有些应用程序会选择由自己独立管理一份日志文件(而不是交给rsyslog服务管理),用于记录本程序运行过程中的各种事件信息。记录格式不统一。
日志保存位置:
默认位于:/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等命令查看。 |
日志文件分析
内核及系统日志
由系统服务 rsyslog 统一管理,根据其主配置文件 /etc/rsyslog.conf。
软件包:rsyslog-8.24.0-12.el7.x86_64 (可使用 ”rpm -q“ 命令查看) 主要程序:/sbin/rsyslogd 配置文件:/etc/rsyslog.conf (可使用 ”rpm -qc“ 命令查看)
日志消息的级别:
1ALERT警告必须马上采取措施解决的问题2CRIT严重比较严重的情况3ERR错误运行出现错误4WARNING提醒可能会影响系统功能的事件5NOTICE注意不会影响系统但值得注意6INFO信息一般信息7DEBUG调试程序或系统调试信息等
| 级号 | 消息 | 级别 | 说明 |
|---|---|---|---|
| 0 | EMERG | 紧急 | 会导致主机系统不可用的情况 |
| 0 | EMERG | 紧急 | 会导致主机系统不可用的情况 |
| 0 | EMERG | 紧急 | 会导致主机系统不可用的情况 |
| 0 | EMERG | 紧急 | 会导致主机系统不可用的情况 |
| 0 | EMERG | 紧急 | 会导致主机系统不可用的情况 |
| 0 | EMERG | 紧急 | 会导致主机系统不可用的情况 |
日志记录的一般格式:
- 事件产生的时间。
- 产生事件的服务器的主机名。
- 产生事件的服务名或程序名。
- 事件的具体信息。
用户日志分析
保存了用户登录、退出系统等相关信息:
- /var/log/lastlog:最近都用户登录事件。二进制文件,使用 lastlog 命令查看。
- /var/log/secure:与用户验证有关的安全性事件。
- /var/log/wtmp:用户登录、注销,及系统开、关机事件。二进制文件,使用 last 命令查看。
- /var/run/utmp:当前登录的每个用户的详细信息。二进制文件,使用w、who、users等命令查看。
日志分析工具
- users 查看当前用户名称
- who 查看当前登录的用户、终端、登录时间、IP地址。
- W 查看当前登录的用户、终端、IP地址、登录时间、占用CPU的情况、进程等。
- last 命令用于查询成功登录到系统的用户记录
- lastb 命令用于查询登录失败的用户记录
程序日志分析
由相应的应用程序独立进行管理:
Web服务:/var/log/httpd/
access_log、error_log
代理服务:/var/log/squid
access.log、cache.log
FTP服务:/var/log/xferlog
分析工具:
- 文本查看、grep过滤检索、Webmin管理套件中查看
- awk、sed等文本过滤、格式化编辑工具
- Webalizer、Awstats等专用日志分析工具
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 -x //-x 是目录的意思,在报错的信息下会附加解决问题的网址
rsyslog
rsyslog是CentOS 6以后版本的系统管理服务:它提供了高性能,出色的安全性和模块化设计。尽管rsyslog最初是常规的syslogd,但发展成为一种瑞士军刀式的记录工具,能够接受来自各种来源的输入,并将其转换,然后输出到不同的目的地。
当应用有限的处理时,RSYSLOG每秒可以将超过一百万的消息传递到本地目的地。即使在远程的目的地和更精细的处理中,性能通常也被认为是惊人的”。
rsyslog 特性
- 多线程
- UDP, TCP, SSL, TLS, RELP
- MySQL, PGSQL, Oracle实现日志存储
- 强大的过滤器,可实现过滤记录日志信息中任意部分
- 自定义输出格式
- 适用于企业级中继
查看/etc/rsyslog.conf 文件中的RULES模块:
rsyslog 应用实例
将ssh服务的日志单独设置
修改rsyslog服务的配置文件/etc/rsyslog.conf,设置LOCAL0对应的日志路径。
修改ssh服务的配置文件/etc/ssh/sshd_config,将ssh的日志修改为记录在LOCAL0对应的路径下
设置完成后重启服务
打开第二台机器,远程连接原服务器。故意输错2次密码,稍后查看原服务器的日志。
查看原服务器的日志记录。/var/log/sshd.log 成功记录了第二台机器的行为。