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. Однако при выполнении этих команд нужно быть очень осторожным. Ведь небольшая ошибка может привести к перезаписи содержимого всего диска.
Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.
Вдохновлен www.tecmint.com
Комментарии (0)