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!
Вы должны добавить /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
Есть /sbin
на вашем пути? Запустите echo $PATH
для проверки. Часто /sbin
является символической ссылкой на /usr/bin
, поэтому проверьте, есть ли она в пути. См. этот вопрос , чтобы узнать, как изменить путь.