  traduction du 2 janvier 1999 Astuces Linux HOWTO
  Paul Anderson <mailto:paul@geeky1.ebtech.net>, traduit par
  Arnaud Gomes-do-Vale <mailto:gomesdv@mail.dotcom.fr> et Nat
  Makarvitch <mailto:nat@nataa.fr.eu.org>
  v3.6, Juin 1998

  Ce document contient ces astuces et rglages difficiles  trouver qui
  rendent Linux un peu plus sympathique.
  ______________________________________________________________________

  Table des matires


  1. Introduction

  2. Astuces simples

     2.1 Un truc pratique pour syslog.
     2.2 Un script pour afficher les HOWTO compacts.
     2.3 Reste-t-il assez de place libre ?
     2.4 Un utilitaire pour nettoyer vos fichiers journaux      (logs).
     2.5 Un script pratique pour nettoyer les fichiers
     2.6 Dplacement de rpertoires inter partitions Linux (filesystems).
     2.7 Trouver les plus gros rpertoires.
     2.8 La Linux Gazette.
     2.9 Indication permettant de rsoudre le problme pos par le VPATH du GNU make version 3.7.
     2.10 Comment interdire  ma machine de lancer fsck aprs chaque dmarrage ?
     2.11 Comment viter les lancements de fsck, au boot, ds au "device busy" ?
     2.12 Comment trouver les plus gros fichiers sur votre disque dur.
     2.13 Comment imprimer sur des pages avec marges ?
     2.14 Mthode permettant de rechercher des expressions rationnelles dans des fichiers.
     2.15 Un script pour faire le mnage derrire les      programmes qui crent des fichiers de sauvegarde.
     2.16 Comment trouver le processus qui occupe le plus de      mmoire.
     2.17 Configuration de
     2.18 Utilisation de ctags pour faciliter la programmation
     2.19 Pourquoi sendmail se bloque-t-il pendant 5 minutes au      dmarrage d'une Red Hat ?
     2.20 Comment configurer une Red Hat pour avoir
     2.21 Comment trouver quelle bibliothque de /usr/lib      contient une fonction donne ?
     2.22 J'ai compil un petit programme en C, mais quand je le      lance, je ne vois aucun rsultat !

  3. Astuces dtailles

     3.1 Linux et Windows peuvent utiliser une mme partition pour le swap !
     3.2 Rcupration de fichiers effacs.
     3.3 Comment utiliser le marqueur d'immutabilit.
     3.4 Une suggestion quant  l'endroit o mettre ce      que vous rajoutez.
     3.5 Conversion de tous les fichiers d'un rpertoire en      minuscules.
     3.6 Mise  jour de Sendmail.
     3.7 Quelques astuces pour les administrateurs systme      dbutants.
     3.8 Comment configurer


  ______________________________________________________________________

  11..  IInnttrroodduuccttiioonn

  Ce document est le LLiinnuuxx AAssttuucceess HHOOWWTTOO (titre original : LLiinnuuxx TTiippss
  HHOOWWTTOO), une liste de trucs et d'optimisations bien pratiques, qui
  contribuent  rendre Linux plus agrable. Tout ce qui est ici sort ou
  bien de ma tte, ou bien de l'ancien Astuces HOWTO (aprs tout,
  pourquoi enlever des astuces qui marchent ?) Alors envoyez-moi vos
  astuces prfres (NdT : en anglais !) pour que je puisse les inclure
  dans la prochaine version du Linux Astuces HOWTO.

  Paul Anderson _R__d_a_c_t_e_u_r _d_e _"_L_i_n_u_x _T_I_P_S _H_O_W_T_O_"

  panderso@ebtech.net



  22..  AAssttuucceess ssiimmpplleess

  22..11..  UUnn ttrruucc pprraattiiqquuee ppoouurr ssyysslloogg.. PPaauull AAnnddeerrssoonn,, rrddaacctteeuurr       dduu
  LLiinnuuxx AAssttuucceess HHOOWWTTOO ..

  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..22..  UUnn ssccrriipptt ppoouurr aaffffiicchheerr lleess HHOOWWTTOO ccoommppaaccttss.. DDiiddiieerr       JJuuggeess,,
  ddjj@@ddeessttiinn..nnffddss..nneett ..

  De dbutant  dbutant, voici un petit script qui facilite la lectures
  des howto. Mes howto sont dans /usr/doc/faq/howto/ et sont compresss
  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 premire partie du nom du fichier (avant
  le trait d'union), il dcompacte 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2..33..  zzoocckkii@@ggoollddffiisshh..ccuubbee..nneett ..  RReessttee--tt--iill aasssseezz ddee ppllaaccee lliibbrree ??
  HHaannss ZZooeebbeelleeiinn,,


  Voici un script qui vrifie  intervalles rguliers qu'il reste de la
  place sur tout ce qui est mont (disques durs, CDROM, disquettes...)

  En cas de pnurie d'espace libre, un message est affich  l'cran
  toutes les X secondes et un courrier lectronique est envoy pour
  chaque priphrique qui dborde.




























































  ______________________________________________________________________
  #!/bin/sh

  #
  # $Id: Tips-HOWTO.sgml,v 1.2 1999/02/02 02:11:38 arnaud Exp $
  #

  #
  # Depuis que j'ai t confront  des
  # messages d'erreur mystrieux 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, dsol
  # mais je vous avais prvenu: c'est votre problme
  # Si vous savez vraiment vous servir de sed, excusez moi :)
  #

  #
  # Lancez-le et vous pouvez l'oublier: mettez "check_hdspace &"
  # dans rc.local. Il vrifie l'espace libre toutes les
  # $SLEEPTIME secondes. Vous pouvez mme surveiller vos
  # disquettes et vos bandes.  :)
  # Si l'espace libre est infrieur  $MINFREE (Ko),
  # le script va afficher un message d'avertissement et envoyer un
  # courrier  $MAIL_TO_ME pour chaque priphrique
  # concern. Ds qu'il y a  nouveau plus de place
  # libre que la limite, le systme d'envoi de courrier est
  # ramorc.
  #

  # RESTE  FAIRE:
  # Des $MINFREE diffrents pour chaque priphrique
  # Nettoyer les rpertoires /*tmp des vieilleries en cas de
  #           pnurie d'espace.


  DEVICES='/dev/sda2 /dev/sda8 /dev/sda9' # vos disques
  MINFREE=20480                           # la limite
  SLEEPTIME=10                            # secondes entre deux vrifications
  MAIL_TO_ME='root@localhost'             # la personne  avertir


  # ------- rien  changer en dessous (j'espre :) -------

  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2..44..  ((llooggss)).. PPaauull AAnnddeerrssoonn,, rrddaacctteeuurr dduu LLiinnuuxx AAssttuucceess HHOOWWTTOO ..  UUnn
  uuttiilliittaaiirree ppoouurr nneettttooyyeerr vvooss ffiicchhiieerrss jjoouurrnnaauuxx

  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 trs simple  installer (il faut bien sr lire le contenu du
  rpertoire doc). Une fois le paquetage install, rajoutez une entre 
  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 apprciez son logiciel :)



  22..55..  ccoorree .. OOttttoo HHaammmmeerrssmmiitthh ..  UUnn ssccrriipptt pprraattiiqquuee ppoouurr nneettttooyyeerr lleess
  ffiicchhiieerrss

  Crez 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 rguliers.



  22..66..  DDppllaacceemmeenntt ddee rrppeerrttooiirreess iinntteerr ppaarrttiittiioonnss LLiinnuuxx ((ffiilleessyysstteemmss))..
  AAllaann CCooxx,,  AA..CCooxx@@sswwaannsseeaa..aacc..uukk ..



       (cd /rpertoire_source && tar cf - . ) | (cd /rpertoire_cible && tar xvf -)




  _[ _E_t _p_a_s _c_d _/_r__p_e_r_t_o_i_r_e___s_o_u_r_c_e_; _t_a_r_._._._e_t_c_._, _q_u_i _l_a_i_s_s_e _l_a _p_o_s_s_i_b_i_l_i_t_
  _d_e _b_o_u_s_i_l_l_e_r _u_n _r__p_e_r_t_o_i_r_e _e_n _c_a_s _d_e _p_r_o_b_l__m_e_. _M_e_r_c_i _ _J_i_m _D_e_n_n_i_s_,
  jim@starshine.org, qui me l'a signal. -le rdacteur ]



  22..77..  TTrroouuvveerr lleess pplluuss ggrrooss rrppeerrttooiirreess.. MMiicckk GGhhaazzeeyy ..

  Vous vous tes dj demand quels taient les plus gros rpertoires
  sur votre machine ?  Voici une faon de les trouver.



       du -S | sort -n






  22..88..  LLaa LLiinnuuxx GGaazzeettttee..

  Bravo et merci  John Fisk, le crateur de la Linux Gazette. C'est un
  excellent magazine en ligne, qui plus est GGRRAATTUUIITT !! Que demander de
  plus ? Vous pouvez le trouver  l'adresse :




  http://www.linuxgazette.com




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



  22..99..  IInnddiiccaattiioonn ppeerrmmeettttaanntt ddee rrssoouuddrree llee pprroobbllmmee ppooss ppaarr llee VVPPAATTHH
  dduu GGNNUU mmaakkee vveerrssiioonn 33..77.. TTeedd SStteerrnn,,  sstteerrnn@@aammaatthh..wwaasshhiinnggttoonn..eedduu ..

  J'ignore si ce problme concerne de nombreux utilisateurs mais l'une
  des caractristiques de la version 3.7 du GNU make ne m'enthousiasme
  pas. Il s'agit du comportement d'un VPATH sur rpertoire absolu. Un
  robuste patch corrige cela, vous pourrez l'obtenir auprs de Paul D.
  Smith <psmith@wellfleet.com>  (-- Veuillez rdiger votre courrier en
  anglais !  NDT--) .  Ce dernier poste dans le groupe gnu.utils.bug un
  article contenant ce patch et sa documentation aprs parution de
  chaque nouvelle version du GNU make.  En ce qui me concerne... il est
  install sur tous les systmes auxquels j'ai accs !



  22..1100..  CCoommmmeenntt iinntteerrddiirree  mmaa mmaacchhiinnee ddee llaanncceerr ffsscckk aapprrss cchhaaqquuee
  ddmmaarrrraaggee ?? DDaallee LLuuttzz,,  ddaall@@wwiimmsseeyy..ccoomm ..

  Rponse : Aprs recompilation du noyau le systme de fichiers est
  considr comme non vrifi ("marked as dirty"), ce qui implique que
  fsck sera mis en action lors de chaque dmarrage. Pour viter cela
  lancer :


       rdev -R /zImage 1




  Cela modifie le noyau qui, ds lors, considre que le systme 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2..1111..  CCoommmmeenntt vviitteerr lleess llaanncceemmeennttss ddee ffsscckk,, aauu bboooott,, ddss aauu ""ddeevviiccee
  bbuussyy"" ?? JJoonn TToommbbss,,  jjoonn@@ggtteexx0022..uuss..eess ..

  Si votre systme connat de frquentes erreurs de type "device busy"
  au dmarrage qui laissent le systme 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 systmes de fichiers monts, 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
  dmonter les partitions ces dernires seront malgr tout considres
  comme saines lors du redmarrage.  Cette astuce a considrablement
  court le temps de dmarrage de mon systme !



  22..1122..  dduurr.. SSiimmoonn AAmmoorr,,  ssiimmoonn@@ffoooobbaarr..ccoo..uukk ..  CCoommmmeenntt ttrroouuvveerr lleess
  pplluuss ggrrooss ffiicchhiieerrss ssuurr vvoottrree ddiissqquuee



       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2..1133..  CCoommmmeenntt iimmpprriimmeerr ssuurr ddeess ppaaggeess aavveecc mmaarrggeess ?? MMiikkee DDiicckkeeyy,,
  mmddiicckkeeyy@@tthhoorrpplluuss..lliibb..ppuurrdduuee..eedduu ..



       ______________________________________________________________________
               #!/bin/sh
               # /usr/local/bin/print
               # Une simple sortie formate pour permettre de
               # perforer les feuilles afin de les mettre dans un classeur

               cat $1 | pr -t -o 5 -w 85 | lpr
       ______________________________________________________________________






  22..1144..  MMtthhooddee ppeerrmmeettttaanntt ddee rreecchheerrcchheerr ddeess eexxpprreessssiioonnss rraattiioonnnneelllleess
  ddaannss ddeess ffiicchhiieerrss.. RRaauull DDeelluutthh MMiilllleerr,,  rroocckkwweellll@@nnoovvaa..uummdd..eedduu ..

  Je dsigne, 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2..1155..  pprrooggrraammmmeess qquuii ccrreenntt ddeess ffiicchhiieerrss ddee ssaauuvveeggaarrddee..  UUnn ssccrriipptt
  ppoouurr ffaaiirree llee mmnnaaggee ddeerrrriirree lleess

  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 systme, 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2..1166..  mmmmooiirree.. SSiimmoonn AAmmoorr ..  CCoommmmeenntt ttrroouuvveerr llee pprroocceessssuuss qquuii ooccccuuppee
  llee pplluuss ddee



       ps -aux | sort +4n




  -OU-


       ps -aux | sort +5n








  22..1177..  AAnnddeerrssoonn,, rrddaacctteeuurr dduu LLiinnuuxx AAssttuucceess HHOOWWTTOO ..  CCoonnffiigguurraattiioonn ddee
  vvii  ppoouurr llaa pprrooggrraammmmaattiioonn eenn CC.. PPaauull

  Je passe beaucoup de temps  programmer en C, et j'ai pris le temps de
  configurer vi pour me faciliter la tche. 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 premire ligne indente, shiftwidth
  impose une taille de 4 espaces pour ^T, backspace configure la touche
  d'espacement arrire, et ruler force l'affichage des numros de
  lignes. Notez que pour placer le curseur sur une ligne donne, par
  exemple la ligne 20, vous pouvez utiliser :



       vi +20 monfichier.c






  22..1188..  UUttiilliissaattiioonn ddee ccttaaggss ppoouurr ffaacciilliitteerr llaa pprrooggrraammmmaattiioonn

  Beaucoup de bidouilleurs ont dj ctags sur leur machine, mais ne s'en
  servent pas. Cela peut tre trs pratique pour diter des fonctions
  spcifiques. Supposez que vous avez une fonction dans l'un des
  nombreux fichiers sources contenus dans un rpertoire 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 trs pratique. Quand vous le
  lancez, ctags cre un fichier nomm tags dans le rpertoire 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
  dbut de la fonction.



  22..1199..  ddmmaarrrraaggee dd''uunnee RReedd HHaatt ?? PPaauull AAnnddeerrssoonn ..  PPoouurrqquuooii sseennddmmaaiill ssee
  bbllooqquuee--tt--iill ppeennddaanntt 55 mmiinnuutteess aauu

  C'est un problme 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 rparer a vous-mme. Si vous regardez dans votre fichier
  /etc/hosts, vous allez trouver quelque chose qui ressemble  a :



       127.0.0.1        localhost        votremachine




  Quand sendmail dmarre, 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 problme est trs facile : ditez votre
  fichier /etc/hosts et mettez-y quelque chose comme a :



       127.0.0.1        localhost
       10.56.142.1      votremachine






  22..2200..  PPaauull AAnnddeerrssoonn,,  ppaauull@@ggeeeekkyy11..eebbtteecchh..nneett ..  CCoommmmeenntt ccoonnffiigguurreerr
  uunnee RReedd HHaatt ppoouurr aavvooiirr llss  eenn ccoouulleeuurrss??

  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 dfaut. Voici une faon d'arranger a.

  Commencez par taper eval `DIRCOLORS`

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

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



  22..2211..  ccoonnttiieenntt uunnee ffoonnccttiioonn ddoonnnnee ?? PPaawweell VVeesseellooww ..  CCoommmmeenntt ttrroouuvveerr
  qquueellllee bbiibblliiootthhqquuee ddee //uussrr//lliibb

  Vous tes en train de compiler un programme et vous avez oubli de
  lier une bibliothque ncessaire? 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2..2222..  llaannccee,, jjee nnee vvooiiss aauuccuunn rrssuullttaatt !!  JJ''aaii ccoommppiill uunn ppeettiitt pprroo
  ggrraammmmee eenn CC,, mmaaiiss qquuaanndd jjee llee

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



  33..  AAssttuucceess ddttaaiilllleess

  33..11..  LLiinnuuxx eett WWiinnddoowwss ppeeuuvveenntt uuttiilliisseerr uunnee mmmmee ppaarrttiittiioonn ppoouurr llee
  sswwaapp !! TToonnyy AAcceerroo,,  aaccee33@@mmiiddwwaayy..uucchhiiccaaggoo..eedduu ..


  1. Formater la partition sous DOS puis y disposer le fichier d'change
     de Windows. Ne pas employer Windows tout de suite afin de laisser
     ce fichier compltement "vide" pour faciliter son compactage.

  2. Dmarrer Linux et sauver ce fichier dans un fichier.  Exemple (cas
     d'une partition de "swap" commun nomme /dev/hda8) :


       dd if=/dev/hda8 of=/etc/dosswap




  3. Compacter le fichier de swap :


       gzip -9 /etc/dosswap




  4. Ajouter au fichier /etc/rc la ligne suivante afin de prparer et
     installer la partition de swap lorsqu'elle est employe par Linux :
     _X_X_X_X_X _r_e_p_r__s_e_n_t_e _i_c_i _l_e _n_o_m_b_r_e _d_e _b_l_o_c_s _q_u_e _c_o_m_p_t_e _l_a _p_a_r_t_i_t_i_o_n _d_e
     _s_w_a_p


       mkswap /dev/hda8 XXXXX
       swapon -av




  Ajoutez une ligne destine  cette partiton de swap dans le fichier
  /etc/fstab

  5.  Si les programmes init et shutdown employs utilisent /etc/brc
     ajouter  ce fichier les lignes suivantes :


       swapoff -av
       zcat /etc/dosswap.gz | dd of=/dev/hda8 bs=1k count=100




  Dans le cas contraire il vous faudra invoquer ces commandes avant
  chaque fin de session Linux (placer ces commandes dans un script...)

  Note : dd ne traite que 100 blocs car j'ai empiriquement dtermin que
  rien ne sert d'en crire davantage !

  >>  Quels sont les avantages et inconvnients de cette mthode ?

  Avantages : gain d'espace disponible sur le disque !

  Inconvnients : si l'tape de restauration du fichier d'change
  Windows n'est pas automatique il ne faudra pas ngliger, sous Linux et
  avant chaque redmarrage "vers" Windows, de lancer les commandes
  charges de cette remise en place.



  33..22..  RRccuupprraattiioonn ddee ffiicchhiieerrss eeffffaaccss.. MMiicchhaaeell HHaammiillttoonn,,
  mmiicchhaaeell@@aaccttrriixx..ggeenn..nnzz ..

  Voici une astuce dont j'ai eu besoin  quelques reprises.

  La rcupration d'un fichier texte par une personne dsespre.

  Si vous effacez un fichier texte par accident, par exemple un courrier
  lectronique ou le produit d'une nuit de programmation, tout n'est pas
  perdu. Si le fichier a eu le temps d'aller jusqu'au disque, c'est 
  dire s'il a exist pendant plus de 30 secondes, il est possible que
  son contenu se trouve encore sur la partition.

  Vous pouvez le rechercher dans la partition en utilisant la commande
  grep.

  Par exemple, rcemment, j'ai effac un courrier lectronique par
  accident. J'ai immdiatement cess toute activit qui aurait pu
  modifier le contenu de la partition : je me suis abstenu de
  sauvegarder quoi que ce soit, de compiler quoi que ce soit, etc. En
  d'autres occasions, je suis all jusqu' passer le systme en mode
  mono-utilisateur et dmonter le systme de fichiers.

  J'ai ensuite utilis la commande egrep sur la partition : dans mon
  cas, le message se trouvait dans /usr/local/home/michael/, et donc
  d'aprs la sortie de df, dans /dev/hdb5.



          sputnik3:~ % df
          Filesystem         1024-blocks  Used Available Capacity Mounted on
          /dev/hda3              18621    9759     7901     55%   /
          /dev/hdb3             308852  258443    34458     88%   /usr
          /dev/hdb5             466896  407062    35720     92%   /usr/local

          sputnik3:~ % su
          Password:
          [michael@sputnik3 michael]# egrep -50 'ftp.+COL' /dev/hdb5 > /tmp/x

  Je suis extrmement prudent quand je manipule des partitions, donc
  j'ai bien pris le temps de m'assurer que je comprenais la syntaxe de
  cette commande AVANT de presser la touche Entre. Dans ce cas, le
  message contenait la mot "ftp", puis un peu de texte suivi du mot
  "COL". Le message faisait une vingtaine de lignes, donc j'ai utilis
  -50 pour avoir toutes les lignes assez proches de la phrase. Il m'est
  dj arriv d'utiliser -3000 pour tre sr de rperer toutes les
  lignes d'un code source. J'ai redirig le sortie de egrep vers une
  autre partition pour viter d'craser le message que je recherchais.

  J'ai ensuite utilis la commande strings pour examiner le rsultat.



         strings /tmp/x | less




  Effectivement, le message tait l.

  Cette mthode peut ne pas tre efficace si tout ou partie de l'espace
  disque a dj t rutilis.

  Cette astuce n'est probablement utilisable que sur un systme mono-
  utilisateur. Sur un systme multi-utilisateurs avec beaucoup
  d'activit sur les disques, l'emplacement que vous avez libr peut
  trs bien dj avoir t rutilis. Et pour la plupart nous ne pouvons
  pas nous permettre d'enlever la machine de sous les pieds de nos
  utilisateurs ds que nous avons besoin de rcuprer un fichier.

  Sur mon systme personnel, cette astuce a t bien pratique  environ
  trois occasions ces quelques dernires annes - gnralement aprs que
  j'ai dtruit accidentellement une partie de mon travail du jour. Si ce
  que je fais survit assez longtemps pour progresser de faon
  significative, je le sauvegarde sur une disquette, donc je n'ai pas
  souvent besoin de ce truc.



  33..33..  DDeennnniiss,,  jjaaddeessttaarr@@rraahhuull..nneett ..  CCoommmmeenntt uuttiilliisseerr llee mmaarrqquueeuurr
  dd''iimmmmuuttaabbiilliitt.. JJiimm

  Utilisez le marqueur d'immutabilit.

  Juste aprs avoir install et configur votre systme, faites un tour
  dans /bin, /sbin, /usr/bin, /usr/sbin, /usr/lib et autres, et
  n'hsitez pas  vous servir de la commande "chattr +i". Appliquez-la
  aussi aux fichiers du noyau  la racine. Maintenant, "mkdir
  /etc/.dist" et copiez-y toute l'arborescence contenue dans /etc (je le
  fais en deux tapes en utilisant /tmp/etcdist.tar pour viter la
  rcursion). (Vous pouvez aussi vous contenter de /etc/.dist.tar.gz).
  Et placez-y un marqueur d'immutabilit.

  Tout cela sert  limiter les dgts que vous pouvez faire en tant que
  root. Vous viterez ainsi d'craser des fichiers avec une redirection
  mal contrle, et vous ne risquez pas de rendre le systme
  inutilisable  cause d'une espace mal place dans une commande "rm
  -fr" ; vous pouvez toujours faire trs mal  vos donnes, mais vos
  binaires et vos bibliothques seront  l'abri.

  De plus, cela prvient, ou du moins complique, l'exploitation d'un
  certain nombre de trous de scurit ; en effet, beaucoup d'attaques de
  ce type crasent un fichier au moyen d'un quelconque programme SUID
  qui _n_e _p_e_r_m_e_t _p_a_s _d_'_e_x__c_u_t_e_r _u_n_e _c_o_m_m_a_n_d_e _a_r_b_i_t_r_a_i_r_e.

  Le seul inconvnient se prsente  l'installation de divers logiciels
  systme. D'un autre ct, a empche l'crasement accidentel de
  fichiers par "make install". Si vous oubliez de lire le Makefile et
  d'appliquer chattr -i aux fichiers qui doivent tre crass (et aux
  rpertoires auxquels vous voulez ajouter des fichiers), le make
  choue, et il suffit d'utiliser chattr avant de le relancer. Vous
  pouvez aussi en profiter pour dplacer vos anciens binaires,
  bibliothques et autres dans un rpertoire .old/, les renommer, les
  archiver ou autre.



  33..44..  qquuee vvoouuss rraajjoouutteezz..  UUnnee ssuuggggeessttiioonn qquuaanntt  ll''eennddrrooiitt oo mmeettttrree
  ccee

  Tout ce que vous rajoutez doit se trouver sous /usr/local ou
  /usr/local/`hostname`!

  Si votre distribution laisse /usr/local vide, crez /usr/local/src,
  /usr/local/bin, etc. et utilisez-les. Si votre distribution met des
  choses dans /usr/local, crez /usr/local/`hostname` et donnez-lui le
  mode +w pour le groupe wheel (en plus, je le rends SUID et SGID pour
  m'assurer que les membres du groupe wheel ne peuvent toucher qu'
  leurs propres fichiers et que tous les nouveaux fichiers vont
  appartenir au groupe wheel).

  Maintenant, forcez-vous  _T_O_U_J_O_U_R_S placer les nouveaux paquetages sous
  /usr/local/src/.from/$OU_JE_L_AI_EU (pour les fichiers .tar ou autres)
  et  les compiler sous /usr/local/src (ou .../$HOSTNAME/src). Assurez-
  vous qu'ils s'installent sous la hirarchie locale. Si quelque chose
  *doit obligatoirement* tre install dans /bin ou /usr/bin ou autre,
  crez un lien symbolique depuis la hirarchie locale vers tout ce qui
  est install ailleurs.

  La raison de tout a, mme si a reprsente plus de travail, est que
  a permet de trouver facilement ce qui doit tre sauvegard et
  rinstall en cas de rinstallation complte depuis le mdia de
  distribution (habituellement un CD  l'heure actuelle). En utilisant
  un rpertoire /usr/local/src/.from, vous gardez aussi une trace de la
  provenance de vos sources, ce qui est utile pour trouver les mises 
  jour et qui peut s'avrer critique pour suivre les listes d'annonces
  de scurit.

  Un de mes systmes personnels (celui que j'utilise) a t mont avant
  que je n'applique moi-mme cette politique. Je ne "sais" toujours pas
  en quoi il diffre du systme de base "tel qu'install". Et cela bien
  que je n'ai chang que trs peu de choses quant  sa configuration et
  que je suis le *seul*  l'utiliser.

  A contrario, tous les systmes que j'ai mis en place au travail (o
  j'ai t bombard administrateur systme) ont t configurs de cette
  faon. Ils ont t administrs par plusieurs personnes extrieures et
  autres membres du dpartement informatique, et ils ont subi de
  nombreuses mises  jour et installations de logiciels. Pourtant, j'ai
  une ide trs prcise de ce qui a t rajout *aprs* l'installation
  et la configuration initiales.



  33..55..  mmiinnuussccuulleess.. JJuussttiinn DDoosssseeyy,,  ddoosssseeyy@@oouu..eedduu ..  CCoonnvveerrssiioonn ddee ttoouuss
  lleess ffiicchhiieerrss dd''uunn rrppeerrttooiirree eenn

  J'ai remarqu quelques procdures difficiles ou superflues
  recommandes dans les trucs et astuces du numro 12  (-- NdT :
  Apparemment, cette section est tire de la Linux Gazette--) . Comme il
  y en a plusieurs, je vous adresse ce message.
       ______________________________________________________________________
       #!/bin/sh
                # lowerit
                # convertit les noms de tous les fichiers du rpertoire
                # courant en minuscules
                # n'affecte que les fichiers, pas les sous-rpertoires
                # demande confirmation avant d'craser un fichier existant
                for x in `ls`
                  do
                  if [ ! -f $x ]; then
                    continue
                    fi
                  lc=`echo $x  | tr '[A-Z]' '[a-z]'`
                  if [ $lc != $x ]; then
                    mv -i $x $lc
                  fi
                  done
       ______________________________________________________________________




  Voil un long script. Je n'crirais pas un script pour a ;
  j'utiliserais plutt la commande suivante :



       for i in * ; do [ -f $i ] && mv -i $i `echo $i | tr '[A-Z]' '[a-z]'`;
       done;




  Ce contributeur dit qu'il a crit le script de cette faon pour des
  raisons de lisibilit (voir plus bas).

  Pour l'astuce suivante, qui traite de l'ajout et de la suppression
  d'utilisateurs, Geoff s'en sort bien jusqu' la dernire tape.
  Rebooter ? J'espre qu'il ne reboote pas  chaque fois qu'il supprime
  un utilisateur. Les deux premires tapes suffisent. De toutes faons,
  quels processus cet utilisateur pourrait-il laisser tourner ? Un bot
  IRC ? Tuez simplement les processus avec :



       kill -9 `ps -aux |grep ^<nom d'utilisateur> |tr -s " " |cut -d " " -f2`




  Par exemple, pour l'utilisateur foo:



       kill -9 `ps -aux |grep ^foo |tr -s " " |cut -d " " -f2`




  Cette question tant classe, passons au mot de passe de root oubli.

  La solution donne dans la Gazette est la plus universelle, mais pas
  la plus facile. Aussi bien avec LILO qu'avec Loadlin, le paramtre
  "single" permet de lancer directement le shell par dfaut au
  dmarrage, sans entrer de login ni de mot de passe.  partir de l, il
  suffit de changer ou d'enlever le mot de passe problmatique, avant de
  taper "init 3" pour passer en mode multi-utilisateurs. De cette faon,
  un seul reboot ; de l'autre, deux reboots.

  Justin Dossey.



  33..66..  ppaauull@@ggeeeekkyy11..eebbtteecchh..nneett MMiissee  jjoouurr ddee SSeennddmmaaiill.. PPaauull AAnnddeerrssoonn,,

  Nous partons d'une source propre. Commencez par vous procurer le code
  source de sendmail. J'ai tlcharg la version 8.9.0, qui est comme
  vous pouvez le voir  la pointe du progrs. Je l'ai rcupre depuis
  ftp.sendmail.org:/pub/sendmail/sendmail-8.9.0.tar.gz

  Il pse  peu prs un mga-octet, et sachant que j'utilise la version
  8.7.6, je crois que a vaut le cot. Si a marche, vous en entendrez
  srement parler ; sinon, je n'aurai plus de courrier et je ne pourrai
  pas distribuer la nouvelle version de ce HOWTO :)

  Maintenant que vous avez tlcharg le source, dcompactez-le. Cela va
  crer un sous-rpertoire sendmail-8.9.0 dans le rpertoire courant.
  Placez-vous dans ce sous-rpertoire et lisez les fichiers README et
  RELEASE_NOTES (et soyez poustoufl par toutes les amliorations
  qu'ils ont apportes). Maintenant, placez-vous dans src. C'est l que
  vous allez faire le plus gros du travail.

  _U_n_e _r_e_m_a_r_q_u_e _a_u _p_a_s_s_a_g_e _: _S_e_n_d_m_a_i_l _e_s_t _u_n _p_r_o_g_r_a_m_m_e _p_e_t_i_t_, _p_u_i_s_s_a_n_t _e_t
  _b_i_e_n __c_r_i_t_. _L_e _b_i_n_a_i_r_e sendmail lui-mme a mis moins de 5 minutes 
  compiler sur mon 5x86 133 avec 32 Mo de RAM ! La totalit de la
  compilation et de l'installation (sans compter la configuration) ont
  pris moins de 15 minutes !

  Je n'utilise pas BIND sur mon systme, donc j'ai cherch les lignes
  suivantes :



       ______________________________________________________________________
       # ifndef NAMED_BIND
       #  define NAMED_BIND    1       /* use Berkeley Internet Domain Server */
       # endif
       ______________________________________________________________________




  et j'ai remplac le 1 par un 0:



       ______________________________________________________________________
       # ifndef NAMED_BIND
       #  define NAMED_BIND    0       /* use Berkeley Internet Domain Server */
       # endif
       ______________________________________________________________________




  Sur la Debian 1.3, db.h est install par dfaut dans /usr/include/db,
  au lieu de /usr/include o sendmail espre le trouver. Placez-vous
  successivement dans les sous-rpertoires src, mailstats, makemap,
  praliases, rmail et smrsh et xecutez la commande suivante :



   ./Build -I/usr/include/db




  Ensuite, cd .. et tapez make install. Voil ! La version 8.9.0 de
  Sendmail doit maintenant tre installe !  Bien sr, a suppose que
  vous avez dj votre configuration d'origine. Pour que tout marche
  bien sur mon systme, comme j'hberge des listes de diffusion
  gratuites utilisant majordomo, j'ai ajout la ligne suivante au dbut
  de mon /etc/sendmail.cf :



       ______________________________________________________________________
       O DontBlameSendmail=forwardfileinunsafedirpath, forwardfileinunsafedirpathsafe
       ______________________________________________________________________




  Sendmail 8.9.0 est  l'heure actuelle plutt bavard  propos des
  permissions des rpertoires et des fichiers, et il va se plaindre 
  propos des rpertoires et des fichiers qui autorisent l'accs en
  criture pour le groupe ou pour tout le monde parmi les fichiers
  d'alias ou .forward. Bien qu'il ne soit pas recommand d'inhiber ces
  avertissements, je suis toujours seul  la console et j'ai trouv que
  ce trou de scurit mineur n'tait en fait pas gnant. C'est vous qui
  voyez.



  33..77..  ddbbuuttaannttss.. JJiimm DDeennnniiss,,  jjaaddeessttaarr@@rraahhuull..nneett QQuueellqquueess aassttuucceess ppoouurr
  lleess aaddmmiinniissttrraatteeuurrss ssyyssttmmee

  Crez et tenez  jour un fichier /README.`hostname` ou
  /etc/README.`hostname` _[ _o_u __v_e_n_t_u_e_l_l_e_m_e_n_t
  /usr/local/etc/README.`hostname` - le rdacteur ]

  Absolument,  compter du _p_r_e_m_i_e_r _j_o_u_r de l'administration d'un
  systme, prenez des notes dans un fichier journal. Vous pouvez mettre
  "vi /README.$(hostname)" sur une ligne du fichier .bash_logout de
  root. Une autre faon de faire est d'crire un script su ou sudo qui
  fait quelque chose comme a :



                       function exit \
                               { unset exit; exit; \
                                 cat ~/tmp/session.$(date +%y%m%d) \
                                 >> /README.$(hostname) && \
                                 vi /README.$(hostname)
                                 }
                       script -a ~/tmp/session.$(date +%y%m%d)
                       /bin/su.org -




  (utilise la commande tape pour crer une trace de la session et cre
  une fonction pour automatiser la mise  jour du fichier journal).

  J'admets que je n'ai pas implant cette automatisation - jusqu'
  maintenant je me suis repos sur ma discipline. Cependant j'ai
  envisag l'ide (au point d'crire les scripts et les fonctions que
  vous avez sous les yeux). Une chose qui me retient est la commande
  "script" elle-mme. Je pense qu'il va falloir que je me procure les
  sources et que je rajoute une paire de paramtres (pour arrter
  l'enregistrement du script depuis la ligne de commandes) avant de me
  mettre  utiliser a.

  Ma dernire suggestion (pour cette fois) :

  La variable PATH de root devrait contenir PATH=~/bin.

  C'est tout. Rien d'autre dans le PATH de root. Tout ce que root peut
  faire est fourni par un lien symbolique dans ~/bin, un alias, une
  fonction shell, un script ou un binaire situ dans ~/bin, ou bien la
  commande est tape avec un chemin d'accs explicite.

  De cette faon, toute personne utilisant le compte root se rend compte
  (parfois douloureusement)  quel point elle fait confiance aux
  binaires. L'administrateur avis d'un systme multi-utilisateurs va en
  plus parcourir rgulirement son rpertoire ~/bin et ses fichiers
  ~/.*history pour y chercher des rptitions et des moyens de les
  contourner.

  L'administrateur vraiment motiv va reprer les enchanements qui
  peuvent tre automatiss, les endroits o des vrifications peuvent
  tre ajoutes, et les tches pour lesquelles les privilges de root
  peuvent tre abandonnes (comme lancer un diteur, un agent de
  transport de courrier lectronique ou autre gros programme pouvant
  excuter des scripts qui *pourraient* tre inclus dans des fichiers de
  donnes - comme vi (./.exrc) ou emacs (./.emacs) ou mme, plus
  insidieux, $EXINIT et les macros contenues au dbut ou  la fin des
  documents). Bien sr, les commandes de ce genre peuvent tre lances
  avec quelque chose comme a :



                       cp $donnes $rpertoire_utilisateur/tmp
                       su -c $commande_d_origine $paramtres
                       cp $rpertoire_utilisateur/tmp $donnes




  (... o les dtails dpendent de la commande).

  Ces dernires prcautions sont pour la plupart superflues pour la
  machine personnelle ou la station "mono-utilisateur". Mais elles
  reprsentent une trs bonne manire d'administrer un gros systme
  multi-utilisateurs, particulirement dans le cas d'un accs public
  (comme les machines de netcom).



  33..88..  CCoommmmeenntt ccoonnffiigguurreerr xxddmm  ppoouurr qquu''iill ppeerrmmeettttee ddee cchhooiissiirr llee
  ssyyssttmmee hhttee ?? AArrrriiggoo TTrriiuullzzii,,  aa..ttrriiuullzzii@@iicc..aacc..uukk ..


  1. Modifier le  fichier lanant xdm lors du dmarrage (probablement
     nomm /etc/rc/rc.6 ou /etc/rc.local) de faon que la section de xdm
     contienne :


       /usr/bin/X11/xdm
       exec /usr/bin/X11/X -indirect hostname




  2. Modifier le fichier /usr/lib/X11/xdm/Xservers et commenter la ligne
     invoquant le serveur sur la machine locale (commence par "0:")

  3. Relancer le systme... tout doit fonctionner !

  J'ajoute cette section aprs avoir su une semaine durant sur ce
  problme !

  Attention : certaines anciennes versions de la distribution SLS
  (1.1.1) exigent qu'un paramtre "-nodaemon" accompagne l'invocation
  d'xdm.  Les version ultrieures ne prsentent PPAASS cette
  caractristique.






















































