convenção em relação a dados temporários off-line

4

Ao escrever pequenos programas utilitários, às vezes quero manter pequenas quantidades de dados em torno de entre execuções, geralmente para fins de cache, mas não quero que o programa seja executado como um daemon. Existem convenções sobre isso? Fazer arquivos em /tmp parece óbvio, como geralmente é mantido na memória, e só é apagado no desligamento, mas estou curioso para saber se existem outras maneiras. Além disso, existe uma convenção para nomear arquivos em /tmp ?

    
por Bladt 29.03.2014 / 20:46

2 respostas

2

Se o programa for instalado por um administrador do sistema e não houver problemas em apagar os dados agora e depois, crie um diretório em /var/cache . Arquivos sob /var/cache podem ser excluídos pelo administrador do sistema a qualquer momento, mas normalmente não são, a menos que o sistema esteja ficando sem espaço em disco. Gerenciar /var/cache/YOUR-DIRECTORY para que não fique fora de controle é responsabilidade do seu aplicativo.

Se o programa for instalado por um administrador do sistema, e os dados nunca devem ser apagados sem o controle do seu aplicativo, crie um diretório sob /var/lib .

Não use /tmp para isso: ele pode (e geralmente é) apagado na reinicialização. /tmp é somente para dados que não são mantidos entre invocações separadas de um aplicativo. Não use /var/tmp : embora geralmente não seja apagado na reinicialização, o administrador do sistema pode optar por apagá-lo a qualquer momento.

Se seu aplicativo for executado por usuários individuais e cada um tiver seu próprio conjunto de dados, os arquivos deverão estar no diretório inicial do usuário. Não há um padrão Unix tradicional para organizar arquivos no diretório pessoal de um usuário, além da convenção para usar um arquivo cujo nome começa com . (“Arquivo de pontos”) . Existe um padrão moderno, a especificação XDG FreeDesktop. Para dados de cache (que podem ser apagados sem afetar nada, exceto o desempenho), crie um diretório em $XDG_CACHE_HOME , cujo padrão é ~/.cache . Para dados do aplicativo, crie um diretório em $XDG_DATA_HOME , com o padrão ~/.local/share ou diretamente sob o diretório inicial (e, neste caso, começando com . ).

    
por 30.03.2014 / 01:26
2

Há também /run , mas a convenção parece ser que, embora /tmp seja mundialmente gravável, /run requer privilégios de root. /var tem restrições semelhantes.

Portanto, a sua melhor aposta é /tmp ou algo que você organiza por meio da configuração (para que o usuário possa especificar um diretório de tempo de execução).

O WRT para convenções de nomenclatura, parece ser um espaço global livre - use os identificadores que quiser, seguindo o princípio do senso comum de que /tmp/stuff provavelmente não é uma boa idéia, pois há um potencial maior para para ser pego por alguém com idéias igualmente brilhantes.

Eu observo que alguns aplicativos usam um namespace baseado no domínio java-esque, por exemplo, .com.google.Chrome . Não importa, desde que seja único e faça sentido para quem quer que faça sentido. Pontos de bônus, se também fornece alguma pista para os outros de onde veio.

    
por 29.03.2014 / 22:49