Existe uma diferença programática entre diretórios criados com mktemp -d ou mkdir?

1

Eu tento entender a resposta de Stephen Kitt para essa pergunta, onde ele criou um diretório temporário com o seguinte código:

#!/bin/bash

scripttmp=$(mktemp -d) # Create a temporary directory (these will usually be created under /tmp or /var/tmp/)

Cada vez que executo este comando, vejo um novo diretório temporário criado sob /tmp/ (não sabia que ele apareceria lá até ler a resposta de Roaima aqui ):

IIUC, não há diferença programática entre um diretório regular para um diretório temporário (a única diferença está em como esses diretórios são usados, por meio do tempo que cada um permanece na máquina).

Se não houver diferença programática, por que deve-se preferir mktemp -d ao mínimo mkdir ?

    
por JohnDoea 26.09.2018 / 15:19

2 respostas

6

Ao usar mkdir , o script deve certificar-se de que ele crie um diretório com um nome que ainda não existe. Seria um erro usar mkdir dirname if dirname é um nome existente no diretório atual.

Ao criar um diretório temporário (ou seja, um diretório que não é necessário por muito mais tempo do que durante o tempo de vida do script atual), o nome do diretório geralmente não é importante e mktemp -d encontrará um nome que ainda não esteja tomado por outra coisa.

mktemp -d torna mais fácil e mais seguro criar um diretório temporário. Sem mktemp -d , seria necessário tentar mkdir com vários nomes até que um tenha sido bem-sucedido. Isso é desnecessariamente complicado e pode ser feito de forma errada (possivelmente introduzindo condições de corrida sutis no código).

mktemp também dá ao usuário do script um pouco de controle no local onde deseja que o diretório temporário seja criado. Se o script, por exemplo, produzir uma grande quantidade de dados temporários que precisam ser armazenados nesse diretório, o usuário poderá definir a variável de ambiente TMPDIR (antes ou à medida que estiver chamando o script) para apontar para um diretório gravável uma partição onde há espaço suficiente disponível. mktemp -d criaria o diretório temporário abaixo desse caminho.

Se TMPDIR não estiver definido, mktemp usará /tmp em seu lugar.

    
por 26.09.2018 / 15:32
0

A coisa com mktemp -d desde que cria um diretório temporário com um nome aleatório é: Você precisa se lembrar de excluir o diretório depois de usá-lo, se você tiver uma política de exclusão de diretórios temporários restritos.

É por isso que você escreveu scripttmp=$(mktemp -d) para manter o valor. Em geral, é fácil de usar.

A menos que você não se importe, você pode usar este pequeno exemplo para gerar o nome aleatório e remover a pasta depois:

var=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 20 | head -n 1);
mkdir "/tmp/$var"
#some code
rm -rf "/tmp/$var"

Is there a programmatical difference between directories created with mktemp -d or mkdir?

Bem, existe. Com mkdir você gera o nome do diretório e, com mktemp -d , o sistema cria o diretório para você com base em /dev/urandom gettimeofday , getpid , ... e outras funções para obter a exclusividade do nome.

    
por 26.09.2018 / 15:52