目录
一、深入理解 Linux 文件系统-inode 与 block
7.格式化时指定文件系统的 inode 个数与 block 大小
一、深入理解 Linux 文件系统-inode 与 block
1.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 | inode号码1 |
---|---|
文件名2 | inode号码2 |
每个 inode 都有一个号码,操作系统用 inode 号码来识别不同的文件 Linux 系统内部不使用文件名,而使用 inode 号码来识别文件。对于系统来说,文件名 只是 inode 号码便于识别的别称。
4.inode 的号码
(1)系统内部打开文件的步骤:
系统找到这个文件名对应的 inode 号码
通过 inode 号码,获取 inode 信息
根据 inode 信息,找到文件数据所在的 block,读出数据
(2)查看文件的 inode 号码
ls -i 文件名
stat 文件名
示例:
文件存储位置对照
当一个用户在 Linux 系统中试图访问一个文件时,系统会先根据文件名去查找它的 inode,看该用户是否具有访问这个文件的权限。如果有,就指向相对应的数据 block; 如果没有过,就返回 Permission denied(拒绝访问)
5.删除指定 inode 号所对应的文件
格式:
find ./ -inum inode 号 -exec rm -i {} \;
示例:
当文件名中包含特殊符号时我们可以删除其 inode 号达到删除文件的目的
6.查看文件系统的 inode 与 block 的信息
df -i 设备名(文件系统已挂载时查询,查询 inode 总数与已用数量)
dumpe2fs -h 设备名(文件系统无需挂载)
tune2fs -l 设备名(文件系统无需挂载)
示例:
7.格式化时指定文件系统的 inode 个数与 block 大小
格式:
mkfs.ext4 -N inode 数 -b 块大小(单位字节) 设备名
示例:
inode 数设定为 10000 个,block 大小为 1KB
8.解决 inode 耗尽导致的磁盘故障
方法:
删除不使用的文件
将文件备份,重新格式化此文件系统,指定较多的 inode 个数
示例:
将文件备份,重新格式化此文件系统,指定较多的 inode 个数
二、深入理解 Linux 文件系统-链接
1.硬链接(hard link)
格式:
ln 源文件 目标文件
特点:
硬链接指向 inode,新生成的硬链接文件的 inode 号与源文件的 inode 号相同,不可针 对目录进行硬链接,必须在同一文件系统内。删除一个文件名,不影响另外一个的访问。
示例:【删除源文件,硬链接不受影响】
2.软链接(soft link)
方法:
ln -s 源文件或目录 目标文件或目录
特点:
软链接指向文件名,新生成的软链接文件的 inode 号与源文件不同,目录也可以生成软 链接,软链接文件与源文件可以不在同一文件系统内,软链接文件的内容是源文件的路径, 读取时系统会自动导向源文件,但当源文件移动或重命名时,软链接将报错。
示例:
【重命名源文件,硬链接不受硬性,但软链接失效】
3.硬链接与软链接的对比
硬链接 | 软链接 | |
---|---|---|
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)内核及大多数系统消息
存放位置:
/var/log/message内容解释:
时间标签:消息发出的日期和时间
主机名:生成消息的计算机的名称
子系统名称:发出消息的应用程序的名称
消息:消息的具体内容
示例:
(2)用户日志
存放位置:
/var/log/wtmp、/var/log/btmp、/var/log/lastlog查询命令:
users、who、w、last、lastlog、lastb 等
users 命令:只是简单的输出当前登录的用户名,每一个显示的用户名对应一个会话。
who 命令:用于报告当前登录到系统中的每个用户的信息。默认输出包括用户名、终端类型、登录日期及远程主机
w 命令:用于显示当前操作系统中的每个用户及其远程所运行的进程信息
last 命令:用于查询成功登录到系统的用户记录,最近的登录情况在最前面。
-a:把从何处登录系统的主机名称或 IP 地址,显示在最后一行
-d:将 IP 地址转换成主机名称
-f [记录文件]:指定记录文件
-R:不显示登入系统的主机名称或 IP 地址 -x:显示系统关闭,重新开机,以及执行等级的改变等
-n:n 代表数字,表示最近 n 次登录的记录
- lastlog 命令:用于显示系统中所有用户最近一次登录信息
- lastb 命令:用于显示用户错误的登录列表,此指令可以发现系统的登录异常
(3)程序日志
存放位置:
不固定,一般在/var/log/下的子目录中示例:
查看通过源码包安装的 apache 网站服务的日志
7.日志文件分析注意事项:
总的来说,作为一名合格的系统管理人员,应该提高警惕,随时注意各种可疑的状况, 定期并随机的检查各种系统日志文件,包括一般信息日志、网络连接日志、文件传输日志及 用户登录日志记录等。在检查这些日志时,要注意是否有不合常理的时间或操作记录。例如 出现以下一些现象就应该多加注意:
- 用户在非常规的时间登录,或者用户登录系统的 IP 地址和以往不一样的
- 用户登录失败的日志记录,尤其是那些一再连续尝试进入失败的日志记录
- 非法使用或不正当使用超级用户权限
- 无故或者非法重新启动各项网络服务的记录
- 不正常的日志记录,如日志残缺不全,或者是诸如 wtmp 这样的日志文件无故缺少了中间的记录文件
8.对于日志文件的保护
chattr +a 日志文件,a 选项为 append(追加)only,即给日志文件加上 a 权限后,将只 可以追加,不可以删除和修改之前的内容。
root 用户在 vi 编辑器的命令模式按 dd 删除了两行内容后进行 wq!强制保存退出,报错:
chattr +a -R 递归式增加 a 权限: