Linux文件系统与日志管理

目录

一、Linux文件系统

1、inode 与 block 详解

1.1 inode 和 block 概述

1.2 inode表的内容 

1.3 查看文件的inode号码

1.4  模拟innode号耗尽故障处理

2、访问文件的流程

3、文件恢复

3.1 恢复误删除的ext3格式文件

3.2 恢复误删除的 xfs 格式文件

二、Linux日志文件管理

1、日志的功能

2、日志文件种类

3、日志消息级别

4、rsyslog工具:管理日志

4.1 rsyslog 相关文件

4.2 /etc/rsyslog.conf 配置文件格式

4.3 通过rsyslog软件将sshd程序的日志独立

4.4 网络日志(远程日志功能)

5、journalctl工具:管理日志

6、logrotate工具:日志转储


一、Linux文件系统

  • Linux文件系统是用于组织和存储数据的一种结构化的方法,它定义了文件和目录的存储方式以及对它们进行访问和管理的规则
  • Linux支持多种文件系统类型,如Ext4、XFS、Btrfs等。文件系统类型影响文件系统的性能、稳定性和支持的特性

1、inode 与 block 详解

1.1 inode 和 block 概述

inode(索引节点): inode 是文件系统中的一种数据结构,用于存储文件或目录的元数据信息,如文件大小、权限、所有者、时间戳等。每个文件和目录都与一个唯一的 inode 相关联,它们可以通过 inode 而不是文件名来标识和访问

block(块):文件是存储在硬盘上的,硬盘的最小存储单位叫做 “扇区” (sector),每个扇区存储 512 字节。一般连续八个扇区组成一个 “块” (block),一个块是 4K 大小,是文件系统中存储数据的最小单位。当文件系统需要存储文件时,它将文件分割成块,并将这些块分配给存储介质上的不同位置。文件系统使用块来管理存储空间并存储文件数据

1.2 inode表的内容 

元数据:每个文件的属性信息,比如:文件的大小,时间,类型,权限等。而元数据是存放在inode(index node)表中

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

  • 文件的字节数
  • 文件拥有者的 User ID
  • 文件的 Group ID
  • 文件的读、写、执行权限
  • 文件的时间戳,共有三个:
简写全名中文名含义
atimeaccess time访问时间文件内容最后被访问的时间
mtimemodify time修改时间文件内容最后被修改的时间
ctimechange time变化时间文件的元数据发生变化的时间(比如权限,所有者等)
  • 链接数,即有多少文件名指向这个 inode
  • 文件数据 block 的位置
 1.3 查看文件的inode号码
命令一:ls -i 文件名
命令二:stat 文件名

 注:

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

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

1.4  模拟innode号耗尽故障处理
df -i    #查看设备的inode号数量
touch {1..51300}|xargs -n1 touch   #到磁盘设备的挂载目录中创建大量的空文件
ls |wc -l         #统计创建文件的个数,即总inode号数
****************************************************
解决方法:
rm -rf 无用文件名          #删除无用的文件,释放inode号
如果设备是逻辑卷可通过扩容来增加空间容量,从而增加inode号数量

 注:

inode号是有限资源,它的多少与磁盘大小有关,inode号在同一设备上是唯一的,在不同设备上可能不唯一

2、访问文件的流程

总结:根据文件夹的文件名和indoe号的关系找到对应的inode表,再根据inode表当中的指针找到磁盘上的真实数据

3、文件恢复

3.1 恢复误删除的ext3格式文件

使用extundelete工具是一个开源的 Linux 数据恢复工具,支持 ext3 文件系统

#安装extundelete软件
yum -y install e2fsprogs-devel e2fsprogs-libs      #安装依赖软件
tar -jxvf extundelete-0.2.4.tar.bz2 -C /opt        #解压软件包,软件包从官网下载
cd /opt/extundelete-0.2.4                          #切换到安装目录下
./configure    #编译安装
make
make install
ls /usr/local/bin/    #查看extundelete软件************************************************************************
目前使用版本只对ext3有效,设置磁盘分区略
mkfs.ext3 /dev/sdb1      #文件系统格式化
mount /dev/sdb1 /mnt     #挂载磁盘分区
cd  /mnt                 #切换到挂载点目录
echo 111>a               #创建文件
echo 222>b 
echo 333>c 
echo 444>d************************************************************************
#模拟删除文件,并恢复
rm -rf a b c d         #模拟删除
umount /mnt            #解挂载
extundelete /dev/sdb1 --inode 2      #查看该分区下的存在哪些文件
extundelete /dev/sdb1 --restore-all  #恢复被删除的文件************************************************************************
#验证,查看恢复的文件
cd ~           #切换到当前家目录
ls RECOVERED_FILES/     #在该目录下有恢复文件
 3.2 恢复误删除的 xfs 格式文件

使用 xfsdump 与 xfsrestore 工具对xfs 类型的文件进行备份恢复

xfsdump 的备份级别有两种
0(备份默认级别)表示完全备份
1-9表示增量备份
通式:xfsrestore -f  恢复文件的位置  存放恢复后文件的位置
选项说明
-f指定备份文件目录
-L指定标签 session label
-M指定设备标签 media label
-s备份单个文件,-s 后面不能直接跟路径

使用 xfsdump 时,需要注意以下的几个限制:

使用 xfsdump限制较多,还是最好提前备份重要数据,以防数据丢失

  • 不支持没有挂载的文件系统备份,所以只能备份已挂载的
  • 必须使用 root 的权限才能操作

  • 只能备份 XFS 文件系统

  • 备份下来的数据只能让 xfsrestore 解析

  • 不能备份两个具有相同 UUID 的文件系统(可使用blkid查看)  

#安装xfsdump工具
yum install -y xfsdump命令安装**************************************************
#目前使用版本只对xfs有效,设置磁盘分区略
mkfs.xfs /dev/sdb1      #文件系统格式化
mount /dev/sdb1 /mnt     #挂载磁盘分区
cd  /mnt                 #切换到挂载点目录
echo 111>a               #创建文件**************************************************
#使用 xfsdump 命令备份整个分区到指定目录
xfsdump -f /opt/bak_sdb1 /dev/sdb1**************************************************
#模拟删除文件并恢复
rm -rf /mnt/*     #删除/mnt目录下的所有文件
ls /mnt           #查看还有无文件
xfsrestore -f /opt/bak_sdb1 /data/  
#使用bak文件将数据恢复到/data下**************************************************
#验证,查看恢复的文件
cd /data                #切换目录
ls /data                #在该目录下有恢复文件

二、Linux日志文件管理

1、日志的功能

记录:日志可以记录特定事件、活动或数据,以便将来进行查看和分析

故障排除:在软件开发和系统管理中,日志通常用于跟踪问题和故障,帮助识别和解决错误

监控:日志记录可以用于监视应用程序、系统或网络的性能和行为,从而及时发现异常并采取必要的措施

合规性:在许多行业中,日志记录是确保合规性和安全性的重要手段,例如在金融和医疗领域

分析:通过分析日志数据,可以获取有关系统使用情况、用户行为和趋势的宝贵信息,从而支持决策制定和优化流程

安全:日志记录对于安全审计和追踪潜在的安全威胁至关重要,能够帮助发现入侵和未经授权的访问

2、日志文件种类

①内核及系统日志
记录 Linux 内核消息及各种应用程序的公共日志信息,包括启动、IO错误、网络错误、程序故障等。对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的事件记录信息

  • /var/log/messages :系统中大部分的信息
  • /var/log/anaconda:anaconda的日志操作系统安装时安装的软件信息
  • /var/log/boot.log:系统服务启动的相关信息,文本格式

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

  • /var/log/secure:系统安全日志(用户登录),文本格式,应周期性分析
  • /var/log/btmp:当前系统上,用户的失败尝试登录相关的日志信息,二进制格式文件,lastb命令进行查看

  • /var/log/wtmp:当前系统上,用户正常登录系统的相关日志信息,二进制格式文件,last命令可以查看

  • /var/log/lastlog:每一个用户最近一次的登录信息,二进制格式文件,lastlog命令可以查看

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

3、日志消息级别

级号消息级别说明
0EMERG紧急会导致主机系统不可用的情况
1ALERT警告必须马上采取措施解决的问题
2CRIT严重比较严重的情况
3ERR错误运行出现错误
4WARNING提醒可能会影响系统功能的事件
5NOTICE注意不会影响系统但值得注意
6INFO信息一般信息
7DEBUG调试程序或系统调试信息等

4、rsyslog工具:管理日志

4.1 rsyslog 相关文件
  • 程序包:rsyslog

  • 主程序:/usr/sbin/rsyslogd

  • CentOS 6:/etc/rc.d/init.d/rsyslog {start|stop|restart|status}

  • CentOS 7,8:/usr/lib/systemd/system/rsyslog.service

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

  • 库文件: /lib64/rsyslog/*.so

4.2 /etc/rsyslog.conf 配置文件格式

由三部分组成:

  • MODULES:相关模块配置

  • GLOBAL DIRECTIVES:全局配置

  • RULES:日志记录相关的规则配置 

程序类型:mail 邮箱、corn 计划任务、auth 用户认证

自定义类型:local0~local6(7个类型)

注:rsyslog软件管理日志,需要rsyslog软件和其他服务程序之间要相互支持

4.3 通过rsyslog软件将sshd程序的日志独立

原本sshd软件的日志放在/var/log/secure日志中,与很多软件放在一起,因为这个软件比较重要,所以把sshd软件的日志单独存放

#在rsyslog配置文件里添加sshd的程序日志
vim /etc/rsyslog.conf
local6.*     /opt/sshd.log    *************************************************************************
#修改sshd配置文件
vim /etc/ssh/sshd_config
#SyslogFacility AUTHPRIV          #注释掉这行
SyslogFacility local6             #在sshd配置文件里将日志存放在local6类型中**************************************************************************
#验证
systemctl restart rsyslog.service sshd     #重启rsyslog软件和sshd软件服务
ssh 172.16.12.12                 #远程连接
cat /opt/sshd.log                #查看sshd程序日志

①在rsyslog配置文件里添加sshd的程序日志 

 ②在sshd配置文件里将日志存放在local6类型中

③验证,重启rsyslog软件和sshd软件服务,查看指定目录下的日志 

 4.4 网络日志(远程日志功能)

允许将来自多个源头(如服务器、应用程序、网络设备)的日志数据传输到远程位置,通常是集中式的日志服务器或云端存储

要求:开启日志的远程传输功能在172.16.12.12

#客户端和日志服务器都要关闭防火墙和临时防护
systemctl   stop  firewalld      
setenforce  0  
**************************************************
#开启客户端和日志服务器tcp的514端口
vim /etc/rsyslog.conf 
$ModLoad imtcp
$InputTCPServerRun 514
或开启客户端和日志服务器udp的514端口
$ModLoad imudp
$UDPServerRun 514**************************************************
systemctl restart rsyslog   #重启rsyslog服务
ss -ntap |grep 514       #查看514端口是否打开**************************************************
#在172.16.12.10上设置发送日志到172.16.12.12主机去
vim /etc/rsyslog.conf    #修改rsyslog文件配置文件
*.info;mail.none;authpriv.none;cron.none       @@172.16.12.12
#@@代表使用tcp,@代表udp**************************************************
#测试,在客户端把写日志进日志服务端
logger "this is test log from 172.16.12.10"
cat /var/log/messages   #在日志服务端查看客户端发来的日志信息

①客户端和日志服务器都要关闭防火墙和临时防护 

 ​​​​​②开启客户端和日志服务器tcp的514端口

③重启rsyslog服务并查看514端口是否打开

④ 在172.16.12.10上设置发送日志到172.16.12.12主机去

⑤ 测试,在客户端把写日志进日志服务端

5、journalctl工具:管理日志

日志的配置文件:

  • /etc/systemd/journald.conf
通式:journalctl [OPTIONS...] [MATCHES...]
选项说明
--no-full,--full, -l默认显示完整的字段内容,超长的部分换行显示或者被分页工具截断
-a,--all完整显示所有字段内容, 即使其中包含不可打印字符或者字段内容超长
-f,--follow只显示最新的日志项,并且不断显示新生成的日志项
-e,--pager-end在分页工具内立即跳转到日志的尾部
-n,--lines限制显示最新的日志行数,若不设参数则表示默认值10行
--no-tail显示所有日志行
-r,--reverse反转日志行的输出顺序, 也就是最先显示最新的日志
-o,--output控制日志的输出格式
--no-hostname不显示来源于本机的日志消息的主机名字段
-x,--catalog在日志的输出中增加一些解释性的短文本, 以帮助进一步说明日志的含义
-q,--quiet当以普通用户身份运行时, 不显示任何警告信息与提示信息
-m,--merge混合显示包括远程日志在内的所有可见日志
-b显示特定于某次启动的日志,"-b  1"表示按时间顺序排列最早的那次启动, "-b 2"则表示在时间上第二早的那次启动; "-b -0"表示最后一次启动, "-b -1"表示在时间上第二近的那次启动
--directory指定了另外一台主机上的日志目录
--list-boots列出每次启动的 序号(也就是相对于本次启动的偏移量)、32字符的ID、第一条日志的时间戳、最后一条日志的时间戳
-k,--dmesg仅显示内核日志
-u, --unit仅显示属于特定单元的日志
-p, --priority

根据日志等级(包括等级范围)过滤输出结果

-c, --cursor从指定的游标(cursor)开始显示日志
--after-cursor从指定的游标(cursor)之后开始显示日志
--show-cursor在最后一条日志之后显示游标
-S, --since=, -U, --until=显示晚于指定时间(--since=)的日志、显示早于指定时间(--until=)的日志
-F, --field显示所有日志中某个字段的所有可能值
-N, --fields输出所有日志字段的名称
--system, --user仅显示系统服务与内核的日志(--system)、 仅显示当前用户的日志(--user)
-M, --machine显示来自于正在运行的、特定名称的本地容器的日志
-D DIR, --directory=DIR仅显示来自于特定目录中的日志, 而不是默认的运行时和系统日志目录中的日志
案例:
#查看所有日志(默认情况下 ,只保存本次启动的日志)journalctl#查看内核日志(不显示应用日志)journalctl -k#查看系统本次启动的日志journalctl -bjournalctl -b -0#查看上一次启动的日志(需更改设置)journalctl -b -1#查看指定时间的日志   -S=since    -U=unitjournalctl --since="2024-1-8 19:00:00"  #查看2024-1-8 19:00:00的日志journalctl --since "20 min ago"   #查看20分钟前的日志journalctl --since yesterday      #查看昨天的日志journalctl -S "2023-12-31 19:00" -U "2024-1-8 19:00:00"  
#查看2023-12-31 19:00到2024-1-8 19:00:00的日志journalctl --since 09:00 --until "1 hour ago"
#从今天09:00 开始直至一小时前的systemd日志#显示尾部的最新10行日志journalctl -n#显示尾部指定行数的日志journalctl -n 20#实时滚动显示最新日志journalctl -f#查看指定服务的日志journalctl /usr/lib/systemd/systemd#查看指定进程的日志journalctl _PID=1       #查看某个路径的脚本的日志journalctl /usr/bin/bash#查看指定用户的日志journalctl _UID=33 --since today#查看某个 Unit 的日志journalctl -u nginx.servicejournalctl -u nginx.service --since today#实时滚动显示某个 Unit 的最新日志journalctl -u nginx.service -f#合并显示多个 Unit 的日志journalctl -u nginx.service -u php-fpm.service --since today#查看指定优先级(及其以上级别)的日志,共有8级 0: emerg
1: alert
2: crit
3: err
4: warning
5: notice
6: info
7: debugjournalctl -p err -b#日志默认分页输出,--no-pager 改为正常的标准输出journalctl --no-pager#日志管理journalctl
#以 JSON 格式(单行)输出journalctl -b -u nginx.service -o json#以 JSON 格式(多行)输出,可读性更好journalctl -b -u nginx.serviceqq -o json-pretty#显示日志占据的硬盘空间journalctl --disk-usage#指定日志文件占据的最大空间journalctl --vacuum-size=1G#指定日志文件保存多久journalctl --vacuum-time=1years

6、logrotate工具:日志转储

logrotate工具相关文件:

  • 计划任务:/etc/cron.daily/logrotate

  • 程序文件:/usr/sbin/logrotate

  • 配置文件: /etc/logrotate.conf

  • 日志文件:/var/lib/logrotate/logrotate.status

  • 程序独立的配置文件/etc/logrotate.d/*

以bootlog程序为例,查看独立的程序bootlog的配置文件格式:

配置文件的配置参数说明
compress通过gzip压缩转储以后的日志
nocompress不压缩
copytruncate用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate备份日志文件但是不截断
create mode ownergroup转储文件,使用指定的权限,所有者,所属组创建新的日志文件
nocreate不建立新的日志文件
delaycompress和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress覆盖 delaycompress 选项,转储同时压缩
errors address专储时的错误信息发送到指定的Email地址
ifempty即使是空文件也转储,此为默认选项
notifempty如果是空文件的话,不转储
mail address把转储的日志文件发送到指定的E-mail 地址
nomail转储时不发送日志文件
olddir directory转储后的日志文件放入指定目录,必须和当前日志文件在同一个文件系统
noolddir转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript在转储以前需要执行的命令,这两个关键字必须单独成行
postrotate/endscript在转储以后需要执行的命令,这两个关键字必须单独成行
daily指定转储周期为每天
weekly指定转储周期为每周
monthly指定转储周期为每月
rotate count指定日志文件删除之前转储的次数,0指没有备份,5指保留5个备份
tabooext [+] list让logrotate*不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig,.rpmsave, v, 和~
size size当日志文件到达指定的大小时才转储bytes(缺省)及KB或MB
sharedscripts默认,对每个转储日志运行prerotate和postrotate脚本,日志文件的绝对路径作为第一个参数传递给脚本。 这意味着单个脚本可以针对与多个文件匹配的日志文件条目多次运行(例如/ var / log / news /.example)。 如果指定此项sharedscripts,则无论有多少个日志*与通配符模式匹配,脚本都只会运行一次
nosharedscripts针对每一个转储的日志文件,都执行一次prerotate和 postrotate脚本,此为默认值
missingok如果日志不存在,不提示错误,继续处理下一个
nomissingok如果日志不存在,提示错误,此为默认值
以nginx软件的独立配置文件为模板
cat /etc/logrotate.d/nginx /var/log/nginx/*.log {daily      #一天生成一个新的日志rotate 5   #保留5天日志missingok  #无所谓有无日志compress   #通过gzip压缩转储以后得日志delaycompress  #转储的日志文件到下一次转储时才压缩notifempty  #空文件不转存create 644 ngnix nginx   #转存文件的属性postrotateif [ -f /app/nginx/logs/nginx.pid ]; thenkill -USR1 `cat /app/nginx/logs/nginx.pid`#日志分割后,告诉nginx软件需重新生成新的日志文件fiendscript
}

 案例:分割日志

  ①首先,在/var/log/httpd的目录下能看到两个文件,这是httpd服务的日志信息

② 如果把access_log文件移动成一个新的文件,加载后又会生成新的文件

因为在httpd的配置文件中规定:访问httpd服务通过的日志文件只能存放在/var/log/httpd/access_log中

因为logrotate的子配置文件中规定重新加载httpd服务会在/var/log/httpd/下重新产生新的access_log文件

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java-伪共享

在说这个计算机术语之前,我先在这里问候所有问“什么是JVM伪共享”的垃圾JAVA程序员以及一瓶不满半瓶晃荡的面试官全家 我从来没想过国内已经很卷的JAVA圈,已经卷到语无伦次的地步了,“伪共享”是java程序员应该知道的吗?能问出这…

kubernetes 网络解析

开头语 写在前面:如有问题,以你为准, 目前24年应届生,各位大佬轻喷,部分资料与图片来自网络 内容较长,页面右上角目录方便跳转 基础 Kubernetes 使用扁平网络模型,所有 Pod 都可以直接相互…

两种方式实现mysql截取年月日

select date_format(now(), %Y-%m-%d) select substring(now(), 1, 10)

大创项目推荐 深度学习实现行人重识别 - python opencv yolo Reid

文章目录 0 前言1 课题背景2 效果展示3 行人检测4 行人重识别5 其他工具6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的行人重识别算法研究与实现 ** 该项目较为新颖,适合作为竞赛课题方向&#xff0c…

如何使用Jamf管理Apple文件保险箱

在当今的移动工作和教育环境中,Apple 设备的一个关键功能是内置的 macOS 加密技术,该技术保护组织数据和用户隐私。配备 Apple M1 芯片的最新计算机还具有额外的加密功能。 虽然这些安全层有助于保护最终用户手中的设备,无论他们在哪里工作或…

面向设计师的11个必备AI工具

在当今快速发展的设计领域,人工智能(AI)工具已成为不可或缺的创新催化剂。这些工具专门用于提高效率和创造力,从而重新定义传统的设计方法。AI正在彻底改变设计师的工作方式,从自动处理任务到发掘新的创造力机会&#…

Helix QAC 2023.4 新版支持C++20语言,带来更多性能提升!

Helix QAC 2023.4 新增功能 Helix QAC 2023.4全面支持MISRA C:2023规则,涵盖100%的指南。此版本还加强了对C20语言的支持,改进了数据流分析性能,并在整个产品中增加了多项用户体验改进。 增强的C20支持 此版本新增了对以下语言特性的支持&a…

Nginx配置jks格式证书,升级https

通常在给服务器升级https,需要在nginx上配置域名对应的https证书,nginx通常配置的是crt和key格式的证书。最近遇到有人提供了jks格式的证书,查阅了几个资料都是需要先将jks转为p12格式,然后再将p12转为crt格式。这里记录一下相关过…

前端国际化之痛点(二):多包多库场景下联动多语言

前言 VoerkaI18n是一款非常优秀的前端国际化解决方案,其开发的出发点是为了解决现存多语言的一些痛点,接下来几篇文章将分别进行分析。 前端国际化之痛点(一):让人头疼的词条Key前端国际化之痛点(二):多包多库场景下联动多语言前端国际化之…

Spark---RDD(双值类型转换算子)

文章目录 1.RDD双值类型算子1.1 intersection1.2 union1.3 subtract1.4 zip 1.RDD双值类型算子 RDD双Value算子就是对两个RDD进行操作或行动,生成一个新的RDD。 1.1 intersection 对源 RDD 和参数 RDD 求交集后返回一个新的 RDD 函数定义: def inters…

公司新买的BI,和金蝶系统配合太默契了

公司一直都用金蝶系统来实现包括财务管理、供应链管理、人力资源管理等多个方面的资源的合理配置和业务流程的自动化。但到了数据分析这块,金蝶系统就明显力不从心,需要一个专业的数据分析工具来接手。财务经理推荐用奥威BI,说这款BI的一大特…

【深度学习】SDXL tensorRT 推理,Stable Diffusion 转onnx,转TensorRT

文章目录 sdxl 转 diffusers转onnx转TensorRT sdxl 转 diffusers def convert_sdxl_to_diffusers(pretrained_ckpt_path, output_diffusers_path):import osos.environ["HF_ENDPOINT"] "https://hf-mirror.com" # 设置 HF 镜像源(国内用户使…