Many applications hide critical sections of disks (e.g. MBR, file system inodes, partition boundaries, etc).
Quais aplicativos?
Não é uma coisa de aplicativo; geralmente é o sistema operacional que lida com sistemas de arquivos e particionamento de disco.
Is the output from xxd a true low-level dump of a device?
Mais como nível médio , mas sim. Você está vendo os dados brutos exatamente como o sistema operacional os escreveu e exatamente como o sistema operacional os lerá de volta. Geralmente, há um MBR nos primeiros 512 bytes, geralmente um GPT nos próximos kilobytes e, em algum lugar no setor 63 (antigo) ou 2048 (novo), você verá as estruturas do sistema de arquivos da primeira partição.
Um dump de nível true low significaria dados como o controlador de disco o gravou: não apenas os bytes legíveis pelo SO, mas também dados de nivelamento de desgaste, falha SMART registros, talvez chaves de criptografia. Mas é invisível para o sistema operacional, e você geralmente não pode acessá-lo diretamente usando qualquer programa - apenas usando um hardware de recuperação de dados especializado.
(Dito isto, alguns dispositivos flash são uma exceção; eles não têm firmware de disco, o sistema operacional faz tudo - por exemplo, o sistema de arquivos jffs2 gerencia o nivelamento de desgaste do flash no nível do SO).
Am I seeing everything byte-by-byte on the device?
Sim, você está vendo da mesma maneira que um sistema operacional o vê.
As /dev/disk0 clearly contains data, why can I not use it as a stdin stream?
Claro que você pode. De fato você fez usá-lo como um fluxo em seu primeiro exemplo; a única diferença é que no primeiro exemplo xxd
era o que chamava open ("/ dev / disk0"); Enquanto isso, no seu segundo exemplo que foi feito pelo seu shell ( sh
, bash
, zsh
).
Mas essa diferença é o que causa a mensagem de erro. Mas não tem nada a ver com você tentando ler um disco; a "Permissão negada" significa literalmente que você não pode abrir /dev/disk0
porque você deve ser root para fazer isso.
(Isto foi respondido muitas vezes neste site. Aqui , aqui , aqui , aqui , aqui e aqui .
Para expandir o anterior, o redirecionamento stdin / stdout acontece com o shell abrindo o arquivo antes de iniciar o programa. Portanto, em seu primeiro exemplo, sudo xxd /dev/disk0
primeiro usa sudo
para executar xxd /dev/disk0
com privilégios de root.
Mas quando você executa sudo xxd < /dev/disk0
, o redirecionamento < /dev/disk0
ainda é processado pelo seu shell unprivileged ; sudo xxd
ainda não foi executado.
Use sudo sh -c "xxd < /dev/disk0"
para que o comando inteiro seja processado como root.