Linux 高级篇 日志管理、定制自己的Linux系统、备份与恢复

一、日志管理

(1)基本介绍

  1. 日志文件是重要的系统信息文件,++记录了 如用户登录、系统启动、系统安全、邮件及各种服务等相关重要系统事件**++
  2. 在安全方面,日志也至关重要,它能++记录系统日常发生的各类事情++,可用于++检查错误原因++以及++追踪攻击者留下的痕迹++
  3. 总体而言,日志是用于++记录重大事件的工具++

(2)系统常用的日志

  1. /var/log/目录就是系统日志文件的保存位置,看张图

  2. 系统常用日志

    日志文件名 功能 查看命令
    boot.log 记录系统启动时程序、服务加载及错误等信息 cat /var/log/boot.log
    cron 记录定时任务执行情况,如是否按时完成、有无报错 cat /var/log/cron
    cups 记录打印任务提交和打印机状态,如卡纸等问题 cat /var/log/cups
    dmesg 记录内核启动及运行中的硬件检测等关键信息 dmesg 或 cat /var/log/dmesg
    btmp 记录失败的登录尝试,可发现恶意登录行为 lastb
    lastlog 记录每个用户最近一次的登录时间 lastlog
    maillog 记录邮件发送、接收等邮件系统活动信息 cat /var/log/maillog
    messages 记录系统启动及运行的一般事件、警告和错误 cat /var/log/messages
    secure 记录用户登录认证、sudo 使用等安全相关事件 cat /var/log/secure
    wtmp 记录用户登录注销和系统启动关闭等事件 last
    utmp 记录当前登录用户和进程信息 who 或 w 或 users

(3)日志管理服务

  1. CentOS7.6日志服务是rsyslogd,CentOS6.x日志服务是syslogd。rsyslogd功能更强大。
    rsyslogd的使用、日志文件的格式,和syslogd服务兼容的

  2. 原理示意图:

  3. 查看Linux中的rsyslogd服务是否启动

    复制代码
    ps -aux|grep rsyslog|grep -v grep
  4. 查询rsyslogd服务的自启动状态

  5. rsyslogd服务的配置文件 :/etc/rsyslog.conf

    1. 编辑文件时的格式为:*.* 存放日志文件
    2. 其中第一个*代表日志类型,第二个*代表日志级别
  6. 日志类型分为

  7. 日志级别分为注意 :++从上到下++,级别从低到高,++记录信息越来越少++

  8. 由日志服务 rsyslogd 记录的日志文件,日志文件的格式包含以下4列

    1. 事件产生的时间
    2. 产生事件的服务器的主机名
    3. 产生事件的服务名或程序名
    4. 事件的具体信息
  9. 日志管理服务应用实例 :在**/etc/rsyslog.conf** 中添加一个日志文件 /var/log/hsp.log,当有事件发送时(比如sshd服务相关事件),该文件会接收到信息并保存,演示 重启,登录 的情况,看看是否有日志保存

(4)日志轮替

1.4.1基本介绍

日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除

1.4.2日志轮替文件命名

  1. centos7 使用 logrotate 进行++日志轮替管理++,要想改变日志轮替文件名字,通过 /etc/logrotate.conf 配置文件中 "dateext" 参数
  2. 如果配置文件中有"dateext"参数,那么日志会用 日期 来++作为日志文件的后缀++,例如"secure-20201010"。这样日志文件名不会重叠,也就不需要日志文件的改名,只需要指定保存日志个数,删除多余的日志文件即可
  3. ++如果++配置文件中++没有 "dateext" 参数++,日志文件就需要进行改名了。当第一次进行日志轮替时,当前的 "secure" 日志会自动改名为 "secure.1" ,然后新建 "secure" 日志,用来保存新的日志。当第二次进行日志轮替时,"secure.1" 会自动改名为 "secure.2" ,当前的"secure"日志会自动改名为 "secure.1" ,然后也会新建 "secure" 日志,用来保存新的日志,以此类推
  4. 注意
    1. /etc/logrotate.conf 里++既可以配置全局++的日志轮替策略/规则,++也可以单独给某个日志文件指定++策略
    2. 也可以把某个日志文件的轮替规则,写到 /etc/logrotate.d 目录

1.4.3logrotate配置文件

  1. /etc/logrotate.conf 为 logrotate 的全局配置文件:
  2. 参数说明

1.4.4把自己的日志加入日志轮替

  1. 第一种方法是直接在 /etc/logrotate.conf 配置文件中写入该日志的轮替策略
  2. 第二种方法是在 /etc/logrotate.d/ 目录中新建立该日志的轮替文件,在该轮替文件中写入正确的轮替策略,因为该目录中的文件都会被 "include" 到主配置文件中,所以也可以把日志加入轮替
  3. 推荐使用第二种方法,因为系统中需要轮替的日志非常多,如果全都直接写入 /etc/logrotate.conf 配置文件,那么这个文件的可管理性就会非常差,不利于此文件的维护
  4. 在 /etc/logrotate.d/ 配置轮替文件一览

1.4.5应用实例

在 /etc/logrotate.conf 进行配置,或者直接在 /etc/logrotate.d/ 下创建 hsplog 编写如下内容,具体轮替的效果可以参考 /var/log 下的 boot.log 情况

(5)日志轮替机制原理

(6)查看内存日志

  1. 常用指令

    复制代码
    journalctl    #查看系统全部日志
    journalctl -n 3    #查看最新的 3 条日志
    journalctl --since 19:00 --until 19:10:10    #查看 19:00 到 19:10:10 时间段的日志,可加日期限定
    journalctl -p err    #查看报错级别的日志
    journalctl -o verbose    #查看日志详细内容
    journalctl _PID=1245 _COMM=sshd    #查看进程 ID 为 1245 且进程名为 `sshd` 的日志(需详细日志模式)
    journalctl | grep sshd    #从日志里查找包含 `sshd` 的内容
  2. 注意:journalctl 查看得是内存日志,重启会清空

二、定制自己的Linux系统

(1)基本介绍

通过裁剪现有Linux系统(CentOS7.6),创建属于自己的min Linux小系统,可以加深我们对linux的理解

(2)基本原理

  1. BIOS 自检与引导设备选择 :计算机开机后,BIOS(基本输入输出系统)首先进行自检,检查硬件设备是否正常工作。若存在多个可启动设备,需在 BIOS 中设置优先启动的设备
  2. MBR 引导 :BIOS 找到可启动设备后,读取该设备的主引导记录(MBR),启动其中的 bootloader 引导程序(常见如 GRUB)
  3. 内核加载 :bootloader 负责加载 Linux 内核文件(vmlinuz)和初始 RAM 磁盘(initrd)到内存。内核被加载后开始初始化,检测和配置硬件设备
  4. init 进程启动 :内核初始化完成后,启动第一个用户空间进程,在现代 Linux 系统中通常是 ++systemd(它是所有进程的父进程++。++systemd 会根据配置文件启动系统服务和进程++
  5. 登录界面显示 :系统服务和进程启动完成后,显示登录界面,等待用户输入用户名和密码进行登录

(3)制作mini Linux思路分析

  1. 硬盘分区与格式化:在现有的 CentOS 7.6 系统中添加一块新硬盘 /dev/sdb。对 /dev/sdb 进行分区操作,划分出两个分区,分别用于挂载 /boot 和 / 目录,之后对这两个分区进行格式化处理
  2. 文件拷贝:把现有系统中的所有必要文件复制到 /dev/sdb 的对应分区,使这块硬盘具备完整的 Linux 系统文件结构
  3. 内核与 initramfs 文件复制:为保证新系统能够独立运行,将内核文件和 initramfs 文件复制到 /dev/sdb 上
  4. 验证启动:完成上述操作后,将 /dev/sdb 从当前系统中拔出。创建一个新的 Linux 虚拟机,并将虚拟机的硬盘指向这块 /dev/sdb(在新环境下它会被识别为 /dev/sda),启动虚拟机来验证自制的 Linux 系统是否能正常运行
  5. 示意图

(4)制作步骤

  1. 首先,我们在现有的linux添加一块大小为20G的硬盘(右键虚拟机→设置→硬件→硬盘→添加→硬盘→下一步→SCSI→创建新虚拟磁盘→填写自己需要的磁盘大小,这里我填的20→将虚拟磁盘存储为单个文件→下一步→自己给这个磁盘文件取名→完成)

  2. 添加完成后,点击确定,然后启动现有的linux(centos7.6)。 通过fdisk来给我们的/dev/sdb进行分区

  3. 接下来,我们对/dev/sdb的分区进行格式化

    复制代码
    mkfs.ext4 /dev/sdb1
    mkfs.ext4 /dev/sdb2
  4. 创建目录,并挂载新的磁盘

    复制代码
    mkdir -p /mnt/boot /mnt/sysroot 
    mount /dev/sdb1 /mnt/boot 
    mount /dev/sdb2 /mnt/sysroot/  
  5. 安装grub, 内核文件拷贝至目标磁盘

    复制代码
    grub2-install --root-directory=/mnt /dev/sdb
    
    #我们可以来看一下二进制确认我们是否安装成功
    hexdump -C -n 512 /dev/sdb    
    cp -rf /boot/*  /mnt/boot/
    
    #如果输入上面的cp命令后,反复提示覆盖,就可以Ctrl+c退出,执行下面这条指令,然后再执行上面的cp
    rm -rf /mnt/boot/*
  6. 修改 grub2/grub.cfg 文件, 标红的部分 是需要使用 指令来查看的

  7. 总结一下上面修改配置文件的步骤:一共有6处需要修改(4+2),还有两处是新增

  8. 创建目标主机根文件系统

    复制代码
    mkdir -pv /mnt/sysroot/{etc/rc.d,usr,var,proc,sys,dev,lib,lib64,bin,sbin,boot,srv,mnt,media,home,root} 
  9. 拷贝需要的bash(也可以拷贝你需要的指令)和库文件给新的系统使用

    复制代码
    cp /lib64/*.* /mnt/sysroot/lib64/
    cp /bin/bash /mnt/sysroot/bin/
  10. 现在我们就可以创建一个新的虚拟机,然后将默认分配的硬盘 移除掉,指向我们刚刚创建的磁盘即可

  11. 这时,很多指令都不能使用,比如 ls , reboot 等,可以将需要的指令拷贝到对应的目录即可

  12. 如果要拷贝指令,重新进入到原来的 linux系统拷贝相应的指令即可 ,比较将 /bin/ls 拷贝到 /mnt/sysroot/bin 将/sbin/reboot 拷贝到 /mnt/sysroot/sbin

    复制代码
    mount /dev/sdb2 /mnt/sysroot/
    cp /bin/ls /mnt/sysroot/bin/
    cp /bin/systemctl  /mnt/sysroot/bin/
    cp /sbin/reboot /mnt/sysroot/sbin/
  13. 再重新启动新的min linux系统,就可以使用 ls , reboot 指令了

三、备份与恢复

(1)基本介绍

  1. 实体机快照局限与风险:实体机无法做快照,系统异常或数据损坏时,需重做系统,会导致数据丢失
  2. 应对策略:可采用备份和恢复技术应对上述问题
  3. Linux 备份恢复方式:
    1. 用 TAR 打包所需文件或分区,恢复时解压覆盖
    2. 使用 dump 命令备份,restore 命令恢复

(2)安装dump和restore

如果linux上没有dump和restore指令,需要先安装

复制代码
yum -y install dump
yum -y install restore

如果出现上面的问题,解决方案如下:

复制代码
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

(3)使用dump完成备份

3.3.1基本介绍

dump支持分卷和增量备份(所谓增量备份是指备份上次备份后 修改/增加过的文件,也称差异备份)

3.3.2dump语法说明

3.3.3dump应用案例1

将/boot分区所有内容备份到/opt/boot.bak.bz2文件中,备份层级为'0'

复制代码
dump -0uj -f /opt/boot.bak0.bz2 /boot

3.3.4dump应用案例2

在/boot目录下增加新文件,备份层级为"1"(只备份上次使用层级"0"备份后发生过改变的数据),注意比较看看这次生成的boot1.bak有多大

复制代码
dump -1uj -f /opt/boot.bak1.bz2 /boot

注意:通过dump命令在配合cronbtab可以实现无人值守备份(也就是自动备份)

3.3.5dump -W

显示出需要进行备份的文件系统,同时还会给出这些文件系统最后一次备份的层级、时间和日期

3.3.6查看备份时间文件

复制代码
cat /etc/dumpdates

3.3.7dump备份文件或目录

前面我们在++备份分区++时,是可以++支持增量备份++的,如果++备份文件 或者目录++,++不再支持增量备份++,即只能只用0级别备份

  1. 案例:使用dump备份/etc整个目录

    复制代码
    dump -0j -f /opt/etc0.bak.bz2 /etc/
  2. 注意:重要的备份文件,比如数据区,建议将文件上传到其他服务器保存,不要将鸡蛋放在同一个篮子

(4)使用restore完成恢复

3.4.1基本介绍

restore命令用来恢复已备份的文件,可以从dump生成的备份文件中恢复原文件

3.4.2restore基本语法

3.4.3应用案例1

restore命令比较模式,比较备份文件和原文件的区别

复制代码
mv /boot/hello.java /boot/hello100.java
restore -C -f boot.bak1.bz2
复制代码
mv /boot/hello100.java /boot/hello.java
restore -C -f boot.bak1.bz2

3.4.4应用案例2

restore命令查看模式,看备份文件中有哪些数据/文件

复制代码
restore -t -f boot.bak1.bz2

3.4.5应用案例3

restore命令还原模式,注意细节:如果你有增量备份,需要把增量备份文件也进行恢复,有几个增量备份文件,就要恢复几个,按顺序来恢复即可

复制代码
mkdir /opt/boottmp
cd /opt/boottmp
restore -r -f /opt/boot.bak0.bz2 //恢复到第一次完全备份状态
restore -r -f /opt/boot.bak1.bz2 //恢复到第二次增量备份状态
相关推荐
facaixxx20244 分钟前
应用镜像是什么?轻量应用服务器的镜像大全
linux·运维·服务器
火龙谷32 分钟前
【hadoop】master一键启动hadoop集群(高可用)
linux·hadoop
noravinsc1 小时前
Linux 下 Module 工具的介绍与使用
linux·运维·服务器
c无序1 小时前
【Docker-13】Docker Container容器
运维·docker·容器
Sunlight_7771 小时前
第五章 SQLite数据库:1、SQLite 基础语法及使用案例
java·linux·服务器·jvm·数据库·tcp/ip·sqlite
Silence4Allen1 小时前
Ubuntu 安装WPS Office
linux·ubuntu·wps
程序员JerrySUN2 小时前
驱动开发硬核特训 · Day 11(下篇):从 virtio_blk 看虚拟总线驱动模型的真实落地
linux·驱动开发·嵌入式硬件
半兽先生2 小时前
CentOS 中安装 vim
linux·centos·vim
云达闲人2 小时前
Proxmox VE 用户与权限管理命令大全
运维·网络·云原生·容器·proxmox·用户权限管理·命令大全
喆星时瑜3 小时前
【Docker】运行错误提示 unknown shorthand flag: ‘d‘ in -d ----详细解决方法
运维·docker·容器