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. Toutefois, si l'application lit une liste de fichiers d'un répertoire, vous ne pouvez pas utiliser cette astuce. Vous devez lui donner un répertoire vide à lire.
Je me demandais: est-ce que Linux a un répertoire vide par défaut qui peut être utilisé à ces fins? Je sais que OpenSSH a utilisé / var / empty pendant un moment, et je peux bien sûr créer un répertoire vide moi-même, mais peut-être que la FHS a spécifié un répertoire standard pour cela?
/var/empty
n’est pas vide, mais contient un dossier appelésshd
, de sorte que vous ne voulez probablement pas l’utiliser./dev/null
n'est pas tant pour la lecture que pour l' écriture. Les données écrites pour/dev/null
disparaître. Ainsi, un répertoire équivalent serait un endroit oùmv yourfile /dev/empty
le fichier serait supprimé.mv yourfile /dev/empty/
. Si vous le faitesmv yourfile /dev/empty
, vous essayez de remplacer le répertoire spécial./dev/null
etdd
parcedd
que vous obtiendrez un EOF avant même qu’il n’ait écrit un seul octet. Je pense que vous pensez à/dev/zero
, qui est souvent utilisé pour remplir quelque chose ou générer un nombre spécifique de zéros./dev/null
avec/dev/zero
.Réponses:
La FHS ne fournit pas de 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 vont créer 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 le faites en dehors du programme, vous pouvez l'utilisermktemp -d
ou utiliser lamkdtemp(3)
fonction C dans votre programme. Toutefois, si vous avez toujours besoin que le répertoire vide soit présent, pensez à en créer un sous/var/empty
comme le fait 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 mettez.la source
/var/empty
, car tous les programmes qui l'utilisent (comme OpenSSH dans sa configuration par défaut ) peuvent s'attendre à ce qu'il soit réellement vide. (La/var/empty/sshd
chose semble être un RedHat-isme bizarre; Debian l'utilise/var/run/sshd
plutôt.)/var/empty
à être vide. Y a-t-il un endroit où l'on pourrait chercher cela?/var/empty
mais le code utilise réellement/var/empty/sshd
. Réessayer. :)/var/empty
pour quoi que ce soit, car vous ne pouvez pas être sûr de sa sémantique sur un système donné. Créer votre propre répertoire vide, par exemple sous/var/run
, comme le fait Debian, semble plus judicieux.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épertoireSTDOUT
, il est donc utile dans le shell.C'est plus portable qu'un fichier unité systemd de toute façon.
la source
Cette question Unix a quelques suggestions pour créer un répertoire "trou noir", y compris un système de fichiers nullfs FUSE .
la source
Pour les services, systemd offre la possibilité
PrivateTmp
de créer des répertoires privés/tmp
et/var/tmp
non partagés par des processus extérieurs à l'espace de noms de ce service et devant être vides (à l'origine).la source
/tmp
qu'il sera vide simplement parce qu'il a été espacé.