hexedit dd xxd grep
Лучше всего инструменты изучаются в прикладном режиме, когда их есть к чему приложить. А теоретическое изучение я постоянно забываю. В этой записи я опишу решаемую проблему и пригодившийся функционал из широкого спектра инструментариев.
Все решения - терминальные, GUI не наш путь, особенно при работе с большими файлами и файлами устройств.
ПРОБЛЕМА: Перестал у меня на ZX-EVO загружаться IS-DOS с винта (sdcard2hdd).
ЗАДАЧИ: снять образ с накопителя и подготовить новую карту для форматирования средствами iS-DOS.
Считываю устройство в файл:
sudo dd if=/dev/sde of=~/isdos_hdd.img bs=4M status=progress && sync
Теперь задача - найти в бинарном массиве содержимое текстовых файлов. К счастью в iS-DOS использовалась русская кодировка CP866. Выберем её нажав Alt-e в mcview из Midnigth Commander: mcview isdos_hdd.img Теперь можно там поискать что-то нужное.
Следующий шаг - подготовить новую sd карту, которую я потом буду форматировать внутри iS-DOS, изучать формат, и сравнивая с сохранённым образом пытаться понять, что там не понравилось системе, и почему она виснет при подключении к этому накопителю.
Первая задача - забить всю карту нулями, чтобы легче было отслеживать что и куда пишет iS-DOS при создании разделов. Сначала УБЕЖДАЕМСЯ, что /dev/sdd — это именно sd карта, а не ваш хомяк с ЦЕННЫМИ данными! sudo blkid lsblk sudo parted --list sudo parted /dev/sdd unit s p free
Теперь можно залить /dev/sdX нулями:
sudo dd bs=1024 if=/dev/zero of=/dev/sdd status=progress && sync
Мне для надёжности хотелось бы поискать на устройстве отличные от нуля значения, что очень пригодится потом при изучении активности в iS-DOS. Но пока не нашёл как это сделать. ( Буду рад подсказкам!) Могу только поискать конкретный байт в бинарном файле устройства: sudo grep -obUaP "\x02" /dev/sdd Если что-то найдёт - выведет. Искать можно как отдельные байты, так и последовательности.
А вот мне подсказали с костылём на баше. Выводит все 16-ти байтовые строки, если там есть не нулевое значение: sudo xxd -g 16 /dev/sde | grep -v $(for i in {1..16}; do echo -n "00"; done)
Эта утилита пропускает пустые нулевые строки, заменяя их *. Удобно для просмотра пустых устроств с малым наполнением. (Ключ -b вывод в десятичном виде) hexdump -v -C /mnt/Yuggoth/Data/Backs/isdos_hdd.img Можно не только выводить, но и искать по образцу:
unidump isdos_hdd.img | grep orton
Бинарные аналоги cat для текстовых файлов.
Я выбрал для себя xxd, потому что он работает и с файлами и с устройствами из /dev/. sudo xxd /dev/sdd sudo hexdump -v -C /dev/sdd # вариант, # и с ключом -b может выводить в десятичном виде.
А hexyl хоть и сразу цветной, но работает только с файлами, объекты типа /dev/sdX не разумеет: hexyl isdos_hdd.img
unidump тоже не может в /dev/ но и в цвете не может, совсем бесполезен.
Но всего лучше полноценный HEX редактор, поддерживает всё, и файлы и прямое редактирование устройств, можно даже в цвете:
ССЫЛКИ: - Дисковая операционная система iS-DOS на ZX-Spectrum
https://ru.wikipedia.org/wiki/IS-DOS
- Разбиение винчестера на большое количество устройств в операционных системах iS-DOS и TASiS
http://zxbyte.ru/isdos_hdd_partition_creating.htm - hexedit Linux man page
https://linux.die.net/man/1/hexedit - Поиск текста средствами grep
https://losst.ru/gerp-poisk-vnutri-fajlov-v-linux - Команда dd и все, что с ней связано
https://habr.com/ru/post/117050 - dd: Команда, которая не похожа на другие
http://rus-linux.net/lib.php?name=/MyLDP/consol/dd/dd-1.html
- What is the difference between 'bs', 'count' and 'seek' in dd command?
https://unix.stackexchange.com/questions/134299
|