Besoin d'aide pour automatiser des tâches via le terminal

Répondre
tristanbailly83
Messages : 1
Enregistré le : mer. 11 juin 2025 04:56
Contact :

Besoin d'aide pour automatiser des tâches via le terminal

Message par tristanbailly83 »

Bonjour à tous,

Je me familiarise avec les commandes terminal sous Linux Mint et je cherche à automatiser quelques tâches récurrentes (nettoyage, sauvegardes, etc.). J'ai trouvé un excellent cours PDF sur les commandes Linux ( https://ubuntu.com/tutorials/command-li ... 1-overview )qui m'aide beaucoup, mais j'aurais besoin de conseils pratiques pour :

Créer un script bash pour :
  1. Supprimer les fichiers temporaires (.cache, .thumbnails)
  2. Mettre à jour les paquets automatiquement
  3. Sauvegarder certains dossiers dans /backup
  4. Rendre le script exécutable et l'ajouter aux tâches planifiées (cron)
J'ai déjà essayé quelques commandes basiques, mais :
]Comment gérer les erreurs si un dossier n'existe pas ?
Est-il possible d'ajouter des notifications en cas de succès/échec ?
Quelles bonnes pratiques respecter (droits, logs, etc.) ?

Si certains ont des exemples de scripts similaires ou des retours d'expérience, je suis preneur ! Merci d'avance pour votre aide.

PS : Pour les débutants comme moi, le cours lié ci-dessus est vraiment clair pour comprendre les bases du terminal.
Modifié en dernier par arghlub le sam. 19 juil. 2025 05:32, modifié 1 fois.
Raison : un peu de miseen forme
Avatar du membre
arghlub
Administrateur du site
Messages : 11560
Enregistré le : dim. 21 mai 2017 08:19
Localisation : Provence

Re: Besoin d'aide pour automatiser des tâches via le terminal

Message par arghlub »

Salut,

Bien sûr que cela est possible (tout est quasiment possible avec linux) ...
Je ne vais pas te donner la soluce clé en main, je préfère que cela fasse sujet à discussion.

Je répondrais juste à la 4ème question (oups j'ai mis en forme ton post en numérotant tes questions pour que cela soit plus lisible :geek: )

Pour la 4ème question : pour rendre un script exécutable, il suffit que tu lui donnes le droit «x» (eXécutable).
Pour rappel il y a 3 droits sur un fichier :
  • r = read = lire = chiffre 4 en octal
  • w = write = écrire/modifier = chiffre 2 en octal
  • x = execute = lancer/exécuter = chiffre 1 en octal
Tu peux voir ces permissions en faisant la liste (ls) détaillée du contenu du dossier/répertoire dans lequel tu te truves avec :

Code : Tout sélectionner

ls -l
Ces droits peuvent être assignés indépendamment au propriétaire du fichier, à un groupe ou aux autres (tout le monde).
Donc imaginons que ton script s'appelle «script_spatial.sh».
Pour lui donner les droits d'exécution et de lecture du code pour tout le monde mais qu'uniquement toi puisse le modifier,, on peut faire cela facilement en utilisant la base en octal par exemple.

Commande pour assigner ces permissions (tu ne pourras le faire que si tu es proprio du script, sinon il faudra ajouter un «sudo») :

Code : Tout sélectionner

chmod 755 script_spatial.sh
On peut faire las même chose dans un gestionnaire de fichiers, en faisant un clic-droit sur le fichier >Propriétés > onglet Permissions > «Autoriser ce fichier à être exécuté comme un programme».

Plus d'infos sur les droits/permissions : https://doc.ubuntu-fr.org/permissions

Pour le planifier et l'exécuter automatiquement à intervalles réguliers, pas bien compliqué, un peu de lecture : https://doc.ubuntu-fr.org/cron

————————————————————
Pour d'ééventuelles notifs, tourne toi vers zenity (ou yad ou d'autres applis, zenity est simple et puissant) par exemple.
Exemple de notification, script qui n' rien à voir avec ton projet mais juste pour te montrer ce que l'on peut faire avec zenity quand on l'utilise vraiment basiquement (cela peut aller beaucoup plus loin, zenity peut aussi poser des questions, stockés les réponses dans des variables, etc) : un vieux script que j'avais fait pour mon ami Alain : viewtopic.php?p=117719#p117719
;)
Tour1 (custom) CPU Intel I7-7700K | CG Nvidia GTX 1080 | RAM 16Go | tripleBoot : LMint 22.3 | Debian 12 | MX Linux | XFCE
Tour2 (custom) CPU AMD Athlon 5200+ | CG Nvidia GTX 560 | RAM 6Go | FreeBSD XFCE
Portable1 MSI GF75 Thin 9SC | CPU Intel I7-9750H | CG Nvidia GTX 1650 | RAM 32Go | dualBoot : LMint 22.1 | MX Linux | XFCE
Portable2 MacBook Air A1466 | CPU Intel I5-5250U | CG Intel HD Graphics 6000 | RAM 8Go | dualBoot : macOS Sierra | MX Linux XFCE
─────( pour une informatique libre ! )─────
Avatar du membre
arghlub
Administrateur du site
Messages : 11560
Enregistré le : dim. 21 mai 2017 08:19
Localisation : Provence

Re: Besoin d'aide pour automatiser des tâches via le terminal

Message par arghlub »

Je ne peux pas m'empêcher d'en rajouter une couche (j'adore quand des gens s'intéressent aux scripts) .... je vais me faire taper sur les doigts pas les modos :l :l :lol:

exemple (pas un script juste une ligne de commande) avec un alias pour effacer la liste des fichiers récents (si tu fais des trucs chelous que tu ne eux pas que le prochain utilisateur voit) :l :l

dans le fichier ~/.bash_aliases tu ajoutes la ligne :

Code : Tout sélectionner

alias recent='rm ~/.local/share/recently-used.xbel'
et quand tu tapes «recent» dans le terminal la liste des documents récents disparaît (la liste des noms de documents récents, pas les fichiers)

autre Alias mais basé sur un script pour vider la RAM , et le cache mémoire.
Ce script c''est moi qui l'ai fait rapidement mais on peut l'améliorer :

Code : Tout sélectionner

#!/bin/bash
# FreeRamSwap - script bash - openSouce
# par arghlub - c'est open, faites en ce que vous en voulez - aucune licence

# FreeRamSwap : indique l'état de la ram et du cache-mémoire avant/après une purge

ROUGE='\033[031m'
VERT='\033[032m'
GRAS='\033[1m'
SOULIGNE='\033[4m'
NC='\033[0m'

echo '_________________________________________________________________________________'
echo '—————————————————————————————————————————————————————————————————————————————————'
echo -e "\t\t${ROUGE}${GRAS}FREE RAM SWAP${NC}"
echo -e "\n\t${VERT}${GRAS}${SOULIGNE}RAM/SWAP LIBRE :${NC}"
free -h
echo -e "\n\t${VERT}${GRAS}${SOULIGNE}ON PURGE ...${NC}"
sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"
echo -e "\t${VERT}${GRAS}RAM et cache vidés.${NC}"
echo -e "\n\t${VERT}${GRAS}${SOULIGNE}RAM LIBRE APRÈS LA PURGE :${NC}"
free -h
echo -e "\n\t${VERT}${GRAS}ET VOILÀ !${NC}"
echo '_________________________________________________________________________________'
echo '—————————————————————————————————————————————————————————————————————————————————'
echo ''
et en ajoutant un alias :

Code : Tout sélectionner

alias ram='ALL=NOPASSWD: ~/ARGH_SCRIPTS/ram.sh'
Cela donne cela en image quand je tape «ram» (l'alias que j'ai donné, on lui doone le nom que l'on veut si c'est pas une commande bash de base) en terminal :
Image

Mais ce script n'est que de la cosmétique, la commande principale pour purger ram+cache est

Code : Tout sélectionner

sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"
et on peut ajouter des infos avant et après avec la commande «free» :

Code : Tout sélectionner

free -h && sudo sh -c "echo 3 > /proc/sys/vm/drop_caches" && free -h
Le mot de passe root va être demandé vu qu'il y'a un sudo ... et on pourrait le faire en interface graphique avec zenity par exemple, si on aime le bling-bling. 8-)
Tour1 (custom) CPU Intel I7-7700K | CG Nvidia GTX 1080 | RAM 16Go | tripleBoot : LMint 22.3 | Debian 12 | MX Linux | XFCE
Tour2 (custom) CPU AMD Athlon 5200+ | CG Nvidia GTX 560 | RAM 6Go | FreeBSD XFCE
Portable1 MSI GF75 Thin 9SC | CPU Intel I7-9750H | CG Nvidia GTX 1650 | RAM 32Go | dualBoot : LMint 22.1 | MX Linux | XFCE
Portable2 MacBook Air A1466 | CPU Intel I5-5250U | CG Intel HD Graphics 6000 | RAM 8Go | dualBoot : macOS Sierra | MX Linux XFCE
─────( pour une informatique libre ! )─────
Avatar du membre
tioker
modérateur
Messages : 1177
Enregistré le : sam. 6 mai 2017 00:33
Localisation : Anjou...Feu !
Contact :

Re: Besoin d'aide pour automatiser des tâches via le terminal

Message par tioker »

tristanbailly83 a écrit : sam. 19 juil. 2025 04:24 ...
Créer un script bash pour :
..
  1. Supprimer les fichiers temporaires (.cache, .thumbnails)
  2. Mettre à jour les paquets automatiquement
  3. Sauvegarder certains dossiers dans /backup
  4. Rendre le script exécutable et l'ajouter aux tâches planifiées (cron)
J'ai déjà essayé quelques commandes basiques, mais :
]Comment gérer les erreurs si un dossier n'existe pas ?
...
Bonjour,

Comme le dit et comme le documente bien mieux que moi notre ami Arghlub, on peut faire plein de choses.
Je ne rajouterais qu'un commentaire générique.

1/ Sur ce forum il y a déjà des scripts de nettoyage.
2/ mettre à jour les paquets automatiquement n'est pas vraiment une solution fiable car si tu as un problème, comment le savoir et comment le résoudre ? Pour ma part je ne mets à jour mon système qu'une fois par mois après avoir fait une sauvegarde complète.
3/ Pour les sauvegardes y'a plein d'outils gratuits et OpenSource qui font ça pile poil. Une petite recherche ... un exemple.
4/ Script exécutable : clic droit sur fichier > Propriétés > Permissions

Sinon le crontab c'est bien ... à condition que le PC ne soit jamais en veille. Je ne suis pas sûr de ce que je dis mais si un traitement doit passer à une heure donnée et que le PC est en veille ou éteint, je ne suis pas sûr qu'il s’exécute ¹.

Voilà. Je laisse mon ami Arghlub compléter.

¹ si tu veux qu'un crontab s'exécute une fois dans la journée, tu peux le mettre en cron comme ça

Code : Tout sélectionner

0 8-22 * * * bash $HOME/Documents/Programmes/listePaquets.sh
Le bash jouera avec le syslog pour voir si le programme s'est déjà exécuté une fois dans le journée.
Aller, KADO, je t'en mets un petit (script)

Code : Tout sélectionner

⚡ cat $HOME/Documents/Programmes/listePaquets.sh
#!/bin/bash
# Source rclone: https://forum.rclone.org/t/how-to-generate-log-file-for-rclone/13053
# Source date  : https://stackoverflow.com/questions/1401482/yyyy-mm-dd-format-date-in-shell-script
# Source stat  : https://www.it-connect.fr/comment-obtenir-la-date-de-creation-dun-fichier-sous-linux/
# Source grep  : https://www.thegeekstuff.com/2011/10/grep-or-and-not-operators/

# on se positionne sur le répertoire de la procédure
cd $(dirname $0)

# on cherche si il y a eu un passage du programme ($0) le même jour ($(date)) dans le syslog lancé par cet iutilisateur ($USER)
# ATTENTION	Le lancement ou une modif de la ligne du CRON va mettre une trace dans le syslog.
#			Il faut donc ajouter le nom de l'utilisateur suivi de ":" pour distinguer la ligne de celle qui est écrite par le CRON
# Pour la date j'ai préféré utiliser la forme longue type $(date +"%Y-%m-%dT%H:%M") que celle qui est raccourcie en +%F (YYYY-MM-DD).
#   Ainsi on pourra vérifier si le programme est passé dans l'année, le mois, le jour, l'heure ou la minute suivant l'affinement des paramètres qu'on aura choisi.

grep -E  $0 /var/log/syslog | grep -E "$(date +%Y-%m-%d)" | grep -E $USER: >> /dev/null

if [[ $? == 0 ]]
then
#	logger -p user.info $0 [I] Nothing to do
	exit
fi

logger -p user.info $0 [I] Start
touch $0.txt
dpkg --get-selections | grep -v deinstall > $0.txt
logger -p user.info $0 [I] End - New file has be produced
ImageDistrib : Linux Mint 22.3 Desktop : X-Cinnamon 6.6.7
Kernel : 6.8.0-110-generic CPU : AMD Ryzen 5 5600H with Radeon Graphics RAM : 14Gi
CG : NVIDIA Corporation TU117M [GeForce GTX 1650 Mobile / Max-Q] (rev a1)
Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] (rev c6)
Avatar du membre
tioker
modérateur
Messages : 1177
Enregistré le : sam. 6 mai 2017 00:33
Localisation : Anjou...Feu !
Contact :

Re: Besoin d'aide pour automatiser des tâches via le terminal

Message par tioker »

cyrille a écrit : jeu. 7 août 2025 12:25 Attention à la commande cd dans les scripts, cf https://www.baeldung.com/linux/cd-command-bash-script
Je ne connaissais pas cette subtilité.

Pour mon cas je n'en avais pas eu besoin puisque mon script est lancé par crontab mais si j'avais dû le lancer en mode terminal (test, debug) cette subtilité m'aurait été bien utile.

Merci Cyrille.
ImageDistrib : Linux Mint 22.3 Desktop : X-Cinnamon 6.6.7
Kernel : 6.8.0-110-generic CPU : AMD Ryzen 5 5600H with Radeon Graphics RAM : 14Gi
CG : NVIDIA Corporation TU117M [GeForce GTX 1650 Mobile / Max-Q] (rev a1)
Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] (rev c6)
Répondre