GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Dd Vs Cat – Ist Dd heutzutage noch relevant?

Ich habe kürzlich festgestellt, dass wir cat verwenden können so viel wie dd , und es ist tatsächlich schneller als dd

Ich kenne das dd war nützlich im Umgang mit Bändern, bei denen die Blockgröße tatsächlich für die Korrektheit von Bedeutung war, nicht nur für die Leistung. Heutzutage gibt es jedoch Situationen, in denen dd etwas tun kann cat kippen? (Hier würde ich einen Leistungsunterschied von weniger als 20 % als irrelevant ansehen.)

Konkrete Beispiele wären schön!

Akzeptierte Antwort:

Im Aussehen dd ist ein Tool eines IBM-Betriebssystems, das sein fremdes Erscheinungsbild (seine Parameterübergabe) beibehalten hat und einige sehr selten verwendete Funktionen ausführt (wie EBCDIC-zu-ASCII-Konvertierungen oder Endianness-Umkehrung ... heutzutage nicht mehr üblich).

Früher dachte ich, dass dd war schneller beim Kopieren großer Datenblöcke auf dieselbe Festplatte (aufgrund der effizienteren Nutzung der Pufferung), aber das stimmt nicht, zumindest nicht auf den heutigen Linux-Systemen.

Ich denke einige von dd Die Optionen sind nützlich, wenn es um Bänder geht, wo das Lesen wirklich in Blöcken erfolgt (Bandtreiber verstecken die Blöcke auf dem Speichermedium nicht wie Plattentreiber). Aber ich kenne die Einzelheiten nicht.

Eine Sache dd kann, was von keinem anderen POSIX-Tool (leicht) getan werden kann, nimmt die ersten N Bytes eines Baches. Viele Systeme können dies mit head -c 42 tun , aber head -c , ist zwar üblich, aber nicht in POSIX enthalten (und ist heute z. B. nicht auf OpenBSD verfügbar). (tail -c ist POSIX.) Auch wo head -c vorhanden ist, liest es möglicherweise zu viele Bytes aus der Quelle (weil es intern stdio-Pufferung verwendet), was ein Problem darstellt, wenn Sie aus einer speziellen Datei lesen, bei der nur das Lesen eine Auswirkung hat. (Aktuelle GNU Coreutils lesen die genaue Anzahl mit head -c , aber FreeBSD und NetBSD verwenden stdio.)

Allgemeiner, dd bietet eine Schnittstelle zur zugrunde liegenden Datei-API, die unter Unix-Tools einzigartig ist:nur dd kann überschreiben oder abschneiden eine Datei jederzeit oder suchen in einer Datei. (Dies ist dd ‘s einzigartige Fähigkeit, und es ist eine große; seltsamerweise dd ist am besten für Dinge bekannt, die andere Tools können.)

  • Die meisten Unix-Tools überschreiben ihre Ausgabedatei, d.h. löschen ihren Inhalt und starten sie von vorne. Das passiert, wenn Sie > verwenden Umleitung auch in der Shell.
  • Sie können mit >> an den Inhalt einer Datei anhängen Umleitung in der Shell oder mit tee -a .
  • Wenn Sie eine Datei kürzen möchten, indem Sie alle Daten nach einer bestimmten Stelle entfernen , wird dies vom zugrunde liegenden Kernel und der C-API durch truncate unterstützt Funktion, aber von keinem Befehlszeilentool außer dd verfügbar gemacht :

    dd if=/dev/null of=/file/to/truncate seek=1 bs=123456  # truncate file to 123456 bytes
    
  • Wenn Sie Daten in der Mitte einer Datei überschreiben möchten, ist dies wiederum in der zugrunde liegenden API möglich, indem Sie die Datei zum Schreiben ohne Abschneiden öffnen (und lseek aufrufen um ggf. an die gewünschte Position zu springen), sondern nur dd kann eine Datei ohne Abschneiden oder Anhängen öffnen oder von der Shell aus suchen (komplexeres Beispiel).

    # zero out the second kB block in the file (i.e. bytes 1024 to 2047)
    dd if=/dev/zero of=/path/to/file bs=1024 seek=1 count=1 conv=notrunc
    

Also… Als Systemtool dd ist ziemlich nutzlos. Als Text- (oder Binärdatei-) Verarbeitungstool ist es sehr wertvoll!

Verwandte:Anzahl der Tage bis zur Zahlung berechnen?
Linux
  1. 14 Nützliche „cat“-Befehlsbeispiele in Linux

  2. Wie kate <<EOF >> eine Datei, die Code enthält?

  3. Vorteile der Cat'ing-Datei und der Weiterleitung an grep

  4. Linux-Befehl, um eine Datei n-mal mit sich selbst zu verketten

  5. Ordnungsgemäßes Löschen von Dateien, die älter als 30 Tage sind

16 Beispiele für schnelle Cat-Befehle unter Linux

Cat-Befehl unter Linux

10 Beispiele für Linux-Cat-Befehle für Anfänger

Verwenden des Cat-Befehls unter Linux mit Beispielen

Linux cat-Befehlsbeispiele

Ist mv mit Wildcard noch atomar