In einem Tutorial überPublic-Key-InfrastrukturDer Autor richtet eine Datenbank ein, mit der er beim Einrichten einesStammzertifizierungsstelle:
cp /dev/null ca/root-ca/db/root-ca.db
cp /dev/null ca/root-ca/db/root-ca.db.attr
echo 01 > ca/root-ca/db/root-ca.crt.srl
echo 01 > ca/root-ca/db/root-ca.crl.srl
Ich weiß, /dev/null
dass es sich um eine spezielle Datei handelt, die nichts enthält und nirgendwo ausgedruckt wird, wenn Sie echo
sie öffnen.
Es scheint, als ob der Autor genau das versucht, deshalb habe ich zum Testen ein kleines Beispiel erstellt:
$ ls
$ touch foo
$ cp /dev/null bar
$ cat /dev/null > baz
$ ls
bar baz foo
$ ls -l
total 0
-rw-r--r-- 1 mbigras 1264914557 0 Apr 14 14:35 bar
-rw-r--r-- 1 mbigras 1264914557 0 Apr 14 14:35 baz
-rw-r--r-- 1 mbigras 1264914557 0 Apr 14 14:35 foo
- Angenommen, wir haben ein leeres Verzeichnis, gibt es irgendeinen Unterschied zwischen den Dateien
foo
,bar
, oderbaz
? - Besteht der Sinn von
cp
ing from/dev/null
lediglich darin, eine Datei einzurichten, von der wir wissen, dass sie leer ist?
Antwort1
Das Ergebnis ist alles dieselbe leere Datei.
Könnte sogar einfach verwenden >baz2
. Meiner Meinung nach etwas eleganter, da es nicht auf /dev/null
die Anwesenheit angewiesen ist und keine zusätzlichen Befehle/Prozesse aufgerufen werden müssen.
Bedenken Sie touch
, dass im Gegensatz zu das Ergebnis von >baz2
eine leere Datei ist, auch wenn baz2
es bereits vorhanden ist und Inhalt hat.
$ touch foo
$ cp /dev/null bar
$ cat /dev/null >baz
$ >baz2
$ ls -l
total 0
-rw-rw-r-- 1 ec2-user ec2-user 0 Apr 14 21:40 bar
-rw-rw-r-- 1 ec2-user ec2-user 0 Apr 14 21:40 baz
-rw-rw-r-- 1 ec2-user ec2-user 0 Apr 14 21:40 baz2
-rw-rw-r-- 1 ec2-user ec2-user 0 Apr 14 21:39 foo
$
Antwort2
Der Unterschied besteht darin, was passiert, wenn die Datei bereits vorhanden ist und Inhalt hat:
Hier ist beispielsweise eine Datei mit Inhalt:
$ ls -l ca/root-ca/db/root-ca.db
-rw-r--r-- 1 sweh sweh 6 Apr 14 18:06 ca/root-ca/db/root-ca.db
$ touch ca/root-ca/db/root-ca.db
$ ls -l ca/root-ca/db/root-ca.db
-rw-r--r-- 1 sweh sweh 6 Apr 14 18:06 ca/root-ca/db/root-ca.db
$ cp /dev/null ca/root-ca/db/root-ca.db
$ ls -l ca/root-ca/db/root-ca.db
-rw-r--r-- 1 sweh sweh 0 Apr 14 18:06 ca/root-ca/db/root-ca.db
Wir können sehen, dass der touch
Befehl die Datei nicht geleert hat, aber das cp
hat er getan.
Normalerweise :
kann stattdessen der folgende Befehl verwendet werden:
: > ca/root-ca/db/root-ca.db
z.B
$ ls -l ca/root-ca/db/root-ca.db
-rw-r--r-- 1 sweh sweh 6 Apr 14 18:08 ca/root-ca/db/root-ca.db
$ : > ca/root-ca/db/root-ca.db
$ ls -l ca/root-ca/db/root-ca.db
-rw-r--r-- 1 sweh sweh 0 Apr 14 18:08 ca/root-ca/db/root-ca.db
In Schulungsunterlagen und Kursarbeiten kann dies jedoch schwerer zu lesen sein, es könnte ein Tippfehler oder Ähnliches sein. Manchmal ist es besser, eine längere Befehlszeichenfolge zu verwenden :-)