Trieur Organisé de Solutions et de Ressources Informatiques

logo du site TOSRI

4 avril 2011

Niveau : personne ayant des connaissances informatique de niveau BAC+2/BAC+3

Linux : Un peu de nettoyage dans les logs

Bonjour à tous,

Aujourd'hui au menu : un petit script qui vous permettra de faire le vide dans vos logs. Le script vide les logs en cours d'utilisation (pour éviter des erreurs qui apparaissent des fois quand on les supprime simplement) et il supprime les vieux logs (ceux qui ont un chiffre derrière). Seuls les logs sous forme de texte sont gérés (les tar.gz et compagnie peuvent être assez simplement)

#!/bin/bash
# Mickaël Martin under licence GPLv2
# viderlog version 1.4
# Ce script est dangereux, ne l'exécutez pas si vous
# n'êtes pas sûr de ce que vous faites !
# This script is dangerous, don't run it if
# you aren't sure what you do !

boollist="0"; #permet de vérifier que l'utilisateur à bien vu les fichiers concernés
dosslog="/var/log/"

cd $dosslog
#menu
while [ "$choix" != "5" ]; do
    echo "1.Voir les fichiers concernés"
    echo "2.Vider les logs (logs actuels)"
    echo "3.Supprimer les anciens logs"
    echo "4.Nettoyer (action 2&3)"
    echo "5.Quitter"
    echo -en "\nVotre choix : "
    read choix

    # on initialise les listes de fichiers concernés
    if [ "$choix" = "1" ] ; then
       
        afics=$(find -exec file {} \; | grep text | cut -d':' -f1)
        if [ "$afics" = "" ] ; then
            echo "pas de fichiers à vider"
        else
            echo "-->listes de fichiers qui vont être vidés :"
            echo $afics
        fi
       
        vfics=$(find -name '*\.[0-9]')
        if [ "$vfics" = "" ] ; then
            echo "pas de fichiers à supprimer"
        else
            echo "-->listes de fichiers qui vont être supprimés :"
            echo $vfics
        fi
        boollist="1"
    fi
   
    # on vide les logs actuels
    if [ "$choix" = "2" ] || [ "$choix" = "4" ] ; then
        if [ "$boollist" = "1" ] ; then
            echo -n "Réinitialisation des logs actuels... "
            for unfic in $afics; do
                >$unfic
            done
            if [ "$choix" != "4" ] ;then boollist="0" ;fi
            echo "OK"
        else
            echo "impossible de vider les logs sans avoir listé les fichiers concernés"
        fi
    fi
   
    #on supprime les anciens logs
    if [ "$choix" = "3" ] || [ "$choix" = "4" ] ; then
        if [ "$boollist" = "1" ] ; then
            echo -n "Suppression des vieux logs... "
            for unfic in $vfics; do
                rm -Rf $unfic
            done
            boollist="0"
            echo "OK"
        else
            echo "impossible de supprimer les logs sans avoir listé les fichiers concernés"
        fi
    fi

done




16 février 2011

Niveau : personne ayant des bases en informatique (terminologie, principe)

Linux : Lister tous les binaires accessibles

Bonsoir à tous,

J'ai des fois regretté de ne pas pouvoir enregistrer une liste de tous les binaires accessibles. Je me suis donc fait un petit script qui simule quasiment un double appui sur la touche tabulation, [tab][tab].

#!/bin/bash
#récupération des chemins
for onepath in `echo $PATH | tr ':' '\n'`
do
   #on affiche les fichiers de chaque chemin
   onedir=$(ls -1 `echo $onepath` 2>/dev/null)

   # on concatène chaque chaine trouvée avec la chaine finale
   allcmd=$(echo -e "${allcmd}${onedir}")
done
# si il y a exactement un argument
if (($# ==1))
then
#si on met -m comme argument 1
    if (("$1" -eq "-m"))
    then
        sort=$(echo -e "$allcmd" | sort)

        # permet de mettre des mots en gras dans la commande
        less export LESS="--RAW-CONTROL-CHARS"

        # affichage manuel (via le less) avec tri
         echo -e "\033[1mdéfilement manuel\033[0m\n$sort" | less
    fi
    # si on met -h comme argument 1
    if (("$1" == "-h"))
    then
         # affichage de l'aide
         echo -e "This script lists all your binaries with PATH constant \naccording to your rights, of course !\nusage: $0 [-h|-m]"
    fi
else
    # si pas d'argument
    # affichage direct avec tri
echo -e "$allcmd" | sort fi
# sortie normale
exit 0

Je ne vous l'expliquerai pas, il est suffisamment commenté ;-)


27 septembre 2010

Niveau : personne ne possédant pas de compétences de bases en informatique

Linux : Les bases de la console

Ce billet fait office d'aide mémoire pour les bases de la console Linux. Ces petites bases vous permettront de créer des scripts plus puissants et plus efficaces. Elles ne sont pas indispensables, juste nécessaires ;-)
Nous allons découvrir tout ceci :

Les opérateurs :

Ils permettent d'exécuter des commandes à la suite selon ce qui s'est passé à la commande précédente.

  • Le "commande1 && commande2" : il regarde le code erreur de la commande1, si celle-ci s'est bien passée (code retour=0) alors on exécute la commande2 sinon on ne fait pas la commande2
  • Le "commande1 || commande2" : Comme son collègue, il regarde le code erreur de la commande1, mais cette fois-ci, il ne lance la commande2 que si la commande1 a échouée (code retour != 0)
  • Le "commande1 ; commande2" : Celui là est spécial, il ne regarde pas ce qui s'est passé avant. Il exécute bêtement les commandes1 puis la commande2.

Les trois flux standards :

  • Le flux 0 : Il est aussi appelé stdin. Il s'agit du flux d'entrée. Une redirection du flux d'entrée dans une commande permet des fois de changer le comportement de la commande.

Exemple avec grep "te" <test qui cherche le mot "te" dans le fichier test placé sur l'entrée (stdin) de grep

  • Le flux 1 : il est aussi appelé stdout. Il s'agit du flux standard de sortie. Tout ce qui est affiché sur l'écran est par défaut envoyé sur stdout. Cependant, les messages d'erreurs ne sont (normalement) pas envoyé sur ce flux.

Exemple : cat coucou > coucoubis (qui nous fait une copie de fichier !)

  • Le flux 2 : Il s'agit de stderr. C'est le flux d'erreur. Toutes les erreurs de retour au sein des programmes doivent être envoyé sur ce flux. Il est extrêmement pratique !

Exemple : make 2>erreur.log. Cet exemple permet de récupérer toutes les erreurs lors de la compilation et de les mettre dans un fichier de log.

Les tubes

Cette technique est relativement simple et puissante. Elle permet de rediriger le flux d'un programme vers un autre. On peut donc utiliser le résultat d'une commande en entrée dans la commande suivante. Petit exemple : ps aux | grep apache2 permet d'envoyer dans la commande grep les processus courants et de rechercher (grep) la ligne où apache2 apparait. Pratique pour récupérer rapidement un PID (Process ID)

Raccourcis

  • Le !! permet de voir la dernière commande et de la ré-exécuter.
  • Le !24 permet de voir la 24ème commande de l'historique (voir la commande history) et de la ré-exécuter.

Variable shell

Certaines variables contiennent des informations sur votre environnement, il peut être pratique, voire nécessaire de les récupérer

  • echo $? : permet de voir le code retour de la dernière commande exécutée. (rappel : 0 -> ok, différent de 0 -> erreur)
  • echo $$ : donne le PID du shell courant
  • echo $! : très intéressant, donne le PID du dernier travail lancé en arrière plan
  • echo $HOME : renvoi le chemin du répertoire personnel de l'utilisateur
  • echo $PATH : liste des chemins possibles des commandes exécutables
  • echo $PS1 : affiche l'invite principale du shell
  • echo $PWD : renvoi le chemin du répertoire courant
  • echo $RANDOM : donne un nombre entier aléatoire compris entre 0 et 32767

Plus de complément sur http://www.epons.org/shell-bash-variables.php

Exécuter un fichier

La manipulation est aisée, mais encore faut-il la connaitre (ou s'en rappeler ;-) )

  • Ajoutez-vous les droits x sur le fichier (les droits d'exécution), via chmod u+x (d'autres commandes existent)
  • Lancer le programme soit par "./monprogrammeaexecuter" (sans les quotes) , soit si vous avez rajouté le chemin du dossier contenant le programme, directement "monprogrammeaexecuter" sans le . et les quotes

page 2 de 2 -