文件系统和日志管理

一. 文件系统

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

css 复制代码
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号使用的情况

css 复制代码
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服务单独存放

css 复制代码
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
#只要修改了应用的配置,要想生效,必须重启该应用
css 复制代码
root@du:~# ssh root@192.168.246.7    #另一个虚拟机远程连接
css 复制代码
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
相关推荐
耶啵奶膘1 小时前
uniapp-是否删除
linux·前端·uni-app
_.Switch2 小时前
高级Python自动化运维:容器安全与网络策略的深度解析
运维·网络·python·安全·自动化·devops
JokerSZ.2 小时前
【基于LSM的ELF文件安全模块设计】参考
运维·网络·安全
XMYX-03 小时前
使用 SSH 蜜罐提升安全性和记录攻击活动
linux·ssh
芯盾时代3 小时前
数字身份发展趋势前瞻:身份韧性与安全
运维·安全·网络安全·密码学·信息与通信
心灵彼岸-诗和远方4 小时前
DevOps业务价值流:架构设计最佳实践
运维·产品经理·devops
一只哒布刘4 小时前
NFS服务器
运维·服务器
苹果醋35 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
二十雨辰5 小时前
[linux]docker基础
linux·运维·docker