Estou começando a escrever alguns scripts bash para o meu projeto e eles precisam de alguns arquivos ou variáveis intermediários para serem gravados.
Quero saber a quais pastas posso ter acesso quando alguém executa meu script? É uma prática comum de usar /tmp/
? Ou devo usar outra coisa?
scripting
filesystems
directory-structure
tmp
Programming Noob
fonte
fonte
Se você precisar gravar alguns arquivos temporários que duram apenas enquanto o script ou aplicativo estiver em execução, use o diretório indicado pela
TMPDIR
variável de ambiente 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), portanto não pode ser usado para arquivos que precisam sobreviver a uma falha de energia ou reinicialização./var/tmp
pode ser usado para arquivos que precisam sobreviver a uma reinicialização, mas que podem ser limpos pelo administrador do sistema periodicamente. Se seu aplicativo precisar salvar arquivos permanentemente, escreva-os em algum lugar no diretório inicial 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, é necessário tomar precauções ao criar um arquivo lá. Você precisa escolher um nome de arquivo que ainda não exista e ter cuidado para não permitir uma condição de corrida em que outro processo crie o arquivo à sua frente com permissões diferentes, o que poderia ser uma falha de segurança (se o outro processo estiver sendo executado como um usuário diferente, ele poderá acessar e modificar os dados do seu processo). Use omktemp
comando para criar um arquivo em/tmp
ou/var/tmp
. Por padrão,mktemp
cria um arquivo$TMPDIR
ou,/tmp
seTMPDIR
não estiver definido, geralmente é o lugar certo. Se você precisar usar vários arquivos temporários, ou mesmo se precisar de um único, recomendo a criação de um diretório para todos os seus arquivos temporários commktemp -d
e removê-lo no final do seu script.fonte
mktemp
. Para mim, esta é a resposta correta: delegue a tarefa de criar com segurança um arquivo temporário paramktemp
(consulte este artigo ). Embora a única resposta que cite a tambémFHS
tenha grande valor.tmp_root
antes de atribuí-lo? Não seria mais naturalunset
?set -u
, mas isso é incomum). Ele precisa ser (des) definido como um valor seguro antes de definir a interceptação, caso o script seja eliminado logo após a definição da interceptação.set -o errexit
para que, setmp_root
já está definido somente leitura no ambiente que não vai destruir o diretório errado ...Apenas para complementar as respostas que já foram publicadas até agora.
Também existem
/dev/shm
em algumas distribuições Linux que podem ser usadas para armazenamento temporário. Esse armazenamento deve ser usado apenas quando o desempenho da E / S do arquivo for um fator crítico, dado que/dev/shm
faz uso dotmpfs
sistema de arquivos. Também deve ser usado para arquivos e dados de tamanho razoável. Otmpfs
sistema de arquivos utiliza uma RAM do sistema como armazenamento, para que não seja persistente de inicialização para inicialização.Há uma boa visão geral de todas as opções mencionadas aqui no StackOverflow, além das perguntas e respostas, intituladas: / tmp vs. / dev / shm para armazenamento temporário de arquivos no Linux? . Está bem abordado nas perguntas e respostas do superusuário intitulado: Quando devo usar / dev / shm / e quando devo usar / tmp? .
Referências
fonte
Sim,
/tmp
é principalmente para arquivos necessários temporariamente. O / tmp possui um bit fixo, 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 algumas distribuições, esse diretório é limpo na inicialização ou no desligamento.fonte