Если вам известен какой-либо другой не -пустой файл в системе, то с помощью POSIXsed
:
sed -e 's/.*/hello world/' -e 'wtarget' -e q otherfile
С GNU sed
и вашим собственным не -пустым файлом вы можете использовать:
sed -i.bak -e '$ihello world' -e 'd' foo
В BSD sed
это будет работать вместо этого:
sed -i.bak -e '$i\
hello world' -e d foo
Если вы не используете оболочку, вероятно, разрыв строки не является проблемой.
С ex
, если целевой файл существует:
ex -c '0,$d' -c 's/^/hello world/' -c 'x' foo
Это просто удаляет все в файле, заменяет первую строку на «hello world», затем записывает и завершает работу. Вы можете сделать то же самое с vi
вместо ex
. Реализации не обязаны поддерживать несколько опций -c
, но обычно поддерживают. Для многих ex
реализаций требование о том, что файл уже существует, не применяется.
Также сawk
:
awk -v FN=foo -v STR="hello world" 'BEGIN{printf(STR) > FN }'
запишет "hello world" в файл "foo".
Если существуют файлы, содержащие нужные вам байты в известных местах,вы можете собрать файл байт за байтом с помощью нескольких команд с помощью dd
(, в этом случае alphabet
содержит алфавит, но это может быть смесь входных файлов):
dd if=alphabet bs=1 skip=7 count=1 of=test
dd if=alphabet bs=1 skip=4 count=1 seek=1 of=test
dd if=alphabet bs=1 skip=11 count=1 seek=2 of=test
dd if=alphabet bs=1 skip=11 count=1 seek=3 of=test
dd if=alphabet bs=1 skip=14 count=1 seek=4 of=test
cat test
hello
После этого будет работать обычный cp
, или вы могли бы поместить его в место -для начала.
Реже, команда mispipe
из moreutils позволяет построить оболочку -свободный канал:
mispipe "echo 1" "tee wtarget"
эквивалентен echo 1 | tee wtarget
, но возвращает код выхода echo
. Это использует функцию system()
внутри, которая не строго требует существования оболочки.
Наконец, perl
является общей командой и позволяет вам писать произвольные программы, которые делают все, что вы хотите, в командной строке, как и python
или любой другой распространенный язык сценариев. Точно так же, если оболочка просто не "запущена", но существует, sh -c 'echo 1 > target'
будет работать нормально.
(Я сошлюсь на последнюю версию документации по протоколу загрузки , документ, на который вы смотрели, устарел.)
Реальный загрузочный сектор ядра режима -и код установки являются частью ядра; см. раздел 1.2 . Они живут между X и X +0x08000.
Ядро защищенного -режима загружается по адресу 0x100000, это первый элемент в таблице выше.