LINUX.ORG.RU

hexedit с выбором русской кодировки - есть ли такое?

 


0

2

Понадобилось отредактировать образ слетевшего жёсткого диска в формате is-dos одного zx spectrum - совместимого ретрокомпьютера…

Образ - 4Гб. Где-то там лежат нужные мне текстовые файлы, предположительно в 866 кодировке, или ещё в чём похуже. Навскидку не припомню, какой кодировки придерживались в ikrasoft. Мне нужно либо вытащить свои конфиги, либо по байтам исправить испорченный какой-то свиньёй boot, чтобы смочь загрузиться нормальным образом.

Пока хочу просто вытащить тексты на русском, но файл большой, и сложно в нём навигационировать. Хочется видеть прямо в консоли текст в нужно кодировке. Желательно с переключением текстового вывода на всю ширину экрана.

Можно ли как-то указать кодировку hexeditу, чтобы он вместо точек показывал русские буквы заданной кодировки? Также важна максимальная ширина для текстовой колонки, если это возможно.

Гуёвые проги не переваривают или дико тормозят на файлах свыше 2Гб. Да и не хочется покидать консоль. Перебрал кучу консольного софта: hexdump -v -C, unidump, xxd, hexyl. Лучше всего себя показал hexedit. Но далеко не самый удобный для больших файлов. И не показывает символы в заданной кодировке. Ещё бы хотелось дял удобства считывания цветовой шахматки на байтах.

Да, сачкануть вот так: cat isdos_hdd.img | iconv -c -t CP866 не поулчилось, iconv перед выводом сначала всё перекодировывает, а потом уже выводит, а не потоково, а файл слишком огромный, чтобы столько ждать.

Хочется видеть прямо в консоли текст в нужно кодировке. Желательно с переключением текстового вывода на всю ширину экрана

А просто mc и его mcview с Alt-e не подойдёт на посмотреть?

Toxo2 ★★ ()

Да, сачкануть вот так: cat isdos_hdd.img | iconv -c -t CP866 не поулчилось, iconv перед выводом сначала всё перекодировывает, а потом уже выводит

Да. За это авторам iconv конкретно по щам надавать бы не мешало. Но пользовать head и tail никто не запрещал:

head -c 1000000 isdos_hdd.img | tail -c 50000 | iconv -c -f CP866
anonymous ()

Да, сачкануть вот так: cat isdos_hdd.img | iconv -c -t CP866 не поулчилось, iconv перед выводом сначала всё перекодировывает, а потом уже выводит, а не потоково, а файл слишком огромный, чтобы столько ждать.

А еще можно по приколу установить шрифты c кодировкой DOS. И запустить консольный просмотрщик в терминале. :)

Я тут проверил. Устанавливаем xfonts-terminus-dos и запускаем терминал:

$  xterm -fn terminus-dos-cp866-bold-18 -k8 +u8 

В открывшемся терминале фигачим досовский документ из Лексикона cat FILELIST.DOC - и все ок.

Zubok ★★★★★ ()
Ответ на: комментарий от Zubok

решение интересное, но есть ряд нюансов:
xterm у меня почему-то с дурацким белым фоном, с него читается очень тяжело.
не работает копипаста ^C ^V ПКМ тоже.
И русских букв не видно всё равно вместо них точки.

hikikomori ★★★ ()
Ответ на: комментарий от anonymous

Да, любопытный ход конём) Как артиллеристу придется вычислять квадрат цели)

hikikomori ★★★ ()
Ответ на: комментарий от hikikomori
xterm -fn terminus-dos-cp866-bold-18 -k8 +u8 -bg black -fg white

И русских букв не видно всё равно вместо них точки.

А это странно. А ты уверен, что у тебя там русские буквы в этой кодировке? Ты cat смотришь или less? Чем ты смотришь?

Zubok ★★★★★ ()
Ответ на: комментарий от hikikomori

Если ты шрифты поставил, то их надо в X-сервер загрузить. Он их не видит. Наверняка должен написать, что шрифта не видит. xset fp rehash сделай после установки шрифтов. А у тебя какой дистрибутив?

Zubok ★★★★★ ()
Ответ на: комментарий от hikikomori

Через mc и его mcview с Alt-e всё показывает по-русски.

Но это в обычном терминале с utf-8, я так понимаю. Ну так если устраивает, то и ок. Я написал вариант для просмотра при помощи cat, как ты делал.

Zubok ★★★★★ ()
Ответ на: комментарий от Zubok

Я ничего не ставил, просто запустил из-под своего терминала xterm -fn terminus-dos-cp866-bold-18 -k8 +u8 &
запустилось без ошибок и в новом своём окне открылось.

У меня manjaro kde. Пакета terminus-dos* нет.

hikikomori ★★★ ()
Ответ на: комментарий от hikikomori

Это что сейчас было, снобизм Знайки?

Нет. Но просто я увидел твой уровень и понял, что очень сложно будет тебе объяснить. Если тебе это все пригодится и ты захочешь попробовать, то надо эти шрифты взять где-то (можно пакет debian распаковать и вытащить оттуда, можно еще где-то поискать). Эти шрифты надо положить в каталог, где иксы их будут искать. Далее, если ты вручную это делаешь, то надо сделать mkfontdir, mkfontscale и xset fp rehash. И если ты все это сделаешь правильно, то в выводе xlsfonts они будут. И вот тогда пробуй. Я не очень надеюсь, что ты сумеешь это сделать. Если же пакет есть в Бомжаре или в Arch, то поискать.

Кое-где может понадобиться еще локаль ru_RU.CP866, но для cat в терминале не потребуется.

Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от Zubok

Это что сейчас было, снобизм Знайки?

просто я увидел твой уровень

Снобизм Знайки и есть.
Я глянул в AUR и не стал искать во всём мире. Это не показывает уровень. Не надо фантазировать.

в каталог, где иксы их будут искать.

В теории мы все умные, а на практике в каждом дистро свой гемморой и разные пути. И ваши советы со стороны Debian врядли подойдут на стороне Arch.

Далее, если ты вручную это делаешь, то надо сделать mkfontdir, mkfontscale и xset fp rehash. И если ты все это сделаешь правильно, то в выводе xlsfonts они будут. И вот тогда пробуй. Я не очень надеюсь, что ты сумеешь это сделать. Если же пакет есть в Бомжаре или в Arch, то поискать.

Спасибо, любопытная информация, но в нашем «бомжатнике» нет xlsfonts.

hikikomori ★★★ ()
Последнее исправление: hikikomori (всего исправлений: 2)
Ответ на: комментарий от LINUX-ORG-RU

Я тоже об этом думал, но как, не представляю себе. Это было бы очешуенным решением по обмену файлами между системами путём простого перетыкания sdcard! Но там довольно своеобразная FS…

Вот пример инструкции, как там винты вообще разбиваются на разделы: http://zxbyte.ru/isdos_hdd_partition_creating.htm

Если бы кто взялся написать драйвер для mount такой FS, я бы задонатил, ибо сам не спец в низкоуровневом програмировании дров под линукс.

hikikomori ★★★ ()
Ответ на: комментарий от LINUX-ORG-RU

А натравить foremost на этот образ никак?

Пусть только резервную копию образа сделает еще раз, а то накуралесит.

hikikomoriНу, кстати интересно. Как ты этот образ снял? А пробовал его монтировать? Что говорит?

Вот пример инструкции, как там винты вообще разбиваются на разделы: http://zxbyte.ru/isdos_hdd_partition_creating.htm

У-у-у, ты бы сразу сказал, что там такая своеобразная хрень.

Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 2)
Ответ на: комментарий от Zubok

А как снимают образы?

sudo dd bs=4M if=/dev/sde of=~/isdos_hdd.img status=progress && sync 

Монтировать образ даже не пробовал. Он же не стандартный, с msdos несовместим.

У-у-у, ты бы сразу сказал, что там такая своеобразная хрень.

Я же в первой строчке темы об этом написал.

образ слетевшего жёсткого диска в формате is-dos одного zx spectrum - совместимого ретрокомпьютера…

hikikomori ★★★ ()
Последнее исправление: hikikomori (всего исправлений: 1)
Ответ на: комментарий от hikikomori

Монтировать образ даже не пробовал. Он же не стандартный, с msdos несовместим.

Да уже ясно, что нестандартный. Может, можно починить? Описание наверняка где-то есть. И мне кажется, что это как раз тебе пока не потребует 866. Наверняка там не очень сложная структура.

Zubok ★★★★★ ()
Ответ на: комментарий от Zubok

По описанию действовал, не помогает, проще переформатировать заново, и вытащить инфу. И да, очень жаль, что никто не написал дров этой системы под линукс, а то удобство пользования бы зашкаливало. Я бы все исходники на ассемблере писал бы в vim, затем umount, перетык карты в спектрум, и вуаля без возни с конвертерами и дискеттами.

hikikomori ★★★ ()
Ответ на: комментарий от hikikomori

По описанию действовал, не помогает, проще переформатировать заново, и вытащить инфу.

Я вижу это все в первый раз. пробежал глазами очень быстро. Я так понял, что в этом образе первый мегабайт - служебный. Он содержит загрузчик (бог с ним) и таблицу устройств (это затёрто как раз?). А устройства сами по 16 Мб, правильно? Друг за другом идут. Ты помнишь, сколько их было и какие размеры? Я чисто в потолок говорю: а если создать новый образ с таким же числом устройств и размером, а потом на резервной копии скопировать заголовок 1 Мб на запоротый образ?

Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от hikikomori

Форемост ищет данные по эвристикам, ему плевать что ты суёшь, образ диска или кусок видеофайла он будет искать в потоке байт признаки файлов. Хотя текстовые файлы это хрень своеобразная.

LINUX-ORG-RU ★★★★ ()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от Zubok

Я экспериментировал сколичеством, чтобы циклично подключаться к разным (кол-во одновременных подключений ограничено) , поэтому нет, не помню уже.

Но я тоже думал, сперва освежить в памяти структуру, затем забить карту через dd нулями для чистоты эксперимента, затем создать устройства примерно того же формата, и сравнить по содержимому участки с описанием FS: colordiff <(unidump FILE!) <(unidump FILE2)

hikikomori ★★★ ()
Последнее исправление: hikikomori (всего исправлений: 1)
Ответ на: комментарий от hikikomori

Я экспериментировал сколичеством, чтобы циклично подключаться к разным (кол-во одновременных ограничено) , поэтому нет, не помню уже.

Наверняка у них есть признак начала какой-то. Надо создать новый образ с разделами и посмотреть, есть ли какая-то сигнатура в начале и в конце этих разделов. И потом тогда поискать на запоротом диске такие сигнатуры. Тогда можно восстановить их размещение и размер. Затем можно создать новый образ с таким же и скопировать заголовок.

Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от Zubok

сигнатура в начале и в конце этих разделов.

Нахрена?! Границы разделов в таблице прописываются. Сигнатуры здесь ни к чему.

anonymous ()
Ответ на: комментарий от anonymous

Нахрена?! Границы разделов в таблице прописываются. Сигнатуры здесь ни к чему.

Так у него таблица, как я понимаю, запорота в первом мегабайте она с загрузчиком.

Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 1)

К слову, можно сделать финт коленом об ребро. Если у тебя много памяти на пк и ты знаешь кодировку. То я не знаю возьми например любой текстовый редактор уснанови в нём кодировку переименуй образ как txt и открой его. Текстовый редактор должен уметь большие фалы но что важнее он должен уметь отображать кривые символы вместе с нормальными. Например если я скомпилирую

char * hello = "Привет мир я utf8";

переименую бинарник в a.txt и открою в каком нибудь gedit он мне покажет https://ibb.co/pLgrrzp . vim тоже так умеет. И гигабайтные фалы жрать может 100%

Конечно идея тупая, но тут всё дело в мощи ПК доступной памяти и ваще =)

LINUX-ORG-RU ★★★★ ()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

переименую бинарник в a.txt и открою в каком нибудь gedit

А не логичнее через strins пропустить?

anonymous ()
Ответ на: комментарий от anonymous

Из скомпиленого бинарника он показывает только ASCII текст

LINUX-ORG-RU ★★★★ ()
Ответ на: комментарий от hikikomori

Может, у тебя только загрузчик запоролся, а таблицы живы? Это тоже надо проверить. Но я не знаю, где он. Лучше всего, если соберешься именно попробовать починить, создавать новый образ с загрузчиком и пустым разбиением (если там можно) и смотреть, куда он записывается, а потом посмотреть, где таблицы начинаются.

http://zxbyte.ru/pic/isdos/isdos13.gif

Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от Zubok

Я пробовал грузиться с дискетты, и маунтить переставший грузиться винт - при этом виснет. Значит запорот не только загрузчик, но и что-то в таблицах разделов.

hikikomori ★★★ ()
Ответ на: комментарий от anonymous

Он и так это понял =) Это как ему удобнее магнитку дать или торент файлик на свой сервер внешний кинуть

LINUX-ORG-RU ★★★★ ()

А testdisk не увидит там разлелов? Он разные таблицы умеет
Есть ещё binwalk
Подцепить образ в эмулятор с работающей системой не вариант?

mittorn ★★★★★ ()
Ответ на: комментарий от Zubok

А вот странно, не получается затереть sd карту нулями. ЧЯДНТ?

sudo dd bs=4M if=/dev/null of=/dev/sde status=progress && sync 
0+0 записей получено
0+0 записей отправлено
0 байт скопировано, 0,00218306 s, 0,0 kB/s

размонтировал, рычажка защиты записи нет, разделы удаляются, но dd забивать нулями из /dev/null не хочет. Как-то это связано с плавающей точкой думаю, поскольку из /dev/random забивается на ура… Мне кажется такое поведение ошибочным. /dev/null это нули. Где мои чёртовы нули, линукс?! Придется городить файл с нулями и забивать им?

hikikomori ★★★ ()
Последнее исправление: hikikomori (всего исправлений: 1)
Ответ на: комментарий от hikikomori

Ладно, неправильный подход, вместо /null нужно /zero, но с ним другая ошибка:

time sudo dd bs=4M if=/dev/zero of=/dev/sde status=progress && sync 
dd: ошибка записи '/dev/sde': На устройстве не осталось свободного места
hikikomori ★★★ ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.