15 полезных примеров команды dd в Linux

В Linux все является файлом, и блочные устройства не исключение. Часто нам приходится работать с блочными устройствами. Как пользователи Linux, мы выполняем различные операции с блочными устройствами, например, – создание резервной копии диска или раздела, резервное копирование главной загрузочной записи (MBR), создание загрузочного USB-накопителя и т.д. Конечно, мы можем использовать графические инструменты для выполнения всех этих операций. Однако большинство администраторов Linux предпочитают использовать команду dd из-за ее богатой функциональности и надежности.

Синтаксис команды dd

Наиболее распространенный синтаксис команды dd следующий:

dd [if=][of=]

В приведенном выше синтаксисе:

  • if – представляет входной или исходный файл.
  • of – представляет выходной или конечный файл.

Предупреждение – Важно отметить, что команда dd должна использоваться очень осторожно при работе с блочными устройствами. Небольшая ошибка может привести к необратимой потере данных. Поэтому настоятельно рекомендуется сначала опробовать эти операции на тестовой машине.

1. Как скопировать файл в Linux

Одним из основных способов использования команды dd является копирование файла в текущий каталог. Для начала создадим простой текстовый файл:

echo "this is a sample text file" > file-1.txt

Теперь создадим его копию с помощью команды dd:

dd if=file-1.txt of=file-2.txt

В этом примере параметр if представляет исходный файл, а параметр of – конечный файл.

Разве она не похожа на команду cp? Тогда что особенного в команде dd?

Команда dd намного мощнее обычной команды cp.

2. Как преобразовать текст из нижнего регистра в верхний

Команда dd позволяет нам выполнять преобразование регистра. Для этого мы можем использовать с ней параметр conv.

Чтобы понять это, сначала выведите содержимое файла file-1.txt:

cat file-1.txt
this is a sample text file

Теперь преобразуем содержимое файла в верхний регистр с помощью следующей команды:

dd if=file-1.txt of=upper-case.txt conv=ucase

В этом примере опция conv=ucase используется для преобразования строчных букв в прописные.

Наконец, проверьте содержимое вновь созданного файла:

cat upper-case.txt
THIS IS A SAMPLE TEXT FILE

3. Как перевести текст из верхнего регистра в нижний

Аналогичным образом мы можем использовать команду dd для преобразования букв верхнего регистра в буквы нижнего регистра:

Давайте воспользуемся опцией conv=lcase для преобразования букв верхнего регистра в строчные:

dd if=upper-case.txt of=lower-case.txt conv=lcase

Теперь отобразим содержимое созданного файла и убедимся, что преобразование было выполнено правильно:

cat lower-case.txt
this is a sample text file

4. Избегайте перезаписи файла назначения в Linux

По умолчанию команда dd заменяет файл назначения, что означает, что она перезапишет файл, если он существует в месте назначения с тем же именем.

Однако, мы можем отключить это поведение по умолчанию, используя опцию conv=excl, как показано на рисунке.

dd if=file-1.txt of=file-2.txt conv=excl
dd: failed to open 'file-2.txt' File exists

Здесь мы видим, что команда dd прервала операцию, потому что файл с тем же именем присутствует в месте назначения.

5. Добавление данных в файл с помощью команды dd

Иногда мы хотим обновить файл в режиме добавления, что означает, что новое содержимое должно быть добавлено в конец конечного файла.

Мы можем достичь этого, комбинируя два флага – oflag=append и conv=notrunc. Здесь oflag представляет собой флаг вывода, а опция notrunc используется для отключения усечения в месте назначения.

Чтобы понять это, сначала создадим новый текстовый файл:

echo "append example demo" > dest.txt

Далее, добавим содержимое в файл dest.txt с помощью следующей команды:

dd if=file-1.txt of=dest.txt oflag=append conv=notrunc

Теперь, проверим содержимое файла dest.txt:

cat dest.txt 
append example demo
this is a sample text file

6. Пропуск байтов или символов при чтении входного файла

Мы можем указать команде dd пропустить первые несколько символов при чтении входного файла, используя опции ibs и skip.

Сначала выведем содержимое файла file-1.txt:

cat file-1.txt
this is a sample text file

Следующая команда:

dd if=file-1.txt of=file-2.txt ibs=8 skip=1

Теперь проверим содержимое файла file-2.txt:

cat file-2.txt
a sample text file

В приведенном выше выводе видно, что команда пропустила первые 8 символов.

7. Резервное копирование раздела диска Linux с помощью команды dd

До сих пор мы обсуждали основные примеры команды dd, не требующие root-доступа. Теперь давайте рассмотрим некоторые продвинутые случаи использования.

Как и в случае с файлами, мы можем сделать резервную копию раздела диска с помощью команды dd. Например, приведенная ниже команда создает резервную копию раздела /dev/sda1 в файл partition-bak.img:

sudo dd if=/dev/sda1 of=partition-bak.img

8. Восстановление раздела диска Linux с помощью команды dd

В предыдущем примере мы создали резервную копию раздела /dev/sda1 в файл partition-bak.img.

Теперь давайте восстановим его в раздел /dev/sdb1 с помощью следующей команды:

sudo dd if=partition-bak.img of=/dev/sdb1

Важно отметить, что размер целевого раздела должен быть равен или больше размера резервной копии.

9. Резервное копирование всего жесткого диска Linux с помощью команды dd

Диск может иметь несколько разделов. Поэтому создание и восстановление резервной копии каждого раздела может занять много времени при увеличении количества разделов. Чтобы преодолеть это ограничение, мы можем создать резервную копию всего диска, как и разделов.

Так, давайте создадим резервную копию диска /dev/sda с помощью следующей команды:

sudo dd if=/dev/sda of=disk-bak.img

Приведенная выше команда создает резервную копию всего диска, включая его разделы.

10. Восстановление жесткого диска Linux с помощью команды dd

Как и разделы, мы можем восстановить резервную копию всего диска. В предыдущем примере мы сделали резервную копию всего диска в файл disk-bak.img. Теперь воспользуемся тем же для восстановления резервной копии на диске /dev/sdb.

Сначала удалим все разделы с диска /dev/sdb и проверим, что все разделы удалены:

lsblk /dev/sdb

Следующим образом восстановим резервную копию на диске /dev/sdb с помощью следующей команды:

sudo dd if=disk-bak.img of=/dev/sdb

Наконец, убедимся, что раздел был создан на диске /dev/sdb:

lsblk /dev/sdb

11. Резервное копирование главной загрузочной записи с помощью команды dd

Главная загрузочная запись (MBR) находится в первом секторе загрузочного диска. Она хранит информацию о разделах диска. Мы можем использовать команду dd, как показано ниже, чтобы сделать ее резервную копию:

sudo dd if=/dev/sda of=mbr.img bs=512 count=1

Приведенная выше команда делает резервную копию первых 512 байт, то есть одного сектора.

Важно отметить, что приведенная выше команда должна быть выполнена на загрузочном диске.

12. Восстановление главной загрузочной записи с помощью команды dd

В предыдущем примере мы создали резервную копию главной загрузочной записи (MBR). Теперь восстановим ее на диске /dev/sdb с помощью следующей команды:

sudo dd if=mbr.img of=/dev/sdb

13. Копирование содержимого CD/DVD-привода с помощью команды dd

По аналогии с разделами и дисками, мы можем использовать команду dd для копирования содержимого CD или DVD-привода. Поэтому давайте воспользуемся следующей командой:

sudo dd if=/dev/cdrom of=alma-minimal.iso

В Linux привод CD/DVD представлен устройством /dev/cdrom. Поэтому мы используем его в качестве исходного файла.

Теперь давайте проверим, что содержимое диска было успешно скопировано, проверив его контрольную сумму командой:

sha256sum alma-minimal.iso

14. Создание загрузочного USB-накопителя с помощью команды dd

В предыдущем примере мы создали iso-образ Alma Linux. Теперь давайте используем его для создания загрузочного USB-накопителя:

sudo dd if=alma-minimal.iso of=/dev/sdb

Важно отметить, что приведенная выше команда должна быть выполнена с правильным USB-накопителем.

15. Как показать индикатор прогресса

По умолчанию команда dd не показывает прогресс при выполнении операции копирования. Однако мы можем отменить это поведение по умолчанию с помощью опции status.

Так что давайте используем опцию status=progress с командой dd, чтобы показать индикатор выполнения:

sudo dd if=alma-minimal.iso of=/dev/sdb status=progress

Вывод

В этой статье мы рассмотрели некоторые практические примеры использования команды dd. Опытные пользователи могут обращаться к этим примерам в повседневной жизни при работе с системами Linux. Однако при выполнении этих команд нужно быть очень осторожным. Ведь небольшая ошибка может привести к перезаписи содержимого всего диска.

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Вдохновлен www.tecmint.com

Похожие статьи

Комментарии (0)