In vielen Anwendungen werden kritische Abschnitte von Festplatten (z. B. MBR, Dateisystem-Inodes, Partitionsgrenzen usw.) ausgeblendet.
Welche anwendungen
Es ist keine Anwendungssache; Normalerweise befasst sich das Betriebssystem mit Dateisystemen und Festplattenpartitionierung.
Ist die Ausgabe von xxd ein echter Low-Level-Dump eines Geräts?
Mehr auf mittlerem Niveau, aber ja. Sie sehen die Rohdaten genau so, wie das Betriebssystem sie geschrieben hat, und genau so, wie das Betriebssystem sie zurücklesen wird. In den ersten 512 Bytes gibt es normalerweise einen MBR, in den nächsten Kilobytes ein GPT, und irgendwo in Sektor 63 (alt) oder 2048 (neu) werden die Dateisystemstrukturen der ersten Partition angezeigt.
Ein echtes Low- Level-Dump würde Daten bedeuten, wie sie vom Disk Controller geschrieben wurden: nicht nur die vom Betriebssystem lesbaren Bytes, sondern auch Verschleißdaten, SMART-Fehlerprotokolle, möglicherweise Verschlüsselungsschlüssel. Es ist jedoch für das Betriebssystem nicht sichtbar, und Sie können im Allgemeinen nicht direkt mit einem Programm darauf zugreifen - nur mit spezieller Hardware für die Datenwiederherstellung.
(Das heißt, einige Flash-Geräte sind eine Ausnahme; sie haben keine Festplatten-Firmware. Das Betriebssystem erledigt alles - z. B. verwaltet das Dateisystem jffs2 das Flash-Wear-Leveling auf Betriebssystemebene.)
Sehe ich alles byteweise auf dem Gerät?
Ja, Sie sehen es genauso wie ein Betriebssystem.
Da / dev / disk0 eindeutig Daten enthält, warum kann ich sie nicht als stdin-Stream verwenden?
Natürlich kannst du. In der Tat Sie haben es als Stream in Ihrem ersten Beispiel verwenden; Der einzige Unterschied besteht darin, dass im ersten Beispiel xxd
der Aufruf von open ("/ dev / disk0") erfolgte. inzwischen in Ihrem zweiten Beispiel, das wurde von der Shell getan ( sh
, bash
, zsh
).
Aber dieser Unterschied ist, was die Fehlermeldung verursacht. Aber es hat nichts damit zu tun, dass Sie versuchen, eine Platte zu lesen. Die "Erlaubnis verweigert" bedeutet wörtlich, dass Sie nicht öffnen können, /dev/disk0
da Sie dazu root sein müssen.
(Dies wurde beantwortet viele Male auf dieser Seite. Hier, hier, hier, hier, hier und hier .)
Um die vorherige Umleitung von stdin / stdout zu erweitern, geschieht dies, indem die Shell die Datei öffnet, bevor sie das Programm startet. Also in Ihrem ersten Beispiel sudo xxd /dev/disk0
verwendet zuerst sudo
laufen xxd /dev/disk0
mit Root - Rechten.
Wenn Sie jedoch ausführen sudo xxd < /dev/disk0
, wird die Umleitung < /dev/disk0
immer noch von Ihrer unprivilegierten Shell verarbeitet. sudo xxd
ist noch nicht gelaufen
Damit kann sudo sh -c "xxd < /dev/disk0"
der gesamte Befehl als root verarbeitet werden.