一、深入理解 Linux 文件系统–inode 与 block
2.inode 和 block 概述
文件储存在硬盘上,硬盘最小存储单位叫“扇区”(sector),每个扇区存储 512 字节 操作系统读取硬盘的时候,不会一个个扇区的读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块”(block)。这种由多个扇区组成的“块”,是文件存取的最小单位。“块”的大小,最常见的是 4KB,即连续八个 sector 组成一个 block。
文件数据存储在“块”中,那么还必须找到一个地方存储文件的元信息,比如文件的创建者、文件的创建时间,文件的大小等等。这种存储文件元信息的区域叫做 inode,中文译名为“索引节点”,也叫 i 节点。 一个文件必须占用一个 inode,但至少占用一个 block。
2.inode 包含文件的元信息
(1)inode 内容:
文件的字节数、拥有者的 UID、GID、文件的读写执行权限、时间戳等,但不包含文件名。文件名是储存在目录的目录项中。
(2)查看文件的 inode 内容,stat 命令
Atime、Mtime、Ctime详解
英文 | 别称 | 中文翻译 | 何时修改 | 查看命令 |
---|---|---|---|---|
Access | Atime | 访问时间 | 读取、写入 | ls -lu |
Modify | Mtime | 修改时间 | 写入、修改 | ls -l |
Change/Create | Ctime | 改变时间/创建时间 | 修改文件名、写入、修改、改权限、做链接 | ls -lc |
示例:
【读取文件,Atime 改变】
【写入内容,Mtime、Ctime改变】
【修改权限,Ctime改变】
【创建连接,Ctime修改】
【修改文件,Ctime修改】
【touch,三个时间全部修改】
3.目录文件的结构
(1)目录也是一种文件
(2)目录文件的结构:
文件名1 | inode号码1 |
---|---|
文件名2 | inode号码2 |
…… | …… |
每个 inode 都有一个号码,操作系统用 inode 号码来识别不同的文件。
Linux 系统内部不使用文件名,而使用 inode 号码来识别文件。对于系统来说,文件名只是 inode 号码便于识别的别称。
4.inode 的号码
(1)系统内部打开文件的步骤:
1> 系统找到这个文件名对应的 inode 号码
2> 通过 inode 号码,获取 inode 信息
3> 根据 inode 信息,找到文件数据所在的 block,读出数据
(2)查看文件的 inode 号码
ls -i 文件名
stat 文件名
示例:
当一个用户在 Linux 系统中试图访问一个文件时,系统回先根据文件名去查找他的 inode,看该用户是否具有访问这个文件的权限。如果有,就指向相对应的数据 block;如果没有,就返回 Permission denied(拒绝访问)
5.删除指定 inode 号所对应的文件
(1)格式:
find ./ -inum inode号 -exec rm -i {} \;
(2)实例:
当文件名中包含特殊符号时我们可用删除其 inode 号达到删除文件的目的
6.查看文件系统的 inode 与 block 的信息
df -i 设备名(文件系统已挂载时查询,查询 inode 总数与已用数量)
dumpe2fs -h 设备名(文件系统无需挂载)
tune2fs -l 设备名(文件系统无需挂载)
7.格式化时指定文件系统的 inode 个数与 block 大小
(1)方法:
mkfs.ext4 -N inode数 -b 块大小(单位字节) 设备名(仅支持ext格式)
(2)示例:inode 数设定为 10000 个,block 大小为 1KB
8.解决 inode 耗尽导致的磁盘故障
(1)方法:
1> 删除不使用的文件
2> 将文件备份,重新格式化此文件系统,指定较多的 inode 个数
(2)示例:
将文件备份,重新格式化此文件系统,指定较多的 inode 个数
二、深入理解 Linux 文件系统–链接
1.硬链接(hard link)
(1)方法:
ln 源文件 目标文件
(2)特点:
硬链接指向 inode,新生成的硬链接文件的 inode 号与源文件的 inode 号相同,不可针对目录进行硬链接,必须在同一文件系统内。删除一个文件名,不影响另一个的访问。
(3)示例:
【删除源文件,硬链接不受影响】
2.软连接(soft link)
(1)方法:
ln -s 源文件或目录 目标文件或目录
(2)特点:
软链接指向文件名,新生成的软链接的文件的 inode 号与源文件不同,目录也可以生成软连接,软链接文件与源文件可以不再同一文件系统内,软链接文件的内容是源文件的路径,读取时系统会自动导向源文件,但当源文件移动或重命名时,软连接将报错。
(3)示例:
【重命名源文件,硬链接不受硬性,但软连接会失效】
3.硬链接与软连接的对比
|null|硬链接| 软链接 —|—|— inode 号是否相同| 相同| 不同 是否可以针对目录 |不可针对目录 |可以针对目录 可否跨文件系统| 不可跨文件系统 |可跨文件系统 删除、重命名、移动源文件| 不受影响 |失效 创建命令| ln 源文件 目标文件 |ln -s 源文件或目录 目标文件或目录
三、分析日志文件
1.日志文件的作用
日志文件是用于记录 Linux 系统中各种运行信息的文件,相当于 Linux 主机的“日记”。不同的日志文件记载了不同类型的信息,如 Linux 内核消息、用户登录时间、程序错误等。
日志文件对于诊断和解决系统中的问题很有帮助,因为在 Linux 系统中运行的程序通常会把系统消息和错误消息写入相应的日志文件,这样系统一旦出现问题就会“有据可查”。此外,当主机遭受攻击时,日志文件还可以帮助寻找攻击者留下的痕迹。
2.日志文件的分类
(1)内核及系统日志:
在 6 以上的系统版本中,这种日志数据由系统服务 rsyslog 统一管理,根据其主配置文件 /etc/rsyslog.conf 中的设置决定将内核消息及各种系统程序消息记录到什么位置。
/etc/rsyslog.conf 配置文件中,常见的配置格式及其含义:
“.”:比后面的等级要高(包含该等级)的都记录。例如:“*.info”
“.=”:只记录该等级。例如:“=debug”
“!”:除了该等级都记录。例如:“!info”
“-”:当有记录信息需要记录时,先存到缓存中,到一定大小时一次性写入,以减少对磁盘读写性能的占用。例如:“-/var/log/maillog”
(2)用户日志:
用于记录 Linux 系统用户登录及退出系统的相关信息,包括用户名、登陆的终端、登录时间、来源主机、正在使用的进程操作等。
(3)程序日志:
有些应用程序会选择由自己独立管理一份日志文件,而不是交给 rsyslog 服务管理,用于记录本程序运行过程中的各种事件信息。
3.日志文件的位置
Linux 系统本身和大部分服务器程序的日志文件默认放在 /var/log/ 下。一部分程序共用一个日志文件,一部分程序使用单个日志文件。而有些大型服务器程序日志由于日志文件不止一个,所以会在 /var/log/ 目录中建立相应的子目录来存放日志文件,这样既保证了日志文件目录的结构清晰,又可以快速定位日志文件。
有相当一部分日志只有 root 用户才有权限读取,这保证了相关日志信息的安全性。
4.常见的日志文件及查看方式
日志文件 | 存放内容 | 查看命令 |
---|---|---|
/var/log/messages | 内核消息及各种应用程序的公共日志信息,包 括启动、I/O 错误、网络错误、程序故障等 | cat 等 |
/var/log/cron | crond 周期性计划任务产生的时间信息 | cat 等 |
/var/log/dmesg | 引导过程中的各种时间信息 | cat 等 |
/var/log/maillog | 进入或发出系统的电子邮件活动 | cat 等 |
/var/log/lastlog | 每个用户最近的登录事件 | last、lastlog |
/var/log/secure | 用户认证相关的安全时间信息 | cat 等 |
/var/log/wtmp | 每个用户登录、注销及系统启动和停机事件 | users、who、w |
/var/log/btmp | 失败的、错误的登录尝试及验证事件 | lastb |
5.日志消息的级别
在 Linux 内核中,根据日志消息的重要程度不同,将其分为不同的有限级别(数字等级越小,优先级越高,消息越重要)
级别 | 英文表示及翻译 | 意义 |
---|---|---|
0 | EMERG(紧急) | 会导致主机系统不可用的情况 |
1 | ALERT(警告) | 必须马上采取措施解决的问题 |
2 | CRIT(严重) | 比较严重的情况 |
3 | ERR(错误) | 运行出现错误 |
4 | WARNING(提醒) | 可能影响系统功能,需要提醒用户的重要事件 |
5 | NOTICE(注意) | 不会影响正常功能,但是需要注意的事件 |
6 | INFO(信息) | 一般信息 |
7 | DEBUG(调试) | 程序或系统调试信息等 |
8 | none(没有) | 不做记录 |
6.日志文件分析
(1)内核及大多数系统消息
1> 存放位置:/var/log/message
2> 内容解释:
- 时间标签:消息发出的日期和时间
- 主机名:生成消息的计算机的名称
- 子系统名称:发出消息的应用程序的名称
- 消息:消息的具体内容
3> 示例:
(2)用户日志
1> 存放位置:/var/log/wtmp、/var/log/btmp、/var/log/lastlog
2> 查询命令:users、who、w、last、lastlog、lastb 等
- user 命令:只是简单的输出到当前登录的用户名,每一个显示的用户名对应一个会话。
- who 命令:用于报告当前登录到系统中的每个用户的信息。默认输出包括用户名、终端类型、登录日期及远程主机
- w 命令:用于显示当前操作系统中的每个用户及其远程所运行的进程信息
- last命令:用于查询成功登录到系统的用户记录,最近的登陆情况在最前面。
-a:把从何处登录系统的主机名称或 IP 地址,显示在最后一行
-d:将 IP 地址转换成主机名称
-f[记录文件]:指定记录文件
-R:不显示登入系统的主机名称或 IP 地址
-x:显示系统关闭,重新开机,以及执行等级的改变等
-n:n 代表数字,表示最近 n 次登录的记录
- lastlog 命令:用于显示系统中所有用户最后一次登录信息
- lastb 命令:用于显示用户错误的登录列表,此指令可以发现系统的登录异常
(3)程序日志
1> 存放位置:不固定,一般在 /var/log/ 下的子目录中
2> 示例:查看通过源码包安装的 apache 网站服务的日志
7.日志文件分析注意事项:
总的来说,作为一名合格的系统管理人员,应该提高警惕,随时注意各种可疑的情况,定期并随机的检查各种系统日志文件,包括一般信息日志、网络连接日志、文件传输日志及用户登录日志记录等。在检查这些日志时,要注意是否有不合常理的时间或操作记录。例如出现以下一些现象就应该多加注意:
- 用户在非常规的时间登录,或者用户登录系统的 IP 地址和以往不一样的
- 用户登录失败的日志记录,尤其是那些一再连续尝试进入失败的日志记录
- 非法使用或不正当使用超级用户权限
- 不正常的日志记录,如日志残缺不全,或者是诸如 wtmp 这样的日志文件无辜缺少了中间的记录文件
8.对于日志文件的保护
chattr +a 日志文件,a 选项为 appent(追加)only,即给日志文件加上 a 权限后,将只可以追加,不可以删除或修改之前的内容。