'ищите' аргумент в команде dd

Я не знаю об интерфейсах для удаленных соединений, но самый быстрый графический интерфейс имеют менеджеры окон, такие как Openbox или размещающие рядом менеджеры как i3, потрясающий, и т.д. Также можно попробовать xfce, но это - настольная среда, таким образом, это имеет намного больше материала и вероятно медленнее.

20
11.01.2014, 13:50
4 ответа

Другие ответы уже объяснили это, но если у Вас есть какие-либо сомнения, Вы видите что dd делает с strace.

$ strace dd if=/dev/urandom bs=4096 seek=7 count=2 of=file_with_holes
# output is shortened considerably
open("/dev/urandom", O_RDONLY)          = 0
open("file_with_holes", O_RDWR|O_CREAT, 0666) = 1
ftruncate(1, 28672)                     = 0
lseek(1, 28672, SEEK_CUR)               = 28672
read(0, "\244\212\222v\25\342\346\226\237\211\23\252\303\360\201\346@\351\6c.HF$Umt\362;E\233\261"..., 4096) = 4096
write(1, "\244\212\222v\25\342\346\226\237\211\23\252\303\360\201\346@\351\6c.HF$Umt\362;E\233\261"..., 4096) = 4096
read(0, "~\212q\224\256\241\277\344V\204\204h\312\25pw9\34\270WM\267\274~\236\313|{\v\6i\22"..., 4096) = 4096
write(1, "~\212q\224\256\241\277\344V\204\204h\312\25pw9\34\270WM\267\274~\236\313|{\v\6i\22"..., 4096) = 4096
close(0)                                = 0
close(1)                                = 0
write(2, "2+0 records in\n2+0 records out\n", 312+0 records in
2+0 records out
) = 31
write(2, "8192 bytes (8.2 kB) copied", 268192 bytes (8.2 kB) copied) = 26
write(2, ", 0.00104527 s, 7.8 MB/s\n", 25, 0.00104527 s, 7.8 MB/s
) = 25
+++ exited with 0 +++

Это открывается /dev/urandom для чтения (if=/dev/urandom), открывается file_with_holes для создают/пишут (of=file_with_holes).

Затем это усекает file_with_holes кому: 4096*7=28672 байты (bs=4096 seek=7). Усеченные средства, что содержание файла после того положения потеряно. (Добавьте conv=notrunc избегать этого шага). Затем это ищет на 28672 байты.

Затем это читает 4096 байты (bs=4096 используемый как ibs) от /dev/urandom, записи 4096 байты (bs=4096 используемый как obs) к file_with_holes, сопровождаемый другим чтением и записью (count=2).

Затем это закрывается /dev/urandom, завершения file_with_holes, и печать, которую это скопировало 2*4096 = 8192 байты. Наконец это выходит без ошибки (0).

6
27.01.2020, 19:44

dd разработан для копирования блоков данных от входного файла до выходного файла. dd опции размера блока следующим образом из страницы справочника:

ibs=expr
    Specify the input block size, in bytes, by expr (default is 512).
obs=expr
    Specify the output block size, in bytes, by expr (default is 512).
bs=expr
    Set both input and output block sizes to expr bytes, superseding ibs= and obs=.

dd seek опция подобна UNIX lseek() система call1. Это перемещает указатель чтения-записи в файле. Из страницы справочника:

seek=n
    Skip n blocks (using the specified output block size) from the beginning of the output file before copying. 

Обычные файлы в UNIX имеют удобное свойство, которое Вы не должны читать или писать им запускающийся вначале; можно искать где угодно и считать или записать запуск оттуда. Так bs=4096 seek=7 средства переместить в положение 7*4096 байтов с начала выходного файла и начать писать оттуда. Это не запишет в часть файла, который является между 0 и 7*4096 байтов.

Области обычных файлов, которые никогда не пишутся в вообще, даже не выделяются базовой файловой системой. Эти области называют дырами, и файлы называют редкими файлами. В Вашем примере, file_with_holes будет иметь 7*4096-byte дыра вначале. (h/t @frostschutz для указания на это dd усекает выходной файл по умолчанию.)

Нормально читать эти освобожденные области; Вы добираетесь, набор обнуляет.

[1] назад, когда dd был записан, аналогичный системный вызов был seek().

22
27.01.2020, 19:44
  • 1
    Интересный, моя страница справочника является раздражающе непредстоящей на этом - 'bs=BYTES чтение и запись до байтов БАЙТОВ за один раз' –  Graeme 11.01.2014, 16:02
  • 2
    , который я не видел, "ищет" на UNIX, Возможно, "lseek" я предполагаю. –  kangear 31.10.2014, 03:35
  • 3
    , который я не видел, "ищет" на UNIX, Возможно, "lseek" я предполагаю. –  kangear 31.10.2014, 03:35

obs выходной размер блока и ibs входной размер блока. Если Вы указываете bs без ibs или obs это используется для обоих.

Так Ваш искать будут 7 блоков 4096 или 28 672 байтов в начале Вашего вывода. Затем Вы скопируете 2 блока 4096 или 8 192 байтов от запуска входа к этой точке в выводе.

5
27.01.2020, 19:44

Ищите просто "расширит" выходной файл. Seek=7 означает, что в начале выходного файла, 7 "пустых" блоков с выходным блоком size=obs=4096bytes будут вставлены. Это - способ создать очень большие файлы быстро.

1
27.01.2020, 19:44
  • 1
    Или перескакивать через данные в запуске, который Вы не хотите изменять. Пустые блоки только заканчиваются, если выходной файл первоначально не имел так большого количества данных. Руководство является также не четким на как obs касается bs, использование команды bs который займет место obs если это не там. –  Graeme 11.01.2014, 14:10

Теги

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