Задача: допустим, при создании тяжелого бэкапа или вообще дампа диска, необходимо параллельно к созданию сжатого файла еще и создать контрольную сумму исходного файла.
Сделать это можно с помощью утилиты pee, входящей в состав пакета программ moreutils. Для установки в Ubuntu используем apt install moreutils.
Сделать это можно так:
dd if=test | pee «dd of=newtest» «sha512sum».
Результаты следующие:
Тут пришлось делать скрипт, т.к. time не хотел никак выполнять несколько команд.
cat ./sc
#!/bin/bash
if=test of=newtest
sha512sum test
time ./sc 678d36fc5a1d14b23dcd04740604a643f2d3159167af1211ab779ac10394ac443a06feabee9d826fd715bce84e0d13ea75bc85fe990e340e775c1d9521c8dac9 test
real 0m24.453s
user 0m23.885s
sys 0m0.548s
time dd if=test | pee «dd of=newtest» «sha512sum»
1228276+0 records in
1228276+0 records out
628877312 bytes (629 MB, 600 MiB) copied, 14.766 s, 42.6 MB/s
1228276+0 records in
1228276+0 records out
628877312 bytes (629 MB, 600 MiB) copied, 14.4783 s, 43.4 MB/s
678d36fc5a1d14b23dcd04740604a643f2d3159167af1211ab779ac10394ac443a06feabee9d826fd715bce84e0d13ea75bc85fe990e340e775c1d9521c8dac9 —
real 0m14.779s
user 0m12.009s
sys 0m22.671s
Также можно сделать и с архивом:
tar cf — test | cat | pee «dd of=archive.tar» «sha512sum»
выведет контрольную сумму sha512 конечного архива, и, собственно говоря, сам архив будет создан.
где:
test — имя архивируемого файла/директории
archive.tar — имя конечного архива
Для создания сжатого архива, например, lz4:
tar cf — test | lz4 -z| cat | pee «dd of=archive.tar.lz4» «sha512sum»
Как мы видим, параллельное выполнение значительно быстрее, особенно при нескольких задачах, нежели последовательное, и при работе с большими файлами это просто необходимость.