Эффективное использование dd (буферизация множества блоков, обработка по одному)

  • Выбор виртуальной машины Linux: CentOS 7 1511
  • Secondary Click -> Настройки
  • Выберите Система Вкладка -> Материнская плата
  • Заданное значение USB-планшет или USB-планшет Multi-Touch для наведения Поле устройства !
2
12.04.2016, 03:34
2 ответа

В сценарии оболочки лучше использовать cmp от GNU diffutils. Он сравнивает данные для вас и может даже пропустить смещения - ignore-initial = SKIP1: SKIP2 , поэтому вы можете запустить cmp для каждого смещения сектора, и он завершит работу при первой разнице. находит ... что полуэффективно, но все же это МНОГО из вызовов cmp , если вы хотите запустить его для каждого сектора ...

Вы также можете использовать grep -abo или strings -td , чтобы найти возможные варианты смещения байтов для вас, но это зависит от фактического шаблона, который вы ищете. Преимуществом для них будет один вызов программы для поиска всего объекта, а не тысячи вызовов (по одному на сектор).

Если вам не удастся найти утилиту командной строки, которая выполняет всю работу за вас, вы не сможете превзойти небольшой сценарий C / Go / Python, который просматривает все это за один раз в соответствии с вашими требованиями .. .

Ваша идея сценария, конечно, тоже работает, но это просто означает вызов dd (или read , или что-то еще) снова внутри цикла для чтения одного блока стандартного ввода за раз, это, вероятно, медленнее, чем раньше ...

2
27.01.2020, 21:59

Вы можете использовать команду split для запуска "фильтра" на последовательных фрагментах файла, и написать фильтр, используя cmp, echo и true для получения новой строки для каждого успешного совпадения, а затем использовать wc для их подсчета. Например, если $F - файл, $TB - файл блока шаблонов, а $SZ - размер блока шаблонов, то это может выглядеть как следующая командная строка:

$ split -b $SZ --filter="cmp $TB >& /dev/null && echo ; true" $F | wc -l

Обратите внимание на true, которая обеспечивает успех командной строки фильтра, и для экономии текста вы можете использовать :, хотя это не улучшает читабельность.

Обратите также внимание на перенаправление всего вывода из cmp, т.е. как его stdout, так и stderr, поскольку интерес представляет только его код возврата.

2
27.01.2020, 21:59

Теги

Похожие вопросы