Os links para arquivos / tmp são excluídos?

2

Eu tenho um script que cria um diretório temporário usando mktemp -d .

Uma pasta gerada no diretório temp é a saída do script que será copiado para outra parte da máquina.

Eu estava pensando em usar ln para usar a mesma pasta em vez de copiar o conteúdo em outro lugar. Eu queria saber se ainda estaria por perto se a versão da pasta no diretório /tmp fosse limpa pelo sistema operacional?

    
por Tormyst 26.06.2014 / 19:57

2 respostas

3

Depende de onde seu diretório temporário está. Ou seja, você criou seu próprio diretório temporário ou está usando o sistema ( /tmp )?

No seu cenário, você espera que os arquivos / pastas permaneçam após a limpeza do diretório temporário.

Se estiver no diretório /tmp do sistema, ele pode ser limpo pelo sistema (é específico da distribuição, mas a maioria tem um trabalho cron ou similar).

Além disso, algumas distros criam seu diretório /tmp usando tmpfs , o que significa que o conteúdo é mantido em RAM / Swap e não sobrevive a uma reinicialização.

Os arquivos permanecerão acessíveis somente se você criar um link hard . No entanto, os links físicos só podem ser criados em um único sistema de arquivos montado. Não é possível criar um link físico entre um sistema de arquivos tmpfs /tmp para um (por exemplo) ext4 montado em /mystuff .

Você pode criar um link soft de /mystuff para algum lugar em tmpfs montado em /tmp , mas quando os arquivos temporários forem excluídos, o link apontará para nowehere; que derrota o objeto ligeiramente!

Se a sua distro tiver os arquivos /tmp em um disco físico que esteja na mesma montagem do local que você planeja armazenar seus arquivos ( /mystuff ), um link físico funcionará, desde que o link seja criado antes que o sistema limpe /tmp .

    
por 26.06.2014 / 20:24
1

Eu fiz um exemplo para tornar as coisas muito mais claras.

Dentro de um diretório específico, criei dois arquivos.

cat sourcefile
This is the sourcefile. 
##This is to create a hard link. 

ln sourcefile destfile

##List the files available. 
ls
destfile  sourcefile

cat destfile
This is the sourcefile. 

Agora, supondo que você use hardlinks como acima para se referir aos seus arquivos dentro do diretório /tmp , vamos ver o que acontece se eu excluir o arquivo de origem.

rm sourcefile
rm: remove regular file 'sourcefile'? y
ls
destfile
cat destfile
This is the sourcefile

No cenário acima, o destfile ainda está acessível.

Agora, vamos ver o que acontece se usarmos softlinks.

cat sourcefile
This is the sourcefile for softlink example. 
ln -s sourcefile destfile
ls -l
total 4
lrwxrwxrwx 1 root root 10 Jun 26 13:40 destfile -> sourcefile
-rw-r--r-- 1 root root 46 Jun 26 13:40 sourcefile

Agora, conforme o seu cenário, vamos excluir o arquivo de origem e ver o que acontece.

rm sourcefile
rm: remove regular file 'sourcefile'? y
ls
destfile
cat destfile
cat: destfile: No such file or directory

Portanto, se você usar o link flexível, os dados podem não estar lá.

EDITAR

Eu usei o mktemp para criar um arquivo temporário e criei um hard link do diretório /tmp para um dos meus diretórios de trabalho.

Eu reiniciei a máquina para verificar se o conteúdo está disponível após a reinicialização também. Se eu usar hard links , o conteúdo também estará disponível após a reinicialização. O motivo para verificar isso é quando a reinicialização do diretório /tmp normalmente é limpo.

    
por 26.06.2014 / 20:48