Al configurar una aplicación, a menudo puede usarla /dev/null
como 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/empty
no está vacío, pero contiene una carpeta llamadasshd
, por lo que probablemente no quiera usar eso./dev/null
no es tanto para leer como para escribir. Los datos escritos en/dev/null
simplemente desaparecen. Entonces, un directorio equivalente sería un lugar dondemv yourfile /dev/empty
resultarí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/null
ydd
porquedd
obtendrá 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/null
con/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/sshd
para 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
/run
o/tmp
. Si está haciendo esto fuera del programa, puede usarlomktemp -d
o 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/empty
como lo hace openssh.Para este caso de uso, crear un directorio debajo
/tmp
es 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/sshd
cosa parece ser un extraño RedHat-ism; Debian usa en su/var/run/sshd
lugar.)/var/empty
estar vacío. ¿Hay algún otro lugar donde uno pueda buscar esto?/var/empty
pero el código realmente usa/var/empty/sshd
. Inténtalo de nuevo. :)/var/empty
para 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 -d
para 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
PrivateTmp
de crear directorios privados/tmp
y/var/tmp
no compartidos por procesos fuera del espacio de nombres para ese servicio y que deberían estar vacíos (inicialmente).fuente
/tmp
que estará vacío simplemente porque ha sido espaciado de nombres.