Al configurar una aplicación, a menudo puede usarla /dev/nullcomo archivo de configuración si desea que la aplicación lea un archivo vacío. Pero, si la aplicación lee una lista de archivos de un directorio, no puede usar este truco. Debería darle un directorio vacío para leer.
Me preguntaba: ¿Linux tiene un directorio vacío predeterminado que se puede usar para tales fines? Sé que OpenSSH usó / var / empty por un tiempo, y por supuesto puedo crear un directorio vacío yo mismo, pero ¿tal vez el FHS ha especificado un directorio estándar para esto?

/var/emptyno está vacío, pero contiene una carpeta llamadasshd, por lo que probablemente no quiera usar eso./dev/nullno es tanto para leer como para escribir. Los datos escritos en/dev/nullsimplemente desaparecen. Entonces, un directorio equivalente sería un lugar dondemv yourfile /dev/emptyresultaría en la eliminación de su archivo.mv yourfile /dev/empty/. Si lo hacemv yourfile /dev/empty, está tratando de reemplazar el directorio especial./dev/nullyddporqueddobtendrá un EOF incluso antes de que se escriba un solo byte. Creo que estás pensando/dev/zero, que a menudo se usa para llenar algo o generar un número específico de ceros./dev/nullcon/dev/zero.Respuestas:
El FHS no proporciona un directorio vacío "estándar".
Es común que los sistemas Linux proporcionen un directorio
/var/empty, pero este directorio no está definido en FHS y puede que en realidad no esté vacío. En cambio, ciertos demonios crearán sus propios directorios vacíos aquí. Por ejemplo, openssh usa el directorio vacío/var/empty/sshdpara la separación de privilegios.Si su necesidad de un directorio vacío es transitoria, puede crear un directorio vacío usted mismo, como un subdirectorio de
/runo/tmp. Si está haciendo esto fuera del programa, puede usarlomktemp -do usar lamkdtemp(3)función C dentro de su programa. Sin embargo, si siempre necesita el directorio vacío para estar presente, considere crear uno debajo/var/emptycomo lo hace openssh.Para este caso de uso, crear un directorio debajo
/tmpes probablemente la mejor opción, aunque en la práctica no importa mucho dónde lo coloque.fuente
/var/empty, ya que cualquier programa que lo use (como OpenSSH en su configuración predeterminada ) puede esperar que esté realmente vacío. (La/var/empty/sshdcosa parece ser un extraño RedHat-ism; Debian usa en su/var/run/sshdlugar.)/var/emptyestar vacío. ¿Hay algún otro lugar donde uno pueda buscar esto?/var/emptypero el código realmente usa/var/empty/sshd. Inténtalo de nuevo. :)/var/emptypara nada, ya que no puede estar seguro de su semántica en un sistema dado. Crear su propio directorio vacío, por ejemplo/var/run, debajo , como lo hace Debian, parece más sensato.Puede usar
mktemp -dpara crear un nuevo directorio temporal vacío con permisos seguros, de forma predeterminada en/tmp/. La utilidad generará la ruta del nuevo directorioSTDOUT, por lo que es útil en el shell.De todos modos, es más portátil que un archivo de unidad systemd.
fuente
Esta pregunta de Unix tiene algunas sugerencias para crear un directorio "blackhole", incluido un sistema de archivos nullfs FUSE .
fuente
Para los servicios, systemd ofrece la opción
PrivateTmpde crear directorios privados/tmpy/var/tmpno compartidos por procesos fuera del espacio de nombres para ese servicio y que deberían estar vacíos (inicialmente).fuente
/tmpque estará vacío simplemente porque ha sido espaciado de nombres.