A menudo uso el /tmp
directorio en mi máquina Linux para almacenar archivos temporales (por ejemplo, archivos PDF de un sitio que quiere que lo descargue primero, etc.) y a menudo creo un directorio con mi nombre de usuario. Pero en cada inicio se elimina (incluidos todos los archivos). Ahora sé que puedo ponerlo /var/tmp
, pero quiero que se elimine todo su contenido, pero que se mantenga el directorio en sí. Entonces:
tmp
|- me # this should stay
| |- foo1 # this should be deleted...
| |- bar1 # ...and this as well
|- other stuff...
¿Hay alguna forma de hacer esto? ¿Quizás con permisos o con una configuración especial?
/tmp
Es probable que sea untmpfs
sistema de archivos. Esos archivos no se eliminan realmente; simplemente se almacenan en la RAM y se pierden al reiniciar. Es por eso que obtienes respuestas que se reducen a "volver a crearlo en el arranque o iniciar sesión"Respuestas:
Una solución sería usar un
@reboot
trabajo cron:Agregar esto a su crontab
crontab -e
haría que se ejecute siempre que la máquina se inicie.O usar
en el archivo de inicio de su shell.
En cualquier caso, es posible que también desee utilizar
en el archivo de inicio de su shell si desea usar ese directorio como el directorio temporal predeterminado.
fuente
@reboot mkdir -p "/tmp/$USER"
al final del crontab no hace nada, mientras que la ejecuciónmkdir -p "/tmp/$USER"
realmente crea el directorio. Por cierto, el segundo no me funciona, porque necesito acceder a mi a/tmp
través de otros programas, y@reboot
trabajo cron no crea un directorio? ¿Recibes algún correo electrónico enviado a tu cuenta con algún mensaje de error del demonio cron?mail
? ¿O eso no es obligatorio?Lo uso
pam-tmpdir
para esto: crea un directorio temporal privado de usuario al iniciar sesión. Para configurarlo, agreguea los servicios PAM apropiados; en un sistema basado en Debian, la instalación del
libpam-tmpdir
paquete ofrecerá hacer esto por usted, o puede agregar la línea/etc/pam.d/common-session
. La próxima vez que inicie sesión, encontrará un directorio/tmp/user
con su ID de usuarioTMP
yTMPDIR
establecerá adecuadamente.fuente
Si no está ejecutando un sistema con systemd y utiliza systemd-tmpfiles para administrar la limpieza, entonces debe configurar el directorio utilizando ese sistema.
Aquí hay una documentación completa . Es probable que pueda lograr lo que desea creando
/etc/tmpfiles.d/something.conf
con contenidos como:fuente
Como se señaló en los comentarios,
/tmp
es para archivos que son transitorios y que no se perderán si se eliminan. Si estás en medio de algo y la máquina se reinicia, todo lo que hayas escrito allí desaparecerá y tendrás que comenzar de nuevo, lo que significa que esos archivos podrían no haber sido tan temporales después de todo.Mantuve un directorio temporal en mi directorio de inicio durante muchos años, comenzando cuando un gigabyte era mucho espacio y descubrí que requería una limpieza periódica para deshacerse de los archivos que se habían vuelto viejos y defectuosos. La mayoría de las veces lo que me quedaba después de ese proceso tenía menos de un par de semanas, así que ahora lo limpio con un trabajo cron que se ejecuta una vez al día:
Todo lo que descargo o creo como semi-temporal va allí y el sistema limpia todo lo que dejo. Cualquier cosa que necesite un hogar permanente se obtiene mucho antes de que el trabajo cron se deshaga de él.
fuente
mkdir a a/b; touch a/b/c
. Ahora espere hasta que hayan expirado sus 30 días. A medida que lo elimine,c
se actualizaráb
, lo que significará que tendrá que esperar otros 30 días. Del mismo modo cona
cuando eliminasb
. En segundo lugar, si crea archivosb
pero no los tocaa
durante 30 días, ela
directorio se verá afectadorm -rf
y borrará sus archivos recientesb
.find "$HOME"/tmp -mtime +30 -type f -delete; find "$HOME/tmp" -depth -mmin +60 -type d -exec rmdir {} + 2>/dev/null
funciona para mí