
Preciso verificar e criar /tmp
antes de gravar em um arquivo dentro dele? Suponha que ninguém tenha fugido sudo rm -rf /tmp
porque esse é um caso muito raro
Responder1
OESFmandatos que /tmp
existem, assim comoPOSIXentão você pode confiar que ele estará presente (pelo menos em sistemas compatíveis; mas na verdade é praticamente garantido que ele esteja presente em sistemas do tipo Unix). Mas você não deveria: o administrador do sistema ou o usuário pode preferir outros locais para arquivos temporários. VerEncontrando o diretório tmp correto em múltiplas plataformaspara mais detalhes.
Responder2
Na prática, /tmp
é praticamente garantido que exista. No entanto, mesmo que exista, isso não significa que você deva colocar arquivos temporários lá.
Opadrãoconvenção é usar a TMPDIR
variável de ambiente. Se existir, aponta para um diretório para arquivos temporários. Se não existir, coloque os arquivos temporários em /tmp
.
Em um script de shell, você pode usar "${TMPDIR:-/tmp}"
como local do arquivo temporário: isso se expande para o valor TMPDIR
se estiver definido¹ e para /tmp
o contrário. Ou você pode definir TMPDIR
condicionalmente caso não esteja definido, com o comando
: "${TMPDIR:=/tmp}"
e então crie arquivos temporários dentro do arquivo "$TMPDIR"
.
Observe que qualquer aplicativo pode criar arquivos em /tmp
ou $TMPDIR
. Além disso, este diretório pode ser compartilhado entre usuários, portanto você precisa tomar cuidado com as permissões ao criar um arquivo. Muitos sistemas (Linux, *BSD) possuem um comandomktemp
que cria arquivos com segurança no diretório correto. Geralmente é uma boa ideia usar mktemp
para criar arquivos e diretórios temporários - especialmente a partir de um script de shell, onde é impossível criar um arquivo com segurança em um diretório compartilhado devido à possibilidade de ataques de links simbólicos ( mkdir
é bom se você lidar com os erros corretamente).
¹ e não vazia — se a variável estiver vazia, ela não poderá ser usada como está, e geralmente é uma boa ideia tratar variáveis vazias ou não definidas da mesma maneira se elas deveriam conter um nome de arquivo.
Responder3
Embora seja muito provável que exista, você deve verificar por outro motivo: não é garantido que sejagrande. Em muitos sistemas, /tmp
é suportado por RAM em vez de disco e provavelmente é limitado a alguns GB. (Nos sistemas Fedora, é metade da RAM por padrão.) Portanto, você deve verificar não apenas a existência, mas se há espaço para colocar o que você pretende colocar lá.
Se você tiver algo grande, use /var/tmp/
.