[命令] 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 上的机密数据为例)

[步骤] 文件或目录的监控 (audit 版)

步骤一:使用 audit 监控文件或目录

1.1 在 audit 的策略里添加要监控的目录或文件

1.1.1 案例一:监控某个目录以及目录下的目录和文件
# vim /etc/audit/rules.d/audit.rules

添加以下内容:

......
-a exit,always -F dir=/tmp -F perm=rwxa

(补充:这里以监控目录 /tmp 里的目录和文件为例)

1.1.2 案例二:监控某个文件
# vim /etc/audit/rules.d/audit.rules

添加以下内容:

......
-a exit,always -S unlink -S unlinkat -S rmdir -S rename -S renameat -F path=/dev/null

(补充:这里以监控目录 /dev/null 文件为例)

1.2 让监控目录或文件的配置生效

# service auditd restart

步骤二:显示 audit 监控记录

# cat /var/log/audit


补充:记录里的
1) nametype=CREATE 字段代表创建
2) nametype=NORMAL 字段代表普通
3) nametype=DELETE 字段代表删除

或者:

# sudo ausearch -i -k user-modify

(补充:这里以显示文件被修改的记录为例)

[命令] Linux tr 命令 (内容替换)

内容一:tr 命令的简介

1.1 tr 命令的格式

# tr <option> <section 1> <sectiong 2>

1.2 tr 命令的原理

将 <section 1> 里的内容替换成 <section 2> 里的内容

内容二:tr 命令的选项

1) -c 或者 –complement 改变除了某内容外的所有内容
2) -d 或者 –delete 删除某内容
3) -s 或者 –squeeze-repeats 将相临重复的某个字符缩减成 1 个
4) -t 或者 –truncate-set1 将 <section 1> 里的内容缩减成和 <section 2> 里的内容一样长

内容三:tr 命令的参数

1) \ 反斜杠
2) \b 退格
3) \f 换页
4) \n 换行
5) \r 回车
6) \t 水平制表符
7) \v 垂直制表符
8) <character 1>-<character 2> 从某个字符到另 1 个字符,例如:a-z、a-Z、0-9
9) [<character>*] 在 <section 2> 中可用,<character> 会复制得和 <section 1> 中一样长
10) [<character>*<frequency>] 将 <character> 复制 <frequency> 次,若以 0 开头,则视为八进制
11 [:alnum:] 所有字母和数字
12 [:alpha:] 所有字母
13 [:blank:] 所有呈水平排列的空白字符
14 [:cntrl:] 所有控制字符
15 [:digit:] 所有数字
16 [:graph:] 所有可打印字符,但不包括空格
17 [:lower:] 所有小写字母
18 [:print:] 所有可打印字符,包括空格
19 [:punct:] 所有标点字符
20 [:space:] 所有呈水平或垂直排列的空白字符
21 [:upper:] 所有大写字母
22 [:xdigit:] 所有十六进制数
23 [=字符=] 所有和指定字符相等的字符

内容三:tr 命令的案例

3.1 案例一:替换某内容外的所有内容

# echo 'zmyb' | tr -c zmy a
zmyaa

(补充:这里以将内容 zmyb 中 zmy 以外的内容替换成内容 a 为例)

(注意:zmyb 后面还有一个结尾符号,所以结果会多 1 个内容 a)

3.2 案例二:删除某内容

# echo 'zmy' | tr -d m
zy

(补充:这里以删除内容 zmy 中的内容 m 为例)

3.3 案例三:将相临重复的某个字符缩减成 1 个

# echo zmmy | tr -s m
zmy

(补充:这里以将内容 zmmy 中多个字符 m 压缩成 1 个为例)

3.4 案例四:替换字符,并将要匹配的内容缩减成和要替换的内容一样长

如果是正常情况:

zhumingyu@laptop:~/Test> echo abeabe | tr ab c
ccecce

(补充:这里以将内容 abeabe 中的内容 ab 替换成内容 c 为例)

如果是缩减的情况

zhumingyu@laptop:~/Test> echo abeabe | tr -t ab c
cbecbe

(补充:这里以将内容 abeabe 中的内容 a 替换成内容 c 为例)

(注意:这里 tr -t ab c 中内容 c 是 1 个字符,所以内容 ab 会被压缩成 1 个字符 a)

[命令] Linux 命令 xz (打包、解包、压缩和解压文件)

内容一:压缩并创建 (压缩) 包 (文件)

1.1 压缩并创建 (压缩) 包 (文件) (不保留原文件)

1.1.1 压缩并创建 (压缩) 包 (某 1 个文件) (不保留原文件)
# xz -z <file>

(补充:压缩后的文件会以 xz 后缀结尾)

1.1.2 压缩并创建 (压缩) 包 (某几个文件) (不保留原文件)
# xz -z <file 1> <file 2> <file 3> ......

(补充:压缩后的文件会各自以 xz 后缀结尾)

1.2 压缩并创建 (压缩) 包 (文件) (保留原文件)

1.2.1 压缩并创建 (压缩) 包 (某 1 个文件) (保留原文件)
# xz -zk <file>

(补充:压缩后的文件会以 xz 后缀结尾)

1.2.2 压缩并创建 (压缩) 包 (某几个文件) (保留原文件)
# xz -zk <file 1> <file 2> <file 3> ......

(补充:压缩后的文件会各自以 xz 后缀结尾)

内容二:解压 (压缩) 包

2.1 解压 (压缩) 包 (不保留原文件)

2.1.1 解压 (压缩) 包 (某 1 个 (压缩) 包) (不保留原 (压缩) 包)
# xz -d <(compressed) package>

(注意:可以用 xz 命令解压的压缩包会以 xz 后缀结尾)

2.1.2 解压 (压缩) 包 (某几个 (压缩) 包) (不保留原 (压缩) 包)
# xz -d <(compressed) package 1> <(compressed) package 2> <(compressed) package 3> ......

(补充:解压后的文件会各自去掉 xz 后缀)

(注意:可以用 xz 命令解压的压缩包会以 xz 后缀结尾)

2.2 解压 (压缩) 包 (保留原文件)

2.2.1 解压 (压缩) 包 (某 1 个 (压缩) 包) (保留原文件)
# xz -dk <(compressed) package>

(注意:可以用 xz 命令解压的压缩包会以 xz 后缀结尾)

2.2.2 解压 (压缩) 包 (某几个 (压缩) 包) (保留原文件)
# xz -dk <(compressed) package 1> <(compressed) package 2> <(compressed) package 3> ......

(补充:解压后的文件会各自去掉 xz 后缀)

(注意:可以用 xz 命令解压的压缩包会以 xz 后缀结尾)