Wenn Sie temporäre Dateien schreiben müssen, die nur so lange dauern, wie Ihr Skript oder Ihre Anwendung ausgeführt wird, verwenden Sie das Verzeichnis, das von der TMPDIR
Umgebungsvariablen angegeben wird, oder wenn diese Variable nicht definiert ist /tmp
.
/tmp
wird beim Booten auf einigen Systemen gelöscht (manchmal sogar im RAM, z. B. standardmäßig unter Solaris und bei einigen Linux-Installationen), sodass es nicht für Dateien verwendet werden kann, die einen Stromausfall oder einen Neustart überstehen müssen. /var/tmp
Kann für Dateien verwendet werden, die einen Neustart überstehen müssen, aber von Zeit zu Zeit vom Systemadministrator gesäubert werden. Wenn Ihre Anwendung Dateien dauerhaft speichern muss, schreiben Sie sie irgendwo in das Ausgangsverzeichnis des Benutzers (in ~/.programmingnoobsapp
oder ~/.cache/programmingnoobsapp
) oder unter /var/lib/programmingnoobsapp
oder /var/cache/programmingnoobsapp
.
Beachten Sie, dass dies /tmp
von allen Benutzern gemeinsam genutzt wird. Sie müssen daher Vorsichtsmaßnahmen treffen, wenn Sie dort eine Datei erstellen. Sie müssen einen Dateinamen auswählen, der noch nicht existiert, und Sie müssen darauf achten, dass Sie keine Race-Bedingung zulassen, bei der ein anderer Prozess die vor Ihnen liegende Datei mit unterschiedlichen Berechtigungen erstellt Wenn Sie als ein anderer Benutzer ausgeführt werden, kann er auf die Daten Ihres Prozesses zugreifen und diese ändern. Verwenden Sie den mktemp
Befehl, um eine Datei in /tmp
oder zu erstellen /var/tmp
. Erstellt standardmäßig mktemp
eine Datei in $TMPDIR
oder /tmp
wenn TMPDIR
nicht gesetzt, ist dies normalerweise der richtige Ort. Wenn Sie mehrere temporäre Dateien verwenden müssen oder auch nur eine, empfehle ich, ein Verzeichnis für alle temporären Dateien mit zu erstellenmktemp -d
und entfernen Sie es am Ende Ihres Skripts.
#!/bin/sh
tmp_root=
trap 'rm -rf "$tmp_root"' EXIT INT TERM HUP
tmp_root=$(mktemp -d)
tmpfile1=$tmp_root/file1
tmpfile2=$tmp_root/file2
…