%20como%20um%20diret%C3%B3rio%20tempor%C3%A1rio.png)
É uma boa prática criar um diretório em /run/shm
(anteriormente /dev/shm
) e usá-lo como um diretório temporário para um aplicativo?
Histórico: estou escrevendo testes de caixa preta para um programa que faz muitas coisas com arquivos e diretórios. Para cada teste, eu crio muitos arquivos e diretórios e, em seguida, executo o programa e, em seguida, crio o conjunto esperado de arquivos e diretórios e, em seguida, executo o diff para comparar. Agora tenho cerca de 40 testes e eles já estão demorando mais de 2 segundos para serem executados. Na esperança de acelerar as coisas, quero executar os testes em um diretório em algum tipo de disco RAM.
Pesquisando sobre disco ram me depareiuma perguntacom uma resposta afirmando que não há problema em criar um diretório /dev/shm
e usá-lo como um diretório temporário. Pesquisando um pouco mais, no entanto, me depareiuma página wikido debian afirmando que é um erro usar /dev/shm
diretamente. Eu deveria usar as shm_*
funções. Infelizmente, as shm_*
funções parecem não estar disponíveis para uso em um script de shell.
Agora eu estou confuso. Está tudo bem ou não usar /run/shm
(anteriormente /dev/shm
) como um diretório temporário?
Responder1
É perfeitamente normal usar algum diretório, /run
desde que você tenha os direitos apropriados sobre ele. Em algumas distros modernas, /tmp
já existe um sistema de arquivos virtual na memória ou um link simbólico para um diretório dentro do /run
. Se este for o seu caso (você pode verificar isso /etc/fstab
ou digitar mtab
), você pode usar /tmp
como seu diretório temporário.
Além disso, não se confunda com o artigo do Debian. shm_*
funções são usadas para criar segmentos de memória compartilhada para comunicação entre processos. Com essas funções, você pode compartilhar um fragmento de memória entre dois ou mais processos para que eles se comuniquem ou colaborem usando os mesmos dados. Os processos possuem o segmento de memória anexado em seu próprio espaço de endereço e podem ler e escrever lá normalmente. O kernel lida com a complexidade. Essas funções não estão disponíveis como funções shell (e não seriam muito úteis em um contexto shell). Para mais informações, dê uma olhada em man 7 shm_overview
. O objetivo do artigo é que nenhum programa deve gerenciar diretamente os pseudoarquivos que representam segmentos compartilhados, mas em vez disso usar as funções apropriadas para criar, anexar e excluir segmentos de memória compartilhada.