Ein weiteres Problem fällt mir ein, bei dem cat
vs. cp
einen signifikanten Unterschied macht:
Per Definition erweitert cat spärliche Dateien und füllt die Lücken mit "echten" Null-Bytes, während cp zumindest angewiesen werden kann, die Löcher zu erhalten.
Sparse-Dateien sind Dateien, in denen Sequenzen von null Byte durch Metadaten ersetzt wurden, um Speicherplatz zu sparen. Sie können testen, indem Sie eine mit dd erstellen und mit den Tools Ihrer Wahl duplizieren.
Erstellen Sie eine Datei mit geringer Dichte (ändern Sie vorher zu / tmp, um Probleme zu vermeiden - siehe letzte Anmerkung):
15> cd /tmp
16> dd if=/dev/null of=sparsetest bs=512b seek=5
0+0 records in
0+0 records out
0 bytes (0 B) copied, 5.9256e-05 s, 0.0 kB/s
Größe es - es sollte keinen Platz nehmen.
17> du -sh sparsetest
0 sparsetest
kopiere es mit cp und überprüfe die Größe
18> cp sparsetest sparsecp
19> du -sh sparsecp
0 sparsecp
Kopieren Sie es jetzt mit Katze und überprüfen Sie die Größe
20> cat sparsetest > sparsecat
21> du -sh sparsecat
1.3M sparsecat
Probieren Sie Ihre bevorzugten Tools aus, um deren Verhalten zu überprüfen
Vergiss nicht aufzuräumen.
Letzte Warnung: Experimente wie diese haben die Chance, Ihren Ruhm bei Ihrem lokalen Systemadministrator zu steigern, wenn Sie sie auf einem Dateisystem ausführen, das Teil seines Sicherungsplans ist oder für das Wohlbefinden des Systems von entscheidender Bedeutung ist. Abhängig von seiner Wahl des Tools für die Sicherung benötigt er möglicherweise mehr Bandmedien, als er jemals für möglich gehalten hätte, um diese eine 0-Byte-Datei zu sichern, die auf Terabyte von Nullen erweitert wird.
Andere Dateien, die weder mit cat noch mit cp kopiert werden können, enthalten gerätespezifische Dateien usw. Es hängt von Ihrer Implementierung des Kopiertools ab, ob der Geräteknoten dupliziert werden kann oder ob er stattdessen seinen Inhalt fröhlich kopiert.
cp
wird eine Datei genau wie das Original erstellt, währendcat
eine neue Datei mit demselben Inhalt erstellt wird.cp
eine Option zur Steuerung des Verhaltens bei Dateien mit geringer Dichte. like, mit--sparse=never
in der Kommandozeile angegeben,cp
ist so langsam wiecat
.Laut Keith Kommentar ,
cp
bewahrt einige Berechtigungen, undcat
erstellt die neue Datei alsumask
angibt. So$2
ist die Erlaubnis nicht erhalten , die$4/vmlinuz
ziemlich sauber ist, während , wenn einige seltsame Erlaubnis gesetzt auf$3
,$4/System.map
wird diese halten.quelle
cat
Fasternität zuzuschreiben?cat
schneller?Beide haben in diesen beiden Fällen die gleiche Funktionalität, aber cp ist eine reine Dateioperation. "Nehmen Sie diese Datei und machen Sie dort eine Kopie davon".
cat hingegen soll den Inhalt einer Datei auf die Konsole übertragen. "Nehmen Sie diese Datei und zeigen Sie sie auf dem Bildschirm an" und lassen Sie dann einen Ninja den Bildschirm angreifen und die Ausgabe an eine andere Stelle umleiten.
cp wäre im Allgemeinen effizienter, da nur eine Umleitung stattfindet, sondern lediglich ein direktes Kopieren von Bytes von Position A nach Position B.
Katze wäre
read bytes -> output to console -> intercept output -> redirect to new file
.quelle
cat
nicht wirklichoutput to console -> intercept output -> redirect to new file
, die Ausgabedatei für cat kann stdout oder eine normale Datei sein, sie wird nur in die Datei ausgegeben, solange die Eingabe nicht mit der Ausgabe identisch ist.cat
hat nichts mit der Konsole zu tun. Beidescat
undcp
aus der Eingabedatei lesen und in die Ausgabedatei schreiben. Mitcat
wird die Ausgabedatei von der Shell geöffnet, während mitcp
die Ausgabedatei von geöffnet wirdcp
. Dies macht keinen Unterschied in der Leistung.cp
Möglicherweise schneller, aber aus einem ganz anderen Grund: Einige Implementierungencp
versuchen, die richtige Blockgröße für die Leistung in Abhängigkeit von den Quell- und Zielgeräten zu erraten. eine Implementierung voncat
würde nicht stören.Es ist wirklich eine Frage der Präferenz, IMHO.
Es gibt technisch gesehen keinen wirklichen Unterschied, es sei denn, Sie verwenden den Befehl cp mit dem Schalter -p, um den Dateieigentum / die Dateigruppe zu erhalten. Ansonsten ist es funktional dasselbe. Marc's Antwort ist jedoch viel klarer und genauer.
quelle
cp
ohne-p
behält einige Berechtigungen bei. Wenn die Quelldatei beispielsweise ausführbar ist,cp
wird die Zieldatei ausführbar, jedochcat
nicht.vmlinuz
wird nicht ausführbar sein, ob es$2
ist.