Ich verwende das /tmp
Verzeichnis 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?
/tmp
ist wahrscheinlich eintmpfs
Dateisystem. 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 daraufAntworten:
Eine Lösung wäre die Verwendung eines
@reboot
Cron-Jobs:Wenn Sie dies zu Ihrer Crontab hinzufügen
crontab -e
, wird sie ausgeführt, wenn die Maschine hochfährt.Oder verwenden
in der Startdatei Ihrer Shell.
In beiden Fällen möchten Sie möglicherweise auch verwenden
in der Startdatei Ihrer Shell, wenn Sie dieses Verzeichnis als temporäres Standardverzeichnis verwenden möchten.
quelle
@reboot mkdir -p "/tmp/$USER"
zum Ende der Crontab nichts aus, während beim Ausführenmkdir -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 ...@reboot
Cron-Job erstellt kein Verzeichnis? Erhalten Sie eine E-Mail mit Fehlermeldungen vom Cron-Daemon an Ihr Konto?mail
? Oder ist das nicht erforderlich?Ich benutze
pam-tmpdir
dafür: Es erstellt ein benutzerprivates temporäres Verzeichnis bei der Anmeldung. Fügen Sie zum Einrichten hinzuzu den entsprechenden PAM-Diensten; Auf einem Debian-basierten System bietet die Installation des
libpam-tmpdir
Pakets 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/user
mit Ihrer Benutzer-IDTMP
undTMPDIR
stellen es entsprechend ein.quelle
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.conf
Inhalte erstellen wie:quelle
Wie in den Kommentaren erwähnt,
/tmp
gilt 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:
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.
quelle
mkdir a a/b; touch a/b/c
. Warten Sie nun, bis Ihre 30 Tage abgelaufen sind. Wenn Sie es löschen, wirdc
es aktualisiertb
, was bedeutet, dass es weitere 30 Tage warten muss. Ebensoa
beim Löschenb
. Zweitens, wenn Sie Dateien erstellenb
, diese abera
30 Tage lang nicht berühren , wird dasa
Verzeichnis getroffenrm -rf
und löscht Ihre letzten Dateien unterb
.find "$HOME"/tmp -mtime +30 -type f -delete; find "$HOME/tmp" -depth -mmin +60 -type d -exec rmdir {} + 2>/dev/null
arbeitet für mich