Linux 高级篇 日志管理、定制自己的Linux系统、备份与恢复
一、日志管理
(1)基本介绍
- 日志文件是重要的系统信息文件,记录了如用户登录、系统启动、系统安全、邮件及各种服务等相关重要系统事件
- 在安全方面,日志也至关重要,它能记录系统日常发生的各类事情,可用于检查错误原因以及追踪攻击者留下的痕迹
- 总体而言,日志是用于记录重大事件的工具
(2)系统常用的日志
- /var/log/目录就是系统日志文件的保存位置,看张图
- 系统常用日志
日志文件名 功能 查看命令 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)日志管理服务
- CentOS7.6日志服务是rsyslogd,CentOS6.x日志服务是syslogd。rsyslogd功能更强大。
rsyslogd的使用、日志文件的格式,和syslogd服务兼容的 - 原理示意图:
- 查看Linux中的rsyslogd服务是否启动
ps -aux|grep rsyslog|grep -v grep
- 查询rsyslogd服务的自启动状态
- rsyslogd服务的配置文件:/etc/rsyslog.conf
- 编辑文件时的格式为:*.* 存放日志文件
- 其中第一个*代表日志类型,第二个*代表日志级别
- 日志类型分为:
- 日志级别分为:
注意:从上到下,级别从低到高,记录信息越来越少
- 由日志服务 rsyslogd 记录的日志文件,日志文件的格式包含以下4列:
- 事件产生的时间
- 产生事件的服务器的主机名
- 产生事件的服务名或程序名
- 事件的具体信息
- 日志管理服务应用实例:在/etc/rsyslog.conf中添加一个日志文件 /var/log/hsp.log,当有事件发送时(比如sshd服务相关事件),该文件会接收到信息并保存,演示 重启,登录 的情况,看看是否有日志保存
(4)日志轮替
1.4.1基本介绍
日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除
1.4.2日志轮替文件命名
- centos7 使用 logrotate 进行日志轮替管理,要想改变日志轮替文件名字,通过 /etc/logrotate.conf 配置文件中 "dateext" 参数
- 如果配置文件中有“dateext”参数,那么日志会用 日期 来作为日志文件的后缀,例如“secure-20201010”。这样日志文件名不会重叠,也就不需要日志文件的改名,只需要指定保存日志个数,删除多余的日志文件即可
- 如果配置文件中没有 “dateext” 参数,日志文件就需要进行改名了。当第一次进行日志轮替时,当前的 “secure” 日志会自动改名为 “secure.1” ,然后新建 “secure” 日志,用来保存新的日志。当第二次进行日志轮替时,“secure.1” 会自动改名为 “secure.2” ,当前的”secure“日志会自动改名为 “secure.1” ,然后也会新建 “secure” 日志,用来保存新的日志,以此类推
- 注意:
- /etc/logrotate.conf 里既可以配置全局的日志轮替策略/规则,也可以单独给某个日志文件指定策略
- 也可以把某个日志文件的轮替规则,写到 /etc/logrotate.d 目录
1.4.3logrotate配置文件
- /etc/logrotate.conf 为 logrotate 的全局配置文件:
- 参数说明:
1.4.4把自己的日志加入日志轮替
- 第一种方法是直接在 /etc/logrotate.conf 配置文件中写入该日志的轮替策略
- 第二种方法是在 /etc/logrotate.d/ 目录中新建立该日志的轮替文件,在该轮替文件中写入正确的轮替策略,因为该目录中的文件都会被 “include” 到主配置文件中,所以也可以把日志加入轮替
- 推荐使用第二种方法,因为系统中需要轮替的日志非常多,如果全都直接写入 /etc/logrotate.conf 配置文件,那么这个文件的可管理性就会非常差,不利于此文件的维护
- 在 /etc/logrotate.d/ 配置轮替文件一览
1.4.5应用实例
在 /etc/logrotate.conf 进行配置,或者直接在 /etc/logrotate.d/ 下创建 hsplog 编写如下内容,具体轮替的效果可以参考 /var/log 下的 boot.log 情况
(5)日志轮替机制原理
(6)查看内存日志
- 常用指令:
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` 的内容
- 注意:journalctl 查看得是内存日志,重启会清空
二、定制自己的Linux系统
(1)基本介绍
通过裁剪现有Linux系统(CentOS7.6),创建属于自己的min Linux小系统,可以加深我们对linux的理解
(2)基本原理
- BIOS 自检与引导设备选择:计算机开机后,BIOS(基本输入输出系统)首先进行自检,检查硬件设备是否正常工作。若存在多个可启动设备,需在 BIOS 中设置优先启动的设备
- MBR 引导:BIOS 找到可启动设备后,读取该设备的主引导记录(MBR),启动其中的 bootloader 引导程序(常见如 GRUB)
- 内核加载:bootloader 负责加载 Linux 内核文件(vmlinuz)和初始 RAM 磁盘(initrd)到内存。内核被加载后开始初始化,检测和配置硬件设备
- init 进程启动:内核初始化完成后,启动第一个用户空间进程,在现代 Linux 系统中通常是 systemd(它是所有进程的父进程)。systemd 会根据配置文件启动系统服务和进程
- 登录界面显示:系统服务和进程启动完成后,显示登录界面,等待用户输入用户名和密码进行登录
(3)制作mini Linux思路分析
- 硬盘分区与格式化:在现有的 CentOS 7.6 系统中添加一块新硬盘 /dev/sdb。对 /dev/sdb 进行分区操作,划分出两个分区,分别用于挂载 /boot 和 / 目录,之后对这两个分区进行格式化处理
- 文件拷贝:把现有系统中的所有必要文件复制到 /dev/sdb 的对应分区,使这块硬盘具备完整的 Linux 系统文件结构
- 内核与 initramfs 文件复制:为保证新系统能够独立运行,将内核文件和 initramfs 文件复制到 /dev/sdb 上
- 验证启动:完成上述操作后,将 /dev/sdb 从当前系统中拔出。创建一个新的 Linux 虚拟机,并将虚拟机的硬盘指向这块 /dev/sdb(在新环境下它会被识别为 /dev/sda),启动虚拟机来验证自制的 Linux 系统是否能正常运行
- 示意图:
(4)制作步骤
- 首先,我们在现有的linux添加一块大小为20G的硬盘(右键虚拟机→设置→硬件→硬盘→添加→硬盘→下一步→SCSI→创建新虚拟磁盘→填写自己需要的磁盘大小,这里我填的20→将虚拟磁盘存储为单个文件→下一步→自己给这个磁盘文件取名→完成)
- 添加完成后,点击确定,然后启动现有的linux(centos7.6)。 通过fdisk来给我们的/dev/sdb进行分区
- 接下来,我们对/dev/sdb的分区进行格式化
mkfs.ext4 /dev/sdb1 mkfs.ext4 /dev/sdb2
- 创建目录,并挂载新的磁盘
mkdir -p /mnt/boot /mnt/sysroot mount /dev/sdb1 /mnt/boot mount /dev/sdb2 /mnt/sysroot/
- 安装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/*
- 修改 grub2/grub.cfg 文件, 标红的部分 是需要使用 指令来查看的
- 总结一下上面修改配置文件的步骤:一共有6处需要修改(4+2),还有两处是新增
- 创建目标主机根文件系统
mkdir -pv /mnt/sysroot/{etc/rc.d,usr,var,proc,sys,dev,lib,lib64,bin,sbin,boot,srv,mnt,media,home,root}
- 拷贝需要的bash(也可以拷贝你需要的指令)和库文件给新的系统使用
cp /lib64/*.* /mnt/sysroot/lib64/ cp /bin/bash /mnt/sysroot/bin/
- 现在我们就可以创建一个新的虚拟机,然后将默认分配的硬盘 移除掉,指向我们刚刚创建的磁盘即可
- 这时,很多指令都不能使用,比如 ls , reboot 等,可以将需要的指令拷贝到对应的目录即可
- 如果要拷贝指令,重新进入到原来的 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/
- 再重新启动新的min linux系统,就可以使用 ls , reboot 指令了
三、备份与恢复
(1)基本介绍
- 实体机快照局限与风险:实体机无法做快照,系统异常或数据损坏时,需重做系统,会导致数据丢失
- 应对策略:可采用备份和恢复技术应对上述问题
- Linux 备份恢复方式:
- 用 TAR 打包所需文件或分区,恢复时解压覆盖
- 使用 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级别备份
- 案例:使用dump备份/etc整个目录
dump -0j -f /opt/etc0.bak.bz2 /etc/
- 注意:重要的备份文件,比如数据区,建议将文件上传到其他服务器保存,不要将鸡蛋放在同一个篮子
(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 //恢复到第二次增量备份状态
相关文章:

Linux 高级篇 日志管理、定制自己的Linux系统、备份与恢复
一、日志管理 (1)基本介绍 日志文件是重要的系统信息文件,记录了如用户登录、系统启动、系统安全、邮件及各种服务等相关重要系统事件在安全方面,日志也至关重要,它能记录系统日常发生的各类事情,可用于检…...
deepseek与其他大模型配合组合
DeepSeek与其他大模型的配合组合,展现了其在多个领域中的强大应用潜力和灵活性。以下是对DeepSeek与其他大模型配合组合的详细分析: 一、DeepSeek与华知大模型的组合 背景介绍: 华知大模型是同方知网与华为联手打造的,具备全学科…...

经验分享—WEB渗透测试中遇到加密内容的数据包该如何测试!
经验分享—WEB渗透测试中遇到加密内容的数据包该如何测试! 01 加解密的意义 现阶段的渗透测试让我发现越来越多的系统不只是在漏洞修补方面做了功夫,还对一些参数进行加密,干扰爬虫或者渗透测试的进行。 在我小白阶段看到下图这种加密方式…...

JUC并发—9.并发安全集合四
大纲 1.并发安全的数组列表CopyOnWriteArrayList 2.并发安全的链表队列ConcurrentLinkedQueue 3.并发编程中的阻塞队列概述 4.JUC的各种阻塞队列介绍 5.LinkedBlockingQueue的具体实现原理 6.基于两个队列实现的集群同步机制 4.JUC的各种阻塞队列介绍 (1)基于数组的阻塞…...

JSON格式,C语言自己实现,以及直接调用库函数(一)
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。以下为你提供不同场景下常见的 JSON 格式示例。 1. 简单对象 JSON 对象是由键值对组成,用花括号 {} 包裹&…...

MinkowskiEngine安装(CUDA11.8+torch2.0.1+RTX4070TI)
1、背景 1)因为项目要用这个库:MinkowskiEngine,Minkowski Engine — MinkowskiEngine 0.5.3 documentation 然后就用了之前安装好 MinkowskiEngine 的torch1.8.1,cuda11.1的环境。 2)自己的代码出现cuda不支持torch用gpu进行矩…...

Spring监听器Listener
目录 1、Spring监听器简介 2、事件(Event) 3、监听器(Listener) 3、事件发布器 4、监听器使用 4.1、自定义事件 4.2、自定义监听器 4.3、发布事件 4.4、测试 4.5、使用注解方式监听 4.6、异步事件处理 5、总结 1、Spri…...
【深度学习在图像配准中的应用与挑战】
图像配准在深度学习中的解决方案越来越多,尤其是通过卷积神经网络(CNN)和生成对抗网络(GAN)等方法,可以显著提升图像配准的效果,尤其是在处理复杂的非刚性变换和大范围的图像差异时。 1. 基于深…...
使用 Docker-compose 部署 MySQL
使用 Docker Compose 部署 MySQL 本文将详细指导如何使用 docker-compose 部署 MySQL,包括基本配置、启动步骤、数据持久化以及一些高级选项。通过容器化部署 MySQL,你可以快速搭建一个隔离的数据库环境,适用于开发、测试或小型生产场景。 关…...

blender笔记2
一、物体贴地 物体->变换->对齐物体 ->对齐弹窗(对齐模式:反方,相对于:场景原点,对齐:z)。 之后可以设置原点->原点--3d游标 二、面上有阴影 在编辑模式下操作过后,物体面有阴影。 数据-&g…...
特殊符号_符号图案_特殊符号大全
特殊符号↑返回顶部 © ℗ ร ಗ ย ☫ ౖ ஃ ⁜ ☊ ☋ ❡ ๑ ి ▧ ◘ ▩ ▣ ◙ ▨ ۞ ۩ ಔ ృ ☎ ☏ ⍝ ⍦ ▤ ▥ ▦ ✠ @ ಓ ↂ ూ ☮ ி ﺴ ✈ ✉ ✁ ✎ ✐ 〄 # ‡ ☪ ⌚ ☢ ▪ ▫ ✆ ✑ ✒ ☌ ❢ ▬ ☍ □ ■ ؟ ‼ ‽ ☭ ✏ ⌨…...

Unity学习part4
1、ui界面的基础使用 ui可以在2d和矩形工具界面下操作,更方便,画布与游戏窗口的比例一般默认相同 如图所示,图片在画布上显示的位置和在游戏窗口上显示的位置是相同的 渲染模式:屏幕空间--覆盖,指画布覆盖在游戏物体渲…...

【AI绘画】大卫• 霍克尼风格——自然的魔法(一丹一世界)
大卫• 霍克尼,很喜欢这个老头,“艺术是一场战斗”。老先生零九年有了iphone,开始用iphone画画,一零年开始用ipad画画,用指头划拉,据说五分钟就能画一幅,每天早上随手画几幅送给身边的朋友。很c…...

MySQL日志undo log、redo log和binlog详解
MySQL 日志:undo log、redo log、binlog 有什么用? 一、前言 在MySQL数据库中,undo log、redo log和binlog这三种日志扮演着至关重要的角色,它们各自承担着不同的功能,共同保障了数据库的正常运行和数据的完整性。了解…...

C++中的指针
一.指针的定义 在C中,指针是一种特殊的变量,它存储另一个变量的内存地址。简单的说,指针是指向另一个数据类型的“指针”或“引用”,我们可以通过指针来间接操作其他变量的值。 指针的基本语法: 数据类型 *指针变量名 …...

拆解微软CEO纳德拉战略蓝图:AI、量子计算、游戏革命如何改写未来规则!
2025年2月19日 知名博主Dwarkesh Patel对话微软CEO萨蒂亚纳德拉 在最新访谈释放重磅信号:AI将掀起工业革命级增长,量子计算突破引爆材料科学革命,游戏引擎进化为世界模拟器。 整个视频梳理出几大核心观点,揭示科技巨头的未来十年…...

智能算法如何优化数字内容体验的个性化推荐效果
内容概要 在数字内容体验的优化过程中,个性化推荐系统的核心价值在于通过数据驱动的技术手段,将用户需求与内容资源进行高效匹配。系统首先基于用户行为轨迹分析,捕捉包括点击频次、停留时长、交互路径等关键指标,形成对用户兴趣…...

MATLAB在数据分析和绘图中的应用:从基础到实践
引言 股票数据分析是金融领域中的重要研究方向,通过对历史价格、成交量等数据的分析,可以帮助投资者更好地理解市场趋势和做出决策。MATLAB作为一种强大的科学计算工具,提供了丰富的数据处理和可视化功能,非常适合用于股票数据的…...

AI客服-接入deepseek大模型到微信(本地部署deepseek集成微信自动收发消息)
1.本地部署 1.1 ollama Ollama软件通过其高度优化的推理引擎和先进的内存管理机制,显著提升了大型语言模型在本地设备上的运行效率。其核心采用了量化技术(Quantization)以降低模型的计算复杂度和存储需求,同时结合张量并行计算&…...
Host文件没有配置ip解析,导致请求接口速度慢
Linux访问第三方接口速度慢 现象 在测试环境,Linux的服务器中,要访问第三方接口;速度有时快,有时慢。 有时候第一次访问比较慢,第二次访问比较快。第三方人员,排查之后,第三方接口没有问题&am…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...

selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...