有时,在Linux中的命令行工作时,您可能需要执行复制操作,方式是在数据/文本写入目的地之前进行格式化。 一个简单的例子可能是从文件中复制文本,并将大小写更改的版本(从上到下,或从上到下)写入目标文件。
如果您一直在寻找方法,您将很高兴知道存在一个命令行实用程序 - 配置dd - 这是为此目的而建立的。 在本教程中,我们将讨论如何使用一些易于理解的示例进行工作。 但在我们这样做之前,值得一提的是,这里提到的所有例子都已经在Ubuntu 16.04LTS上进行了测试。
Linux dd命令
简而言之, dd命令允许您复制和转换文件。 该工具提供了一些操作数,您可以使用它们来指定所需的格式。 以下是其手册页中描述的命令的通用语法:
dd [OPERAND]...
dd OPTION
以下Q&A类型的示例应该让您对dd命令的工作原理有一个好的了解。
Q1。 如何使用dd命令更改输入文本的大小写?
假设您有一些小写的文本行,并且要求是将它们快速转换为大写。 您可以使用conv命令行选项(以ucase为其值)。
这里有一个例子:
上面的屏幕截图显示了命令以及输入文本。 键组合Ctrl + d用于告诉dd我们完成了输入,并且一旦完成,命令就产生以下输出:
所以你可以看到输入文本是从小写到大写的。 最后三行只是一些与操作有关的统计数据。
注意 :同样,您可以使用值lcase将大写文本转换为小写。
Q2。 如何读取和写入文件?
在上面的第一个例子中,我们通过stdin(标准输入)输入了文本。 但是,您可以随时使用输入和输出文件。 要指定输入和输出文件的名称,请使用if和命令行选项。
例如,如果要转换file1中的文本大小写,然后将其写入file2,则可以通过以下方式执行此操作:
dd if=file1 of=file2 conv=ucase
Q3。 阅读输入时如何跳过文字?
如果需要,您可以要求dd在读取输入文本时跳过一些初始字节。 这可以使用需要数值的跳过选项来完成。 如果说这个值是'N',那么dd将在输入开始时跳过N个ibs大小的块。 这使我们进入“ibs”,这也是另一个命令行dd选项,其值指定工具每次读取的字节数(默认值为512)。
所以假设你想跳过前4个字节的输入文件,那么你应该首先将ibs设置为4,然后使用1作为skip的值。 这将确保在读取输入文件时该工具将跳过4个字节的1个块。
所以你可以看到文本嘿,在读取file1时被跳过 - 这就是为什么它没有出现在file2中。
Q4。 如何在输出中交换每对输入字节?
如果有这样的要求,您也可以使用dd来交换每对输入字节。 这可以通过使用swab作为conv命令行选项的值来实现。 以下屏幕截图将使事情更加清晰:
Q5。 如何使dd仅在输出文件不存在时才起作用?
如果要求是输出文件已经存在,dd命令不应该执行任何操作,那么可以使用conv选项的excl值强制执行此条件。
以下屏幕截图显示了用例的操作:
Q6。 如何确保输出文件在附加模式下更新?
默认情况下,dd只会覆盖输出文件(如果存在)。 但是,如果您希望附加文本,请使用值为applag的 FLAG和notrunc作为转换选项。
例如:
dd if=file1 of=file3 oflag=append conv=notrunc
以上是上述命令:
Q7。 如何使dd不创建输出文件?
如果需要,还可以强制dd命令在命令中给出的文件不存在的情况下不创建输出文件。 这可以通过使用conv命令行选项的nocreat值来完成。
例如:
Q8。 如何控制stderr上打印的信息水平?
如果需要,还可以限制命令在stderr上打印的信息量。 这可以使用状态命令行选项完成。 例如,如果要禁止除错误消息之外的所有内容,可以将值none传递给此命令行选项:
dd if=file1 of=file3 status=none
其他可用的值是noxfer和进度 。 这是手册页面关于状态选项的说明:
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 statis?
tics
结论
本教程中讨论的例子只是在探索dd命令可以做的事情上划伤表面。 只是给您一个想法,您可以使用该工具创建虚拟文件系统以及备份硬盘驱动器或系统分区。 有关dd的更多信息,请访问其手册页 。