Como escrever mensagens de status / resultado de dd para um arquivo?

1

Eu uso este comando dd para verificar a velocidade do disco:

dd if=/dev/zero of=/path/file bs=1G count=1 oflag=direct

que retorna algo assim:

1 oflag=direct
1+0 records in
1+0 records out
1073741824 bytes (1,1 GB, 1,0 GiB) copied, 8,52315 s, 126 MB/s

Agora eu gostaria de canalizar essa saída, não o arquivo dd está gravando, mas em um arquivo separado.

Eu tentei adicionar

>> /tmp/foo

ou

| sudo tee /tmp/foo

para o comando dd , mas isso cria um arquivo vazio.

    
por rookie_senior 30.01.2018 / 15:37

2 respostas

3

Para poder inserir dd em um pipeline antes ou depois de outro comando, suas mensagens informativas são gravadas em erro padrão em vez de na saída padrão.

O manual do OpenBSD para dd menciona isso explicitamente (mas o manual do Ubuntu parece omitir esse fato, mas o menciona na mais completa info page):

When finished, dd displays the number of complete and partial input and output blocks and truncated input records to the standard error output.

Para redirecionar o erro padrão de um comando, use 2>filename . Para anexar o fluxo de erro padrão a um arquivo já existente sem truncá-lo, use 2>>filename .

Por exemplo:

dd if=/dev/zero of=/path/file bs=1G count=1 oflag=direct 2>dd.txt

Observe que você mistura a saída anexada no primeiro dos seus exemplos (usando >> ) com a saída truncada no segundo exemplo (usando tee ). Para anexar a um arquivo com tee , use tee -a .

    
por 30.01.2018 / 15:58
2

dd output está realmente imprimindo para stderr não stdout

Você pode redirecionar stderr para um arquivo para o comando dd da seguinte forma:

$ dd if=/dev/zero of=/path/file bs=1G count=1 oflag=direct 2>> /path/to/file

    
por 30.01.2018 / 15:52