bash: fdisk: команда не найдена

I would like to simply read the binary of a file as the computer reads it …

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

Обычно двоичные данные редактируются в шестнадцатеричном формате с помощью шестнадцатеричного редактора. Шестнадцатеричный используется потому, что он проще для людей (намного короче ), но все же имеет прямое соответствие битам; каждый «полубайт» шестнадцатеричного (0 -9a -f )представляет ровно 4 бита. Традиционным способом отображения этого является xxd; он показывает вам практически все, что вам нужно, чтобы понять двоичный файл, который вы редактируете :слева, где вы находитесь в файле (по смещению ); справа, что это такое, если текст (достаточно распространен в бинарных файлах ); а в середине необработанные двоичные данные (, представленные в шестнадцатеричном формате ). xxdделает то же самое для своего двоичного режима, только используя биты вместо шестнадцатеричного.

Если вы действительно хотите отсечь эту полезную информацию, xxdимеет опцию для шестнадцатеричного режима (-p), но не для двоичного режима. Вы можете просто использовать cut, хотя:

$ echo 'Hello, world'  | xxd  -b | cut -c 11-63
01001000 01100101 01101100 01101100 01101111 00101100
00100000 01110111 01101111 01110010 01101100 01100100
00001010                 

Или, если вы действительно не хотите форматирования, что-то вроде:

perl -nE 'print unpack("B*", $_); END { print "\n"; }'

(перевернуто наperl -nE 'print pack("B*", $_);')

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

BTW :Ваш двоичный файл → текстовый редактор → двоичный файл легко в шестнадцатеричном режиме; xxd -rделает это. Приведенные выше фрагменты Perl сделают это для двоичного кода :

.
$ echo 'Hello, world!' | perl -nE 'print unpack("B*", $_); END { print "\n"; }' | tee /dev/stderr | perl -nE 'print pack("B*", $_);'
0100100001100101011011000110110001101111001011000010000001110111011011110111001001101100011001000010000100001010
Hello, world!

Я поместил туда tee, чтобы показать, какие биты передаются между ними — обратите внимание, насколько это совершенно непонятно по сравнению сxxd:

$ echo 'Hello, world!' | xxd | tee /dev/stderr | xxd -r
00000000: 4865 6c6c 6f2c 2077 6f72 6c64 210a       Hello, world!.
Hello, world!
1
31.03.2020, 12:45
2 ответа

Вы должны добавить /sbinк вашему PATH:

vagrant@stretch:~$ PATH="/sbin:$PATH"
vagrant@stretch:~$ command -v fdisk
/sbin/fdisk

И используйте fdiskс sudo:

vagrant@stretch:~$ sudo fdisk  -l
Disk /dev/sda: 19.8 GiB, 21265121280 bytes, 41533440 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xa0fd0b1a

Device     Boot    Start      End  Sectors  Size Id Type
/dev/sda1  *        2048 39438335 39436288 18.8G 83 Linux
/dev/sda2       39440382 41531391  2091010 1021M  5 Extended
/dev/sda5       39440384 41531391  2091008 1021M 82 Linux swap / Solaris
3
19.03.2021, 02:31

Есть /sbinна вашем пути? Запустите echo $PATHдля проверки. Часто /sbinявляется символической ссылкой на /usr/bin, поэтому проверьте, есть ли она в пути. См. этот вопрос , чтобы узнать, как изменить путь.

1
19.03.2021, 02:31

Теги

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