Linux文件系统与日志分析

2023年 8月 7日 25.4k 0

1 inode和block

  • 文件数据包括元信息与实际数据。

  • 文件存储在硬盘上,硬盘最小存储单位是“扇区”,每个扇区存储512字节。

  • block(块)

    • 连续的八个扇区组成一个block
    • 是文件存取的最小单位
  • inode(索引节点)

    • 中文译名为“索引节点”,也叫 i 节点
    • 用于存储文件元信息
  • 一个文件必须占用一个inode ,至少占用一个bloc

1.1inode的内容

inode包含文件的元信息

  • 文件的字节数
  • 文件拥有者的User ID
  • 文件的Group lD
  • 文件的读、写、执行权限
  • 文件的时间戳
  • 。。。。
  • 1.2inode表结构

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

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

    Linux文件系统与日志分析-1

    如何查看inode号

    ls -i 文件名

    stat 文件名

    有3个时间:
    最近访问atime:最后一次查看文件
    最近更改mtime:最近更改文件内容的时间,注意:更改完内容之后,ctime也会改变
    最近改动ctime:最近更改文件元信息的时间,比如改变权限等

  • 文件是存储在硬盘上的,硬盘的最小存储单位叫做“扇区”(sector),每个扇区存储512字节。

  • 一般连续八个扇区组成一个"块”(block),一个块是4K大小,是文件存取的最小单位。操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取的。4k一读,8个扇区一读

  • 文件数据包括实际数据与元信息(类似文件属性)。文件数据存储在“块"中,存储文件元信息(比如文件的创建者、创建日期、文件大小、文件权限等)的区域就叫做inode表。 因此,一个文件必须占用一个inode,并且至少占用一个block。du 显示

  • inode不包含文件名。文件名是存放在目录文件夹当中的。Linux 系统中一切皆文件,因此目录也是一种文件。

  • 每个inode都有一个号码,操作系统用inode号码来识别不同的文件。Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称,文件名和inode号码是一一对应关系,每个inode号码对应一个或多个文件名。

    唯一 同一文件系统() 不同的文件

  • 所以,当用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找它对应的inode号码:通过inode号码,获取inode信息;根据inode信息,看该用户是否具有访问这个文件的权限;如果有,就指向相对应的数据block,并读取数据。

  • 1.3 硬连接与软连接

    硬连接:ln

    软连接:ln -s

    对比项 硬连接 软连接
    本质 本质是同一个文件 本质不是同一个文件
    inode 相同 不同
    连接数 创建新的硬链接,链接数会增加,删除硬链接,链接数减少 删除新建不会改变
    文件夹 不支持 支持
    删除源文件 只是链接数减一,但链接文件的访问不受影响 无法访问连接文件
    文件类型 和源文件相同 链接文件,和源文件无关
    文件大小 和源文件相同 源文件的路径的长度

    1.4 文件删除后空间不释放怎么办

    删除文件后,如果磁盘空间没有释放,是因为文件正在被其他人打开。 其他人退出使用该文件后空间会被释放。

    可以使用 w 命令或 lsof 命令查看是否有人在使用该文件。

    1.echo " " > f1.txt       //将被打开的文件变成空文件,依赖shell环境  ​ 
    
    2.cat /dev/null > f1.txt   //导入空文件  ​  
    
    3.lsof | grep f1.txt       //查看被删除的文件和对应PID,之后杀死该进程     kill -9 PID
    

    1.5命令和inode之间的关系

    cp 和 inode

    cp 命令:

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

    rm 命令:

    • 硬链接数递减,从而释放的inode号可以被重用
    • 把数据块放在空闲列表中
    • 删除目录项
    • 数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖

    mv和inode

    • 如果mv命令的目标和源在同一设备,

      不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!

      删除旧的目录对应关系新建目录对应关系

    2.日志

    2.1日志的功能

    用于记录系统、程序运行中发生的各种事件

    通过阅读日志,有助于诊断和解决系统故障

    2.2常见的一些日志文件

    日志文件位置 日志文件说明
    /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等命令查看

    日志服务的一般格式

    • 事件产生的时间。
    • 产生事件的服务器的主机名。
    • 产生事件的服务名或程序名。
    • 事件的具体信息。

    image.png

    信息的优先级别重要程度

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

    0 EMERG(紧急):会导致主机系统不可用的情况。

    1 ALERT(警告):必须马上采取措施解决的问题。

    2 CRIT(严重):比较严重的情况。

    3 ERR(错误):运行出现错误。

    4 WARNING(提醒):可能影响系统功能,需要提醒用户的重要事件。

    5 NOTICE(注意):不会影响正常功能,但是需要注意的事件。

    6 INFO(信息):一般信息。

    7 DEBUG(调试):程序或系统调试信息等

    2.3日志文件的分类

    • 内核及系统日志

    由系统服务rsyslog统一进行管理,日志格式基本相似

    • 用户日志

    记录系统用户登录及退出系统的相关信息

    • 程序日志

    由各种应用程序独立管理的日志文件,记录格式不统一

    2.4日志文件

    • /var/log/secure:系统安全日志,文本格式,应周期性分析
    • /var/log/btmp:当前系统上,用户的失败尝试登录相关的日志信息,二进制格式,lastb命令进行查看
    • /var/log/wtmp:当前系统上,用户正常登录系统的相关日志信息,二进制格式,last命令可以查看
    • /var/log/lastlog:每一个用户最近一次的登录信息,二进制格式,lastlog命令可以查看
    • /var/log/dmesg:CentOS7 之前版本系统引导过程中的日志信息,文本格式,开机后的硬件变化将不再记录专用命令dmesg查看,可持续记录硬件变化的情况
    • /var/log/boot.log 系统服务启动的相关信息,文本格式
    • /var/log/messages :系统中大部分的信息
    • /var/log/anaconda : anaconda的日志操作系统安装时安装的软件信息

    2.5 rsyslog管理

    2.5.1系统日志术语

    facility:设施,从功能或程序上对日志进行归类

    Priority 优先级别,从低到高排序

    参看帮助: man 3 syslog,man logger

    服务名称:

    服务名称 说 明
    auth(LOG AUTH) 安全和认证相关消息 (不推荐使用authpriv替代)
    authpriv(LOG_AUTHPRIV) 安全和认证相关消息(私有的)
    cron (LOG_CRON) 系统定时任务cront和at产生的日志
    daemon (LOG_DAEMON) 与各个守护进程相关的曰志
    ftp (LOG_FTP) ftp守护进程产生的曰志
    kern(LOG_KERN) 内核产生的曰志(不是用户进程产生的)
    Iocal0-local7 (LOG_LOCAL0-7) 为本地使用预留的服务
    lpr (LOG_LPR) 打印产生的日志
    mail (LOG_MAIL) 邮件收发信息
    news (LOG_NEWS) 与新闻服务器相关的日志
    syslog (LOG_SYSLOG) 存syslogd服务产生的曰志信息(虽然服务名称己经改为reyslogd,但是很多配罝依然沿用了 syslogd服务的,所以这里并没有修改服务名称)
    user (LOG_USER) 用户等级类别的日志信息
    uucp (LOG_UUCP> uucp子系统的日志信息,uucp是早期Linux系统进行数据传递的协议,后来 也常用在新闻组服务中

    2.5.2 rsyslog相关文件

    • 配置文件:/etc/rsyslog.conf,/etc/rsyslog.d/*.conf
    • 库文件: /lib64/rsyslog/*.so

    通常的日志文件的格式:
    日志文件有很多,如: /var/log/messages,cron,secure等,基本格式都是类似的

    [root@localhost ~]#tail /var/log/messages
    Mar  8 00:01:01 localhost systemd: Started Session 69 of user root.
    Mar  8 00:01:01 localhost systemd: Starting Session 69 of user root.
    Mar  8 00:10:01 localhost systemd: Started Session 70 of user root.
    Mar  8 00:10:01 localhost systemd: Starting Session 70 of user root.
    Mar  8 00:20:01 localhost systemd: Started Session 71 of user root.
    Mar  8 00:20:01 localhost systemd: Starting Session 71 of user root.
    

    2.6日志管理工具journalctl

    CentOS 7 以后版,利用Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。

    日志的配置文件:/etc/systemd/journald.conf

    实际操作

    操作内容

    将ssh服务日志的文件单独独立出来,原来的ssh文件在/var/log/secure

    操作流程

    1.修改ssh的配置文件/etc/ssh/sshd_config,32下一行添加自己的自定义

    Linux文件系统与日志分析-2

    2.修改/etc/rsyslog.conf配置文件在76行添加自己的文件位置

    image.png

    3.重启一下服务

    image.png

    4.使用ssh连接自己的主机测试

    image.png

    5.查看自己的日志文件是否被建立

    image.png

    网络日志(远程日志功能)具体操作

    1.把/etc/rsyslog.conf文件下的19,20 行去#开启,两台都需要关闭

    image.png

    2.在192.168.223.101 这台主机上设置配置文件

    image.png

    #复制54行                                                   改成ip地址
    55 *.info;mail.none;authpriv.none;cron.none                @@192.168.91.100
                                                              #两个@ 代表使用  tcp  一个代表udp
    如果修改 的是udp  @192.168.223.100
    如果要想指定端口  @192.168.223.100:端口号
    

    3.测试写日志进入logger "this is test log from 192.168.91.101 2"

    Linux文件系统与日志分析-3

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论