Page suivante - Page précédente - Table des matières

2. Astuces simples

2.1 Un truc pratique pour syslog. Paul Anderson, rédacteur du Linux Astuces HOWTO.

Editez le ficher /etc/syslog.conf et ajoutez-y la ligne suivante :

# Tout envoyer sur tty8
*.*                                      /dev/tty8

Attention : PENSEZ À UTILISER DES TABULATIONS ! Syslog n'aime pas les espaces.

2.2 Un script pour afficher les HOWTO compactés. Didier Juges, dj@destin.nfds.net.

De débutant à débutant, voici un petit script qui facilite la lectures des howto. Mes howto sont dans /usr/doc/faq/howto/ et sont compressés avec gzip. Les fichiers s'appellent XXX-HOWTO.gz, où XXX est le titre. J'ai appelé le script suivant howto et je l'ai placé dans /usr/local/sbin/ :


#!/bin/sh
if [ "$1" = "" ]; then
 ls /usr/doc/faq/howto | less
else
 gunzip -c /usr/doc/faq/howto/$1-HOWTO.gz | less
fi

Appelé sans argument, il affiche la liste des howto disponibles. Quand on lui passe en argument la première partie du nom du fichier (avant le trait d'union), il décompacte le document (en laissant l'original intact) et l'affiche à l'écran.

Par exemple, pour afficher le document Serial-HOWTO.gz, tapez :

$ howto serial

2.3 Reste-t-il assez de place libre ? Hans Zoebelein,zocki@goldfish.cube.net.

Voici un script qui vérifie à intervalles réguliers qu'il reste de la place sur tout ce qui est monté (disques durs, CDROM, disquettes...)

En cas de pénurie d'espace libre, un message est affiché à l'écran toutes les X secondes et un courrier électronique est envoyé pour chaque périphérique qui déborde.


#!/bin/sh
#
# $Id: Tips-HOWTO.sgml,v 1.1.1.1 2003/01/03 02:38:54 traduc Exp $
#
#
# Depuis que j'ai été confronté à des
# messages d'erreur mystérieux pendant les compilations
# quand les fichiers temporaires remplissaient mes disques, j'ai
# écrit ça pour être averti avant que les disques
# ne soient pleins.
#
# Si ça a empeché vos serveurs d'exploser, envoyez
# les courriers de remerciement à zocki@goldfish.cube.net.
# Si votre site flambe à cause de ça, désolé
# mais je vous avais prévenu: c'est votre problème
# Si vous savez vraiment vous servir de sed, excusez moi :)
#
#
# Lancez-le et vous pouvez l'oublier: mettez "check_hdspace &"
# dans rc.local. Il vérifie l'espace libre toutes les
# $SLEEPTIME secondes. Vous pouvez même surveiller vos
# disquettes et vos bandes.  :)
# Si l'espace libre est inférieur à $MINFREE (Ko),
# le script va afficher un message d'avertissement et envoyer un
# courrier à $MAIL_TO_ME pour chaque périphérique
# concerné. Dès qu'il y a à nouveau plus de place
# libre que la limite, le système d'envoi de courrier est
# réamorcé.
#
# RESTE À FAIRE:
# Des $MINFREE différents pour chaque périphérique
# Nettoyer les répertoires /*tmp des vieilleries en cas de
#           pénurie d'espace.
DEVICES='/dev/sda2 /dev/sda8 /dev/sda9' # vos disques
MINFREE=20480                           # la limite
SLEEPTIME=10                            # secondes entre deux vérifications
MAIL_TO_ME='root@localhost'             # la personne à avertir
# ------- rien à changer en dessous (j'espère :) -------
MINMB=0
ISFREE=0
MAILED=""
let MINMB=$MINFREE/1024         # oui, on fait ça bien :)
while [ 1 ]; do
 DF="`/bin/df`"
 for DEVICE in $DEVICES ; do
 ISFREE=`echo $DF | sed s#.\*$DEVICE" "\*[0-9]\*""\*[0-9]\*" "\*## | sed s#" ".\*##`
 if [ $ISFREE -le $MINFREE ] ; then
 let ISMB=$ISFREE/1024
 echo  "WARNING: $DEVICE only $ISMB mb free.">&2
 #echo "more stuff here">&2
 echo -e "\a\a\a\a"
 if [ -z  "`echo $MAILED | grep -w $DEVICE`" ] ; then
 echo "WARNING: $DEVICE only $ISMB mb free.      (Trigger is set to $MINMB mb)" \
 | mail -s "WARNING: $DEVICE only $ISMB mb free!" $MAIL_TO_ME
 MAILEDH="$MAILED $DEVICE"
 MAILED=$MAILEDH
 # rajoutez ce qu'il reste à faire
 # par exemple nettoyer les */tmp
 fi
 elif [ -n  "`echo $MAILED | grep -w $DEVICE`" ] ; then
 # Enlever le marqueur de courrier si
 # l'espace disponible remonte
 # au-dessus de la limite. Pour pouvoir
 # envoyer un nouveau message en cas de
 # besoin.
 MAILEDH="`echo $MAILED  | sed s#$DEVICE##`"
 MAILED=$MAILEDH
 fi
 done
 sleep $SLEEPTIME
done

2.4 Un utilitaire pour nettoyer vos fichiers journaux (logs). Paul Anderson, rédacteur du Linux Astuces HOWTO.

Si vous êtes comme moi, vous avez une liste de diffusion avec 430 inscrits et plus de 100 messages qui arrivent tous les jours par UUCP. Qu'est-ce qu'un bidouilleur peut bien faire avec ces énormes fichiers journaux ? Il peut installer chklogs. chklogs a été écrit par Emilio Grimaldo, grimaldo@panama.iaehv.nl, et la version 1.8 actuelle est disponible sur ftp.iaehv.nl:/pub/users/grimaldo/chklogs-1.8.tar.gz. C'est très simple à installer (il faut bien sûr lire le contenu du répertoire doc). Une fois le paquetage installé, rajoutez une entrée à votre crontab :

# Lance chklogs tous les jours à 21h
00 21 * * *          /usr/local/sbin/chklogs -m

Pendant que vous y êtes, n'oubliez pas de dire à l'auteur à quel point vous appréciez son logiciel :)

2.5 Un script pratique pour nettoyer les fichierscore. Otto Hammersmith.

Créez un fichier rmcores (l'auteur l'appelle handle-cores) contenant ceci :


#!/bin/sh
USAGE="$0 <directory> <message-file>"
if [ $# != 2 ] ; then
 echo $USAGE
 exit
fi
 echo Deleting...
find $1 -name core -atime 7 -print -type f -exec rm {} \;
echo e-mailing
for name in `find $1 -name core -exec ls -l {} \; | cut -c16-24`
do
 echo $name
 cat $2 | mail $name
done

Et utilisez cron pour le lancer à intervalles réguliers.

2.6 Déplacement de répertoires inter partitions Linux (filesystems). Alan Cox, A.Cox@swansea.ac.uk.

(cd /répertoire_source && tar cf - . ) | (cd /répertoire_cible && tar xvf -)

[ Et pas cd /répertoire_source; tar...etc., qui laisse la possibilité de bousiller un répertoire en cas de problème. Merci à Jim Dennis, jim@starshine.org, qui me l'a signalé. -le rédacteur ]

2.7 Trouver les plus gros répertoires. Mick Ghazey.

Vous vous êtes déjà demandé quels étaient les plus gros répertoires sur votre machine ? Voici une façon de les trouver.

du -S | sort -n

2.8 La Linux Gazette.

Bravo et merci à John Fisk, le créateur de la Linux Gazette. C'est un excellent magazine en ligne, qui plus est GRATUIT ! Que demander de plus ? Vous pouvez le trouver à l'adresse :

http://www.linuxgazette.com

Au fait, il s'avère que (1) la LG est maintenant mensuelle et (2) elle n'est plus maintenue par John Fisk, mais par l'équipe de SSC.

2.9 Indication permettant de résoudre le problème posé par le VPATH du GNU make version 3.7. Ted Stern, stern@amath.washington.edu.

J'ignore si ce problème concerne de nombreux utilisateurs mais l'une des caractéristiques de la version 3.7 du GNU make ne m'enthousiasme pas. Il s'agit du comportement d'un VPATH sur répertoire absolu. Un robuste patch corrige cela, vous pourrez l'obtenir auprès de Paul D. Smith <psmith@wellfleet.com>

Veuillez rédiger votre courrier en anglais ! NDT
. Ce dernier poste dans le groupe gnu.utils.bug un article contenant ce patch et sa documentation après parution de chaque nouvelle version du GNU make. En ce qui me concerne... il est installé sur tous les systèmes auxquels j'ai accès !

2.10 Comment interdire à ma machine de lancer fsck après chaque démarrage ? Dale Lutz, dal@wimsey.com.

Réponse : Après recompilation du noyau le système de fichiers est considéré comme non vérifié ("marked as dirty"), ce qui implique que fsck sera mis en action lors de chaque démarrage. Pour éviter cela lancer :

rdev -R /zImage 1
Cela modifie le noyau qui, dès lors, considère que le système de fichiers est sain.

Note : Ajoutez, si vous employez LILO, read-only à la section de l'image de boot de votre fichier de configuration LILO (souvent nommé /etc/lilo/config ou /etc/lilo.conf).

2.11 Comment éviter les lancements de fsck, au boot, dûs au "device busy" ? Jon Tombs, jon@gtex02.us.es.

Si votre système connaìt de fréquentes erreurs de type "device busy" au démarrage qui laissent le système de fichiers dans un état exigeant un fsck, veuillez suivre les recommandations suivantes :

Ajoutez, au fichier /etc/rc.d/init.d/halt ou /etc/rc.d/rc.0, la ligne

mount -o remount,ro /mount.dir
pour tous vos systèmes de fichiers montés, sauf la racine, avant l'invocation de umount -a. Cela signifie que si, pour une quelconque raison, "shutdown" ne parvient pas à tuer tous les processus puis démonter les partitions ces dernières seront malgré tout considérées comme saines lors du redémarrage. Cette astuce a considérablement écourté le temps de démarrage de mon système !

2.12 Comment trouver les plus gros fichiers sur votre disque dur. Simon Amor, simon@foobar.co.uk.

ls -l | sort +4n

Pour ceux d'entre vous qui sont vraiment à l'étroit, ça prend du temps, mais ça marche bien :

cd /
ls -lR | sort +4n

2.13 Comment imprimer sur des pages avec marges ? Mike Dickey, mdickey@thorplus.lib.purdue.edu.


 #!/bin/sh
 # /usr/local/bin/print
 # Une simple sortie formatée pour permettre de
 # perforer les feuilles afin de les mettre dans un classeur
 cat $1 | pr -t -o 5 -w 85 | lpr

2.14 Méthode permettant de rechercher des expressions rationnelles dans des fichiers. Raul Deluth Miller, rockwell@nova.umd.edu.

Je désigne, par "expressions rationnelles", les regexp de "grep" et consorts.

J'ai appelé ce script "forall" et l'utilise ainsi :

forall /usr/include grep -i ioctl
forall /usr/man grep ioctl
Voici le script forall:

#!/bin/sh
if [ 1 = `expr 2 \> $#` ]
then
 echo Syntaxe: $0 repertoire commande [arguments]
 exit 1
fi
dir=$1
shift
find $dir -type f -print | xargs "$@"

2.15 Un script pour faire le ménage derrière les programmes qui créent des fichiers de sauvegarde.

Voici un petit script de deux lignes qui parcourt une arborescence et qui y efface les fichiers de sauvegarde (# et ~) d'emacs, les fichiers .o, et les fichiers .log de TeX. Il compacte également les fichiers .tex et README. Sur mon système, je l'ai appelé "squeeze".


#!/bin/sh
#SQUEEZE efface les fichiers superflus et compacte les fichiers .tex
#et README.
#Par Barry tolnas, tolnas@sun1.engr.utk.edu
#
echo nettoyage de $PWD
find  $PWD \( -name \*~ -or -name \*.o -or -name \*.log -or -name \*\#\) -exec
rm -f {} \;
find $PWD \( -name \*.tex -or -name \*README\* -or -name \*readme\* \) -exec gzip -9 {} \;

2.16 Comment trouver le processus qui occupe le plus de mémoire. Simon Amor.

ps -aux | sort +4n
-OU-
ps -aux | sort +5n

2.17 Configuration de vi pour la programmation en C. Paul Anderson, rédacteur du Linux Astuces HOWTO.

Je passe beaucoup de temps à programmer en C, et j'ai pris le temps de configurer vi pour me faciliter la tâche. Voici le contenu de mon fichier .exrc :


set autoindent
set shiftwidth=4
set backspace=2
set ruler

Qu'est-ce que ça fait ? autoindent force vi à indenter automatiquement toutes les lignes qui suivent la première ligne indentée, shiftwidth impose une taille de 4 espaces pour ^T, backspace configure la touche d'espacement arrière, et ruler force l'affichage des numéros de lignes. Notez que pour placer le curseur sur une ligne donnée, par exemple la ligne 20, vous pouvez utiliser :

vi +20 monfichier.c

2.18 Utilisation de ctags pour faciliter la programmation

Beaucoup de bidouilleurs ont déjà ctags sur leur machine, mais ne s'en servent pas. Cela peut être très pratique pour éditer des fonctions spécifiques. Supposez que vous avez une fonction dans l'un des nombreux fichiers sources contenus dans un répertoire pour un programme que vous êtes en train d'écrire, et que vous voulez éditer cette fonction pour faire une mise à jour. Appelons cette fonction foo(). Vous ne savez pas non plus où elle se trouve dans le fichier source. C'est là que ctags peut être très pratique. Quand vous le lancez, ctags crée un fichier nommé tags dans le répertoire courant, qui contient la liste de toutes les fonctions, le fichier source dans lequel elles se trouvent et leur emplacement dans ce fichier source. Le fichier tags ressemble à ça :


ActiveIconManager       iconmgr.c       /^void ActiveIconManager(active)$/
AddDefaultBindings      add_window.c    /^AddDefaultBindings ()$/
AddEndResize    resize.c        /^AddEndResize(tmp_win)$/
AddFuncButton   menus.c /^Bool AddFuncButton (num, cont, mods, func, menu, item)$/
AddFuncKey      menus.c /^Bool AddFuncKey (name, cont, mods, func, menu, win_name, action)$/
AddIconManager  iconmgr.c       /^WList *AddIconManager(tmp_win)$/
AddIconRegion   icons.c /^AddIconRegion(geom, grav1, grav2, stepx, stepy)$/
AddStartResize  resize.c        /^AddStartResize(tmp_win, x, y, w, h)$/
AddToClientsList        workmgr.c       /^void AddToClientsList (workspace, client)$/
AddToList       list.c  /^AddToList(list_head, name, ptr)$/

Pour éditer, par exemple, AddEndResize() avec vim, tapez :

vim -t AddEndResize

Cela va ouvrir le bon fichier dans l'éditeur et placer le curseur au début de la fonction.

2.19 Pourquoi sendmail se bloque-t-il pendant 5 minutes au démarrage d'une Red Hat ? Paul Anderson.

C'est un problème assez courant, presque au point d'en faire une FAQ. Je ne sais pas si Red Hat corrige l'erreur dans sa distributions, mais vous pouvez réparer ça vous-même. Si vous regardez dans votre fichier /etc/hosts, vous allez trouver quelque chose qui ressemble à ça :

127.0.0.1        localhost        votremachine

Quand sendmail démarre, il fait une recherche sur le nom de votre machive (votremachine dans l'exemple). Ensuite, il trouve que l'adresse IP de la machine est 127.0.0.1; sendmail n'aime pas ça et recommence la recherche. Il continue comme ça pendant un moment avant d'abandonner. Corriger ce problème est très facile : éditez votre fichier /etc/hosts et mettez-y quelque chose comme ça :

127.0.0.1        localhost
10.56.142.1      votremachine

2.20 Comment configurer une Red Hat pour avoir ls en couleurs?Paul Anderson, paul@geeky1.ebtech.net.

La distribution Red Hat est fournie avec color-ls (ls en couleurs), mais je n'arrive pas à comprendre pourquoi ils ne le configurent pas pour utiliser les couleurs par défaut. Voici une façon d'arranger ça.

Commencez par taper eval `DIRCOLORS`

Puis alias ls='ls --color=auto'

Enfin, mettez la ligne "alias ....." dans votre /etc/bashrc.

2.21 Comment trouver quelle bibliothèque de /usr/lib contient une fonction donnée ? Pawel Veselow.

Vous êtes en train de compiler un programme et vous avez oublié de lier une bibliothèque nécessaire? Et gcc qui ne donne que les noms des fonctions manquantes... Voici une commande pour trouver ce que vous cherchez :

for i in *; do echo $i:;nm $i|grep tgetnum 2>/dev/null;done

Remplacez tgetnum par le nom de la fonction que vous cherchez.

2.22 J'ai compilé un petit programme en C, mais quand je le lance, je ne vois aucun résultat !

Vous avez compilé le programme et créé un programme appelé test, non? Linux a déjà un programme test, qui teste si une certaine condition est vraie et qui n'affiche aucun résultat à l'écran. Pour lancer votre programme test, tapez ./test.


Page suivante - Page précédente - Table des matières