Em qual pasta devo escrever para meus arquivos intermediários, como um dev?

17

Estou começando a escrever alguns scripts bash para o meu projeto e eles precisam de alguns arquivos intermediários ou variáveis para serem escritos.

Eu quero saber com quais pastas posso ter certeza de ter acesso quando alguém executar meu script? É uma prática comum usar /tmp/ ? Ou devo usar outra coisa?

    
por Programming Noob 18.06.2013 / 00:23

4 respostas

21

Eu acho o documento Standard Filesystem Hierarchy inestimável ao procurar por essas coisas.

Existem algumas opções,

Depende realmente do tipo de dados que você está armazenando.

    
por 18.06.2013 / 00:58
15

Se você precisar escrever alguns arquivos temporários que duram apenas enquanto o script ou o aplicativo estiver em execução, use o diretório indicado pelo variável de ambiente TMPDIR ou, se essa variável não estiver definida, /tmp .

/tmp é limpo no momento da inicialização em alguns sistemas (às vezes até na RAM, por exemplo, no Solaris e em algumas instalações do Linux), por isso não pode ser usado para arquivos que precisam sobreviver a uma falha de energia ou a uma reinicialização . /var/tmp pode ser usado para arquivos que devem sobreviver a uma reinicialização, mas isso pode ser limpo pelo administrador do sistema de tempos em tempos. Se seu aplicativo precisar salvar arquivos permanentemente, escreva-os em algum lugar no diretório pessoal do usuário (em ~/.programmingnoobsapp ou ~/.cache/programmingnoobsapp ) ou em /var/lib/programmingnoobsapp ou /var/cache/programmingnoobsapp .

Observe que /tmp é compartilhado entre todos os usuários, portanto, você precisa tomar precauções ao criar um arquivo lá. Você precisa escolher um nome de arquivo que ainda não existe, e você precisa ter cuidado para não permitir uma condição de corrida em que outro processo cria o arquivo à frente com permissões diferentes, o que poderia ser uma falha de segurança (se o outro processo está sendo executado como um usuário diferente, ele pode acessar e modificar os dados do processo). Use o comando mktemp para criar um arquivo em /tmp ou /var/tmp . Por padrão, mktemp cria um arquivo em $TMPDIR ou /tmp se TMPDIR não está definido, o que geralmente é o lugar certo. Se você precisar usar vários arquivos temporários ou até mesmo precisar de um, recomendo criar um diretório para todos os arquivos temporários com mktemp -d e removê-lo no final do script.

#!/bin/sh
tmp_root=
trap 'rm -rf "$tmp_root"' EXIT INT TERM HUP
tmp_root=$(mktemp -d)
tmpfile1=$tmp_root/file1
tmpfile2=$tmp_root/file2
…
    
por 18.06.2013 / 01:11
2

Apenas para complementar as respostas que já foram postadas até agora.

Há também /dev/shm em algumas distribuições do Linux que podem ser usadas para armazenamento temporário. Esse armazenamento só deve ser usado quando o desempenho do arquivo I / O for um fator crítico, dado /dev/shm faz uso do sistema de arquivos tmpfs . Também deve ser usado para arquivos de tamanho razoável & dados. O sistema de arquivos tmpfs faz uso de uma RAM do sistema como armazenamento, por isso não é persistente desde a inicialização até a inicialização.

Há uma boa visão geral de todas as opções mencionadas aqui no StackOverflow, bem como neste Q & A intitulado: / tmp vs. / dev / shm para armazenamento de arquivos temporários no Linux? . Está bem coberto neste SuperUser Q & A intitulado: Quando devo usar / dev / shm / e quando devo usar / tmp? .

Referências

por 18.06.2013 / 02:16
0

Sim, /tmp é principalmente para arquivos que são necessários temporariamente. O / tmp tem um bit pegajoso, o que significa que apenas o proprietário do item, o proprietário do diretório ou o superusuário pode renomear ou excluir arquivos. Muitos programas usam isso para criar arquivos de bloqueio e para armazenamento temporário de dados. Em alguma distribuição, esse diretório é esvaziado na inicialização ou no encerramento.

    
por 18.06.2013 / 00:38