Nettoyer son système

De Wiki de la communauté Mandriva.


Sommaire

Avant-propos

Cet article a pour objectif de permettre aux utilisateurs de nettoyer leur Mandriva. Ceci devrait être facilement prolongeable à d'autres distributions. Par nettoyage, on n'entend pas les nettoyages fastidieux nécessaires sur Windows pour qu'il soit plus rapide, mais une recherche de gain de place sur le disque dur.

Ceci conviendra particulièrement aux utilisateurs soucieux d'avoir une machine propre, à ceux qui utilisent de petits disques durs ou des ultra-portables comme le EeePC.

Logiciels de nettoyage

Sous KDE4, sweeper permet de supprimer cache, historique, presse-papier ou encore cookies.

D'autres logiciels existent comme scleaner, bleachbit.

Ces logiciels ont plus un but de protection de la vie privée que d'une réelle recherche de gain d'espace disque.

Qui est le responsable d'une partition pleine ?

Il existe de petits logiciel permettant de savoir comment est occupé votre disque dur. C'est donc un bon moyen de savoir où sont les gros fichiers.

Sous KDE, il existe filelight

Pour installer filelight, lancez Image:drakrpm-icon.png Installer et désinstaller des logiciels et recherchez le paquet filelight.

Sélectionnez-le et cliquez sur Appliquer (Aide).

Vous pouvez également l'installer en utilisant la console en tant qu'administrateur avec la commande suivante : urpmi filelight

400ppx

Pour GNOME, c'est Baobab qui est contenu dans gnome-utils:

Pour installer gnome-utils, lancez Image:drakrpm-icon.png Installer et désinstaller des logiciels et recherchez le paquet gnome-utils.

Sélectionnez-le et cliquez sur Appliquer (Aide).

Vous pouvez également l'installer en utilisant la console en tant qu'administrateur avec la commande suivante : urpmi gnome-utils

Supprimer les paquets orphelins

A force d'installer et de désinstaller des paquets, certains d'entre eux peuvent être orphelins, c'est-à-dire qu'ils ne sont plus utiles. Ce sont le plus souvent des bibliothèques. A partir de la version 2009, les paquets orphelins peuvent être enlevés à l'aide de la commande :

Image:Konsole.png
[root@ordi ~]# urpme --auto-orphans

Jetez tout de même un coup d'œil à ce qui est désinstallé... Cette commande doit en effet être utilisée avec une extrême précaution.

Pour les versions antérieures à la 2009, vous pouvez utiliser la commande :

Image:Konsole.png
[utilisateur@ordi ~]$ rpmorphan

qui listera les paquets orphelins. Vous pouvez désinstaller ceux que vous souhaitez avec la commande urpme suivis du nom du paquet en root.

L'utilitaire rpmorphan liste les paquetages sans dépendances (orphelins), l'option --guess-lib ne sélectionne que les bibliothèques, une bibliothèque sur laquelle ne s'appuie aucun programme n'étant d'aucune utilité au système. rpmorphan sait reconnaître les bibliothèques utiles de celles qui ne sont pas nécessaires (orphelines). Exemple : si libmozilla-firefox2.0.0.13 et libmozilla-firefox2.0.0.14 sont présentes sur votre système, seule la première sera proposée pour désinstallation. Par prudence, mieux vaut désinstaller ces bibliothèques par étapes et tester ses programmes ensuite pour vérifier que tout fonctionne correctement.


Il existe aussi une interface graphique (option --gui) qui permet de sélectionner et de supprimer un/des/tous les paquetages de la liste obtenue.

Image:Konsole.png
[root@ordi ~]# rpmorphan --gui --guess-lib


Si rpmorphan n'était pas installé sur votre machine, lancez

Image:Konsole.png
[root@ordi ~]# urpmi rpmorphan perl-Tk

Nettoyage du répertoire /tmp

Ce répertoire temporaire est situé à la racine.

Ceci peut être fait via le MCC : Démarrage > Configurer le démarrage du système > avancé. Cocher la case Vider le dossier /tmp à chaque démarrage. Cliquer sur suivant puis terminer.

Astuce !
Ceux qui souhaitent vider le /tmp avec le script décrit ci-dessous pourront ajouter la ligne echo '/usr/sbin/tmpwatch -a --nosymlinks 3d /tmp '>>$init/tmp.nettoyage dans la partie création du script.

Nettoyage du répertoire tmp des utilisateurs de manière sécurisée

Attention !
Il s'agit du répertoire tmp qui se situe dans le /home/user et non le /tmp qui lui peut être nettoyé automatiquement via le MCC.
A noter !
Ce qui suit a pour origine une discussion sur le forum Mandriva. Elle constitue un exemple modeste mais utile de ce que peut donner un travail collaboratif entre utilisateurs. Fredxx avait posé le problème initial. Plusieurs contributeurs ont suggéré des idées utiles. Le script tmp.nettoyage et le statut de service d'un répertoire rc?.d attribué à ce script viennent de Ptyxs. Et j'ai moi-même (.:Spip:.) réalisé l'automatisation de l'ensemble et mis la touche finale...

Objectifs

Pour tous les utilisateurs :

  • Supprimer les fichiers du répertoire /home/user/tmp qui ont plus de X jours d'existence (par défaut : 3 jours)
  • Supprimer les miniatures stockées dans /home/user/.thumbnails/

Ces tâches sont effectuées automatiquement à l'extinction de la machine pour une sécurité maximale. On entend par sécurité le fait de contrôler au maximum les fichiers supprimés sans perturber le système, et non effectuer une suppression sans laisser de traces.

À noter !
Ceci n'est donc valable que pour un ordinateur que l'on éteint régulièrement.

Mise en place "automatique"

Voici un petit script que j'ai écrit et amélioré grâce aux remarques de Ptyxs. Il permet d'effectuer toutes les manipulations décrites dans la section suivante. Ceci s'adresse donc aux utilisateurs les plus novices.

Ce script est le suivant :

#! /bin/sh

###########################################################
# This script installs a cleaner script which sweeps
# > user tmp files
# > thumbnails
# The cleaner script is launched when the computer is turned off or rebooted. 
###########################################################
#     This program is free software; you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation; either version 2 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program; if not, write to the Free Software
#    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
############################################################
#
# Written by Spip <unpeudescience at gmail.com>
# Improved by Ptyxs <onyxs at free.fr>
#
############################################################

# messages & comments are only written in french

init='/etc/init.d'
RC0='/etc/rc0.d'
RC6='/etc/rc6.d'

# verification des droits administrateurs
if [ "$UID" != "0" ]; then
   echo 'ERREUR 101 : ce script doit être lancé en tant que superutilisateur (root)'
exit 101
fi

###########################################################
# création du script de nettoyage
###########################################################

if ! [ -e $init/tmp.nettoyage ]
then
   echo -e "Ecriture du script $init/tmp.nettoyage\n"
   echo "#! /bin/bash" > $init/tmp.nettoyage
   echo "/usr/sbin/tmpwatch -a --nosymlinks 3d /home/*/tmp" >> $init/tmp.nettoyage
   echo "find /home/*/.thumbnails -type f -iname '*.png' | xargs rm -f" >> $init/tmp.nettoyage

else
   echo 'ERREUR 102 : le programme semble être déjà installé ! '
   echo "Si vous souhaitez réinstaller le script, effacez d'abord sous root les fichiers :"
   echo "/etc/init.d/tmp.nettoyage"
   echo "/etc/rc0.d/S00tmp.nettoyage"
   echo "/etc/rc6.d/S00tmp.nettoyage"


   exit 102
fi

chmod 700 $init/tmp.nettoyage


###########################################################
# décalage des numeros des scripts de rc0 et rc6
###########################################################

# existence des répertoires#
if ! [ -d $RC0 ] 
then 
   rm -f $init/tmp.nettoyage
   echo "ERREUR 103 : le répertoire $RC0 n existe pas"
   exit 103
fi

if ! [ -d $RC6 ]
then 
   rm -f $init/tmp.nettoyage
   echo "ERREUR 103 : le répertoire $RC6 n existe pas"
   exit 103
fi

# decalage 
for RC in $RC0 $RC6 
do 
    
      cd $RC 
      if  [ $(ls | grep '^S00') ] #s'il existe un lien S00 on décale 
      then 
          
        if  [ $(ls | grep '^S99') ] #à moins qu'il n'y ait aussi un S99 
        then 
               rm -f $init/tmp.nettoyage 
               echo "ERREUR 104 : Dans $RC, un script possède la priorité 99, veuillez faire une installation   manuelle." 
               exit 104 
        fi 
     
        echo -e "Décalage des scripts de $RC \n "  
          
        fichiers=$(ls  S*) 
        for line in $fichiers 
        do 
            #on recupere le nombre sans le premier 0 s'il y en a un 
              nb=$(echo $line | sed -e "s/\([a-z,.,_,-]\)//g") 
              nb=$(echo $nb | sed -e 's/^0//') 
            
               #on incrémente 
               nb=$(($nb+1))        
               if [ $nb -lt 10 ] 
               then 
                newline=$(echo $line | sed -e "s/\([0][0-9]\)/0$nb/") 
          
               else 
                newline=$(echo $line | sed -e "s/\([0-9][0-9]\)/$nb/")          
               fi 
       
               mv $line $newline  #on change le numero du lien 
             
        done  
      fi 
      
      echo -e "Création du lien symbolique de $init vers $RC \n" 
      ln -sv $init/tmp.nettoyage $RC/S00tmp.nettoyage 

done 

echo -e '\n Félicitations, le script est installé !'

exit 0

Je vous propose de créer un fichier texte dans votre dossier utilisateur (qui a le chemin /home/user où user désigne votre nom d'utilisateur). Nous allons nommer ce fichier script. Le nom importe peu, de toute façon, il pourra être supprimé à la fin.

Ensuite copier-coller le code ci-dessus dans ce fichier. Enregistrer et fermer.

Nous allons rendre ce fichier exécutable, pour cela bouton droit sur le fichier script > propriétés > droits d'accès et cochez la case exécutable

Il ne reste plus qu'à lancer ce script sous root.

Ouvrir une console (comme Konsole). Celle-ci est normalement dans votre dossier utilisateur. Sinon, tapez la commande cd.

on passe en root en tapant :

Image:Konsole.png
[utilisateur@ordi ~]$ su

On vous invite à entrer votre mot de passe root, rien ne s'affiche, c'est normal.

Enfin, on lance

Image:Konsole.png
[root@ordi ~]# ./script

sans oublier le .

C'est fait ! Vous devez obtenir le message : Félicitations, le script est installé !. Vous pouvez supprimer le fichier script, il ne vous est plus d'aucune utilité.

Mise en place manuelle

Cette partie s'adresse aux utilisateurs plus familiarisés avec la console et qui souhaitent comprendre ce qui se passe. Les manipulations sont à faire en root.

Le script

On se place dans /etc/init.d/

Image:Konsole.png
[root@ordi ~]# cd /etc/init.d/

On crée un fichier

Image:Konsole.png
[root@ordi ~]# touch tmp.nettoyage

On l'ouvre avec un éditeur console comme nano, Vi, mcedit... (cf. Éditer des fichiers de configuration)

Image:Konsole.png
[root@ordi ~]# nano tmp.nettoyage

On ajoute le script suivant :

#! /bin/bash 
# script tmp.nettoyage 
# efface fichiers et répertoires de plus de trois jours du tmp de tous les utilisateurs


# -a permet de supprimer aussi les sockets 
# en l absence de -d les répertoires sont effacés 
# --nosymlinks pour préserver les liens symboliques 
# 3d signifie 3 jours

/usr/sbin/tmpwatch -a --nosymlinks 3d /home/*/tmp  

# efface les miniatures de tous les utilisateurs

find /home/*/.thumbnails -type f -iname '*.png' | xargs rm -f

On remarquera que l'on utilise tmpwatch pour supprimer les fichiers. Pour comprendre ce que fait tmpwatch, allez voir ceci.

Si vous souhaitez faire des modifications, c'est le moment...

On enregistre et on ferme.

Le script doit être exécutable, on lance :

Image:Konsole.png
[root@ordi ~]# chmod 700 /etc/init.d/tmp.nettoyage

Programmer le lancement à l'extinction

Ensuite, il va falloir créer un lien symbolique vers ce script qui assurera son lancement à l'extinction.

Ce lien devra donc être créé dans le répertoire /etc/rc0.d qui contient des liens vers des exécutables lancés (si leur nom commence par S) à l'extinction.

Image:Konsole.png
[root@ordi ~]# cd /etc/rc0.d/

J'avais pour ma part les scripts lancés suivants dans mon rc0.d : (pour connaître le contenu, on tape ls -l )

S00sauvliens_stop@ 
S01killall@ 
S02halt@ 
S95jexec@ 

L'idée est que nous voulons que notre script soit exécuté en premier. le n°2 va devenir n°3 le n°1 sera le 2 et le 0 deviendra le 1 pas besoin de bouger le 95, car il ne nous gène pas.


Pour cela j'ai lancé successivement les commandes suivantes :

mv S02halt S03halt 
mv S01killall S02killall 
mv S00sauvliens_stop S01sauvliens_stop

A vous d'adapter.

Un fois ceci fait, je crée le lien symbolique :

Image:Konsole.png
[root@ordi ~]# ln -sv /etc/init.d/tmp.nettoyage /etc/rc0.d/S00tmp.nettoyage

Maintenant, vous êtes débarrassé de tous vos problèmes de dossiers temporaires.

À noter !
Il suffit d'effectuer la même manipulation dans le dossier /etc/rc6.d pour que le script soit lancé au redémarrage.

Suppression des noyaux inutilisés

Une mise à jour vous a peut-être mis une nouvelle entrée dans Grub avec un autre kernel. En effet, par sécurité, les anciennes versions ne sont pas désinstallées automatiquement.

Ceci est à faire avec la plus grande précaution. Parfois, on découvre une régression qu'après plusieurs jours ou semaines ! Je vous renvoie à la page concernant le noyau pour les détails.