Lösung 1:
Der FHS stellt kein "standardmäßiges" leeres Verzeichnis zur Verfügung.
Für Linux-Systeme ist es üblich, ein Verzeichnis /var/empty
bereitzustellen , aber dieses Verzeichnis ist in FHS nicht definiert und darf nicht wirklich leer sein. Stattdessen erstellen bestimmte Daemons hier ihre eigenen leeren Verzeichnisse. Zum Beispiel verwendet openssh das leere Verzeichnis /var/empty/sshd
für Privilegientrennung.
Wenn Sie nur vorübergehend ein leeres Verzeichnis benötigen, können Sie selbst ein leeres Verzeichnis als Unterverzeichnis von /run
erstellen oder /tmp
. Wenn Sie dies außerhalb des Programms tun, können Sie mktemp -d
verwenden dafür oder verwenden Sie den mkdtemp(3)
C-Funktion in Ihrem Programm. Aber wenn Sie immer Wenn das leere Verzeichnis vorhanden sein muss, erwägen Sie, eines unter /var/empty
zu erstellen wie es openssh tut.
Erstellen Sie für diesen Anwendungsfall ein Verzeichnis unter /tmp
passt wahrscheinlich am besten, obwohl es in der Praxis nicht so wichtig ist, wo Sie es platzieren.
Lösung 2:
Sie können mktemp -d
verwenden um ein neues leeres temporäres Verzeichnis mit sicheren Berechtigungen zu erstellen, standardmäßig in /tmp/
. Das Dienstprogramm gibt den Pfad des neuen Verzeichnisses auf STDOUT
aus , daher ist es in der Shell nützlich.
Es ist ohnehin portabler als eine systemd-Unit-Datei.
Lösung 3:
Diese Unix-Frage enthält einige Vorschläge zum Erstellen eines "Blackhole"-Verzeichnisses, einschließlich eines nullfs FUSE-Dateisystems.
Lösung 4:
Für Dienste bietet systemd die Option PrivateTmp
um private /tmp
zu erstellen und /var/tmp
Verzeichnisse, die nicht von Prozessen außerhalb des Namensraums für diesen Dienst gemeinsam genutzt werden und die (anfänglich) leer sein sollten.
[Service]
ExecStart=...
PrivateTmp=yes