Verhindern Sie, dass ein Verzeichnis in / tmp gelöscht wird

10

Ich verwende das /tmpVerzeichnis auf meinem Linux-Computer häufig zum Speichern temporärer Dateien (z. B. PDFs von einer Site, die ich zuerst herunterladen soll usw.) und erstelle häufig ein Verzeichnis mit meinem Benutzernamen. Aber bei jedem Start wird es (einschließlich aller Dateien) gelöscht. Jetzt weiß ich, dass ich es einfügen kann /var/tmp, aber ich möchte, dass alle Inhalte gelöscht werden, aber das Verzeichnis selbst bleibt erhalten. So:

tmp
 |- me # this should stay
 |  |- foo1 # this should be deleted...
 |  |- bar1 # ...and this as well
 |- other stuff...

Gibt es eine Möglichkeit, dies zu tun? Vielleicht mit Berechtigungen oder mit einer speziellen Konfiguration?

Linux4win
quelle
1
Um dieses Problem zu umgehen, können Sie bei Bedarf Code in die Anmeldedateien Ihrer Shell einfügen, um "test & mkdir" zu erstellen.
Jeff Schaller
3
/tmpist wahrscheinlich ein tmpfsDateisystem. Diese Dateien werden nicht wirklich gelöscht. Sie werden einfach im RAM gespeichert und gehen bei einem Neustart verloren. Aus diesem Grund erhalten Sie Antworten, die darauf
hinauslaufen

Antworten:

4

Eine Lösung wäre die Verwendung eines @rebootCron-Jobs:

@reboot mkdir -p "/tmp/$USER"

Wenn Sie dies zu Ihrer Crontab hinzufügen crontab -e, wird sie ausgeführt, wenn die Maschine hochfährt.

Oder verwenden

mkdir -p "/tmp/$USER"

in der Startdatei Ihrer Shell.

In beiden Fällen möchten Sie möglicherweise auch verwenden

TMPDIR=/tmp/$USER
export TMPDIR

in der Startdatei Ihrer Shell, wenn Sie dieses Verzeichnis als temporäres Standardverzeichnis verwenden möchten.

Kusalananda
quelle
Wird dies a) Verzeichnisse für alle Benutzer erstellen und b) auch beim Kaltstart auslösen?
Linux4win
1
@ Linux4win Diese Antwort spricht die Bedürfnisse eines einzelnen Benutzers an, da Sie die Frage so formuliert haben. Es spielt keine Rolle, wie die Maschine gestartet wird (heiß, kalt oder lauwarm), aber es wird nicht ausgelöst, wenn der Ruhezustand fortgesetzt wird (da dies nicht gestartet wird).
Kusalananda
Aus irgendeinem Grund führt das Hinzufügen @reboot mkdir -p "/tmp/$USER"zum Ende der Crontab nichts aus, während beim Ausführen mkdir -p "/tmp/$USER"das Verzeichnis tatsächlich erstellt wird. Der zweite funktioniert übrigens nicht für mich, weil ich /tmpüber andere Programme auf meine zugreifen muss und das Starten der Shell jedes Mal etwas ärgerlich ist ...
Linux4win
@ Linux4win Der @rebootCron-Job erstellt kein Verzeichnis? Erhalten Sie eine E-Mail mit Fehlermeldungen vom Cron-Daemon an Ihr Konto?
Kusalananda
naja nein ... Vielleicht weil ich nicht konfiguriert habe mail? Oder ist das nicht erforderlich?
Linux4win
14

Ich benutze pam-tmpdirdafür: Es erstellt ein benutzerprivates temporäres Verzeichnis bei der Anmeldung. Fügen Sie zum Einrichten hinzu

session optional pam_tmpdir.so

zu den entsprechenden PAM-Diensten; Auf einem Debian-basierten System bietet die Installation des libpam-tmpdirPakets die Möglichkeit, dies für Sie zu tun, oder Sie können die Zeile hinzufügen /etc/pam.d/common-session. Wenn Sie sich das nächste Mal anmelden, finden Sie unter ein Verzeichnis /tmp/usermit Ihrer Benutzer-ID TMPund TMPDIRstellen es entsprechend ein.

Stephen Kitt
quelle
7
Können Sie erklären, welche PAM-Dienste geeignet sind und wie die Leitung zu ihnen hinzugefügt werden kann? Welche Dateien sollen bearbeitet werden?
Terdon
2

Wenn Sie kein System mit systemd ausführen und systemd-tmpfiles zum Verwalten der Bereinigung verwenden, sollten Sie das Verzeichnis mit diesem System konfigurieren.

Hier ist eine vollständige Dokumentation . Sie können wahrscheinlich erreichen, was Sie wollen, indem Sie /etc/tmpfiles.d/something.confInhalte erstellen wie:

d     /tmp/your_username   0750 your_user your_group  - -
Viraptor
quelle
1

Wie in den Kommentaren erwähnt, /tmpgilt dies für Dateien, die vorübergehend sind und beim Löschen nicht übersehen werden. Wenn Sie sich mitten in etwas befinden und der Computer neu gestartet wird, verschwindet alles, was Sie dort geschrieben haben, und Sie müssen neu beginnen, was bedeutet, dass diese Dateien möglicherweise doch nicht so vorübergehend waren.

Ich habe viele Jahre lang ein temporäres Verzeichnis in meinem Home-Verzeichnis geführt, angefangen als ein Gigabyte viel Speicherplatz war, und festgestellt, dass es regelmäßig gepflegt werden muss, um Dateien zu entfernen, die alt und mürrisch geworden sind. Die meiste Zeit, die ich nach diesem Prozess übrig hatte, war weniger als ein paar Wochen alt, also räume ich es jetzt mit einem Cron-Job auf, der einmal täglich ausgeführt wird:

find $HOME/tmp -depth -mtime +30 -print0 | xargs -0 -r rm -rf

Alles, was ich als semi-temporär herunterlade oder erstelle, wird dort abgelegt und das System bereinigt alles, was ich zurücklasse. Alles, was ein dauerhaftes Zuhause braucht, bekommt eines, lange bevor der Cron-Job es los wird.

Blrfl
quelle
mkdir a a/b; touch a/b/c. Warten Sie nun, bis Ihre 30 Tage abgelaufen sind. Wenn Sie es löschen, wird ces aktualisiert b, was bedeutet, dass es weitere 30 Tage warten muss. Ebenso abeim Löschen b. Zweitens, wenn Sie Dateien erstellen b, diese aber a30 Tage lang nicht berühren , wird das aVerzeichnis getroffen rm -rfund löscht Ihre letzten Dateien unter b.
Roaima
find "$HOME"/tmp -mtime +30 -type f -delete; find "$HOME/tmp" -depth -mmin +60 -type d -exec rmdir {} + 2>/dev/nullarbeitet für mich
Roaima