é garantido que /tmp existe?

é garantido que /tmp existe?

Preciso verificar e criar /tmpantes de gravar em um arquivo dentro dele? Suponha que ninguém tenha fugido sudo rm -rf /tmpporque esse é um caso muito raro

Responder1

OESFmandatos que /tmpexistem, 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 TMPDIRvariá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 TMPDIRse estiver definido¹ e para /tmpo contrário. Ou você pode definir TMPDIRcondicionalmente 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 /tmpou $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 comandomktempque cria arquivos com segurança no diretório correto. Geralmente é uma boa ideia usar mktemppara 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/.

informação relacionada