Linux文件系统与日志管理

100 阅读8分钟

inode概述

什么是inode

文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。 这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"

inode和block的区别

inode 号是用于标识和管理文件的唯一索引节点的标识符,inode表包含文件的元数据。
block 块是文件系统中用于存储文件实际数据的最小单位,由文件系统进行分配和管理,并通过 inode 号中的指针关联到对应的文件。 什么是inode号 每个inode都有一个号码,文件名和inode号码是一一对应关系,操作系统用inode号码来识别不同的文件。

同一设备下文件inode号不可以相同

不同设备下文件inode号可以相同

什么是inode表

每个文件的属性信息,比如:文件的大小,时间,类型,权限等,称为文件的元数据 (meta data 元信息 )
元数据是存放在inode(index node)表中。inode 表中有很多条记录组成,第一条记录对应的存放了一个文件的元数据信息。

inode表内容

没个inode表记录对应的保存了以下信息:

  • inode number 节点号
  • 文件类型
  • 权限
  • UID
  • GID
  • 链接数(指向这个文件名路径名称个数)
  • 该文件的大小和不同的时间戳
  • 指向磁盘上文件的数据块指针
  • 有关文件的其他数据

如何查看inode号

ls -i
查看当前文件夹下文件的inode号

image.png

stat + 文件名
查看文件的全部信息

image.png

df -i
查看文件系统下的inode号

image.png

目录

目录是个特殊文件,目录文件的内容保存了此目录中文件的列表及inode number对应关系
文件引用一个是 inode号
是通过文件名来引用一个文件
一个目录是目录下的文件名和文件inode号之间的映射

文件是如何找到实际数据的

linux 通过文件夹中会有一张 文件名和inode一一对应关系的表 (名字) 去找inode号 inode指向对应的实际数据

  1. 用户访问文件时 先去查找 自己 文件夹中的目录项
  2. 文件名和inode之间对应的关系
  3. 通过inode号利用指针去指向实际数据

cp、rm 和 inode:

cp 命令:

  • 分配一个空闲的inode号,在inode表中生成新条目
  • 在目录中创建一个目录项,将名称与inode编号关联
  • 拷贝数据生成新的文件

rm 命令:

  • 硬链接数递减,从而释放的inode号可以被重用
  • 把数据块放在空闲列表中
  • 删除目录项
  • 数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖
[root@localhost a]#find -inum 69 -exec rm {} \;
#通过find命令查找indoe号来删除指定的文件
[root@localhost a]#find -inum 69 -delete

三种时间戳

当新创建一个文件时,这个文件的最后访问时间、最后内容修改时间、最后状态更新时间都是一致的。

修改一个文件的权限状态信息,只会更新这个文件的最后状态修改时间

当查看文件时,文件的 Access time 会更新。

当需要了解这个文件有没有被修改过 - Modify Time
当需要了解这个文件最后被查看的时间 - Access Time
当需要了解这个文件权限最后变动的时间 - Change Time

image.png

为什么磁盘空间还有很多,但是不能继续创建文件

inode号是有限的,系统发完就没有了

解决方法:删除空文件或者扩容

日志

什么是日志

所谓日志(Log)是指系统所指定对象的某些操作和其操作结果按时间有序的集合

日志的功能

  • 用于记录系统、程序运行中发生的各种事件
  • 通过阅读日志,有助于判断和解决系统故障

遇事不决看日志

日志保存位置

  • 默认保存在/var/log/目录下

image.png

日志文件的格式

日志文件的格式包含以下 4 列:

  • 事件产生的时间。
  • 产生事件的服务器的主机名。
  • 产生事件的服务名或程序名。
  • 事件的具体信息。
tail -f /var/log/messages/
#实时查看/var/log/messages/文件日志记录后十行

image.png

日志的类别

  • 用户日志:记录用户登录、退出相关信息
  • 内核和系统日志:由系统服务rsyslog统一管理,日志格式基本类似
  • 程序日志:由各种应用程序独立管理的日志文件,记录格式不统一

用户日志

在 wtmp、btmp、lastlog 等日志文件中,保存了系统用户登录、退出等相关的事件消息。但是这些文件都是二进制的数据文件,不能直接使用 tail、less 等文本查看工具进行浏览,需要使用 who、w、users、last 和 lastb 等用户查询命令来获取日志信息

用户日志
/var/log/lastlog记录系统中所有用户最后一次的登录时间的曰志。这个文件也是二进制文件.不能直接用Vi 查看。而要使用lastlog命令查看
/var/log/secure记录验证和授权方面的倍息,只要涉及账户和密码的程序都会记录,比如系统的登录、ssh的登录、su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中
/var/log/wtmp永久记录所有用户的登陆、注销信息,同时记录系统的启动、重启、关机事件。同样,这个文件也是二进制文件.不能直接用Vi查看,而要使用last命令查看
/var/tun/ulmp记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。同样,这个文件不能直接用Vi查看,而要使用w、who、users等命令查看

信息的优先级别重要程度

在 Linux 内核中,根据日志消息的重要程度不同,将其分为不同 的优先级别(数字等级越小,优先级越高,消息越重要)。

数字等级信息类别含义
0EMERG(紧急)会导致主机系统不可用的情况。
1ALERT(警告)必须马上采取措施解决的问题。
2CRIT(严重)比较严重的情况。
3ERR(错误)运行出现错误。
4WARNING(提醒)可能影响系统功能,需要提醒用户的重要事件。
5NOTICE(注意)不会影响正常功能,但是需要注意的事件。
6INFO(信息)一般信息。
7DEBUG(调试)程序或系统调试信息等

内核和公共消息日志存储位置

内核及大多数系统消息被记录到公共日志文件/var/log/messages 中,而其他一些程序消息被记录到各自独立的日志文件中,此外日志消息还能够记录到特定的存储设备中,或者直接发送给指定用户。
对于 rsyslog 服务统一管理的大部分日志文件,使用的日志记录格式基本上是相同的。
以公共日志/var/log/messages 文件的记录格式为例,其中每一行表示一条日志消息,每一条消息均包括以下四个字段。

  • 时间标签:消息发出的日期和时间。
  • 主机名:生成消息的计算机的名称。
  • 子系统名称:发出消息的应用程序的名称。
  • 消息:消息的具体内容。

查询当前登录的用户情况

users

users 命令只是简单地输出当前登录的用户名称,每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数

image.png

who

who 命令用于报告当前登录到系统中的每个用户的信息。使用该命令,系统管理员可以查看当前系统存在哪些不合法用户,从而对其进行审计和处理。

image.png

w

w 命令用于显示当前系统中的每个用户及其所运行的进程信息,比 users、who 命令的 输出内容要丰富一些。

image.png

查询用户登录的历史记录

last

last 命令用于查询成功登录到系统的用户记录,最近的登录情况将显示在最前面。通过 last 命令可以及时掌握 Linux 主机的登录情况,若发现未经授权的用户登录过,则表示当前 主机可能已被入侵。

image.png

lastb

lastb 命令用于查询登录失败的用户记录,如:登录的用户名错误、密码不正确等情况都 将记录在案。登录失败的情况属于安全事件,因为这表示可能有人在尝试猜解你的密码。除了使用 lastb 命令查看以外,也可以直接从安全日志文件/var/log/secure 中获得相关信息。

image.png