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

[工具] Shell 批量实现多个远程服务器执行命令 (多条命令版)

介绍

基本信息

作者:朱明宇
名称:批量实现多个远程服务器执行命令 (多条命令版)
作用:批量实现多个远程服务器执行命令 (多条命令版)

使用方法

1. 在此脚本的分割线内写入相应的内容
2. 给此脚本添加执行权限
3. 执行此脚本

脚本分割线里的变量

1. myuser=”zhumingyu” #用户名
2. myserver=”eternalcenter.com eternalcentre.com” #服务器名,每个服务器名以空格间隔
3. mycommand=”ls ip a s” #命令,每个命令以空格间隔
4. mysudo=”yes” #是否使用 sudo,可以选择 yes 或者 no

注意

执行脚本的用户要在远程服务器中有同名用户,此用户拥有免密钥 sudo su 权限,且能被本服务器免密钥 ssh

脚本

#!/bin/bash

####################### Separator ########################

myuser="zhumingyu"
myserver="eternalcenter.com eternalcentre.com" #each server is separated by a space
mycommand="ls ip a s" #each command is separated by a space
mysudo="yes" #please choose "yes" or "no"

####################### Separator ########################

mynow=`date +%Y-%m-%d-%H-%s`

if [ $mysudo == 'yes' ];then
        executecommand(){
                ssh -t $1@$2 "sudo -u root su - root -c \"$command\""
        }
        echo "use sudo"
fi

if [ $mysudo == 'no' ];then
        executecommand(){
                ssh -t $1@$2 "$command"
        }
        echo "don't use sudo"
fi

for commands in `echo $mycommand`
do

        for servers in `echo $myserver`
        do
                echo $servers
                echo $commands
        executecommand $myuser $servers $commands
        done

done

[步骤] 文件或目录的监控 (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

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

随笔 17

如果,这个世界上有 “圣女贞德” 在祈求 “自由、平等、博爱”,那我肯定会去追随。如果这个世界上没有,那我会去成为 “亚瑟王”,亲自为这个世界独自立起 “自由、平等、博爱” 的旗帜。很多时候,就和 《美国队长 2》 里的台词一样:“就算只有我一个人也没有关系,但我相信绝对不会只有我一个”

[内容] SUSE Repository Mirroring Tool (RMT) 服务端的设置 (软件源)

内容一:显示软件源

1.1 显示所有的 SUSE 软件源产品

# rmt-cli products list --all

1.2 显示所有已经启用的 SUSE 软件源产品

# rmt-cli products list

1.3 显示所有指定版本且指定架构的 SUSE 软件源产品

# rmt-cli products list --all --version=15.4 --arch=x86_64

(补充:这里以显示所有 15.4 版本且 x86_64 架构的 SUSE 软件源产品为例)

1.4 显示所有已启用指定版本且指定架构的 SUSE 软件源产品

# rmt-cli products list --version=15.4 --arch=x86_64

(补充:这里以显示所有已其应用 15.4 版本且 x86_64 架构的 SUSE 软件源产品为例)

内容二:启用软件源

2.1 启用某个软件源

# rmt-cli products enable <id>

或者:

# rmt-cli products enable <string>

2.2 开启所有指定版本且指定架构的 SUSE 软件源产品

# for i in `rmt-cli products list --all --version=15.4 --arch=x86_64 | awk '{print $2}' | egrep -v '\||ID|^$'`;do rmt-cli products enable $i;done

(补充:这里以开启所有 15.4 版本且 x86_64 架构的 SUSE 软件源产品)

内容三:取消启用软件源

3.1 取消启用某个软件源

# rmt-cli products disable <id>

或者:

# rmt-cli products disable <string>

3.2 取消所有指定版本且指定架构的 SUSE 软件源产品

# for i in `rmt-cli products list --all --version=15.4 --arch=x86_64 | awk '{print $2}' | egrep -v '\||ID|^$'`;do rmt-cli products disable $i;done

(补充:这里以取消开启所有 15.4 版本且 x86_64 架构的 SUSE 软件源产品)

参考文献:

https://documentation.suse.com/sles/15-SP4/single-html/SLES-rmt/index.html#sec-rmt-tools-rmt-cli