1、inode 和 block 概述
文件储存在硬盘上,硬盘的最小储存单位叫“扇区”(sector),每个扇区储存 512 字节。
操作系统读取硬盘的时候,不会一个个扇区的读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块”(block)。
这种由多个扇区组成的“块”,是文件存取的最小单位。“块”的大小,最常见的是 4KB,即连续八个 sector 组成一个 block。
文件数据存储在“块”中,那么还必须找到一个地方存储文件的元信息,比如文件的创建者、文件的创建时间,文件的大小等等。
这种储存文件元信息的区域叫做 inode,中文译名为“索引节点”,也叫 i 节点。
一个文件必须占用一个 inode,但至少占用一个 block。
2、inode 包含文件的元信息
(1)inode 内容:
文件的字节数、拥有者的 UID、GID、文件的读写执行权限、时间戳等,但不包含文件名。文件名是储存在目录的目录项中
(2)Atime 、Mtime 、Ctime 详解:
英文 别称 中文翻译 何时修改 查看命令
Access Atime 访问时间 读取、写入 ls -lu
Modify Mtime 修改时间 写入、修改 ls -l
Change/Create Ctime 改变时间/创建时间 修改文件名、写入、修改、改权限、做链接 ls -lc
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,读出数据
inode 一般为 128 字节或 256 字节,每个 inode 中都记录着文件所在的 block 号,每条记录着 block 号的信息占用 4 字节。
inode 中关于 block 号的记录一共包含有 12 个直接、1 个间接、1 个双间接和 1 个三间接。
间接指的是,inode 中所记录这 4 字节的内容,所指向一个 block,这个 block 中存放的不是真是的文件内容,而是真实文件所存放位置的 block 号信息,
若每个 block大小为 4KB,那么可以存放 1024 个 block 号信息,1 个间接可以存放的文件大小为:1024*4=4096KB
双间接则可以存放更大的文件内容,即在间接的基础上再进行间接,若此时 block大小为默认的 4KB,则 1 个双间接可以存放的文件内容大小为:1024*1024*4=4096MB
三间接即在双间接的基础上在进行间接,若此时 block 大小为默认的 4KB,则 1 个三间接可以存放的文件内容大小为:1024*1024*1024*4=4096GB
5、删除指定 inode 号所对应的文件
(1)格式:find ./ -inum inode 号 -exec rm -i {} ;
(2)当文件名中包含特殊符号时我们可以删除其 inode 号达到删除文件的目的
8、解决 inode 耗尽导致的磁盘故障
方法:
- 删除不使用的文件
- 将文件备份,重新格式化此文件系统,指定较多的 inode 个数
9、硬链接(hard link)
(1)方法:ln 源文件 目标文件
(2)特点:
硬链接指向 inode,新生成的硬链接文件的 inode 号与源文件的 inode 号相同,不可针对目录进行硬链接,必须在同一文件系统内。删除一个文件名,不影响另外一个的访问。
10、软链接(soft link)
(1)方法:ln -s 源文件或目录 目标文件或目录
(2)特点:
软链接指向文件名,新生成的软链接文件的 inode 号与源文件不同,目录也可以生成软链接,软链接文件与源文件可以不在同一文件系统内,软链接文件的内容是源文件的路径,
读取时系统会自动导向源文件,但当源文件移动或重命名时,软链接将报错。
11、硬链接与软链接的对比
硬链接 软链接
指向 inode 号 文件名
inode 号是否相同 相同 不同
是否可以针对目录 不可针对目录 可以针对目录
可否跨文件系统 不可跨文件系统 可跨文件系统
删除、重命名、移动源文件 不受影响 失效
创建命令 ln 源文件 目标文件 ln -s 源文件或目录 目标文件或目录
12、日志文件的作用
日志文件是用于记录 Linux 系统中各种运行信息的文件,相当于 Linux 主机的“日记”。不同的日志文件记载了不同类型的信息,如 Linux 内核消息、用户登录事件、程序错误等。
日志文件对于诊断和解决系统中的问题很有帮助,因为在 Linux 系统中运行的程序通常会把系统消息和错误消息写入相应的日志文件,这样系统一旦出现问题就会“有据可查”。
此外,当主机遭受攻击时,日志文件还可以帮助寻找攻击者留下的痕迹
13、日志文件的分类
(1)内核及系统日志:
在 6 以上的系统版本中,这种日志数据由系统服务 rsyslog 同一管理,根据其主配置文件/etc/rsyslog.conf 中的设置决定将内核消息及各种系统程序消息记录到什么位置。
/etc/rsyslog.conf 配置文件中,常见的配置格式及其含义:
- “.”:比后面等级要高(包含该等级)的都记录。例如:“*.info”
- “.=”:只记录该等级。例如:“.=debug”
- “!”:除了该等级都记录。例如:“!info”
- “-”:当有记录信息需要记录时,先存到缓存中,到一定大小时一次性写入,以减少对磁盘读写性能的占用。例如:“-/var/log/maillog”
(2)用户日志:
用于记录 Linux 系统用户登录及退出系统的相关信息,包括用户名、登录的终端、登录
时间、来源主机、正在使用的进程操作等。
(3)程序日志:
有些应用程序会选择由自己独立管理一份日志文件,而不是交给 rsyslog 服务管理,用于记录本程序运行过程中的各种事件信息。
14、日志文件的位置
Linux 系统本身和大部分服务器程序的日志文件默认放在/var/log/下。一部分程序共用一个日志文件,一部分程序使用单个日志文件。
而有些大型服务器程序日志由于日志文件不止一个,所以会在/var/log/目录中建立相应的子目录来存放日志文件,这样既保证了日志文件目录的结构清晰,又可以快速定位日志文件
15、常见的日志文件及查看方式
日志文件 存放内容 查看命令
/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
16、日志消息的级别
在 Linux 内核中,根据日志消息的重要程度不同,将其分为不同的有限级别(数字等级越小,优先级越高,消息越重要)
级别 英文表示及翻译 意义
0 EMERG(紧急) 会导致主机系统不可用的情况
1 ALERT(警告) 必须马上采取措施解决的问题
2 CRIT(严重) 比较严重的情况
3 ERR(错误) 运行出现错误
4 WARNING(提醒) 可能影响系统功能,需要提醒用户的重要事件
5 NOTICE(注意) 不会影响正常功能,但是需要注意的事件
6 INFO(信息) 一般信息
7 DEBUG(调试) 程序或系统调试信息等
8 none(没有) 不做记录
17、日志文件分析注意事项:
总的来说,作为一名合格的系统管理人员,应该提高警惕,随时注意各种可疑的状况,定期并随机的检查各种系统日志文件,包括一般信息日志、网络连接日志、文件传输日志及
用户登录日志记录等。在检查这些日志时,要注意是否有不合常理的时间或操作记录。例如出现以下一些现象就应该多加注意:
- 用户在非常规的时间登录,或者用户登录系统的 IP 地址和以往不一样的
- 用户登录失败的日志记录,尤其是那些一再连续尝试进入失败的日志记录
- 非法使用或不正当使用超级用户权限
- 无故或者非法重新启动各项网络服务的记录
- 不正常的日志记录,如日志残缺不全,或者是诸如 wtmp 这样的日志文件无故缺少了中间的记录文件