Wenn Sie eine Anwendung konfigurieren, können Sie diese häufig /dev/null
als Konfigurationsdatei verwenden, wenn die Anwendung eine leere Datei lesen soll. Wenn die Anwendung jedoch eine Liste von Dateien aus einem Verzeichnis liest, können Sie diesen Trick nicht anwenden. Sie müssten ihm ein leeres Verzeichnis zum Lesen geben.
Ich habe mich gefragt: Hat Linux ein leeres Standardverzeichnis, das für solche Zwecke verwendet werden kann? Ich weiß, dass OpenSSH / var / empty für eine Weile verwendet hat, und ich kann natürlich selbst ein leeres Verzeichnis erstellen, aber vielleicht hat das FHS ein Standardverzeichnis dafür angegeben?
/var/empty
nicht leer, sondern enthält einen Ordner mit dem Namensshd
, sodass Sie diesen wahrscheinlich nicht verwenden möchten./dev/null
ist nicht so sehr für das Lesen als zum Schreiben. Daten, auf die geschrieben wurde,/dev/null
verschwinden. Ein Verzeichnisäquivalent wäre also ein Ort, an demmv yourfile /dev/empty
Ihre Datei gelöscht wird.mv yourfile /dev/empty/
. In diesemmv yourfile /dev/empty
Fall versuchen Sie, das spezielle Verzeichnis zu ersetzen./dev/null
und nichts initialisieren,dd
dadd
sie eine EOF erhalten, bevor sie überhaupt ein einziges Byte geschrieben hat. Ich denke, Sie denken an das/dev/zero
, was oft verwendet wird, um etwas mit einer bestimmten Anzahl von Nullen zu füllen oder diese zu erzeugen./dev/null
mit/dev/zero
.Antworten:
Das FHS bietet kein "normales" leeres Verzeichnis.
Es ist üblich, dass Linux-Systeme ein Verzeichnis bereitstellen.
/var/empty
Dieses Verzeichnis ist jedoch nicht in FHS definiert und darf eigentlich nicht leer sein. Stattdessen erstellen bestimmte Daemons hier ihre eigenen leeren Verzeichnisse. Beispielsweise verwendet openssh das leere Verzeichnis/var/empty/sshd
zur Trennung von Berechtigungen.Wenn Sie nur vorübergehend ein leeres Verzeichnis benötigen, können Sie selbst ein leeres Verzeichnis als Unterverzeichnis von
/run
oder erstellen/tmp
. Wenn Sie dies außerhalb des Programms tun, können Sie dies verwendenmktemp -d
oder diemkdtemp(3)
C-Funktion in Ihrem Programm verwenden. Wenn Sie jedoch immer ein leeres Verzeichnis benötigen, sollten Sie eines/var/empty
wie bei openssh erstellen.Für diesen Anwendungsfall
/tmp
ist es wahrscheinlich am besten , ein Verzeichnis unter zu erstellen , obwohl es in der Praxis nicht sehr wichtig ist, wo Sie es ablegen.quelle
/var/empty
, da alle Programme, die es verwenden (wie OpenSSH in seiner Standardkonfiguration ), erwarten können, dass es tatsächlich leer ist. (Das/var/empty/sshd
Ding scheint ein seltsamer RedHat-Ismus zu sein;/var/run/sshd
stattdessen verwendet Debian .)/var/empty
, leer zu sein, nicht. Gibt es irgendwo anders, wo man das suchen könnte?/var/empty
den tatsächlich verwendeten Code/var/empty/sshd
. Versuch es noch einmal. :)/var/empty
, da Sie sich hinsichtlich der Semantik auf einem bestimmten System nicht sicher sind./var/run
Sinnvoller erscheint es, ein eigenes leeres Verzeichnis, z. B. unter , zu erstellen, wie es Debian tut.Mit können Sie
mktemp -d
ein neues leeres temporäres Verzeichnis mit sicheren Berechtigungen in erstellen/tmp/
. Das Dienstprogramm gibt den Pfad des neuen Verzeichnisses ausSTDOUT
, sodass es in der Shell nützlich ist.Es ist ohnehin portabler als eine System-Unit-Datei.
quelle
Diese Unix-Frage enthält einige Vorschläge zum Erstellen eines "Blackhole" -Verzeichnisses , einschließlich eines nullfs-FUSE-Dateisystems .
quelle
Für Dienste bietet systemd die Möglichkeit
PrivateTmp
, private/tmp
und/var/tmp
Verzeichnisse zu erstellen , die von Prozessen außerhalb des Namespaces für diesen Dienst nicht gemeinsam genutzt werden und die (anfangs) leer sein sollten.quelle
/tmp
, dass sie leer sind, nur weil sie einen Namespace haben.