Búsqueda de sitios web

Crear, eliminar y escribir archivos automáticamente al iniciar en Ubuntu


Este tutorial muestra cómo crear, eliminar archivos/carpetas automáticamente y/o escribir parámetros en archivos de configuración al inicio en Ubuntu y otros Linux usando systemd.

Esto puede ser útil si alguna configuración no persiste y se restablece a los valores predeterminados en cada inicio, o si desea limpiar algo en cada inicio o después de cada período de tiempo.

Los usuarios avanzados pueden crear manualmente un script y ejecutarlo mediante una tarea programada crontab o un servicio systemd personalizado. Pero aquí te mostraré cómo hacer el truco usando tmpfile.d, una configuración incorporada para la creación, eliminación y limpieza de archivos volátiles y temporales.

En Ubuntu, Debian, Fedora y muchas otras distribuciones de Linux, existen algunos servicios systemd diseñados para crear automáticamente archivos y directorios volátiles y realizar una limpieza diaria de directorios temporales. Incluyen:

  • systemd-tmpfiles-setup.servicio
  • systemd-tmpfiles-clean.timer
  • systemd-tmpfiles-setup-dev.servicio
  • systemd-tmpfiles-setup-dev-early.servicio

Para verificar si su sistema los tiene, ejecute systemctl status systemd-tmpfiles* en una ventana de terminal:

  • /etc/tmpfiles.d/ (recomendado)
  • /run/tmpfiles.d/
  • /usr/lib/tmpfiles.d/
  • ~/.config/user-tmpfiles.d/ (no funciona en mi caso en Ubuntu 24.04)
  • ~/.local/share/user-tmpfiles.d/ (no funciona en mi caso en Ubuntu 24.04)

Crear, eliminar archivos o carpetas automáticamente al iniciar

Para crear un archivo de configuración tmpfiles.d personalizado, simplemente abra la terminal (Ctrl+Alt+T) y ejecute el comando:

sudo nano /etc/tmpfiles.d/test.conf

En el comando, reemplace test con el nombre que desee. Crea y abre el archivo en el editor de texto nano de línea de comando.

Cuando se abra el archivo, agregue las siguientes líneas para las operaciones correspondientes. Después de editar, puede presionar Ctrl+S para guardar el archivo y luego Ctrl+X para salir.

Crear carpeta:

Para crear automáticamente una carpeta en cada arranque, por ejemplo, cree “myfolder” en /etc, agregue las siguientes líneas:

#Type  Path           Mode   User Group  Age  Argument
d     /etc/myfolder    -    -     -     -    -

Aquí la primera línea, que comienza con “#”, es la línea de descripción que no funciona. En la segunda línea, dice:

  • d: indica que se realice la operación de creación si la carpeta NO existe.
  • /etc/myfolder: especifique la ruta del directorio a crear.
  • ” omite el uso predeterminado para Modo, Usuario, Grupo, Edad y Argumento.

De forma predeterminada, utiliza 0775 para el permiso de la carpeta (leer (4), escribir (2), ejecutar (1) para propietario y grupo (4+2+1=7), leer, ejecutar ( 4+1=5) para otros), root para usuario y grupo.

Para elegir, puede especificar el permiso, la propiedad. Y establecer una "edad" hará que se limpie todo el contenido de esa carpeta después de cada período de tiempo determinado.

#Type  Path                            Mode   User Group  Age  Argument
d     /home/ji/Documents/myfolder      0775    ji    ji     -    -
d     /home/ji/Documents/myfolder/test 0775    ji    ji    10d   -

El disparador del temporizador actúa cada 24 horas (excepto la primera acción, que ocurre 15 minutos después del inicio), por lo que es mejor configurar la edad en días.

Si la carpeta ya existe y desea eliminar todo su contenido al inicio (luego limpiarla en un período de tiempo determinado), utilice D en su lugar con el argumento --remove.

#Type  Path                            Mode   User Group  Age  Argument
D     /home/ji/Documents/myfolder/test 0775    ji    ji    10d   --remove

Crea un archivo:

Para crear automáticamente un archivo al inicio, utilice f o f+. Por ejemplo:

#Type  Path                     Mode   User Group  Age  Argument
d     /etc/myfolder              -     -      -     -     -
f     /etc/myfolder/xxx.conf     -     -      -      -    some text here\n

Agregue las líneas anteriores en un archivo .conf en el directorio /etc/tmpfiles.d; primero creará el directorio “/etc/myfolder” si no existe, luego cree el archivo “xxx.conf” en ese directorio y escriba “algo de texto aquí” si el archivo NO existe.

Aquí, \n es un salto de línea para crear una nueva línea. Por supuesto, puede omitir el argumento con '-' (sin comillas), por lo que intentará crear el archivo si no existe.

Si el archivo ya existe, entonces 'f' no hará nada. En ese caso, puede usar f+, que reemplazará el contenido del archivo original (si lo hay) con el nuevo. uno que estableces por argumento.

#Type  Path                     Mode   User Group  Age  Argument
d     /etc/myfolder              -     -      -     -     -
f+     /etc/myfolder/xxx.conf     -     -      -      -    some text here\n

Escribir texto en archivo:

Para escribir texto automáticamente en un archivo, utilice w. Por ejemplo:

#Type    Path                   Mode User Group  Age   Argument
w      /home/ji/Documents/333    -    -     -     -   auto write line 1

Si el archivo NO existe, ¡no hace nada! Y w NO elimina el contenido del archivo original (si lo hay), sino que simplemente intenta sobrescribirlo desde el principio.

Es decir, si el contenido del archivo original es más largo que el contenido nuevo que desea escribir, se estropeará el contenido del archivo (consulte la captura de pantalla a continuación). En este caso, utilice f+ en lugar de w, lo que sobrescribirá todo el contenido anterior.

Para conservar el contenido original del archivo y escribir al final del archivo, utilice w+ en su lugar.

#Type    Path                   Mode User Group  Age   Argument
w+      /home/ji/Documents/333    -    -     -     -    #This is a new line\n
w+      /home/ji/Documents/3*    -    -     -     -    #write one more line\n
w+      /home/ji/Documents/33*    -    -     -     -    enable=1

NOTA: w+ no comenzará una nueva línea si no hay un salto de línea al final. Entonces, puede agregar \n al comienzo del argumento para comenzar una nueva línea, y también agregarlo al final para la siguiente.

Además, puede escribir varios archivos utilizando un asterisco en el nombre del archivo. Por ejemplo, 3* coincide con todos los archivos cuyo nombre comienza con 3. *.txt coincide con todos los archivos .txt del directorio.

NOTA: Si utiliza “w” y “w+” para escribir el mismo archivo, ¡solo funcionará el primero! Si utiliza "f" y "f+" para crear el mismo archivo, solo funcionará el primero.

Eliminar archivos o carpetas

Para eliminar archivos automáticamente al iniciar, utilice r.

Por ejemplo, elimine todos los archivos .txt, el archivo 123, carpeta vacía, en la carpeta Documentos del usuario:

#Type    Path                     Mode  User  Group   Age  Argument  
r      /home/ji/Documents/*.txt   -     -     -       -      -
r      /home/ji/Documents/123     -      -     -      -       -
r      /home/ji/an-empty-folder   -      -     -      -       -

Para eliminar la carpeta y todos los archivos y subcarpetas que contiene, utilice R en su lugar:

#Type    Path                     Mode  User  Group   Age  Argument  
R      /home/ji/Documents/myfolder   -     -     -       -      -

Además

La configuración tmpfiles.d puede realizar aún más operaciones al inicio, como crear un enlace simbólico, copiar archivos o directorios, ¡y más! ¡Consulte la página de manual de freedesktop.org para obtener más detalles!

Artículos relacionados