
Muss ich prüfen und erstellen, /tmp
bevor ich in eine Datei darin schreibe? Gehen Sie davon aus, dass niemand ausgeführt wurde, sudo rm -rf /tmp
da dies ein sehr seltener Fall ist
Antwort1
DerFHSMandate, die /tmp
existieren, ebenso wiePOSIXSie können sich also darauf verlassen, dass es da ist (zumindest auf kompatiblen Systemen; aber auf Unix-ähnlichen Systemen ist es ziemlich sicher, dass es da ist). Aber das sollten Sie nicht: Der Systemadministrator oder der Benutzer bevorzugen möglicherweise andere Speicherorte für temporäre Dateien. SieheFinden des richtigen temporären Verzeichnisses auf mehreren Plattformenfür mehr Details.
Antwort2
In der Praxis /tmp
ist die Existenz von ziemlich sicher. Aber selbst wenn es existiert, heißt das nicht, dass Sie dort temporäre Dateien ablegen sollten.
DerStandardTMPDIR
Konvention ist, die Umgebungsvariable zu verwenden . Wenn sie existiert, verweist sie auf ein Verzeichnis für temporäre Dateien. Wenn sie nicht existiert, legen Sie temporäre Dateien dort ab /tmp
.
In einem Shell-Skript können Sie "${TMPDIR:-/tmp}"
als temporären Dateispeicherort verwenden: Dies wird auf den Wert von erweitert, TMPDIR
wenn es gesetzt ist¹, und andernfalls auf /tmp
. Oder Sie können es TMPDIR
bedingt festlegen, wenn es nicht gesetzt ist, mit dem Befehl
: "${TMPDIR:=/tmp}"
und erstellen Sie dann darin temporäre Dateien "$TMPDIR"
.
Beachten Sie, dass jede Anwendung Dateien unter /tmp
oder erstellen kann $TMPDIR
. Darüber hinaus kann dieses Verzeichnis von mehreren Benutzern gemeinsam genutzt werden, daher müssen Sie beim Erstellen einer Datei auf die Berechtigungen achten. Viele Systeme (Linux, *BSD) haben einen Befehlmktemp
Dadurch werden Dateien sicher im richtigen Verzeichnis erstellt. Es ist im Allgemeinen eine gute Idee, mktemp
temporäre Dateien und Verzeichnisse zu erstellen – insbesondere aus einem Shell-Skript, wo es aufgrund der Möglichkeit von Symlink-Angriffen unmöglich ist, eine Datei sicher in einem freigegebenen Verzeichnis zu erstellen ( mkdir
ist in Ordnung, wenn Sie Fehler richtig behandeln).
¹ und nicht leer – wenn die Variable leer ist, kann sie ohnehin nicht verwendet werden. Generell ist es eine gute Idee, leere oder nicht gesetzte Variablen auf die gleiche Weise zu behandeln, wenn sie einen Dateinamen enthalten sollen.
Antwort3
Obwohl es sehr wahrscheinlich ist, dass es existiert, sollten Sie es aus einem anderen Grund überprüfen: Es gibt keine Garantie dafür, dass es existiert.groß. Auf vielen Systemen /tmp
wird es durch RAM statt durch die Festplatte unterstützt und ist wahrscheinlich auf ein paar GB beschränkt. (Auf Fedora-Systemen ist es standardmäßig die Hälfte des RAM.) Sie sollten also nicht nur prüfen, ob es vorhanden ist, sondern auch, ob genügend Platz für das ist, was Sie dort ablegen möchten.
Wenn Sie etwas Großes haben, verwenden Sie /var/tmp/
.