dd с obs и seek создает файл неожиданного размера

Это то, что в итоге сработало для меня с использованием tmux 2.2 и установкой xclip. Для копирования в стиле Vim добавьте следующее в .tmux.conf

bind Escape copy-mode
bind -t vi-copy 'v' begin-selection
bind -t vi-copy 'y' copy-selection
# Vim style copy to clipboard
bind-key -t vi-copy y copy-pipe "xclip -selection c > /dev/null"
bind-key p run "xclip -o -sel clip | tmux load-buffer - ; tmux paste-buffer"

Здесь, когда в режиме копирования, PREFIX v начинает выделение, а PREFIX y копирует в буфер обмена. PREFIX p можно использовать для вставки в терминал.

6
29.03.2017, 03:33
2 ответа

На странице POSIX указано:

ibs = expr

Укажите размер входного блока в байтах по выражению (по умолчанию 512).

obs = expr

Укажите размер выходного блока в байтах по expr (по умолчанию 512).

bs = expr

Установить размеры входных и выходных блоков равными байтам expr, заменяя ibs = и obs = . Если не указано иное преобразование, кроме sync, noerror и notrunc, каждый входной блок должен копироваться в выходной как единый блок без агрегирования коротких блоков.

Linux dd работает точно так же. Таким образом, используйте вместо ibs :

dd if=/dev/zero of=./foo count=1 ibs=1 obs=9 seek=1
7
27.01.2020, 20:22

Ваша команда dd if = / dev / zero of =. / Foo count = 1 bs = 1 obs = 9 seek = 1 создает двухбайтовую файл, а не 10-байтовый файл из-за плохо определенного взаимодействия между bs и obs .(Назовите это программной ошибкой, если хотите, но ее, вероятно, лучше определить как ошибку документации.) Вы должны использовать либо bs , либо ibs и obs. .

Эмпирически выяснилось, что bs переопределяет obs , поэтому выполняется dd if = / dev / zero of =. / Foo count = 1 bs = 1 seek = 1 , который создает двухбайтовый файл, как вы видели.

Если бы вы использовали dd if = / dev / zero of =. / Foo count = 1 ibs = 1 obs = 9 seek = 1 , вы бы получили 10-байтовый файл, как и ожидалось.

В качестве альтернативы, если вы хотите создать пустой файл, который не занимает места для данных на диске, вы можете использовать неожиданно названную команду truncate :

truncate --size=10 foo
9
27.01.2020, 20:22

Теги

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