Wie lange halten temporäre Dateien, die mit mktemp erstellt wurden?

20

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.

MEIN V
quelle

Antworten:

17

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.

mktempFü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. mktempDie Manpage von gibt das an

Wenn TEMPLATE nicht angegeben ist, --tmpdirwird angenommen, wenn --tmpdirnicht angegeben, /tmpwird angenommen.

Das bedeutet, dass durch einfaches Ausführen mktempeine Datei erstellt wird, die tmp.RANDOM_STRING im Verzeichnis / tmp aufgerufen wird . Wenn Sie also mktempohne Parameter ausführen, wird eine Datei erstellt, die zusammen mit allen anderen /tmpsystemabhängig gelöscht wird . Für solche Dateien ist die $TMPTIMEVariable wichtig, wie in der Antwort von Chris unten erläutert. Bei vielen Distributionen wird standardmäßig /tmpjeder Start gelöscht, da auf $TMPTIMEfestgelegt 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 fooXXXdann eine Datei mit dem Namen fooXXXwird im aktuellen Verzeichnis erstellt , in dem XXXdurch 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 /tmpjemals 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 /tmpund 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
terdon
quelle
2
Das beantwortet meine Frage nicht. Es wird gesagt, dass es eine "temporäre" Datei erstellt und keine Informationen darüber gibt, wie lange es dauert. So dauert es für immer? Wird das tmp-Verzeichnis beim Systemstart gelöscht?
MYV
@Maksim siehe aktualisierte Antwort. Außerdem wurde bei Ihrer Frage nicht gefragt, wann das tmpVerzeichnis gelöscht wird, sondern wann mit erstellte Dateien mktempgelöscht werden. Wie Sie sehen können, sind die beiden nicht unbedingt verwandt :).
Terdon
6

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 gegen tmpwatch.

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

Chris
quelle
Da mktempes in jedem Verzeichnis ausgeführt werden kann und einfach einen beliebigen Dateinamen erzeugt, sehe ich nicht, wie das überhaupt etwas zu tun hat tmpwatch.
Terdon
1
Standardmäßig mktempwerden Dateien in erstellt /tmp/.
Chris
nur wenn du keine VORLAGE gibst, sieh meine aktualisierte Antwort.
Terdon
1

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.

EBGreen
quelle
Verwenden einige Systeme kein TMPTIME?
sittsam
@demure ja aber nur zum löschen /tmpoder andere tmp verzeichnisse. Vom Benutzer erstellte Dateien werden nicht zufällig gelöscht.
Terdon
Standardmäßig mktempwerden Dateien in erstellt /tmp/.
Chris