Como você parece basicamente entender, a primeira versão lê 1024 bytes, e depois grava quantos bytes retornam da leitura, enquanto a segunda versão faz 1024 leituras e escritas de um byte cada. Ao copiar arquivos comuns, o tamanho de bloco maior (resultando no menor número de E / Ss) pode ser um pouco mais eficiente. Isso provavelmente é verdade /dev/urandom
também.
Mas você precisa ter cuidado ao usar dd
arquivos especiais (ou seja, dispositivos). Por exemplo,
dd if = (qualquer entrada) de = (um dispositivo de fita magnética) bs = 1024 count = 1
irá escrever um bloco de fita de 1024 bytes;
dd … bs=1 count=1024
irá escrever 1024 blocos de um byte cada. Estes não são os mesmos; os 1024 blocos pequenos ocuparão mais espaço na fita do que o bloco grande, devido a intervalos entre registros, e podem causar problemas para a leitura da fita. Mais relevante para sua pergunta, se você ler ( if=
) /dev/random
, ele retornará apenas quantos bytes de entropia alta estiverem disponíveis. Então, na primeira versão, você pode ter menos de 1024 bytes. Mas, se você tentar ler um byte e o conjunto de entropia estiver vazio, a leitura será bloqueada (ou seja, aguardará) até que os dados estejam disponíveis, portanto a segunda versão garantirá 1024 bytes (embora possa demorar arbitrariamente) longo período de tempo).
Para ampliar o ponto sobre a unidade de fita:
dd if = (entrada apropriada) de = (um dispositivo de fita magnética) bs = 512 count = 2
vai escrever dois blocos de fita de 512 bytes. Um subseqüente
dd if = (dispositivo de fita magnética) de = (qualquer que seja) bs = 1024 count = 1
pode ler apenas o primeiro bloco; ou seja, os primeiros 512 bytes.
E os pipes (nomeados) podem exibir o mesmo problema que /dev/random
- uma leitura grande retornará apenas como bytes, conforme disponíveis; Então, novamente, na primeira versão, você pode ter menos de 1024 bytes. Mas, se você tentar ler um byte de cada vez, a leitura esperará até que os dados estejam disponíveis, então a segunda versão teria a garantia de obter 1024 bytes (ou pelo menos ler até EOF).