Ich fange an, ein paar Bash-Skripte für mein Projekt zu schreiben, und dazu müssen einige Zwischendateien oder Variablen geschrieben werden.
Ich möchte wissen, auf welche Ordner ich Zugriff haben kann, wenn jemand mein Skript ausführt. Ist es eine gängige Praxis zu verwenden /tmp/
? Oder sollte ich etwas anderes benutzen?
scripting
filesystems
directory-structure
tmp
Noob programmieren
quelle
quelle
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 denmktemp
Befehl, um eine Datei in/tmp
oder zu erstellen/var/tmp
. Erstellt standardmäßigmktemp
eine Datei in$TMPDIR
oder/tmp
wennTMPDIR
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.quelle
mktemp
. Für mich ist dies die richtige Antwort: Delegieren Sie die Aufgabe des sicheren Erstellens einer temporären Datei anmktemp
(siehe diesen Artikel ). Obwohl die eine Antwort, die das zitiert,FHS
auch großen Wert hat.tmp_root
bevor Sie es zuweisen? Wäre es nicht natürlicherunset
?set -u
, aber das ist ungewöhnlich). Es muss vor dem Setzen des Traps (un) auf einen sicheren Wert gesetzt werden, falls das Skript direkt nach dem Setzen des Traps beendet wird.set -o errexit
, dass, wenntmp_root
es in der Umgebung bereits schreibgeschützt ist, es nicht das falsche Verzeichnis zerstört ...Nur um die bisher geposteten Antworten zu ergänzen.
Es gibt auch
/dev/shm
einige Linux-Distributionen, die für die temporäre Speicherung verwendet werden können. Dieser Speicher sollte nur verwendet werden, wenn die Leistung der Datei-E / A ein kritischer Faktor/dev/shm
ist, da dastmpfs
Dateisystem verwendet wird. Es sollte auch für Dateien und Daten mit angemessener Größe verwendet werden. Dastmpfs
Dateisystem verwendet einen System-RAM als Speicher, so dass er von Start zu Start nicht persistent ist.Eine gute Übersicht über alle hier auf StackOverflow genannten Optionen finden Sie auch in dieser Frage und Antwort mit dem Titel: / tmp vs. / dev / shm für temporären Dateispeicher unter Linux? . Diese SuperUser-Fragen und Antworten mit dem Titel: Wann sollte ich / dev / shm / und wann / tmp verwenden? .
Verweise
quelle
Ja,
/tmp
hauptsächlich für Dateien, die vorübergehend benötigt werden. Das / tmp hat Sticky-Bit, was bedeutet, dass nur der Eigentümer des Elements, der Eigentümer des Verzeichnisses oder der Superuser Dateien umbenennen oder löschen können. Viele Programme verwenden dies zum Erstellen von Sperrdateien und zum temporären Speichern von Daten. Bei einigen Distributionen wird dieses Verzeichnis beim Booten oder Herunterfahren gelöscht.quelle