Existe um diretório equivalente a / dev / null no Linux?

74

Ao configurar um aplicativo, você geralmente pode usar /dev/null como arquivo de configuração se quiser que o aplicativo leia um arquivo vazio. Mas, se o aplicativo ler uma lista de arquivos de um diretório, você não poderá usar esse truque. Você precisaria dar a ele um diretório vazio para ler.

Eu queria saber: o Linux tem um diretório vazio padrão que pode ser usado para tais propósitos? Eu sei que o OpenSSH usou / var / empty por um tempo, e eu posso criar um diretório vazio, mas talvez o FHS tenha especificado um diretório padrão para isso?

    
por roelvanmeer 07.12.2016 / 10:04

4 respostas

62

O FHS não fornece um diretório vazio "padrão".

É comum que os sistemas Linux forneçam um diretório /var/empty , mas esse diretório não está definido no FHS e pode não estar realmente vazio. Em vez disso, certos daemons criarão seus próprios diretórios vazios aqui. Por exemplo, o openssh usa o diretório vazio /var/empty/sshd para separação de privilégios.

Se a sua necessidade de um diretório vazio for transitória, você mesmo poderá criar um diretório vazio, como um subdiretório de /run ou /tmp . Se você está fazendo isso fora do programa, você pode usar mktemp -d para isso, ou usar o mkdtemp(3) C funciona dentro do seu programa. Embora se você sempre precisar que o diretório vazio esteja presente, considere criar um em /var/empty como openssh.

Para este caso de uso, criar um diretório em /tmp é provavelmente o melhor ajuste, embora na prática não importe muito onde você o coloca.

    
por 07.12.2016 / 10:11
37

Você pode usar mktemp -d para criar um novo arquivo temporário vazio diretório com permissões seguras, por padrão em /tmp/ . O utilitário gerará o caminho do novo diretório no STDOUT , portanto é útil no shell.

É mais portátil que um arquivo de unidade do systemd de qualquer maneira.

    
por 07.12.2016 / 12:04
19

Esta questão Unix tem algumas sugestões para criar um diretório "blackhole", incluindo um sistema de arquivos FUSE do nullfs .

    
por 07.12.2016 / 22:37
11

Para serviços, o systemd fornece a opção PrivateTmp para criar anúncios privados /tmp e /var/tmp diretórios que não são compartilhados por processos fora do namespace para esse serviço e que devem estar vazios (inicialmente).

[Service]
ExecStart=...
PrivateTmp=yes 
    
por 07.12.2016 / 11:20