Ich lese eine 550-MB-Datei in / dev / null und erhalte sie
dd: writing '/dev/null': No space left on device
Ich war überrascht. Ich dachte, / dev / null ist ein schwarzes Loch, in das Sie so viel senden können, wie Sie möchten (weil es ein virtuelles fs ist).
Ja, meine Festplatte ist fast voll, wenn ich diesen Fehler erhalte. Was kann ich tun, außer Inhalte von der Festplatte zu löschen?
ls -l /dev/null
-rw-r--r-- 1 root root 0 July 7 21:58 /dev/null
Anstatt
crw-rw-rw- 1 root root 1, 3 July 7 02:58 /dev/null
Befehl, den ich benutze:
time sh -c "dd if=$filename of=/dev/null"
ls -l /dev/null
/dev/null
sollte diesen Fehler niemals auslösen, da es nirgendwo etwas schreibt. Erhalten Sie den gleichen Effekt ohnetime
? Bitte posten Sie die Ausgabe vonstrace dd if=$filename of=/dev/null
(tun Sie dies mit einer Datei, die keine vertraulichen Informationen enthält ) oder von,strace dd if=$filename of=/dev/null
wenn diestime
erforderlich ist, um den Fehler auszulösen.Antworten:
/dev/null
ist eine spezielle Datei vom Typ Zeichengerät. Der Treiber für dieses Zeichengerät ignoriert alles, was Sie versuchen, auf das Gerät zu schreiben, und Schreibvorgänge sind immer erfolgreich. Wenn ein Schreibvorgang/dev/null
fehlschlägt, bedeutet dies, dass Sie es irgendwie geschafft haben, das richtige zu entfernen/dev/null
und durch eine reguläre Datei zu ersetzen. Sie haben möglicherweise versehentlich entfernt/dev/null
; dann hätte der nächste… >/dev/null
es als reguläre Datei neu erstellt.Führen Sie aus
ls -l /dev/null
und überprüfen Sie, ob die Linie ungefähr so aussiehtEs muss beginnen mit
crw-rw-rw-
:c
für ein Zeichengerät und Berechtigungen, mit denen jeder lesen und schreiben kann. Die Datei sollte im Besitz von root sein, obwohl dies nicht sehr wichtig ist. Die beiden Nummern nach dem Besitzer und der Gruppe identifizieren das Gerät ( Haupt- und Nebengerätenummer ). Oben zeige ich die Werte unter Linux; Unterschiedliche Unix-Varianten haben unterschiedliche Werte. Das Datum ist normalerweise entweder das Datum, an dem das System installiert wurde, oder das Datum des letzten Neustarts und spielt keine Rolle.Wenn Sie die Datei neu erstellen müssen, stellen einige Systeme
MAKEDEV
Befehle bereit, entweder im PATH von root oder in/dev
. Führen Siecd /dev; ./MAKEDEV std
oder so etwas aus, um die Standardgrundgeräte wie z/dev/null
. Oder erstellen Sie das Gerät manuell und geben Sie die richtigen Gerätenummern an. unter Linux ist das soquelle
/dev/null
unter bestimmten Umständen entfernt, vielleicht so etwas wietmp_file=$(mktemp); … … … if [ "$mode" = "quiet" ]; then tmp_file=/dev/null; done; … … … rm "$tmp_file"