Lors de la configuration d'une application, vous pouvez souvent utiliser /dev/null
comme fichier de configuration si vous souhaitez que l'application lise un fichier vide. Mais, si l'application lit une liste de fichiers à partir d'un répertoire, vous ne pouvez pas utiliser cette astuce. Vous devrez lui donner un répertoire vide à lire.
Je me demandais: Linux a-t-il un répertoire vide par défaut qui peut être utilisé à de telles fins? Je sais qu'OpenSSH a utilisé/var/empty pendant un certain temps, et je peux bien sûr créer moi-même un répertoire vide, mais peut-être que le FHS a spécifié un répertoire standard pour cela?
Le FHS ne fournit aucun répertoire vide "standard".
Il est courant que les systèmes Linux fournissent un répertoire /var/empty
, Mais ce répertoire n'est pas défini dans FHS et peut ne pas être vide. Au lieu de cela, certains démons créeront leurs propres répertoires vides ici. Par exemple, openssh utilise le répertoire vide /var/empty/sshd
Pour la séparation des privilèges.
Si votre besoin d'un répertoire vide est transitoire, vous pouvez créer vous-même un répertoire vide, en tant que sous-répertoire de /run
Ou /tmp
. Si vous faites cela en dehors du programme, vous pouvez utiliser mktemp -d
pour cela, ou utiliser la fonction mkdtemp(3)
C dans votre programme. Bien que si vous avez toujours besoin du répertoire vide pour être présent, envisagez d'en créer un sous /var/empty
Comme openssh.
Pour ce cas d'utilisation, la création d'un répertoire sous /tmp
Est probablement la meilleure solution, bien qu'en pratique, peu importe où vous le placez.
Vous pouvez utiliser mktemp -d
pour créer un nouveau répertoire temporaire vide avec des autorisations sécurisées, par défaut dans /tmp/
. L'utilitaire affichera le chemin du nouveau répertoire sur STDOUT
, il est donc utile dans le shell.
De toute façon, il est plus portable qu'un fichier d'unité systemd.
Cette question Unix a quelques suggestions pour créer un répertoire "blackhole", y compris un système de fichiers nullfs Fuse .
Pour les services, systemd fournit l'option PrivateTmp
pour créer des répertoires privés /tmp
Et /var/tmp
Qui ne sont pas partagés par des processus en dehors de l'espace de noms pour ce service et qui devrait être vide (initialement).
[Service]
ExecStart=...
PrivateTmp=yes