zl程序教程

您现在的位置是:首页 >  系统

当前栏目

linux基本功系列之dd命令实战

Linux命令 系列 实战 DD 基本功
2023-09-14 09:09:25 时间

前言🚀🚀🚀

大家好,我是沐风晓月,双一流本科,计算机专业,一起学习,努力成长!
🛰️🛰️系列专栏:【linux基本功-基础命令实战】
💓想要学好Linux,命令是基本功,企业中常用的命令大约200多个,不管是写shell脚本还是管理操作系统,最常用的命令必须要牢牢掌握,像我们以前学乘法口诀一样,烂熟于心,唯有如此,才能打牢基础。
💓 只要地球不爆炸,我们永远不放假,只要宇宙不重启,我们永远不休息,,风里雨里节日里我们都在机房等着你
💓 知识最重要的是记忆,反复练习才能有所成就
💓 入门须知: 想要人生从容,必须全力以赴,努力才是你最终的入场券🚀🚀🚀
💕 最后: 努力成长自己,愿我们都能在看不到的地方闪闪发光 ,一起加油进步🍺🍺🍺

一. dd 命令介绍

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

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

二. 语法格式及常用选项

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

[root@mufenggrow ~]# dd --help
用法:dd [操作数] ...
 或:dd 选项
Copy a file, converting and formatting according to the operands.

  bs=BYTES        read and write up to BYTES bytes at a time
  cbs=BYTES       convert BYTES bytes at a time
  conv=CONVS      convert the file as per the comma separated symbol list
  count=N         copy only N input blocks
  ibs=BYTES       read up to BYTES bytes at a time (default: 512)
  if=FILE         read from FILE instead of stdin
  iflag=FLAGS     read as per the comma separated symbol list
  obs=BYTES       write BYTES bytes at a time (default: 512)
  of=FILE         write to FILE instead of stdout
  oflag=FLAGS     write as per the comma separated symbol list
  seek=N          skip N obs-sized blocks at start of output
  skip=N          skip N ibs-sized blocks at start of input
  status=LEVEL    The LEVEL of information to print to stderr;
                  'none' suppresses everything but error messages,
                  'noxfer' suppresses the final transfer statistics,
                  'progress' shows periodic transfer statistics

N and BYTES may be followed by the following multiplicative suffixes:
c =1, w =2, b =512, kB =1000, K =1024, MB =1000*1000, M =1024*1024, xM =M
GB =1000*1000*1000, G =1024*1024*1024, and so on for T, P, E, Z, Y.


Options are:

      --help		显示此帮助信息并退出
      --version		显示版本信息并退出


dd 命令常用的字段介绍

字段描述
if代表输入文件。如果不指定 if,默认就会从 stdin 中读取输入。
of代表输出文件。如果不指定 of,默认就会将 stdout 作为默认输出
bs代表字节为单位的块大小
count代表被复制的块数。
/dev/zero是一个字符设备,会不断返回 0 值字节(\0)
conv = ucase把字母由小写变为大写
conv = lcase把字母由大写变为小写
conv = noerror出错时不停止处理。

三. 参考案例

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 25 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 25 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 ~]# 

四. 文中出现的概念解释

swapon命令介绍

使用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文件覆盖其他文件信息,比如本文中的清空磁盘
  • 产生指定大小的空文件,例如:交换文件、模拟虚拟文件系统等。

总结

💕💕💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!✨ ✨ ✨
🍻🍻🍻如果你喜欢的话,就不要吝惜你的一键三连了~

请添加图片描述
在这里插入图片描述