Ich habe mich gefragt, wie lange die mit mktemp erstellten temporären Dateien noch dauern. Es scheint mir seltsam, sich auf eine Datei zu verlassen, die jederzeit verschwinden kann. Ich bin auf Ubuntu, wenn es darauf ankommt.
Huh? Von man mktemp
:
DESCRIPTION
Create a temporary file or directory, safely, and
print its name. TEMPLATE must contain at least 3
consecutive `X's in last component. If TEMPLATE is
not specified, use tmp.XXXXXXXXXX, and --tmpdir is
implied. Files are created u+rw, and directories
u+rwx, minus umask restrictions.
mktemp
Fügt einfach eine zufällige Zeichenfolge hinzu, um einen eindeutigen Dateinamen zu erstellen. Niemand wird es automatisch entfernen.
Da es anscheinend ein paar Argumente gibt, wollen wir etwas näher darauf eingehen. mktemp
Die Manpage von gibt das an
Wenn TEMPLATE nicht angegeben ist,
--tmpdir
wird angenommen, wenn--tmpdir
nicht angegeben,/tmp
wird angenommen.
Das bedeutet, dass durch einfaches Ausführen mktemp
eine Datei erstellt wird, die tmp.RANDOM_STRING
im Verzeichnis / tmp aufgerufen wird . Wenn Sie also mktemp
ohne Parameter ausführen, wird eine Datei erstellt, die zusammen mit allen anderen /tmp
systemabhängig gelöscht wird . Für solche Dateien ist die $TMPTIME
Variable wichtig, wie in der Antwort von Chris unten erläutert. Bei vielen Distributionen wird standardmäßig /tmp
jeder Start gelöscht, da auf $TMPTIME
festgelegt 0
. In den meisten (wenn nicht allen) Distributionen ist dies in der Datei festgelegt /etc/default/rcS
:
$ grep TMPTIME /etc/default/rcS
TMPTIME=0
Nun, wenn Sie tun eine Vorlage angeben, zum Beispiel mktemp fooXXX
dann eine Datei mit dem Namen fooXXX
wird im aktuellen Verzeichnis erstellt , in dem XXX
durch drei zufällige Zeichen ersetzt wird. Diese Datei wird nur gelöscht, wenn Sie dies ausdrücklich ausgewählt haben. Nur Dateien in den "offiziellen" temporären Verzeichnissen, wie sie /tmp
jemals vom System automatisch gelöscht wurden, gibt es kein magisches Bit, das Sie setzen können, um eine temporäre Datei anzugeben. Dateien außerhalb /tmp
und deren Inhalte werden nicht automatisch gelöscht.
Um Ihre Hauptfrage zu beantworten, ist es natürlich seltsam, sich auf eine Datei zu verlassen, die verschwinden kann. Deshalb sind die Benutzer nicht auf tmp-Dateien angewiesen. Sie dienen dazu, Daten vorübergehend zu speichern, und wir können sie dann vergessen. Es gibt viele Möglichkeiten, eine dauerhafte Datei mit zufälligem Namen zu erstellen. Beispielsweise:
echo "foo" > $RANDOM.txt
echo "foo" > `mktemp fooXXX.txt`
echo "foo" > $$.txt
tmp
Verzeichnis gelöscht wird, sondern wann mit erstellte Dateienmktemp
gelöscht werden. Wie Sie sehen können, sind die beiden nicht unbedingt verwandt :).Bitte beachten Sie, dass temporäre Dateien möglicherweise während des Systemstarts oder gemäß TMPTIME entfernt werden. Bitte sehen Sie, was Sie in haben
/etc/cron.daily/tmpwatch
./var/tmp/
auf der anderen Seite ist in der Regel immun gegentmpwatch
.Temporäre Dateien werden (normalerweise) für kurze Zeit erstellt. Sie haben einen temporären Namen, so dass es nicht einfach ist, einen Timing-Angriff auszuführen. Normalerweise werden sie gelöscht, wenn sie nicht mehr vom Programm benötigt werden. Normalerweise behält Ihr Skript diese Datei für einen sehr kurzen Zeitraum bei, verarbeitet normalerweise Text oder andere Dateien und entfernt sie, sobald sie nicht benötigt werden. Wenn Ihr Skript abstürzen würde, würden Sie auch auf die Housekeeping-Prozeduren für / tmp-Ordner zurückgreifen (wenn Sie sich dafür entschieden haben, sie dort abzulegen).
Sie müssen keine temporäre Datei erstellen
/tmp
quelle
mktemp
es in jedem Verzeichnis ausgeführt werden kann und einfach einen beliebigen Dateinamen erzeugt, sehe ich nicht, wie das überhaupt etwas zu tun hattmpwatch
.mktemp
werden Dateien in erstellt/tmp/
.Temporäre Dateien verschwinden nicht von alleine. Sie werden als temporäre Dateien bezeichnet, weil Sie sie in Ihrem Skript oder in Ihrer Sitzung oder an jedem Ort, an dem Sie sie erstellen, löschen müssen, wenn Sie fertig sind. Oder lass sie herumliegen, wenn das dein Ding ist. mktemp existiert nur, um Ihnen zu ermöglichen, eine Datei mit dem Namen "einzigartig" zu erstellen, damit eine vorhandene Datei nicht überschrieben wird.
quelle
TMPTIME
?/tmp
oder andere tmp verzeichnisse. Vom Benutzer erstellte Dateien werden nicht zufällig gelöscht.mktemp
werden Dateien in erstellt/tmp/
.