Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/09/2017, à 21:56

jlemonde

Petit script de maintenance (apt-get). Besoin de retour critique.

Bonjour !

J'ai fait un petit script de maintenance me permettant de mettre à jour mon ordi et supprimer les paquets obsolètes, entre autres.
Je me demandais simplement si vous aviez à me proposer des commentaires ou des remarques, d'éventuelles suggestion d'amélioration, etc.
Je me demandais aussi si dans "sudo apt-get dist-upgrade -u -y", combiner les options -y et -u avait un sens ??

PS : À noter qu'une des commandes utilise aptitude (c'est donc une dépendance).

Merci à vous ! Vous êtes naturellement libres de réutiliser mon code.

Johannes

#!/bin/bash

# You need aptitude to run this script.
# sudo apt-get install aptitude

echo ">> SCRIPT DE MAINTENANCE v0.1"

UPDATE=false
UPGRADE=false
DISTUPG=false
AUTOCLEAN=false
AUTOREMOVE=false
AUTOPURGE=false
CORBEILLE=false
THUMBS=false
HOMETEMP=false
OLDERRORS=false

HELP=false

if [ "$#" == 0 ]; then
   UPDATE=true
   UPGRADE=true
   DISTUPG=false
   AUTOCLEAN=true
   AUTOREMOVE=true
   AUTOPURGE=false
   CORBEILLE=true
   THUMBS=true
   HOMETEMP=true
   OLDERRORS=true
fi

for v in "$@"
do   
   for (( i=0; i<"${#v}"; i++ ))
   do
      case "${v:i:1}" in 
         [Hh])
            HELP=true
            break;;
         [Yy])
            UPDATE=true
            break;;
         [Uu]) 
            UPDATE=true
            UPGRADE=true
            break;;
         [Dd])
            UPDATE=true
            UPGRADE=true
            DISTUPG=true
            break;;
         [cCrR])
            UPDATE=true
            AUTOCLEAN=true
            AUTOREMOVE=true
            break;;
         [Pp])
            AUTOPURGE=true
            break;;
         [Ii])
            THUMBS=true
            break;;
         [Mm])
            HOMETEMP=true
            break;;
         [Ss])
            CORBEILLE=true
            break;;
         [Tt])
            THUMBS=true
            HOMETEMP=true
            CORBEILLE=true
            break;;
         [Ee])
            OLDERRORS=true
            break;;
         [Aa])
            UPDATE=true
            UPGRADE=true
            DISTUPG=true
            AUTOCLEAN=true
            AUTOREMOVE=true
            AUTOPURGE=true
            CORBEILLE=true
            THUMBS=true
            HOMETEMP=true
            OLDERRORS=true
            break;;
      esac
   done
done

if [ $HELP == true ]; then
   echo ">> HELP"
   echo "   Y : Update"
   echo "   U : Update and upgrade"
   echo "   D : Update, upgrade and dist-upgrade"
   echo "   C : Update, autoclean et autoremove"
   echo "   P : Automatic purge"
   echo "   R : (alias for C)"
   echo "   I : Find and delete thumbnail images"
   echo "   M : Find and temp files in the home directory"
   echo "   S : Empty trash"
   echo "   T : (shortcut to I, M and S at once)"
   echo "   E : Delete old error logs"
   echo "     : (running the app without any flag equals to running it with all flags excepted D, P and H)"
   echo "   A : (shortcut to all previously named flags at once)"
   echo "   H : Prints this help and exits"
   exit
fi

if [ $UPDATE == true ]; then
   echo ">> MISE À JOUR DE L'INDEX DES LIBRAIRIES"
   echo "   sudo apt-get update -y"
   sudo apt-get update -y
fi

if [ $UPGRADE == true ]; then
   echo ">> MISE À JOUR DES PAQUETS"
   echo "   sudo apt-get upgrade -y"
   sudo apt-get upgrade -y
fi

if [ $DISTUPG == true ]; then
   echo ">> MISE À JOUR INTELLIGENTE DES PAQUETS"
   echo "   sudo apt-get dist-upgrade -u -y"
   # -u demande à l'utilisateur en lui montrant une liste
   # -y selectionne OUI automatiquement. Du coup, c'est un peu inutile de les mettre ensembles.
   # mais il me semble que comme ça, on voit la liste, sinon on ne la verrait pas.
   # Cette étape peut être longue si cela n'a pas été fait depuis longtemps.
   sudo apt-get dist-upgrade -u -y 
fi

if [ $AUTOCLEAN == true ]; then
   echo ">> AUTOSUPPRESSION DES PAQUETS INUTILES"
   echo "   sudo apt-get autoclean -y"
   sudo apt-get autoclean -y
fi

if [ $AUTOREMOVE == true ]; then
   echo ">> AUTOSUPPRESSION DES DÉPENDANCES OBSOLÈTES"
   echo "   sudo apt-get autoremove -y"
   sudo apt-get autoremove -y
fi

if [ $AUTOPURGE == true ]; then
   echo ">> AUTOSUPPRESSION DES FICHIERS DE PAQUETS AYANT ÉTÉ SUPPRIMÉS MAIS NON PURGÉS"
   echo "   sudo aptitude purge '~c' -y"
   sudo aptitude purge '~c' -y
fi

if [ $CORBEILLE == true ]; then
   echo ">> VIDANGE DE CORBEILLE"
   echo "   rm -rf ~/.local/share/Trash/*"
   rm -rf ~/.local/share/Trash/*
fi

if [ $THUMBS == true ]; then
   echo ">> SUPPRESSION DES MINIATURES"
   echo "   find ~/.thumbnails -type f -atime +7 -delete"
   find ~/.thumbnails -type f -atime +7 -delete
fi

if [ $HOMETEMP == true ]; then
   echo ">> SUPPRESSION DES FICHIERS TEMPORAIRES DU DOSSIER HOME"
   echo "   find ~/ -name '*~' -exec rm {} \;"
   find ~/ -name '*~' -exec rm {} \;
fi

if [ $OLDERRORS == true ]; then
   echo ">> SUPPRESSION DES LOGS D'ANCIENNES ERREURS"
   echo "   sudo rm /var/crash/*"
   sudo rm /var/crash/*
fi

Dernière modification par jlemonde (Le 26/09/2017, à 21:57)

Hors ligne

#2 Le 26/09/2017, à 22:48

DRbuntu91

Re : Petit script de maintenance (apt-get). Besoin de retour critique.

Perso je trouve ça très utile (je m'étais fait un petit pense-bête par ce que j' n'arrive pas tj a me souvenir de la syntaxe des commandes a faire)
J'ai testé les options U, D, I, M et E

PS: le message dans le help pour l'option M ne devrait pas etre "Find and delete temp files in the home directory"?


Portable CLEVO W55SU1, Intel i5-4200M, RAM=8Go, DD=500Go mSATA, BIOS 4.6.5 AMI, Ubuntu 16.04 LTS a jour
Puis pour bidouiller un vieux portable Dell Precision M4600 avec W10 + DEBIAN-Buster
Utilisateur Ubuntu depuis Janvier 2017

Hors ligne

#3 Le 26/09/2017, à 22:48

grandtoubab

Re : Petit script de maintenance (apt-get). Besoin de retour critique.

salut
Dans le même ordre d'idée j'ai fait un script qui est lancé par un service systemd au boot et qui envoi les compte-rendu par mail que je lis avec Thunderbird

root@debian:/opt# cat perso-apt 
#!/bin/sh
# pour tracer demasquer set -x
#set -x
#
#
# test si le fichier résultat existe sinon c'est le tout premier lancement et alors créer le fichier
if [ ! -f "/var/tmp/resul-opt-perso-apt.txt" ];
then touch /var/tmp/resul-opt-perso-apt.txt
fi
# comparaison de la date du jour et de la date de derniere modification du fichier
#
# date du jour
ddj=$(date +%s)
# date de la dernière modification du fichier
ddmf=$(stat -c %Y /var/tmp/resul-opt-perso-apt.txt)
# comparaison
comp=$(($ddj-$ddmf))
# référence 8 h = 28800 secondes
ref=28800
if [ $comp -lt $ref ]
then
	echo $comp "secondes depuis la dernière mise à jour" 
	exit
else echo 'Au moins 8 heures depuis le dernier update'
fi
# mise a jour des listes
echo "****************************************************************" > /var/tmp/resul-opt-perso-apt.txt
date >> /var/tmp/resul-opt-perso-apt.txt
echo " Mise à jour des listes apt" >> /var/tmp/resul-opt-perso-apt.txt 
apt update >> /var/tmp/resul-opt-perso-apt.txt 2> /dev/null
echo "resultat de la commande apt update ="$? >> /var/tmp/resul-opt-perso-apt.txt
# mise à jour des paquets
echo "****************************************************************" >> /var/tmp/resul-opt-perso-apt.txt
echo " Mise à jour" >> /var/tmp/resul-opt-perso-apt.txt
export DEBIAN_FRONTEND=noninteractive 
apt full-upgrade --fix-missing -y >> /var/tmp/resul-opt-perso-apt.txt 2> /dev/null
echo "resultat de la commande apt-full-upgrade ="$? >> /var/tmp/resul-opt-perso-apt.txt 
dpkg --audit >> /var/tmp/resul-opt-perso-apt.txt 2> /dev/null
echo "****************************************************************" >> /var/tmp/resul-opt-perso-apt.txt
# envoi du mail de résultat
date >> /var/tmp/resul-opt-perso-apt.txt
/usr/bin/mailx -s "résul opt/perso-apt" root@localhost.localdomain < /var/tmp/resul-opt-perso-apt.txt &> /dev/null
echo "mail envoyé à root par /opt/perso-apt"
echo "temporisation"
sleep 5
cat /lib/systemd/system/update-perso.service
[Unit]
Description=update-perso
After=exim4.service

[Service]
Type=oneshot
ExecStart=/opt/perso-apt

[Install]
WantedBy=multi-user.target

export DEBIAN_FRONTEND=noninteractive  c'est pour éviter les erreurs debconf
https://manpages.debian.org/jessie/debc … .7.fr.html

mini_782155Capturedu20170927092406.png

et les clean je les lance par cron une fois par semaine

/etc/cron.weekly$ cat perso-apt 
#!/bin/sh
# pour tracer demasquer set -x
#set -x
#
# listage utilisation disque avant
echo " listage occupation du disque"
df -h
# tempo pour éviter les conflits de verrou
sleep 300
export DEBIAN_FRONTEND=noninteractive
echo "**********"
echo " Nettoyage"
echo " apt clean"
apt-get clean
echo "resultat de la commande apt clean ="$?
echo "*************************************"
echo " apt autoclean"
apt-get autoclean
echo "resultat de la commande apt autoclean ="$?
echo "*****************************************"
echo " apt purge"
apt-get purge --autoremove -y 
echo "resultat de la commande apt autoremove ="$? 
echo "******************************************"
# listage utilisation disque après
echo " listage occupation du disque après nettoyage"
df -h
#

NB cron se charge d'envoyer le mail de résultat des commandes

mini_435322Capturedu20170927092832.png

Dernière modification par grandtoubab (Le 27/09/2017, à 09:29)


Linux tout seul sur HP Pavilion DV7 et Acer Aspire T650, Canon MG3650 en wifi
Debian 11 Bullseye Gnome/Xorg, Gnome/Wayland avec SDDM
https://bidouilledebian.wordpress.com/
ON M'A VU DANS LE VERCORS, SAUTER A L'ELASTIQUE..... J'AI DANS LES BOTTES DES MONTAGNES DE QUESTIONS....

Hors ligne

#4 Le 05/11/2017, à 00:36

jlemonde

Re : Petit script de maintenance (apt-get). Besoin de retour critique.

Superbe idée que s'envoyer tout ça par mail ! Je viens de configurer ssmtp pour m'envoyer le résultat par mail via le crontab de root smile
Du coup, j'ai fait une nouvelle version de mon script : une version qui contient un flag W qui va vérifier si le script avait déjà été utilisé cette semaine là et quitter si oui. Ensuite le cron peut facilement exécuter le script toutes les heures et tous les lundis dès allumage de l'ordi, à la prochaine heure pleine, bam, ça fait la mise à jour complète.

#!/bin/bash

# You need aptitude to run this script.
# sudo apt-get install aptitude

# Run like this : sudo script_name.sh [flags]

# From root's crontab, use for instance :
#    @hourly path/to/script_name.sh wcdpa
# where 'wcdpa' are the flags.  Actually, 'cdp' are not needed when 'a' is set.
# then don't forget to send the result via email (configure ssmtp first, for example)

UPDATE=false
UPGRADE=false
DISTUPG=false
AUTOCLEAN=false
AUTOREMOVE=false
AUTOPURGE=false
CORBEILLE=false
THUMBS=false
HOMETEMP=false
OLDERRORS=false

ONCE_A_WEEK=false
SCRIPT=$(realpath $0)
DIRNAME=$(dirname $SCRIPT)
WEEKLY_FILE="$DIRNAME/.maintenance-last-week"

HELP=false


if [ "$#" == 0 ]; then
   UPDATE=true
   UPGRADE=true
   DISTUPG=false
   AUTOCLEAN=true
   AUTOREMOVE=true
   AUTOPURGE=false
   CORBEILLE=true
   THUMBS=true
   HOMETEMP=true
   OLDERRORS=true
fi

for v in "$@"
do   
   for (( i=0; i<"${#v}"; i++ ))
   do
      case "${v:i:1}" in 
         [Hh])
            HELP=true
            break;;
         [Ww])
            ONCE_A_WEEK=true
            if [ -f $WEEKLY_FILE ]; then
               varf=$(<$WEEKLY_FILE)
               vard=$(date "+%W")
               if [ "$varf" == "$vard" ]; then
                  exit;
               fi
            fi
            continue;;
         [Yy])
            UPDATE=true
            continue;;
         [Uu]) 
            UPDATE=true
            UPGRADE=true
            continue;;
         [Dd])
            UPDATE=true
            UPGRADE=true
            DISTUPG=true
            continue;;
         [cCrR])
            UPDATE=true
            AUTOCLEAN=true
            AUTOREMOVE=true
            continue;;
         [Pp])
            AUTOPURGE=true
            continue;;
         [Ii])
            THUMBS=true
            continue;;
         [Mm])
            HOMETEMP=true
            continue;;
         [Ss])
            CORBEILLE=true
            continue;;
         [Tt])
            THUMBS=true
            HOMETEMP=true
            CORBEILLE=true
            continue;;
         [Ee])
            OLDERRORS=true
            continue;;
         [Aa])
            UPDATE=true
            UPGRADE=true
            DISTUPG=true
            AUTOCLEAN=true
            AUTOREMOVE=true
            AUTOPURGE=true
            CORBEILLE=true
            THUMBS=true
            HOMETEMP=true
            OLDERRORS=true
            continue;;
      esac
   done
done

echo ">> SCRIPT DE MAINTENANCE v0.2"



if [ $HELP == true ]; then
   echo ">> HELP"
   echo "   Y : Update"
   echo "   U : Update and upgrade"
   echo "   D : Update, upgrade and dist-upgrade"
   echo "   C : Update, autoclean et autoremove"
   echo "   R : (alias for C)"
   echo "   P : Automatic purge"
   echo "   I : Find and delete thumbnail images"
   echo "   M : Find and delete temp files in the home directory"
   echo "   S : Empty trash"
   echo "   T : (shortcut to I, M and S at once)"
   echo "   E : Delete old error logs"
   echo "     : (running the app without any flag equals to running it with all previously named flags excepted D and P ; this does not work if you use the W flag)"
   echo "   A : (shortcut to all previously named flags at once)"
   echo "   H : Prints this help and exits"
   echo "   W : Exits if the script was already called with this flag on same week. Usefull for crontabs."
   exit
fi

if [ $UPDATE == true ]; then
   echo ">> MISE À JOUR DE L'INDEX DES LIBRAIRIES"
   echo "   apt-get update -y"
   apt-get update -y
fi

if [ $UPGRADE == true ]; then
   echo ">> MISE À JOUR DES PAQUETS"
   echo "   apt-get upgrade -y"
   apt-get upgrade -y
fi

if [ $DISTUPG == true ]; then
   echo ">> MISE À JOUR INTELLIGENTE DES PAQUETS"
   echo "   apt-get dist-upgrade -u -y"
   # -u demande à l'utilisateur en lui montrant une liste
   # -y selectionne OUI automatiquement. Du coup, c'est un peu inutile de les mettre ensembles.
   # mais il me semble que comme ça, on voit la liste, sinon on ne la verrait pas.
   # Cette étape peut être longue si cela n'a pas été fait depuis longtemps.
   apt-get dist-upgrade -u -y 
fi

if [ $AUTOCLEAN == true ]; then
   echo ">> AUTOSUPPRESSION DES PAQUETS INUTILES"
   echo "   apt-get autoclean -y"
   apt-get autoclean -y
fi

if [ $AUTOREMOVE == true ]; then
   echo ">> AUTOSUPPRESSION DES DÉPENDANCES OBSOLÈTES"
   echo "   apt-get autoremove -y"
   apt-get autoremove -y
fi

if [ $AUTOPURGE == true ]; then
   echo ">> AUTOSUPPRESSION DES FICHIERS DE PAQUETS AYANT ÉTÉ SUPPRIMÉS MAIS NON PURGÉS"
   echo "   aptitude purge '~c' -y"
   aptitude purge '~c' -y
fi

if [ $CORBEILLE == true ]; then
   echo ">> VIDANGE DE CORBEILLE"
   echo "   rm -rf ~/.local/share/Trash/*"
   rm -rf ~/.local/share/Trash/*
fi

if [ $THUMBS == true ]; then
   echo ">> SUPPRESSION DES MINIATURES"
   echo "   find ~/.thumbnails -type f -atime +7 -delete"
   find ~/.thumbnails -type f -atime +7 -delete
fi

if [ $HOMETEMP == true ]; then
   echo ">> SUPPRESSION DES FICHIERS TEMPORAIRES DU DOSSIER HOME"
   echo "   find ~/ -name '*~' -exec rm {} \;"
   find ~/ -name '*~' -exec rm {} \;
fi

if [ $OLDERRORS == true ]; then
   echo ">> SUPPRESSION DES LOGS D'ANCIENNES ERREURS"
   echo "   rm /var/crash/*"
   rm /var/crash/*
fi



if [ $ONCE_A_WEEK == true ]; then
   date "+%W" > $WEEKLY_FILE
fi

Hors ligne

#5 Le 05/11/2017, à 01:25

Watael

Re : Petit script de maintenance (apt-get). Besoin de retour critique.

salut,

j'aurais utilisé getopts, et des fonctions (définies plus tôt) dans le case avec l'opérateur de contrôle ;;& qui permet de tester le cas suivant.

en gros :

fonction_A() { echo AAA;}
fonction_B() { echo BBB;}
fonction_C() { fonction_B; echo CCC;}
while getopts aAbBcC opt
do
   case $opt in
   [aA]) fonction_A ;;&
   [bB]) fonction_A; fonction_B ;;&
   [cC]) fonction_C ;;&
   esac
done

Dernière modification par Watael (Le 05/11/2017, à 01:25)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#6 Le 05/11/2017, à 09:35

DonutMan75

Re : Petit script de maintenance (apt-get). Besoin de retour critique.

Hello,
merci pour ces scripts jlemonde et grandtoubab !

grandtoubab, petite question de curiosité : pourquoi avoir mis le lancement au boot du script dans systemd et pas dans une crontab @boot ?
Y'a t'-il une raison particulière ou bien est-ce équivalent ?

Bonne journée à tous smile

Donut

Hors ligne

#7 Le 05/11/2017, à 10:04

grandtoubab

Re : Petit script de maintenance (apt-get). Besoin de retour critique.

DonutMan75 a écrit :

grandtoubab, petite question de curiosité : pourquoi avoir mis le lancement au boot du script dans systemd et pas dans une crontab @boot ?
Y'a t'-il une raison particulière ou bien est-ce équivalent ?
Donut

c'est pour la beauté du geste big_smile savoir utiliser les services de l'init systemd

je peux meme voir comment ça s'est passé dans les commandes de controle smile

systemctl status  update-perso.service -l --no-pager
● update-perso.service - update-perso
   Loaded: loaded (/lib/systemd/system/update-perso.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Sun 2017-11-05 09:02:40 CET; 12min ago
  Process: 1305 ExecStart=/opt/perso-apt (code=exited, status=0/SUCCESS)
 Main PID: 1305 (code=exited, status=0/SUCCESS)

nov. 05 09:02:27 debian su[9714]: + ??? root:debian-security-support
nov. 05 09:02:27 debian su[9714]: pam_unix(su:session): session opened for user debian-security-support by (uid=0)
nov. 05 09:02:28 debian su[9714]: pam_unix(su:session): session closed for user debian-security-support
nov. 05 09:02:28 debian su[9766]: Successful su for debian-security-support by root
nov. 05 09:02:28 debian su[9766]: + ??? root:debian-security-support
nov. 05 09:02:28 debian su[9766]: pam_unix(su:session): session opened for user debian-security-support by (uid=0)
nov. 05 09:02:29 debian su[9766]: pam_unix(su:session): session closed for user debian-security-support
nov. 05 09:02:30 debian perso-apt[1305]: mail envoyé à root par /opt/perso-apt
nov. 05 09:02:30 debian perso-apt[1305]: temporisation
nov. 05 09:02:40 debian systemd[1]: Started update-perso.
systemd-analyze blame
    5min 59.199s update-perso.service
    1min 27.934s sav-protect.service
         11.731s NetworkManager-wait-online.service
          9.360s exim4.service
          7.738s winbind.service
          6.204s ModemManager.service

Mais je pense qu'au niveau résultat, ça se vaut.
Ce que j'aime bien c'est avoir le compte-rendu intégral de la mise à jour dans le mail.
Par exemple ce matin

Paramétrage de dbus (1.12.0-1) ...
A reboot is required to replace the running dbus-daemon.
Please reboot the system when convenient.

Les crontab je m'en sert aussi et je les ai triturées à ma façon

journalctl -xb | grep cron
nov. 05 09:20:35 debian systemd[1]: Started Trigger anacron every hour.
-- Subject: L'unité (unit) anacron.timer a terminé son démarrage
-- L'unité (unit) anacron.timer a terminé son démarrage, avec le résultat RESULT.
nov. 05 09:20:36 debian systemd[1]: Started Run anacron jobs.
-- Subject: L'unité (unit) anacron.service a terminé son démarrage
-- L'unité (unit) anacron.service a terminé son démarrage, avec le résultat RESULT.
-- Subject: L'unité (unit) cron.service a terminé son démarrage
-- L'unité (unit) cron.service a terminé son démarrage, avec le résultat RESULT.
nov. 05 09:20:37 debian anacron[615]: Anacron 2.3 started on 2017-11-05
nov. 05 09:20:37 debian anacron[615]: Will run job `cron.daily' in 5 min.
nov. 05 09:20:37 debian anacron[615]: Will run job `cron.weekly' in 20 min.
nov. 05 09:20:37 debian anacron[615]: Will run job `cron.monthly' in 35 min.
nov. 05 09:20:37 debian anacron[615]: Will run job `cron.hourly' in 50 min.
nov. 05 09:20:37 debian anacron[615]: Jobs will be executed sequentially
nov. 05 09:20:37 debian cron[618]: (CRON) INFO (pidfile fd = 3)
nov. 05 09:20:38 debian cron[618]: (CRON) INFO (Running @reboot jobs)

https://www.debian-fr.org/t/collision-d … urly/74984

Dernière modification par grandtoubab (Le 05/11/2017, à 10:26)


Linux tout seul sur HP Pavilion DV7 et Acer Aspire T650, Canon MG3650 en wifi
Debian 11 Bullseye Gnome/Xorg, Gnome/Wayland avec SDDM
https://bidouilledebian.wordpress.com/
ON M'A VU DANS LE VERCORS, SAUTER A L'ELASTIQUE..... J'AI DANS LES BOTTES DES MONTAGNES DE QUESTIONS....

Hors ligne

#8 Le 14/02/2021, à 10:15

Pollomax

Re : Petit script de maintenance (apt-get). Besoin de retour critique.

Bonjour,
En trouvant votre discussion suite à une recherche de Google, serait-il possible d'ajouté au script  une ligne qui recherche et détruit les dossiers et sous dossier vide du dossier Dropbox par exemple ou autres !

Je suis, pas du tout à l'aise avec les scripts je veux bien de l'aide.

Merci POLO

Hors ligne

#9 Le 14/02/2021, à 11:15

Watael

Re : Petit script de maintenance (apt-get). Besoin de retour critique.

je ne suis pas convaincu par la démarche qui consiste à concaténer des "flags", plutôt que d'utiliser des options traditionnelles.

je propose tout de même cette mise à jour (non testée) :

#!/bin/bash

# You need aptitude to run this script.
# sudo apt-get install aptitude

# Run like this : sudo script_name.sh [flags]

# From root's crontab, use for instance :
#    @hourly path/to/script_name.sh wcdpa
# where 'wcdpa' are the flags.  Actually, 'cdp' are not needed when 'a' is set.
# then don't forget to send the result via email (configure ssmtp first, for example)

script=$(realpath $0)
dirname=$(dirname $script)
weekly_file="$dirname/.maintenance-last-week"

_all()
{
    _update
    _upgrade
    _distupg
    _autoclean
    _autoremove
    _autopurge
    _corbeille
    _thumbs
    _hometemp
    _olderrors
}
_help()
{
    echo ">> help"
    echo "   y : update"
    echo "   u : update and upgrade"
    echo "   d : update, upgrade and dist-upgrade"
    echo "   c : update, autoclean et autoremove"
    echo "   r : (alias for c)"
    echo "   p : automatic purge"
    echo "   i : find and delete thumbnail images"
    echo "   m : find and delete temp files in the home directory"
    echo "   s : empty trash"
    echo "   t : (shortcut to i, m and s at once)"
    echo "   e : delete old error logs"
    echo "     : (running the app without any flag equals to running it with all previously named flags excepted d and p ; this does not work if you use the w flag)"
    echo "   a : (shortcut to all previously named flags at once)"
    echo "   h : prints this help and exits"
    echo "   w : exits if the script was already called with this flag on same week. usefull for crontabs."
    exit
}
_update()
{
    echo ">> mise à jour de l'index des librairies"
    echo "   apt-get update -y"
    apt-get update -y
}
_upgrade()
{
    update
    echo ">> mise à jour des paquets"
    echo "   apt-get upgrade -y"
    apt-get upgrade -y
}
_distupg()
{
    update
    upgrade
    echo ">> mise à jour intelligente des paquets"
    echo "   apt-get dist-upgrade -u -y"
    # -u demande à l'utilisateur en lui montrant une liste
    # -y selectionne oui automatiquement. du coup, c'est un peu inutile de les mettre ensembles.
    # mais il me semble que comme ça, on voit la liste, sinon on ne la verrait pas.
    # cette étape peut être longue si cela n'a pas été fait depuis longtemps.
    apt-get dist-upgrade -u -y 
}
_autoclean()
{
    echo ">> autosuppression des paquets inutiles"
    echo "   apt-get autoclean -y"
    apt-get autoclean -y
}
_autoremove()
{
    update
    autoclean
    echo ">> autosuppression des dépendances obsolètes"
    echo "   apt-get autoremove -y"
    apt-get autoremove -y
}
_autopurge()
{
    echo ">> autosuppression des fichiers de paquets ayant été supprimés mais non purgés"
    echo "   aptitude purge '~c' -y"
    aptitude purge '~c' -y
}
_corbeille()
{
    echo ">> vidange de corbeille"
    echo "   rm -rf ~/.local/share/trash/*"
    rm -rf ~/.local/share/trash/*
}
_thumbs()
{
    echo ">> suppression des miniatures"
    echo "   find ~/.thumbnails -type f -atime +7 -delete"
    find ~/.thumbnails -type f -atime +7 -delete
}
_hometemp()
{
    echo ">> SUPPRESSION DES FICHIERS TEMPORAIRES DU DOSSIER HOME"
    echo "   find ~/ -name '*~' -exec rm {} \;"
    find ~/ -name '*~' -exec rm {} \;
}
_olderrors()
{
    echo ">> SUPPRESSION DES LOGS D'ANCIENNES ERREURS"
    echo "   rm /var/crash/*"
    rm /var/crash/*
}
once_a_week()
{
    date "+%W" > "$weekly_file"
}


echo ">> SCRIPT DE MAINTENANCE v0.2"


(($#)) || { _all; exit;}

for flag do   
    for (( i=0; i<"${#flag}"; i++ ))
    do
        case "${flag:i:1}" in 
            [Hh])
                _help
                break;;
            [Ww])
                once_a_week
                if test -f "$weekly_file"
                then
                    dateFile=$(<$weekly_file)
                    dateToday=$(date "+%W")
                    test "$dateFile" = "$dateToday" && exit
                fi
                continue;;
            [Yy])
                _update
                continue;;
            [Uu]) 
                _upgrade
                continue;;
            [Dd])
                _distupg
                continue;;
            [cCrR])
                _autoremove
                continue;;
            [Pp])
                _autopurge
                continue;;
            [Ii])
                _thumbs
                continue;;
            [Mm])
                _hometemp
                continue;;
            [Ss])
                _corbeille
                continue;;
            [Tt])
                _thumbs
                _hometemp
                _corbeille
                continue;;
            [Ee])
                _olderrors
                continue;;
            [Aa])
                _all
                continue;;
        esac
    done
done

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne