Estou criando um aplicativo de linha de comando e preciso salvar alguns dados temporários em arquivos. Eu não sei onde está a convenção de aplicativos para armazenar seu cache em sistemas baseados em unix (neste caso, Ubuntu 12.0.4)?
"Sistemas baseados em Unix" é uma categoria muito geral para fazer qualquer tipo de determinação geralmente aplicável que se aplicará a todos os sistemas baseados em Unix. O problema é que a estrutura do sistema de arquivos (e o local "adequado" / "convencional" para colocar as coisas) é tão diferente entre os diferentes tipos de "Unix" (se é que você pode chamar assim) que você praticamente precisa lidar com isso caso a caso.
Alguns exemplos:
A resposta é que a convenção canônica, socialmente aceitável e bem integrada de onde armazenar qualquer coisa em qualquer sistema operacional, seja uma distribuição do Linux, BSD, Solaris, HP-UX etc., depende das circunstâncias exatas . Especificamente:
apt-get
ou yum
instalá-lo diretamente sem baixar um instalador de um site?Não há uma resposta direta para isso sem considerar todos os fatores. No entanto, para o Ubuntu 12.04 especificamente , se você estiver construindo seu pacote em um .deb
arquivo a ser distribuído em um PPA ou enviando para os repositórios de pacotes do Ubuntu ( main
ou universe
), eu recomendaria que o cache fosse armazenado /var/cache
. Mas isso é apenas para o Ubuntu e você certamente não deve aplicar a suposição de que toda distro ou sistema operacional baseado em Unix considerará isso aceitável.
Além disso, se não houver vantagens em salvar os dados do cache nas inicializações do sistema, acho que eles também poderiam pertencer a / tmp.
Observe que você encontrará esses problemas de convenções de caminhos para cada tipo de arquivo que seu programa usa: dados compartilhados, arquivos executáveis, bibliotecas, arquivos de ajuda, imagens, som, páginas da Web e assim por diante. Então, tenho que me perguntar, se você está perguntando sobre arquivos de cache, como planeja lidar com os outros tipos de arquivos. Você está apenas fazendo suposições ingênuas e esperando que ninguém discorde de você? Se você não leu nenhum documento ou padrão do Ubuntu sugerindo onde colocá-lo, é uma má idéia apenas assumir uma coisa ou outra. Por exemplo, sempre colar bibliotecas em / usr / lib pode ser um erro, pois depende da situação em que elas possam pertencer a outro lugar.
Além disso, como desenvolvedor de software, acho que a coisa mais responsável a fazer é permitir que o usuário final decida onde colocar seus arquivos. Você pode definir padrões, mas os usuários (e distribuidores) podem e personalizarão a construção para se adequar à sua distribuição.
A maneira mais fácil de fazer isso é criar seu programa usando o GNU Autoconf . O Autoconf é um sistema de construção no qual o usuário pode passar argumentos da linha de comando para o script de construção para alterar os caminhos dos vários "tipos de diretório" dos padrões. Quase toda distribuição possui um script de construção para cada pacote do Autoconf que define os diretórios convencionais apropriados para cada tipo de distribuição. Eles ainda têm especificamente um tipo de diretório para cache: sharedstatedir .
/tmp
pasta. As respostas para suas perguntas seriam (download, não, não, não, não, não, não). Provavelmente parece normal para a maioria das pessoas concluir que é,/tmp
mas eu sou novo em sistemas unix e as convenções baseadas em ubuntu não são familiares para mim. Isso abre uma idéia interessante para gem permitir cache de disco independente (independente do usuário). Obrigado, +1 de mim.gem
ferramenta. No entanto, provavelmente não seria apropriado criar arquivos em tempo de execução no mesmo diretório em que o aplicativo é baixado pela gem. Por outro lado, se você estiver executando o aplicativo como usuário, precisará de um diretório de leitura e gravação para os usuários , o que significa alterar as permissões (o que exige ainda mais integração do sistema no momento da instalação, como a criação de um grupo etc) ou usando um diretório global de leitura e gravação, por exemplo, / tmp./usr
,/lib
ou/bin
a partir da aplicação.