1. dd 命令介绍

Linux dd 命令用于读取、转换并输出数据,换言之就是转换和拷贝文件

dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。

2. 语法格式及常用选项

具体的使用方法如下:
dd if=“输入文件” of=“输出文件” bs=“数据块” count=“数量”
我们用 --help来查看具体的帮助信息

[root@doc ~]# dd --help

Linux基本功系列之dd命令_sed

2.1 dd 命令常用的字段介绍

字段

描述

if

代表输入文件。如果不指定 if,默认就会从 stdin 中读取输入。

of

代表输出文件。如果不指定 of,默认就会将 stdout 作为默认输出

bs

代表字节为单位的块大小

count

代表被复制的块数。

/dev/zero

是一个字符设备,会不断返回 0 值字节(\0)

conv = ucase

把字母由小写变为大写

conv = lcase

把字母由大写变为小写

conv = noerror

出错时不停止处理。

3. 参考案例

3.1 创建指定大小的文件

这个我们用的比较多,也是必会的内容,参考以下格式:
dd if=“输入文件” of=“输出文件” bs=“数据块” count=“数量”

案例一: 创建1G大小的文件,文件保存在/tmp/dd_test, 块的大小为1M

[root@mufenggrow ~]# dd if=/dev/zero of=/tmp/dd_test bs=1M count=1024
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB)已复制,2.60265 秒,413 MB/秒
## 查看创建文件的大小
[root@mufenggrow ~]# ll -h /tmp/dd_test 
-rw-r--r--. 1 root root 1.0G 2月   5 07:51 /tmp/dd_test
[root@mufenggrow ~]#

3.2 清空磁盘数据

我们在网上看到的各种”某某门“ ,往往是因为处理不要到磁盘的时候,只是做了删除,没有做专业的处理。

我们的数据保存在硬盘上,靠删除和格式化是删不干净的,还需要使用专业工具,或者dd命令来删除

比如:
我们要删除 /dev/sdb盘的信息:
当然如果我们没有sdb盘,系统会提示,设备上没有空间,

[root@mufenggrow ~]# ll -h /tmp/dd_test 
-rw-r--r--. 1 root root 1.0G 2月   5 07:51 /tmp/dd_test
[root@mufenggrow ~]# dd if=/dev/zero of=/dev/sdb
dd: 正在写入"/dev/sdb": 设备上没有空间
记录了1829129+0 的读入
记录了1829128+0 的写出

我们删除文件等同于删掉了inode,并不能完全删除数据,如果要彻底删除,除非数据被覆盖掉,而上面的代码就是让数据全被被 /dev/zero 覆盖,相当于置空。

3.3 给磁盘做备份还原

相当于一个复制过程,只是速度会更快一些:

  • 把sda的数据备份到sdb

[root@mufeng ~]# dd if=/dev/sda  of=/dev/sdb

  • 利用备份好的sdb进行数据还原

dd if=/dev/sdb  of=/dev/sda

3.4 把光盘拷贝到root下

我们可以拷贝光盘数据到root文件夹下,并保存为cd.iso文件

dd if=/dev/cdrom of=/root/cd.iso

3.5 内存不足的处理方法

安卓手机是类unix系统,用的时间久了之后就会有些卡顿,这时候我们可以设置swap空间,来确保手机的运行。
也就是我们常用的虚拟内存。

虚拟内存:
利用硬盘的空间,充当内存的空间
相当于虚拟内存

  • 当物理内存不够用时,使用磁盘空间来模拟内存
  • 在一定程度上缓解内存不足的问题

swap空间也有一定的不足:

swap是存放在磁盘上的,磁盘的速度和内存比较起来慢了好几个数量级,如果不停的读写swap,那么对系统的性能影响很大,甚至会导致卡死。

接下来我们模拟下把文件变为SWAP空间的情况。

## 查看swap到总大小
[root@mufenggrow ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1819         431          72         907        1315         270
Swap:          2047         715        1332
## 生成一个G的文件
[root@mufenggrow ~]# dd if=/dev/zero of=/home/swap_test bs=1M count=1024
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB)已复制,2.53391 秒,424 MB/秒
## 授权
[root@mufenggrow ~]# chmod 0600 /home/swap_test 
## 把文件变成swap空间
[root@mufenggrow ~]# mkswap -f /home/swap_test 
正在设置交换空间版本 1,大小 = 1048572 KiB
无标签,UUID=d6bdd0b3-42f7-4cff-b51b-d04184000c1a
## 设置永久生效
[root@mufenggrow ~]# echo "/home/swap_test none swap defaults 0 0 " >> /etc/fstab
[root@mufenggrow ~]# swapon  -a
## 再次查看发现多了1G大小的swap空间
[root@mufenggrow ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1819         429          70         907        1319         269
Swap:          3071         714        2357
[root@mufenggrow ~]#

4. 文中出现的概念解释

4.1swapon命令介绍

使用swapon命令可以启用Linux系统的交换分区或交换文件。

参数

描述

-a

将/etc/fstab文件中所有设置为swap的设备,启动为交换区

-s

显示交换区的使用状况;

-p

指定交换分区的优先级

-U

使用设备的UUID

-L

使用设备的卷标

与之相对应的命令是 swapoff 用于关闭指定的交换空间

swapoff -a 表示关闭所有的在/etc/fstab里设置的swap空间。

4.2 /dev/zero 介绍

/dev/zero是一个特殊的字符设备文件,当我们使用或读取它的时候,它会提供无限连续不断的空的数据流(特殊的数据格式流)
主要使用场景有两个:

  • 可以使用/dev/zero文件覆盖其他文件信息,比如本文中的清空磁盘
  • 产生指定大小的空文件,例如:交换文件、模拟虚拟文件系统等。