Поиск по сайту:

Объяснение команды Linux dd для начинающих (8 примеров)


На этой странице

  1. Команда Linux dd
  2. Q1. Как изменить регистр ввода текста с помощью команды dd?
  3. Вопрос 2. Как вместо этого читать и писать в файлы?
  4. Вопрос 3. Как пропустить текст при чтении ввода?
  5. Q4. Как поменять местами каждую пару входных байтов на выходе?
  6. В5. Как заставить dd работать только тогда, когда выходной файл еще не существует?
  7. Q6. Как убедиться, что выходной файл обновляется в режиме добавления?
  8. Q7. Как заставить dd не создавать выходной файл?
  9. Q8. Как контролировать уровень информации, выводимой на stderr?
  10. Заключение

Иногда при работе с командной строкой в Linux вам может потребоваться выполнить операцию копирования таким образом, чтобы данные/текст были отформатированы до того, как они будут записаны в место назначения. Простым примером может быть копирование текста из файла и запись версии с измененным регистром (с нижнего на верхний или с верхнего на нижний) в файл назначения.

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

команда линукс дд

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

dd [OPERAND]...
dd OPTION

Следующие примеры типа вопросов и ответов должны дать вам хорошее представление о том, как работает команда dd.

Q1. Как изменить регистр ввода текста с помощью команды dd?

Предположим, у вас есть несколько строк текста, написанных строчными буквами, и требуется быстро преобразовать их в прописные. Вы можете сделать это, используя параметр командной строки conv (со значением ucase).

Вот пример:

На приведенном выше снимке экрана показана команда, а также введенный текст. Комбинация клавиш Ctrl+d использовалась, чтобы сообщить dd, что ввод данных завершен, и как только это было сделано, команда выдала следующий вывод:

Таким образом, вы можете видеть, что входной текст был преобразован из нижнего регистра в верхний регистр. Последние три строки — это просто некоторая статистика, связанная с работой.

Примечание. Точно так же вы можете использовать значение lcase для преобразования текста из верхнего регистра в нижний.

Q2. Как вместо этого читать и писать в файлы?

В первом примере выше мы ввели текст через stdin (стандартный ввод). Однако вы всегда можете использовать входные и выходные файлы. Чтобы указать имена входных и выходных файлов, используйте параметры командной строки if и of.

Например, если вы хотите преобразовать регистр текста в файл1, а затем записать его в файл2, вы можете сделать это следующим образом:

dd if=file1 of=file2 conv=ucase

Q3. Как пропустить текст при чтении ввода?

Если вы хотите, вы можете попросить dd пропустить некоторые начальные байты при чтении входного текста. Это можно сделать с помощью опции пропуска, для которой требуется числовое значение. Если, скажем, это значение равно N, то dd пропустит N блоков размера ibs в начале ввода. Это подводит нас к ibs, еще одному параметру командной строки dd, значение которого указывает количество байтов, считываемых инструментом за раз (по умолчанию 512).

Итак, предположим, вы хотите пропустить первые 4 байта входного файла, тогда вы должны сначала установить ibs на 4, а затем использовать 1 в качестве значения для skip. Это гарантирует, что инструмент пропустит 1 блок из 4 байтов при чтении входного файла.

Итак, вы можете видеть, что текст привет, был пропущен при чтении файла1, поэтому он не появился в файле2.

Q4. Как поменять местами каждую пару входных байтов на выходе?

Если есть такое требование, вы также можете использовать dd для замены каждой пары входных байтов. Этого можно добиться, используя swab в качестве значения параметра командной строки conv. Следующий снимок экрана прояснит ситуацию:

Q5. Как заставить dd работать только тогда, когда выходной файл еще не существует?

Если требуется, чтобы команда dd ничего не делала, когда выходной файл уже существует, то это условие можно применить, используя значение excl для параметра conv.

На следующем снимке экрана показан вариант использования в действии:

Q6. Как убедиться, что выходной файл обновляется в режиме добавления?

По умолчанию dd просто перезаписывает выходной файл (если он существует). Но если вы хотите, чтобы он вместо этого добавлял текст, используйте значение append для oflag FLAG и notrunc для параметра conv.

Например:

dd if=file1 of=file3 oflag=append conv=notrunc

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

Q7. Как заставить dd не создавать выходной файл?

Если вы хотите, вы также можете заставить команду dd не создавать выходной файл, если файл, указанный в команде, еще не существует. Это можно сделать, используя значение nocreat параметра командной строки conv.

Например:

Q8. Как контролировать уровень информации, выводимой на stderr?

При желании вы также можете ограничить объем информации, которую команда выводит на стандартный вывод. Это можно сделать с помощью параметра командной строки состояния. Например, если вы хотите подавить все, кроме сообщений об ошибках, вы можете передать значение none этому параметру командной строки:

dd if=file1 of=file3 status=none

Другими доступными значениями являются noxfer и progress. Вот что справочная страница говорит об опции состояния:

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 перейдите на его справочную страницу.