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

news2025/1/19 23:14:56

11.1深入理解Linux文件系统

在处理Liunx系统出现故障时,故障的症状是最易发现。数学LInux系统中常见的日志文件,可以帮助管理员快速定位故障点,并及时解决各种系统问题。

11.1.1 inode与block详解

文件系统通常会将这两部分内容分别存放在inode和block中

1.inode和block概述

  • 操作系统读取硬盘时,多个扇区(每个扇区512字节)组成的块,最常见的是4KB及连续8个扇区组成一个block
  • 在块中必须找到一个地方储存文件的元信息,这个区域叫inode。一个文件必须占用一个inode,但至少占用一个block。

2.inode的内容

使用stat命令即可查看某个文件的inode信息

[root@localhost ~]# stat anaconda-ks.cfg 
  文件:"anaconda-ks.cfg"                                                #文件名字
  大小:1592          块:8          IO 块:4096   普通文件             #文件大小
设备:fd00h/64768d    Inode:268632130   硬链接:1
权限:(0600/-rw-------)  Uid:(    0/    root)   Gid:(    0/    root)
环境:system_u:object_r:admin_home_t:s0
最近访问:2024-05-27 21:33:26.425066604 +0800                            #是最后一次改变文件或目录的时间
最近更改:2024-05-27 21:33:26.434067124 +0800                            #是最后一个访问文件或目录的时间
最近改动:2024-05-27 21:33:26.434067124 +0800                            
#是最后一个修改文件或目录的时间
创建时间:-

3.inode的号码

用户在访问文件时,表面上是用户通过文件名来打开文件,而实际系统内部的过程分成以下三步:

  1. 系统找到这个文件名对应的inode号码
  2. 通过inode号码,获取inode信息
  3. 根据inode信息,找到文件数据所在的block,并读出数据。

常见的查看inode号码方式有两种

    • ls -i命令:直接查看文件名所对应的inode号码
    • stat命令:通过查看文件inode信息而查看到inode号码

[root@localhost ~]# stat anaconda-ks.cfg 
  文件:"anaconda-ks.cfg"                                              
  大小:1592          块:8          IO 块:4096   普通文件             
设备:fd00h/64768d    Inode:268632130   硬链接:1                               #inode号268632130
权限:(0600/-rw-------)  Uid:(    0/    root)   Gid:(    0/    root)
环境:system_u:object_r:admin_home_t:s0
最近访问:2024-05-27 21:33:26.425066604 +0800                            
最近更改:2024-05-27 21:33:26.434067124 +0800                           
最近改动:2024-05-27 21:33:26.434067124 +0800                            
创建时间:-
[root@localhost ~]# ls -i anaconda-ks.cfg                                     #inode号268632130
268632130 anaconda-ks.cfg

硬盘分区后的结构则是如图:

4.inode的大小

inode也会消耗硬盘空间,所以格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区,存放inode所包含的信息。inode总数在格式化时就给定了,执行“df -i”命令即可查看每个硬盘分区对应的的inode总数和已经使用的inode数量。

[root@localhost ~]# df -i
文件系统                    Inode 已用(I)   可用(I) 已用(I)% 挂载点
devtmpfs                   116635     446    116189       1% /dev
tmpfs                      120245       2    120243       1% /dev/shm
tmpfs                      120245     606    119639       1% /run
tmpfs                      120245      19    120226       1% /sys/fs/cgroup
/dev/mapper/centos-root 100661248   64569 100596679       1% /
/dev/sda2                 2097152     331   2096821       1% /boot
/dev/sr0                        0       0         0        - /media/cdrom
tmpfs                      120245       1    120244       1% /run/user/0
[root@localhost ~]# 
  • 文件名包括特殊字符,可能无法正常删除,这时直接删除inode,能够起到文件的作用
  • 移动文件或一个重名名文件,只是改变文件名,不影响inode号码
  • 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名

11.1.2 硬链接与软连接

  1. 硬链接允许多个文件指向一个同一个inode号,但不能跨分区。其命令格式为
    ln 源文件  目标

  2. 软连接是再创建一个独立文件,因此可以跨分区。其命令格式为
ln -s 源文件或目录 目标文件或目录

11.1.3 EXT类型文件恢复

EXT类型文件恢复主要涉及在Linux系统中,当使用如

rm命令误删除EXT(如EXT3)文件系统上的文件时,采取的一系列步骤和工具来尝试恢复这些文件。以下是关于EXT3类恢复误删除文件。

  1. EXT3数据恢复

    [root@localhost ~]# http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2      #下载tar包 
    [root@localhost ~]# yum -y install e2fsprogs-devel e2fsprogs-libs gcc*                                                  #下载依赖
    [root@localhost ~]# tar -xvf extundelete-0.2.4.tar.bz2                                                                  #解压下载的安装包
    [root@localhost extundelete-0.2.4]# make                                                                                #编译
    [root@localhost extundelete-0.2.4]# make
     install                                                                        #编译加载
    [root@localhost extundelete-0.2.4]# fdisk /dev/sdb                                                                      #分区                                                        
    [root@localhost ~]# mkdir aaa                                                                                           #创建挂载点
    [root@localhost ~]# mkfs.ext3 /dev/sdb1                                                                                 #初始化成ext3类型
    [root@localhost ~]# mount /dev/sdb1 aaa                                                                                 #挂载到aaa
    [root@localhost ~]# cd aaa                                                                                              #cd得到aaa文件下并创建
    [root@localhost aaa]# echo a>a
    [root@localhost aaa]# echo b>b
    [root@localhost aaa]# echo c>c
    [root@localhost aaa]# echo d>d
    [root@localhost aaa]# ls  
    a  b  c  d  lost+found
    [root@bogon ~]# extundelete /dev/sdb1
    [root@bogon ~]# cd aaa
    [root@bogon aaa]# rm -rf a b
    [root@bogon aaa]# cd 
    [root@bogon ~]# umount aaa
    [root@bogon ~]# extundelete /dev/sdb1 --restore-all
    [root@bogon ~]# cd RECOVERED_FILES/
    [root@bogon RECOVERED_FILES]# ls
    file.12  file.13
    [root@bogon RECOVERED_FILES]# 

11.2.4日志管理

在Linux中,设置和配置一个日志服务器通常涉及到多个步骤,包括安装必要的软件包、配置日志文件的传输和存储等。以下是一个简化的步骤,使用rsyslog(或syslog-ng)和logrotate来管理日志,以及(可选的)使用Elasticsearch, Logstash, Kibana (ELK Stack) 来进行日志的集中存储、分析和可视化。

1. 使用rsyslog或syslog-ng收集日志

以rsyslog为例,你可以编辑/etc/rsyslog.conf或相关的配置文件来设置日志的接收和转发。以下是一个简化的配置示例,用于接收来自其他系统的UDP日志:

# /etc/rsyslog.conf 示例   
 # 允许接收UDP日志  $ModLoad imudp  $UDPServerRun 514   
  # 允许接收TCP日志(可选)  
  #$ModLoad imtcp  #$InputTCPServerRun 514  
    
  # 设置默认的日志文件路径和模板(可选) 
   $template RemoteLogs,"/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log"  & ~ ?RemoteLogs   

 重启rsyslog服务以应用更改:

 systemctl restart rsyslog

2. 使用logrotate管理日志文件大小

你可以编辑/etc/logrotate.conf或/etc/logrotate.d/目录下的文件来设置日志文件的轮转策略。以下是一个示例:

# /etc/logrotate.d/remote 示例   
 /var/log/remote/*/*.log
  {       
    
    missingok
    monthly
    create 0664 root utmp
    minsize 10M
    rotate 2
} 
      }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1801752.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

刷代码随想录有感(96):贪心算法——小于目标数且是最大的单调递增的数字

题干&#xff1a; 代码&#xff1a; class Solution { public:int monotoneIncreasingDigits(int n) {string s to_string(n);int flag s.size();for(int i s.size() - 1; i > 0; i--){if(s[i - 1] > s[i]){s[i - 1]--;flag i;}}for(int i flag; i < s.size(); …

js 选择一个音频文件,绘制音频的波形,从右向左逐渐前进。

选择一个音频文件&#xff0c;绘制波形&#xff0c;从右向左逐渐前进。 完整代码&#xff1a; <template><div><input type"file" change"handleFileChange" accept"audio/*" /><button click"stopPlayback" :…

无延迟,持续畅玩 - Wi-Fi 6 助力打造游戏厅极致体验

1、需求背景&#xff1a; 连锁游戏厅行业竞争激烈&#xff0c;顾客对高品质的游戏体验有着高要求。网络是游戏厅的核心基础设施之一&#xff0c;需要确保游戏过程中的网络连接稳定性和顾客满意度。 长时间稳定连接 为保证顾客的游戏体验感&#xff0c;游戏厅要确保网络连接长…

SpringBoot实现参数校验拦截(采用AOP方式)

一、AOP是什么&#xff1f; 目的&#xff1a;分离横切关注点&#xff08;如日志记录、事务管理&#xff09;与核心业务逻辑。 优势&#xff1a;提高代码的可读性和可维护性。 关键概念 切面&#xff08;Aspect&#xff09;&#xff1a;包含横切关注点代码的模块。通知&#xff…

vscode编译c/c++找不到jni.h文件

解决办法: 一、下载JDK 访问Oracle官网的Java下载页面&#xff1a;Java Downloads | Oracle 选择适合您操作系统的JDK版本&#xff1a; 对于Windows&#xff0c;选择“Windows x64”或“Windows x86”&#xff08;取决于您的系统是64位还是32位&#xff09;。对于Linux&#…

STM32 HAL库开发——入门篇(3):OLED、LCD

源自正点原子视频教程&#xff1a; 【正点原子】手把手教你学STM32 HAL库开发全集【真人出镜】STM32入门教学视频教程 单片机 嵌入式_哔哩哔哩_bilibili 一、OLED 二、内存保护&#xff08;MPU&#xff09;实验 2.1 内存保护单元 三、LCD 3.1 显示屏分类 3.2 LCD简介 3.3 LCD…

基于Seatunnel最新2.3.5版本分布式集群安装部署指南(小白版)

基于Seatunnel2.3.5版本分布式集群安装部署 1.环境准备2.JDK安装3.Maven安装4.Seatunnel在master节点安装部署配置4.1.下载Seatunnel安装包4.2.解压下载好的tar.gz包4.3.下载连接器4.4.配置Seatunnel的系统环境变量4.5.配置 SeaTunnel Engine服务 JVM参数4.6.配置文件中集群相关…

阅读笔记——《AFLNET: A Greybox Fuzzer for Network Protocols》

【参考文献】Pham V T, Bhme M, Roychoudhury A. Aflnet: a greybox fuzzer for network protocols[C]//2020 IEEE 13th International Conference on Software Testing, Validation and Verification (ICST). IEEE, 2020: 460-465.【注】本文仅为作者个人学习笔记&#xff0c;…

socket通信(C语言+Python)

在socket文件夹下创建server.c和client.c。 服务端代码&#xff08;server.c&#xff09;&#xff1a; #include <stdio.h> #include <Winsock2.h> void main() {WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested MAKEWORD( 1, 1 );err WSAS…

单片机原理及技术(三)—— AT89S51单片机(二)(C51编程)

一、AT89S51单片机的并行I/O端口 1.1 P0口 AT89S51的P0口是一个通用的I/O口&#xff0c;可以用于输入和输出。每个引脚都可以通过软件控制为输入或输出模式。 1.1.1 P0口的工作原理 P0口的工作原理是通过对P0寄存器的读写操作来控制P0口的引脚。 输出模式&#xff1a;当P0口…

从大到小吗?-分支c++

题目描述 给出 4 个整数&#xff0c;a , b , c , d 。 判断这四个数字是否满足从大到小。 输入 输入 4 个整数&#xff0c;a , b , c , d 。 输出 输出 Yes 或者 No 。 样例输入 4 3 2 1 样例输出 Yes 提示 分析&#xff1a; 这道题十分的简单&#xff0c;只需判断…

技术管理之巅—如何从零打造高质效互联网技术团队阅读体验

技术管理之巅—如何从零打造高质效互联网技术团队 《技术管理之巅&#xff1a;如何从零打造高质效互联网技术团队》是黄哲铿所著的一本书&#xff0c;致力于帮助技术管理者从零开始打造高效的互联网技术团队。该书分为多个章节&#xff0c;分别探讨了从团队文化建设到技术架构…

【Redis】 Redis 集成到 Spring Boot上面

文章目录 &#x1f343;前言&#x1f384;Spring Boot连接redis客户端&#x1f6a9;项目的创建&#x1f6a9;配置端⼝转发&#x1f6a9;配置 redis 服务地址&#x1f6a9;更改 Redis 配置文件&#x1f6a9;使用 StringRedisTemplate 类操作 &#x1f38d;Spring Boot操作Redis客…

SAP HCM HR_PAD_HIRE_EMPLOYEE 自定义信息类型字段保存问题

导读 INTRODUCTION SAP HCM入职程序&#xff1a;SAP HCM入职程序有两个一个是HR_PAD_HIRE_EMPLOYEE一个是HR_MAINTAIN_MASTERDATA&#xff0c;前面的函数是SAP为新框架开发的&#xff0c;后面函数是旧的逻辑&#xff0c;这两个函数的在于底层的结构不一致&#xff0c;对于自定…

应用matplotlib.animation.FuncAnimation绘制摆线

上次尝试了用matplotlib.animation.ArtistAnimation绘制摆线&#xff0c;实际上也可以用matplotlib.animation.FuncAnimation实现同样的功能。 导入相关文件 引用的库包括numpy&#xff0c;matplotlib&#xff0c;代码如下&#xff1a; import numpy as np import matplotli…

【启程Golang之旅】让文件操作变得简单

欢迎来到Golang的世界&#xff01;在当今快节奏的软件开发领域&#xff0c;选择一种高效、简洁的编程语言至关重要。而在这方面&#xff0c;Golang&#xff08;又称Go&#xff09;无疑是一个备受瞩目的选择。在本文中&#xff0c;带领您探索Golang的世界&#xff0c;一步步地了…

Spring Boot集成pmd插件快速入门Demo

1.什么是pmd插件&#xff1f; PMD 插件允许您在项目的源代码上自动运行PMD代码分析工具&#xff0c;并生成带有其结果的站点报告。它还支持与 PMD 一起分发的单独的复制/粘贴检测器工具&#xff08;或 CPD&#xff09;。 此版本的 Maven PMD 插件使用 PMD 6.42.0 并且需要 Jav…

新增FTP功能、支持添加Redis远程数据库,专业版新增网站监控和黑金主题,1Panel开源面板v1.10.10版本发布

2024年6月7日&#xff0c;现代化、开源的Linux服务器运维管理面板1Panel发布v1.10.10版本。 在这一版本中&#xff0c;1Panel新增了多项实用功能。社区版方面&#xff0c;新增了FTP功能、支持添加Redis远程数据库、支持设置压缩密码&#xff0c;并新增了清理镜像构建缓存的功能…

从 Android 恢复已删除的备份录

本文介绍了几种在 Android 上恢复丢失和删除的短信的方法。这些方法都不能保证一定成功&#xff0c;但您可能能够恢复一些短信或其中存储的文件。 首先要尝试什么 首先&#xff0c;尝试保留数据。如果你刚刚删除了信息&#xff0c;请立即将手机置于飞行模式&#xff0c;方法是…

若依原生框架集成mybatisplus

1、进入父级依赖 将这个阿里数据库连接池druid注释掉&#xff0c;然后将pagehelper排除jsqlparser分页&#xff0c;使用mybatisplus分页查询防止mybatisplus与pagehelper版本不匹配&#xff0c;不然会报错 2、进入disease-framework模块&#xff1a; config的下面DruidConf…