é / tmp garantido para existir?

40

Preciso verificar & criar /tmp antes de gravar em um arquivo dentro dele? Suponha que ninguém tenha executado sudo rm -rf /tmp porque esse é um caso muito raro

    
por Ayush Shanker 29.04.2017 / 13:59

3 respostas

58

A ESF exige que /tmp exista, assim como POSIX para que você possa confiar na sua presença (pelo menos em sistemas compatíveis, mas na verdade é praticamente garantido presente em sistemas Unix-like). Mas você não deve: o administrador do sistema ou o usuário pode preferir outros locais para arquivos temporários. Consulte Encontrando o diretório tmp correto em várias plataformas para obter mais detalhes.

    
por 29.04.2017 / 14:10
42

Na prática, /tmp é praticamente garantido de existir. No entanto, mesmo que exista, isso não significa que você deve colocar arquivos temporários lá.

A convenção padrão é usar a variável de ambiente TMPDIR . Se existir, aponta para um diretório para arquivos temporários. Se não existir, coloque arquivos temporários em /tmp .

Em um script de shell, você pode usar "${TMPDIR:-/tmp}" como o local do arquivo temporário: isso se expande para o valor de TMPDIR se for set¹ e para /tmp caso contrário. Ou você pode definir TMPDIR condicionalmente caso não seja definido, com o comando

: "${TMPDIR:=/tmp}"

e, em seguida, crie arquivos temporários dentro de "$TMPDIR" .

Observe que qualquer aplicativo pode criar arquivos em /tmp ou $TMPDIR . Além disso, esse diretório pode ser compartilhado entre usuários, portanto, você precisa ter cuidado com as permissões ao criar um arquivo. Muitos sistemas (Linux, * BSD) têm um comando mktemp que cria arquivos com segurança no diretório correto. Geralmente é uma boa idéia usar mktemp para criar arquivos e diretórios temporários - especialmente a partir de um shell script, 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ê manipular erros corretamente).

¹ e não-vazio - se a variável estiver vazia, então não é utilizável como é de qualquer maneira, e geralmente é uma boa ideia tratar variáveis vazias ou não definidas da mesma forma se elas supostamente contiverem um nome de arquivo.

    
por 29.04.2017 / 14:11
6

Embora seja muito provável que exista, você deve verificar por outro motivo: não é garantido que seja grande . Em muitos sistemas, /tmp é suportado pela RAM, em vez de pelo disco, e provavelmente limitado a alguns GB. (Nos sistemas Fedora, é a metade da RAM por padrão). Então, 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/ .

    
por 01.05.2017 / 01:16

Tags