当前位置: 首页 > article >正文

文件系统和日志管理

一. 文件系统

  • 1. 存储文件的方式
    • 1.1 实际数据
    • 1.2 元信息
      • 1.2.1 inode
      • 1.2.2 查看inode号
      • 1.2.3 inode号和文件名分离
      • 1.2.4 inode号耗尽的情况
    • 1.3 工作环境
    • 1.4 文件的备份和恢复
      • 1.4.1 ext4
      • 1.4.2 xfs
      • 1.4.3 xfsdump的常用选项
      • 1.4.4 备份
      • 1.4.5 恢复
      • 1.4.6 xfs备份恢复注意点
    • 1.5 文件查看流程
  • 二. 日志管理
    • 2.1 常见的系统日志文件
    • 2.2 优先级
    • 2.3 收集邮件的信息
    • 2.4 设备的字段
    • 2.5 系统日志
    • 2.6 应用日志
    • 2.7 journalctl
      • 2.7.1 查看指定用户的日志
  • 三. 练习

文件系统提供了一个接口,用户用来访问硬件设备(硬盘)
硬件设备上对文件的管理
文件存储在硬盘上,硬盘最小的存储单位是512字节一扇区
文件在硬盘上的最小存储单位:块 block一个块的大小是4k,一个块就是连续的8个扇区

1. 存储文件的方式

实际数据和元信息

1.1 实际数据

文件内部的数据保存在硬盘上

1.2 元信息

文件的所有者,所在组,最后一次修改时间,文件的大小,文件的权限存储元信息的标识:inode号

1.2.1 inode

不包含文件名,每个文件(目录)创建都会分配一个全局(当前设备)唯一的识别码。
识别码inode,当一个文件被删除之后,inode号也会回收,供下一个文件继续使用。
系统都是识别文件的inode号
一个文件必须有一个inode号,至少占一个块

1.2.2 查看inode号

ls -i
stat 文件名

root@du:/opt# stat backup
  文件:backup
  大小:22728     	块:48         IO 块大小:4096   普通文件
设备:803h/2051d	Inode:2359298     硬链接:1
权限:(0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
访问时间:2024-11-07 11:39:09.692492375 +0800
修改时间:2024-11-07 11:36:39.377775368 +0800
变更时间:2024-11-07 11:36:39.377775368 +0800
创建时间:2024-11-07 11:35:43.955012178 +0800

  1. 访问时间:2024-11-07 11:39:09.692492375 +0800
    atime accesstime:当用户读这个文件,更新这个时间

  2. 修改时间:2024-11-07 11:36:39.377775368 +0800
    mtime modify time:更新数据大小和权限时,会修改这个时

  3. 间变更时间:2024-11-07 11:36:39.377775368 +0800
    ctime status time:只当修改权限和属性时,会发生变化。

inode号用尽了,文件无法再创建了,查看一个文件系统可用的inode号
df -i #查看挂载点inode号使用的情况

root@du:/opt# df -i
文件系统        Inodes  已用I   可用I 已用I% 挂载点
tmpfs           495174   1117  494057     1% /run
/dev/sda3      3899392 238080 3661312     7% /
tmpfs           495174      1  495173     1% /dev/shm
tmpfs           495174      5  495169     1% /run/lock
/dev/sda2            0      0       0      - /boot/efi
tmpfs            99034     90   98944     1% /run/user/128
tmpfs            99034     66   98968     1% /run/user/0
/dev/sdb1      2621440      3 2621437     1% /data1
/dev/sdb2      2620928      5 2620923     1% /data2

inode号:硬盘的空间越大,可用的inode号越多

1.2.3 inode号和文件名分离

linux操作系统会出现以下几个现象:

  1. 文件包含特殊字符可能无法正常删除(rm -rf),只能通过inode号进行删除
  2. 剪切或者重命名文件,inode号不会发生变化
  3. 当我们对文件进行操作时,系统以inode号来识别,不以文件名
  4. 文件的数据发生变化,文件的权限发生变化,inode号也会发生变化

1.2.4 inode号耗尽的情况

  • ext4
    用完了inode号,ext4文件不能在创建文件
  • xfs
    inode号用尽,xfs还可以创建文件 70-80个 200-400个

1.3 工作环境

  • dey:开发环境 开发人员专用
  • sit:测试环境 测试人员以及运维人员使用的环境
  • pre:预生产环境 sit和pre环境与生产环境是同步的 开发 测试 运维
  • prd:生产环境 对外提供访问的环境

1.4 文件的备份和恢复

1.4.1 ext4

有概率失败

1.4.2 xfs

实现备份和恢复:(apt -y install xfsdump #安装依赖环境)

  • xfsdump 备份
  • xfsrestore 恢复

xfsdump恢复有两个级别:0 1-9
0:表示完全备份
1-9:增量备份(不用)
xfsdump默认级别就是0,全量备份

1.4.3 xfsdump的常用选项

-f 指定备份文件目录
-L 指定标签
-M 指定设备标签
-s 备份单个文件(一般不使用)

1.4.4 备份

xfsdump -f /opt/backup /dey/sdb2 [-L backup -M sdb2]
-f /opt/backup backup是一个文件,而且必须是空文件,否则备份会失败,而且不能是目录
/dev/sdb2 备份的设备
-L 备份文件的标签
-M 备份设备的标签
把/dev/sdb2里面的所有文件备份到/opt/backup的文件当中。备份的是二进制代码,通过代码恢复inode号

1.4.5 恢复

xfsrestore -f /opt/backup /data2
-f 指定从哪个备份文件进行恢复

1.4.6 xfs备份恢复注意点

  1. 只有root权限才能备份和恢复
  2. 备份的目录必须是已挂载的设备
  3. 挂载的设备必须是xfs文件系统
  4. 恢复数据必须使用xfsrestore进行解析
  5. 两个设备的UUID相同不能备份

1.5 文件查看流程

  1. 获取文件的inode
  2. 找到文件在磁盘当中的位置
  3. 根据元信息查询这个用户的权限
  4. 由权限才能对文件进行指定的操作
  5. 更新数据:文件内容进行了修改inode号有可能发生变化。
  6. 如果权限发生变化,inode一定会变

二. 日志管理

日志:记录系统或者是应用运行期间“所有信息”的文档。记录了一些必要信息,关键的信息。
信息的意义:

  1. 判断系统或者程序是否正常
  2. 记录了故障的信息,告诉我们是什么原因产生的故障。

系统日志:

  • /var/log/syslog (ubuntu)
  • /var/log/messages (centos)

服务日志:

  1. 一般的应用安装完整之后,/var/log/服务的名称
  2. 自定义位置,修改应用的配置文件,可以自定义服务的日志路径
  3. 日志的位置就在应用的安装目录 logs目录
    基本上90%的应用日志的目录都是logs。
    都是以.log为结尾的文件

2.1 常见的系统日志文件

  • /var/log/syslog:记录了linux系统的内核消息以及各种应用的公共日志信息(系统控制产生的消息)包括启动,IO错误,网络错误,程序的故障等等。
  • 服务自己的日志:记录的就是使用这个程序过程中产生的信息,不会记录到系统的日志中
  • 系统日志:基本操作系统控制,产生的日志信息
  • /var/log/cron:记录的时定时任务产生的信息
  • /var/log/secure:用户登录系统认证的相关信息
  • /var/log/maillog:记录的是电子邮件的信息

2.2 优先级

数字越小,优先级越高,消息越重要(0-7)

  • 0 EMERG 紧急,系统/应用不可用,系统崩溃,服务崩溃的重要信息。
  • 1 ALERT 警告,必须马上采取措施的信息,磁盘快满了,数据库被破坏
  • 2 CRIT 严重,程序的功能丧失,程序无法正常访问
  • 3 ERROR 错误,运行出现了错误,需要尽快修复(看情况)
  • 4 warning 提醒可能影响,但是不重要,只是提醒用户。不属于报错的范围
  • 5 NOTIC 注意 不影响正常功能,但是需要注意的时间,无需处理
  • 6 INFO 信息 一般信息,正常运行的信息。
  • 7 DEBUG 调试 开发人员调试程序时产生的

none 没有优先级,不记录任何消息日志
以上的优先级,可以用户自定义日志的级别,已获取我们想要的内容。

2.3 收集邮件的信息

 *.*

左边:应用名称
右边:日志级别
Mail.info #收集邮件的信息,包含 info 以及 info 以上级别的信息
Mail.info /var/log/mail.log 收集邮件的信息,包含 info 以及 info 以上级别的信息
Mail.=info /var/log/mail.log 收集邮件的信息,只收集 info级别的信息
Mail.!info 除了 info 级别的信息,其他的都收集

*.info /var/log/syslog 表示所有的程序
Mail.
*表示所有级别的日志都收集

*.info;mail.none;nginx.=error
/var/log/syslog
所有的程序的一般及一般以上和邮件的日志不记录和nginx只记录error的日志 保存到 /var/log/syslog。

2.4 设备的字段

auth 用户认证的日志
systemd 系统管理程序的日志
cron 定时任务的信息
user 用户进程信息
mail 邮件信息
kern 系统内核的信息
local 自定义服务,我们可以自己定义我们需要保存的日志 0-7都可以使用。对应的程序设置的local等级要一致

2.5 系统日志

Nov 7 13:54:33 test1 systemd[1]: Failed to start A high performance web server and a reverse proxy server.

  • Nov 7 13:54:33 #日志产生的时间
  • test1 #主机名
  • systemd[1]: #systemd就是设备字段,[1]运行的pid号,systemd这个程序是系统当中的第一个进程,systemd是所有进程的父进程。
  • Failed to start A high performance web server and a reverse proxy server. #日志的内容

2.6 应用日志

192.168.233.1 – [07/NOV/2024:13:52:58 +0800]“GET /123 HTTP/1.1” 404 197 “”“Mozila/5.0 (windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36”

  • 192.168.233.1 #谁访问了nginx的服务
  • [07/NoV/2024:13:52:58 +0800] #访问nginx的时间
  • 'GET /123 HTTP/1.1"
    #GET 访问nginx的方式
    #/123 访问的内容
    #http/1.1:访问使用协议
  • 404 #当对方请求之后,nginx给客户端的响应码,告诉用户访问的结果是成功还是失败
  • “Mozila/5.0 (windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36” #记录客户端访问nginx的方式。

2.7 journalctl

日志管理工具:只能查看系统日志

  • journalctl -u 应用名称 #
  • journalctl _PID=? 进程的pid号

2.7.1 查看指定用户的日志

journalctl _UID=0 --since today #指定用户今天的日志
journalctl _UID=0 --since yesterday #指定用户昨天产生的日志
journalctl -xe #查看系统中systemd的错误的日志

三. 练习

ssh服务单独存放

root@du:/# cd /opt
root@du:/opt# vim /etc/rsyslog.conf
   脚本  :set nu   #显示层数
         local6.* /var/log/ssh.log  (50层)

root@du:/opt# vim /etc/ssh/sshd_config
   脚本  SyslogFacility LOCAL6      (27层)

root@du:/opt# systemctl restart rsyslog.service
root@du:/opt# systemctl restart sshd
#只要修改了应用的配置,要想生效,必须重启该应用

root@du:~# ssh root@192.168.246.7    #另一个虚拟机远程连接
root@du:/var/log# tail -f ssh.log
Nov  7 15:59:03 du sshd[2854]: Server listening on 0.0.0.0 port 22.
Nov  7 15:59:03 du sshd[2854]: Server listening on :: port 22.
Nov  7 16:01:20 du sshd[2854]: Received signal 15; terminating.
Nov  7 16:01:21 du sshd[2868]: Server listening on 0.0.0.0 port 22.
Nov  7 16:01:21 du sshd[2868]: Server listening on :: port 22.
Nov  7 16:07:39 du sshd[2879]: Failed password for root from 192.168.246.8 port 40486 ssh2
^Z
[5]+  已停止               tail -f ssh.log
root@du:/var/log# tail -f syslog
Nov  7 16:01:16 du rsyslogd: [origin software="rsyslogd" swVersion="8.2112.0" x-pid="2860" x-info="https://www.rsyslog.com"] start
Nov  7 16:01:20 du systemd[1]: Stopping OpenBSD Secure Shell server...
Nov  7 16:01:20 du sshd[2854]: Received signal 15; terminating.
Nov  7 16:01:20 du systemd[1]: ssh.service: Deactivated successfully.
Nov  7 16:01:20 du systemd[1]: Stopped OpenBSD Secure Shell server.
Nov  7 16:01:20 du systemd[1]: Starting OpenBSD Secure Shell server...
Nov  7 16:01:21 du sshd[2868]: Server listening on 0.0.0.0 port 22.
Nov  7 16:01:21 du sshd[2868]: Server listening on :: port 22.
Nov  7 16:01:21 du systemd[1]: Started OpenBSD Secure Shell server.
Nov  7 16:07:39 du sshd[2879]: Failed password for root from 192.168.246.8 port 40486 ssh2
^Z
[6]+  已停止               tail -f syslog


http://www.kler.cn/a/384827.html

相关文章:

  • GitHub每日最火火火项目(11.8)
  • 面相小白的php反序列化漏洞原理剖析
  • 华为交换机Vlan划分
  • 人保财险(外包)面试分享
  • 使用Docker Compose构建多容器应用
  • 基于SSD模型的路面坑洼检测系统,支持图像、视频和摄像实时检测【pytorch框架、python源码】
  • 基于java+SpringBoot+Vue的协力服装厂服装生产管理系统设计与实现
  • 数据分析的力量如何驱动商业决策和创新发展
  • 开源AI图片处理工具HivisionIDPhotos安装与证件照制作指南
  • STM32中ARR(自动重装寄存器)为什么要减1
  • STL之string的使用(超详解)
  • 一、初识C语言(1)
  • 厦门网站建设步骤与技巧
  • 深度学习:AT Decoder 详解
  • CSS画icon图标系列(一)
  • 鸿蒙生态崛起:开发者机遇、挑战与未来展望
  • 【go从零单排】go中的nil到底是啥意思?
  • Hive中自定义函数的使用
  • js-v-for 指令来循环展示数组中的数据,并在每条数据后添加一个删除按钮 items.splice(index, 1)
  • linux命令使用案例_将查找结果复制/移动到对应文件夹下
  • 项目架构介绍以及Spring cloud、redis、mq 等组件的基本认识
  • 《C++类型转换:四种类型转换的规定》
  • java反序列化学习之CommonCollections3利用链的学习
  • (一)NodeJS环境安装、创建第一个Vue应用
  • C++入门基础知识140—【关于C++ 类构造函数 析构函数】
  • C++练习题(3)