Linux 启动顺序

第一步启动:BIOS/UEFI

BIOS (Basic Input Output System) 即基本输入输出系统。

UEFI (Unified Extensible Firmware Interface) 即可扩展固件接口。

它们的主要作用是为计算机提供直接、底层的硬件控制和设置。UEFT 是 BIOS 的升级替代方案。

第二步启动:MBR/GPT

MBR (Master Boot Record) 即主引导记录。MBR 通常和 BIOS 搭配,最大分区容量不能超过 2T,最多可以有 3 个主分区,1 个扩展分区,不过扩展分区里可以有多个逻辑分区。

GPT (GUID Partition Table) 即全局唯一标识分区表。GPT 通常和 UEFI 搭配。

它们都是读取硬盘时最先读取的分区,里面有各自的启动代码。

第三步启动:GRUB2

GRUB2 (GRand Unified Bootloader version 2) 即多操作系统启动程序,可以选择系统分区上不同的系统内核,同时也可以向启动的内核传递参数。

第四步启动:initrd/Kernel

initrd (init ramdisk) 即初始化内存盘,作用是:
1) 提供开机必备的单 kernel 文件 (vmlinuz) 没有提供的驱动模块。
2) 通过引导加载程序加载内存,将内存视为临时根 “/” 目录,从中运行程序,之后再将根 “/” 目录转移到硬盘上真正的根 “/” 目录上。


注意:系统启动 initrd 的时间默认上限是 90 秒钟,如果 initrd 加载的时间超过 90 秒钟,则系统会报以下错误:

Warning: dracut-initqueue timeout - starting timeout scripts

(补充链接:Linux 解决启动时,某个盘挂不上或者报错 “Warning: dracut-initqueue timeout – starting timeout scripts”

第五步启动:systemdprocess

systemdprocess,即启动各类程序和进程。

[步骤] auditd 的设置 (日志保存时间)

方法一:通过 auditd 配置文件设置

1.1 设置 auditd 日志的保存时间

# vim /etc/audit/auditd.conf

确保部分内容如下:

......
local_events = yes
......
write_logs = yes
......
log_file = /var/log/audit/audit.log
......
max_log_file = 8
......
num_logs =5
......
max_log_file_action = ROTATE
......


补充:这里以
1) 开启 auditd 日志 (local_events = yes) (write_logs = yes)
2) 将 auditd 日志写入 /var/log/audit/audit.log 文件 (log_file = /var/log/audit/audit.log)
3) auditd 日志每达到 8M 大小就将旧的 auditd 日志进行备份并创建新的 auditd 日志 (max_log_file = 8) (max_log_file_action = ROTATE),也可以修改成: max_log_file_action = keep_logs
4) 旧的 auditd 日志保存 5 份 (num_logs =5)
为例

1.2 让设置的 auditd 时间生效

# service auditd restart

方法二:通过 logrotate 配置文件设置

2.1 设置 auditd 日志的保存时间

# vim /etc/logrotate.d/auditd

创建以下内容:

/var/log/audit/*
{
rotate 30
daily
missingok
compress
delaycompress
postrotate
touch /var/log/audit/audit.log ||:
chmod 0600 /var/log/audit/audit.log ||:
service auditd restart
endscript
}


补充:这里以:
1) 备份的日志文件保留 30 份 (rotate 30)
2) 每天将现在的日志文件进行备份并生成新的日志文件 (dayly)

2.2 让设置的 auditd 时间生效

# systemctl restart logrotate.service

[命令] Linux 命令 rpm2cpio 和 cpio (提取 RPM 文件 (安装包) 里的子文件)

内容一:rpm2cpio 命令和 cpio 命令的减价

1.1 rpm2cpio 命令

将 RPM 文件 (安装包) 转换为 cpio 格式

1.2 cpio 命令

从 cpio 格式中的 RPM 文件 (安装包) 中提取子文件

内容二:rpm2cpio 命令和 cpio 命令的格式

# rpm2cpio <RPM file (installation package)> | cpio -idv <absolute path of the file>

内容三:cpio 命令的选项

1) -i 即 copy-in 模式,还原 RPM 文件 (安装包) 里的子文件
2) -d 在还原的过程中创建对应的目录
3) -v 显示还原的过程

内容四:rpm2cpio 命令的案例 (安装 RPM 文件 (安装包))

4.1 拷贝要安装的 RPM 文件 (安装包) 到当前目录

(步骤略)

4.2 创建用于提取 RPM 文件 (软件包) 的目录

# mkdir bash

(补充:这里以创建 bash 目录为例)

4.3 进入用于提取 RPM 文件 (软件包) 的目录

# cd bash

(补充:这里以进入 bash 目录为例)

4.4 提取 RPM 文件 (安装包) 里的子文件

# rpm2cpio ../bash-4.3-83.23.1.x86_64.rpm | cpio -ivd

(补充:这里以提取 bash-4.3-83.23.1.x86_64.rpm RPM 文件 (安装包) 为例)

4.5 显示提取 RPM 文件 (安装包) 子文件后的目录

# ls
bin etc usr

4.6 在当前目录将提取的子文件拷贝到 /bin 目录

# cp -rpv bin/* /bin
'bin/bash' -> '/bin/bash'
'bin/sh' -> '/bin/sh'

[步骤] auditd 日志时间转换成可读格式以后再显示

方法一:通过创建额外的脚本实现 adutitd 日志时间格式的转换

1.1 创建用于 auditd 转换日志时间格式的脚本

# vim time_format_conversion.pl

创建以下内容:

s/(1\d{9})/localtime($1)/e

(补充:这里以创建名为 time_format_conversion.pl 的用于转换 auditd 日志时间格式的脚本为例)

1.2 转换 auditd 日志时间格式

# cat /var/log/audit/audit.log | perl -p time_format_conversion.pl

或者:

# less /var/log/audit/audit.log | perl -p time_format_conversion.pl

或者:

# more /var/log/audit/audit.log | perl -p time_format_conversion.pl

或者:

# head /var/log/audit/audit.log | perl -p time_format_conversion.pl

或者:

# tail /var/log/audit/audit.log | perl -p time_format_conversion.pl

或者:

# tail -f /var/log/audit/audit.log | perl -p time_format_conversion.pl

(补充:这里以使用名为 time_format_conversion.pl 的用于转换 auditd 日志时间格式的脚本为例)

方法二:使用 /usr/sbin/ausearch 命令实现 adutitd 日志时间格式的转换

# /usr/sbin/ausearch --start $(date +\%m/\%d/\%Y -d "-1 month") -i --input-logs | egrep "/sftp*[0-9a-zA-Z].*txt.*nametype=" | grep -v Log.txt | awk '{print $2,$3,$6}' | uniq

(补充:这里以显示在 /sftp 目录下以 txt 结尾的文件的 auditd 日志为例)

[命令] Linux 命令 dd (读取内容并进行完整复制)

内容一:dd 命令介绍

1.1 dd 命令简介

dd 是 device driver 单词的缩写,主要用于读取内容并进行完整复制,甚至可以直接复制系统环境

1.2 dd 命令的选项

1) bs= 同时设置单次输入或单词输出的数据块 (block) 的大小为 个字节,此选项也可以使用 ibs 选项设置单次输入和 obs 选项来分别设置单词输出。
2) ibs= 设置单次输入的数据块 (block) 的大小为 个字节,默认为 512 字节
3) obs= 设置单次输出的数据块 (block) 的大小为 个字节,默认为 512 字节
4) count= 设置总共要复制的数据块数量为 N 个数量

1.3 可配合 dd 命令使用的文件

1) /dev/null 空设备,任何进入此文件的数据都会被删除,一般用于删除输出内容
2) /dev/zero 二进制的零流,可以连续不断地产生二进制零流,一般用于对设备和文件进行初始化
3) /dev/urandom 随机数流,可以连续不断地产生随机数流,一般用于清除机密数据,用随机的数据完全覆盖磁盘

内容二:dd 命令的案例

2.1 与分区相关的案例

2.1.1 案例一:备份分区
# dd if=/dev/sda1 of=/root/sda1_backup.img

(补充:这里以将分区 /dev/sda1 备份成文件 /root/sda1_backup.img 为例)

2.1.2 案例二:还原分区
# dd if=/root/sda1_backup.img of=/dev/sda1

(补充:这里以将文件 /root/sda1_backup.img 还原到分区 /dev/sda1 为例)

2.1.3 案例三:复制分区
# dd if=/dev/sda1 of=/dev/sda2

(补充:这里以将分区 /dev/sda1 复制到分区 /dev/sda2 为例)

2.2 与硬盘相关的案例

2.2.1 案例一:备份硬盘
# dd if=/dev/sda of=/root/sda_backup.img

(补充:这里以将硬盘 /dev/sda 备份成文件 /root/sda_backup.img 为例)

2.2.2 案例二:还原硬盘
# dd if=/root/sda_backup.img of=/dev/sda

(补充:这里以将文件 /root/sda_backup.img 还原到硬盘 /dev/sda1 为例)

2.2.3 案例三:复制硬盘
# dd if=/dev/sda of=/dev/sdb

(补充:这里以将硬盘 /dev/sda 复制到硬盘 /dev/sdb 为例)

2.3 与内存相关的案例

2.3.1 案例一:备份内存
# dd if=/dev/meme of=/root/mem_backup.img

(补充:这里以将内存备份成文件 /root/mem_backup.img 为例)

2.3.2 案例二:还原内存
# dd if=/root/mem_backup.img of=/dev/meme

(补充:这里以将文件 /root/mem_backup.img 还原到内存为例)

2.4 与软盘相关的案例

2.4.1 案例一:备份软盘
# dd if=/dev/fd0 of=/root/fd0_backup.img count=1 bs=1440k

(补充:这里以将软盘备份成文件 /root/fd0_backup.img 为例)

2.4.2 案例二:还原软盘
# dd if=/root/fd0_backup.img of=/dev/fd0 count=1 bs=1440k

(补充:这里以将文件 /root/fd0_backup.img 还原到软盘为例)

2.5 与光盘相关的案例

2.5.1 案例一:备份光盘
# dd if=/dev/cdrom of=/root/cd_backup.img

(补充:这里以将光盘备份成文件 /root/cd_backup.img 为例)

2.5.2 案例二:还原光盘
# dd if=/root/cd_backup.img of=/dev/cdrom

(补充:这里以将文件 /root/cd_backup.img 还原到光盘为例)

2.6 与预估硬盘性能相关的案例

2.6.1 案例一:预估硬盘写入性能
# dd if=/dev/zero bs=1024 count=1000000 of=/root/1GB.file

(补充:这里以生成 1 个 1 GB 大小的文件,根据生成时间判断文件大小为例)

2.6.2 案例二:预估硬盘读取性能
# dd if=/root/1GB.file bs=64k | dd of=/dev/null

(补充:这里以读取 1 个 1 GB 大小的文件,根据读取时间判断文件大小为例)

2.6.3 案例三:预估多大的块大小写入性能最佳

(分别执行以下命令)

# time dd if=/dev/zero bs=1024 count=1000000 of=/root/1GB.file
# time dd if=/dev/zero bs=2048 count=500000 of=/root/1GB.file
# time dd if=/dev/zero bs=4096 count=250000 of=/root/1GB.file

(补充:这里以分别生成 1024、2048 和 4096 块大小的 1 GB 大小的文件,根据生成时间判断多大的块大小写入性能最佳为例)

2.7 与清除机密数据相关的案例

# dd if=/dev/urandom of=/dev/sda

(补充:这里以清除硬盘 /dev/sda 上的机密数据为例)