This file is indexed.

/usr/share/doc/HOWTO/fr-html/Tips-HOWTO.html is in doc-linux-fr-html 2013.01-3ubuntu1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<meta name="generator" content=
"HTML Tidy for HTML5 for Linux version 5.2.0">
<meta name="GENERATOR" content="LinuxDoc-Tools 0.9.72">
<title>Astuces Linux HOWTO</title>
</head>
<body>
<h1>Astuces Linux HOWTO</h1>
<h2><a href="mailto:paul@geeky1.ebtech.net">Paul Anderson</a>,
traduit par <a href="mailto:gomesdv@mail.dotcom.fr">Arnaud
Gomes-do-Vale</a> et <a href="mailto:nat@nataa.fr.eu.org">Nat
Makarévitch</a></h2>
v3.6, Juin 1998 traduction du 2 janvier 1999
<hr>
<em>Ce document contient ces astuces et réglages difficiles à
trouver qui rendent Linux un peu plus sympathique.</em>
<hr>
<h2><a name="s1">1. Introduction</a></h2>
<p>Ce document est le <b>Linux Astuces HOWTO</b> (titre
original&nbsp;: <b>Linux Tips HOWTO</b>), une liste de trucs et
d'optimisations bien pratiques, qui contribuent à rendre Linux plus
agréable. Tout ce qui est ici sort ou bien de ma tête, ou bien de
l'ancien Astuces HOWTO (après tout, pourquoi enlever des astuces
qui marchent&nbsp;?) Alors envoyez-moi vos astuces préférées
(NdT&nbsp;: en anglais&nbsp;!) pour que je puisse les inclure dans
la prochaine version du Linux Astuces HOWTO.</p>
<p>Paul Anderson <em>Rédacteur de "Linux TIPS HOWTO"</em></p>
<p><code>panderso@ebtech.net</code></p>
<h2><a name="s2">2. Astuces simples</a></h2>
<h2><a name="ss2.1">2.1 Un truc pratique pour syslog. <em>Paul
Anderson, rédacteur du Linux Astuces HOWTO</em>.</a></h2>
<p>Editez le ficher <code>/etc/syslog.conf</code> et ajoutez-y la
ligne suivante&nbsp;:</p>
<blockquote>
<pre><code>
# Tout envoyer sur tty8
*.*                                      /dev/tty8
</code></pre></blockquote>
<p>Attention&nbsp;: PENSEZ À UTILISER DES TABULATIONS&nbsp;! Syslog
n'aime pas les espaces.</p>
<h2><a name="ss2.2">2.2 Un script pour afficher les HOWTO
compactés. <em>Didier Juges,</em>
<code>dj@destin.nfds.net</code>.</a></h2>
<p>De débutant à débutant, voici un petit script qui facilite la
lectures des howto. Mes howto sont dans
<code>/usr/doc/faq/howto/</code> et sont compressés avec
<code>gzip</code>. Les fichiers s'appellent
<code>XXX-HOWTO.gz</code>, où XXX est le titre. J'ai appelé le
script suivant <code>howto</code> et je l'ai placé dans
<code>/usr/local/sbin/</code>&nbsp;:</p>
<blockquote>
<hr>
<pre><code>
#!/bin/sh
if [ "$1" = "" ]; then
    ls /usr/doc/faq/howto | less
else
    gunzip -c /usr/doc/faq/howto/$1-HOWTO.gz | less
fi
</code></pre>
<hr></blockquote>
<p>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.</p>
<p>Par exemple, pour afficher le document
<code>Serial-HOWTO.gz</code>, tapez&nbsp;:</p>
<blockquote>
<pre><code>
$ howto serial
</code></pre></blockquote>
<h2><a name="ss2.3">2.3 Reste-t-il assez de place libre&nbsp;?
<em>Hans Zoebelein,</em></a>
<code>zocki@goldfish.cube.net</code>.</h2>
<p>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...)</p>
<p>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.</p>
<blockquote>
<hr>
<pre><code>
#!/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 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 &amp;"
# 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." &gt;&amp;2
                        #echo "more stuff here" &gt;&amp;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
</code></pre>
<hr></blockquote>
<h2><a name="ss2.4">2.4 Un utilitaire pour nettoyer vos fichiers
journaux (logs). <em>Paul Anderson, rédacteur du Linux Astuces
HOWTO</em>.</a></h2>
<p>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&nbsp;? Il peut installer
<code>chklogs</code>. <code>chklogs</code> a été écrit par Emilio
Grimaldo, <code>grimaldo@panama.iaehv.nl</code>, et la version 1.8
actuelle est disponible sur
<code>ftp.iaehv.nl:/pub/users/grimaldo/chklogs-1.8.tar.gz</code>.
C'est très simple à installer (il faut bien sûr lire le contenu du
répertoire <code>doc</code>). Une fois le paquetage installé,
rajoutez une entrée à votre crontab&nbsp;:</p>
<blockquote>
<pre><code>
# Lance chklogs tous les jours à 21h
00 21 * * *          /usr/local/sbin/chklogs -m
</code></pre></blockquote>
<p>Pendant que vous y êtes, n'oubliez pas de dire à l'auteur à quel
point vous appréciez son logiciel :)</p>
<h2><a name="ss2.5">2.5 Un script pratique pour nettoyer les
fichiers <code>core</code>. <em>Otto Hammersmith</em>.</a></h2>
<p>Créez un fichier <code>rmcores</code> (l'auteur l'appelle
<code>handle-cores</code>) contenant ceci&nbsp;:</p>
<blockquote>
<hr>
<pre><code>
#!/bin/sh
USAGE="$0 &lt;directory&gt; &lt;message-file&gt;"

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
</code></pre>
<hr></blockquote>
<p>Et utilisez cron pour le lancer à intervalles réguliers.</p>
<h2><a name="ss2.6">2.6 Déplacement de répertoires inter partitions
Linux (filesystems). <i>Alan Cox,</i>
<code>A.Cox@swansea.ac.uk</code>.</a></h2>
<blockquote>
<pre><code>
(cd /répertoire_source &amp;&amp; tar cf - . ) | (cd /répertoire_cible &amp;&amp; tar xvf -)
</code></pre></blockquote>
<p><i>[ 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, <code>jim@starshine.org</code>, qui me l'a signalé. -le
rédacteur ]</i></p>
<h2><a name="ss2.7">2.7 Trouver les plus gros répertoires. <em>Mick
Ghazey</em>.</a></h2>
<p>Vous vous êtes déjà demandé quels étaient les plus gros
répertoires sur votre machine&nbsp;? Voici une façon de les
trouver.</p>
<blockquote>
<pre><code>
du -S | sort -n
</code></pre></blockquote>
<h2><a name="ss2.8">2.8 La Linux Gazette.</a></h2>
<p>Bravo et merci à John Fisk, le créateur de la Linux Gazette.
C'est un excellent magazine en ligne, qui plus est
<b>GRATUIT&nbsp;!</b> Que demander de plus&nbsp;? Vous pouvez le
trouver à l'adresse&nbsp;:</p>
<blockquote>
<pre><code>
http://www.linuxgazette.com
</code></pre></blockquote>
<p>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.</p>
<h2><a name="ss2.9">2.9 Indication permettant de résoudre le
problème posé par le VPATH du GNU make version 3.7. <i>Ted
Stern,</i> <code>stern@amath.washington.edu</code>.</a></h2>
<p>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
<code>&lt;psmith@wellfleet.com&gt;</code></p>
<blockquote>Veuillez rédiger votre courrier en anglais !
NDT</blockquote>
. 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 !
<h2><a name="ss2.10">2.10 Comment interdire à ma machine de lancer
fsck après chaque démarrage&nbsp;? <i>Dale Lutz,</i>
<code>dal@wimsey.com</code>.</a></h2>
<p>Réponse&nbsp;: 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 :</p>
<blockquote>
<pre><code>
rdev -R /zImage 1
</code></pre></blockquote>
Cela modifie le noyau qui, dès lors, considère que le système de
fichiers est sain.
<p>Note&nbsp;: Ajoutez, si vous employez LILO,
<code>read-only</code> à la section de l'image de boot de votre
fichier de configuration LILO (souvent nommé /etc/lilo/config ou
/etc/lilo.conf).</p>
<h2><a name="ss2.11">2.11 Comment éviter les lancements de fsck, au
boot, dûs au "device busy"&nbsp;? <i>Jon Tombs,</i>
<code>jon@gtex02.us.es</code>.</a></h2>
<p>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 <code>fsck</code>, veuillez suivre les recommandations
suivantes :</p>
<p>Ajoutez, au fichier <code>/etc/rc.d/init.d/halt</code> ou
<code>/etc/rc.d/rc.0</code>, la ligne</p>
<blockquote>
<pre><code>
mount -o remount,ro /mount.dir
</code></pre></blockquote>
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 !
<h2><a name="ss2.12">2.12 Comment trouver les plus gros fichiers
sur votre disque dur. <i>Simon Amor,</i>
<code>simon@foobar.co.uk</code>.</a></h2>
<blockquote>
<pre><code>
ls -l | sort +4n
</code></pre></blockquote>
<p>Pour ceux d'entre vous qui sont vraiment à l'étroit, ça prend du
temps, mais ça marche bien&nbsp;:</p>
<blockquote>
<pre><code>
cd /
ls -lR | sort +4n
</code></pre></blockquote>
<h2><a name="ss2.13">2.13 Comment imprimer sur des pages avec
marges ? <i>Mike Dickey,</i>
<code>mdickey@thorplus.lib.purdue.edu</code>.</a></h2>
<blockquote>
<hr>
<pre><code>
        #!/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
</code></pre>
<hr></blockquote>
<h2><a name="ss2.14">2.14 Méthode permettant de rechercher des
expressions rationnelles dans des fichiers. <i>Raul Deluth
Miller,</i> <code>rockwell@nova.umd.edu</code>.</a></h2>
<p>Je désigne, par "expressions rationnelles", les
<code>regexp</code> de "grep" et consorts.</p>
<p>J'ai appelé ce script "forall" et l'utilise ainsi :</p>
<blockquote>
<pre><code>
forall /usr/include grep -i ioctl
forall /usr/man grep ioctl
</code></pre></blockquote>
Voici le script forall:
<blockquote>
<hr>
<pre><code>
#!/bin/sh
if [ 1 = `expr 2 \&gt; $#` ]
then
        echo Syntaxe: $0 repertoire commande [arguments]
        exit 1
fi
dir=$1
shift
find $dir -type f -print | xargs "$@"
</code></pre>
<hr></blockquote>
<h2><a name="ss2.15">2.15 Un script pour faire le ménage derrière
les programmes qui créent des fichiers de sauvegarde.</a></h2>
<p>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".</p>
<blockquote>
<hr>
<pre><code>
#!/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 {} \;
</code></pre>
<hr></blockquote>
<h2><a name="ss2.16">2.16 Comment trouver le processus qui occupe
le plus de mémoire. <em>Simon Amor</em>.</a></h2>
<blockquote>
<pre><code>
ps -aux | sort +4n
</code></pre></blockquote>
-OU-
<blockquote>
<pre><code>
ps -aux | sort +5n
</code></pre></blockquote>
<h2><a name="ss2.17">2.17 Configuration de <code>vi</code> pour la
programmation en C. <em>Paul Anderson, rédacteur du Linux Astuces
HOWTO</em>.</a></h2>
<p>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 <code>.exrc</code>&nbsp;:</p>
<blockquote>
<hr>
<pre><code>
set autoindent
set shiftwidth=4
set backspace=2
set ruler
</code></pre>
<hr></blockquote>
<p>Qu'est-ce que ça fait&nbsp;? <code>autoindent</code> force vi à
indenter automatiquement toutes les lignes qui suivent la première
ligne indentée, <code>shiftwidth</code> impose une taille de 4
espaces pour ^T, <code>backspace</code> configure la touche
d'espacement arrière, et <code>ruler</code> 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&nbsp;:</p>
<blockquote>
<pre><code>
vi +20 monfichier.c
</code></pre></blockquote>
<h2><a name="ss2.18">2.18 Utilisation de ctags pour faciliter la
programmation</a></h2>
<p>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é <code>tags</code>
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 <code>tags</code>
ressemble à ça&nbsp;:</p>
<blockquote>
<hr>
<pre><code>

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)$/
</code></pre>
<hr></blockquote>
<p>Pour éditer, par exemple, AddEndResize() avec vim,
tapez&nbsp;:</p>
<blockquote>
<pre><code>
vim -t AddEndResize
</code></pre></blockquote>
<p>Cela va ouvrir le bon fichier dans l'éditeur et placer le
curseur au début de la fonction.</p>
<h2><a name="ss2.19">2.19 Pourquoi sendmail se bloque-t-il pendant
5 minutes au démarrage d'une Red Hat&nbsp;? <em>Paul
Anderson</em>.</a></h2>
<p>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 <code>/etc/hosts</code>, vous allez
trouver quelque chose qui ressemble à ça&nbsp;:</p>
<blockquote>
<pre><code>
127.0.0.1        localhost        votremachine
</code></pre></blockquote>
<p>Quand sendmail démarre, il fait une recherche sur le nom de
votre machive (<code>votremachine</code> 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&nbsp;: éditez votre fichier <code>/etc/hosts</code> et
mettez-y quelque chose comme ça&nbsp;:</p>
<blockquote>
<pre><code>
127.0.0.1        localhost
10.56.142.1      votremachine
</code></pre></blockquote>
<h2><a name="ss2.20">2.20 Comment configurer une Red Hat pour avoir
<code>ls</code> en couleurs? <em>Paul Anderson,</em>
<code>paul@geeky1.ebtech.net</code>.</a></h2>
<p>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.</p>
<p>Commencez par taper <code>eval `DIRCOLORS`</code></p>
<p>Puis <code>alias ls='ls --color=auto'</code></p>
<p>Enfin, mettez la ligne "<code>alias .....</code>" dans votre
<code>/etc/bashrc</code>.</p>
<h2><a name="ss2.21">2.21 Comment trouver quelle bibliothèque de
/usr/lib contient une fonction donnée&nbsp;? <em>Pawel
Veselow</em>.</a></h2>
<p>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&nbsp;:</p>
<blockquote>
<pre><code>
for i in *; do echo $i:;nm $i|grep tgetnum 2&gt;/dev/null;done
</code></pre></blockquote>
<p>Remplacez <code>tgetnum</code> par le nom de la fonction que
vous cherchez.</p>
<h2><a name="ss2.22">2.22 J'ai compilé un petit programme en C,
mais quand je le lance, je ne vois aucun résultat&nbsp;!</a></h2>
<p>Vous avez compilé le programme et créé un programme appelé
<code>test</code>, non? Linux a déjà un programme
<code>test</code>, qui teste si une certaine condition est vraie et
qui n'affiche aucun résultat à l'écran. Pour lancer votre programme
<code>test</code>, tapez <code>./test</code>.</p>
<h2><a name="s3">3. Astuces détaillées</a></h2>
<h2><a name="ss3.1">3.1 Linux et Windows peuvent utiliser une même
partition pour le swap ! <i>Tony Acero,</i>
<code>ace3@midway.uchicago.edu</code>.</a></h2>
<ol>
<li>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 complètement "vide" pour faciliter son
compactage.</li>
<li>Démarrer Linux et sauver ce fichier dans un fichier. Exemple
(cas d'une partition de "swap" commun nommée /dev/hda8) :
<blockquote>
<pre><code>
dd if=/dev/hda8 of=/etc/dosswap
</code></pre></blockquote>
</li>
<li>Compacter le fichier de swap :
<blockquote>
<pre><code>
gzip -9 /etc/dosswap
</code></pre></blockquote>
</li>
<li>Ajouter au fichier /etc/rc la ligne suivante afin de préparer
et installer la partition de swap lorsqu'elle est employée par
Linux : <em>XXXXX représente ici le nombre de blocs que compte la
partition de swap</em>
<blockquote>
<pre><code>
mkswap /dev/hda8 XXXXX
swapon -av   
</code></pre></blockquote>
Ajoutez une ligne destinée à cette partiton de swap dans le fichier
/etc/fstab</li>
<li>Si les programmes init et shutdown employés utilisent /etc/brc
ajouter à ce fichier les lignes suivantes&nbsp;:
<blockquote>
<pre><code>
swapoff -av
zcat /etc/dosswap.gz | dd of=/dev/hda8 bs=1k count=100
</code></pre></blockquote>
Dans le cas contraire il vous faudra invoquer ces commandes avant
chaque fin de session Linux (placer ces commandes dans un
script...)</li>
</ol>
Note : dd ne traite que 100 blocs car j'ai empiriquement déterminé
que rien ne sert d'en écrire davantage&nbsp;!
<p>&gt;&gt; Quels sont les avantages et inconvénients de cette
méthode ?</p>
<p>Avantages&nbsp;: gain d'espace disponible sur le disque !</p>
<p>Inconvénients&nbsp;: si l'étape de restauration du fichier
d'échange Windows n'est pas automatique il ne faudra pas négliger,
sous Linux et avant chaque redémarrage "vers" Windows, de lancer
les commandes chargées de cette remise en place.</p>
<h2><a name="ss3.2">3.2 Récupération de fichiers effacés.
<em>Michael Hamilton,</em>
<code>michael@actrix.gen.nz</code>.</a></h2>
<p>Voici une astuce dont j'ai eu besoin à quelques reprises.</p>
<p>La récupération d'un fichier texte par une personne
désespérée.</p>
<p>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.</p>
<p>Vous pouvez le rechercher dans la partition en utilisant la
commande grep.</p>
<p>Par exemple, récemment, j'ai effacé un courrier électronique par
accident. J'ai immédiatement cessé toute activité qui aurait pu
modifier le contenu de la partition&nbsp;: 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 système en mode
mono-utilisateur et démonter le système de fichiers.</p>
<p>J'ai ensuite utilisé la commande egrep sur la partition&nbsp;:
dans mon cas, le message se trouvait dans
<code>/usr/local/home/michael/</code>, et donc d'après la sortie de
df, dans <code>/dev/hdb5</code>.</p>
<blockquote>
<pre><code>
   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 &gt; /tmp/x
</code></pre></blockquote>
<p>Je suis extrêmement 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 Entrée. 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 déjà arrivé d'utiliser -3000 pour être sûr de
réperer 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.</p>
<p>J'ai ensuite utilisé la commande strings pour examiner le
résultat.</p>
<blockquote>
<pre><code>
  strings /tmp/x | less
</code></pre></blockquote>
<p>Effectivement, le message était là.</p>
<p>Cette méthode peut ne pas être efficace si tout ou partie de
l'espace disque a déjà été réutilisé.</p>
<p>Cette astuce n'est probablement utilisable que sur un système
mono-utilisateur. Sur un système multi-utilisateurs avec beaucoup
d'activité sur les disques, l'emplacement que vous avez libéré peut
très bien déjà avoir été réutilisé. Et pour la plupart nous ne
pouvons pas nous permettre d'enlever la machine de sous les pieds
de nos utilisateurs dès que nous avons besoin de récupérer un
fichier.</p>
<p>Sur mon système personnel, cette astuce a été bien pratique à
environ trois occasions ces quelques dernières
années&nbsp;-&nbsp;généralement après que j'ai détruit
accidentellement une partie de mon travail du jour. Si ce que je
fais survit assez longtemps pour progresser de façon significative,
je le sauvegarde sur une disquette, donc je n'ai pas souvent besoin
de ce truc.</p>
<h2><a name="ss3.3">3.3 Comment utiliser le marqueur
d'immutabilité. <em>Jim Dennis,</em>
<code>jadestar@rahul.net</code>.</a></h2>
<p>Utilisez le marqueur d'immutabilité.</p>
<p>Juste après avoir installé et configuré votre système, faites un
tour dans <code>/bin</code>, <code>/sbin</code>,
<code>/usr/bin</code>, <code>/usr/sbin</code>,
<code>/usr/lib</code> et autres, et n'hésitez pas à vous servir de
la commande "<code>chattr +i</code>". Appliquez-la aussi aux
fichiers du noyau à la racine. Maintenant, "<code>mkdir
/etc/.dist</code>" et copiez-y toute l'arborescence contenue dans
<code>/etc</code> (je le fais en deux étapes en utilisant
<code>/tmp/etcdist.tar</code> pour éviter la récursion). (Vous
pouvez aussi vous contenter de <code>/etc/.dist.tar.gz</code>). Et
placez-y un marqueur d'immutabilité.</p>
<p>Tout cela sert à limiter les dégâts que vous pouvez faire en
tant que root. Vous éviterez ainsi d'écraser des fichiers avec une
redirection mal contrôlée, et vous ne risquez pas de rendre le
système inutilisable à cause d'une espace mal placée dans une
commande "<code>rm -fr</code>"&nbsp;; vous pouvez toujours faire
très mal à vos données, mais vos binaires et vos bibliothèques
seront à l'abri.</p>
<p>De plus, cela prévient, ou du moins complique, l'exploitation
d'un certain nombre de trous de sécurité&nbsp;; en effet, beaucoup
d'attaques de ce type écrasent un fichier au moyen d'un quelconque
programme SUID qui <em>ne permet pas d'exécuter une commande
arbitraire</em>.</p>
<p>Le seul inconvénient se présente à l'installation de divers
logiciels système. D'un autre côté, ça empêche l'écrasement
accidentel de fichiers par "<code>make install</code>". Si vous
oubliez de lire le Makefile et d'appliquer <code>chattr -i</code>
aux fichiers qui doivent être écrasés (et aux répertoires 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 déplacer vos anciens binaires, bibliothèques et
autres dans un répertoire <code>.old/</code>, les renommer, les
archiver ou autre.</p>
<h2><a name="ss3.4">3.4 Une suggestion quant à l'endroit où mettre
ce que vous rajoutez.</a></h2>
<p>Tout ce que vous rajoutez doit se trouver sous
<code>/usr/local</code> ou <code>/usr/local/`hostname`</code>!</p>
<p>Si votre distribution laisse <code>/usr/local</code> vide, créez
<code>/usr/local/src</code>, <code>/usr/local/bin</code>, etc. et
utilisez-les. Si votre distribution met des choses dans
<code>/usr/local</code>, créez <code>/usr/local/`hostname`</code>
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).</p>
<p>Maintenant, forcez-vous à <em>TOUJOURS</em> placer les nouveaux
paquetages sous <code>/usr/local/src/.from/$OU_JE_L_AI_EU</code>
(pour les fichiers .tar ou autres) et à les compiler sous
<code>/usr/local/src</code> (ou <code>.../$HOSTNAME/src</code>).
Assurez-vous qu'ils s'installent sous la hiérarchie locale. Si
quelque chose *doit obligatoirement* être installé dans
<code>/bin</code> ou <code>/usr/bin</code> ou autre, créez un lien
symbolique depuis la hiérarchie locale vers tout ce qui est
installé ailleurs.</p>
<p>La raison de tout ça, même si ça représente plus de travail, est
que ça permet de trouver facilement ce qui doit être sauvegardé et
réinstallé en cas de réinstallation complète depuis le média de
distribution (habituellement un CD à l'heure actuelle). En
utilisant un répertoire <code>/usr/local/src/.from</code>, vous
gardez aussi une trace de la provenance de vos sources, ce qui est
utile pour trouver les mises à jour et qui peut s'avérer critique
pour suivre les listes d'annonces de sécurité.</p>
<p>Un de mes systèmes personnels (celui que j'utilise) a été monté
avant que je n'applique moi-même cette politique. Je ne "sais"
toujours pas en quoi il diffère du système de base "tel
qu'installé". Et cela bien que je n'ai changé que très peu de
choses quant à sa configuration et que je suis le *seul* à
l'utiliser.</p>
<p>A contrario, tous les systèmes que j'ai mis en place au travail
(où j'ai été bombardé administrateur système) ont été configurés de
cette façon. Ils ont été administrés par plusieurs personnes
extérieures et autres membres du département informatique, et ils
ont subi de nombreuses mises à jour et installations de logiciels.
Pourtant, j'ai une idée très précise de ce qui a été rajouté
*après* l'installation et la configuration initiales.</p>
<h2><a name="ss3.5">3.5 Conversion de tous les fichiers d'un
répertoire en minuscules. <em>Justin Dossey,</em>
<code>dossey@ou.edu</code>.</a></h2>
<p>J'ai remarqué quelques procédures difficiles ou superflues
recommandées dans les trucs et astuces du numéro 12</p>
<blockquote>NdT&nbsp;: Apparemment, cette section est tirée de la
Linux Gazette</blockquote>
. Comme il y en a plusieurs, je vous adresse ce message.
<blockquote>
<hr>
<pre><code>
#!/bin/sh
         # lowerit
         # convertit les noms de tous les fichiers du répertoire
         # courant en minuscules
         # n'affecte que les fichiers, pas les sous-répertoires
         # 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
</code></pre>
<hr></blockquote>
<p>Voilà un long script. Je n'écrirais pas un script pour ça&nbsp;;
j'utiliserais plutôt la commande suivante&nbsp;:</p>
<blockquote>
<pre><code>
for i in * ; do [ -f $i ] &amp;&amp; mv -i $i `echo $i | tr '[A-Z]' '[a-z]'`;
done;
</code></pre></blockquote>
<p>Ce contributeur dit qu'il a écrit le script de cette façon pour
des raisons de lisibilité (voir plus bas).</p>
<p>Pour l'astuce suivante, qui traite de l'ajout et de la
suppression d'utilisateurs, Geoff s'en sort bien jusqu'à la
dernière étape. Rebooter&nbsp;? J'espère qu'il ne reboote pas à
chaque fois qu'il supprime un utilisateur. Les deux premières
étapes suffisent. De toutes façons, quels processus cet utilisateur
pourrait-il laisser tourner&nbsp;? Un bot IRC&nbsp;? Tuez
simplement les processus avec&nbsp;:</p>
<blockquote>
<pre><code>
kill -9 `ps -aux |grep ^&lt;nom d'utilisateur&gt; |tr -s " " |cut -d " " -f2`
</code></pre></blockquote>
<p>Par exemple, pour l'utilisateur foo:</p>
<blockquote>
<pre><code>
kill -9 `ps -aux |grep ^foo |tr -s " " |cut -d " " -f2`
</code></pre></blockquote>
<p>Cette question étant classée, passons au mot de passe de root
oublié.</p>
<p>La solution donnée dans la Gazette est la plus universelle, mais
pas la plus facile. Aussi bien avec LILO qu'avec Loadlin, le
paramètre "single" permet de lancer directement le shell par défaut
au démarrage, sans entrer de login ni de mot de passe. À partir de
là, il suffit de changer ou d'enlever le mot de passe
problématique, avant de taper "<code>init 3</code>" pour passer en
mode multi-utilisateurs. De cette façon, un seul reboot&nbsp;; de
l'autre, deux reboots.</p>
<p>Justin Dossey.</p>
<h2><a name="ss3.6">3.6 Mise à jour de Sendmail. <em>Paul
Anderson,</em></a> <code>paul@geeky1.ebtech.net</code></h2>
<p>Nous partons d'une source propre. Commencez par vous procurer le
code source de sendmail. J'ai téléchargé la version 8.9.0, qui est
comme vous pouvez le voir à la pointe du progrès. Je l'ai récupérée
depuis ftp.sendmail.org:/pub/sendmail/sendmail-8.9.0.tar.gz</p>
<p>Il pèse à peu près un méga-octet, et sachant que j'utilise la
version 8.7.6, je crois que ça vaut le coût. Si ça marche, vous en
entendrez sûrement parler&nbsp;; sinon, je n'aurai plus de courrier
et je ne pourrai pas distribuer la nouvelle version de ce HOWTO
:)</p>
<p>Maintenant que vous avez téléchargé le source, décompactez-le.
Cela va créer un sous-répertoire <code>sendmail-8.9.0</code> dans
le répertoire courant. Placez-vous dans ce sous-répertoire et lisez
les fichiers <code>README</code> et <code>RELEASE_NOTES</code> (et
soyez époustouflé par toutes les améliorations qu'ils ont
apportées). Maintenant, placez-vous dans <code>src</code>. C'est là
que vous allez faire le plus gros du travail.</p>
<p><em>Une remarque au passage&nbsp;: Sendmail est un programme
petit, puissant et bien écrit. Le binaire <code>sendmail</code>
lui-même a mis moins de 5 minutes à compiler sur mon 5x86 133 avec
32 Mo de RAM&nbsp;! La totalité de la compilation et de
l'installation (sans compter la configuration) ont pris moins de 15
minutes&nbsp;!</em></p>
<p>Je n'utilise pas BIND sur mon système, donc j'ai cherché les
lignes suivantes&nbsp;:</p>
<blockquote>
<hr>
<pre><code>
# ifndef NAMED_BIND
#  define NAMED_BIND    1       /* use Berkeley Internet Domain Server */
# endif
</code></pre>
<hr></blockquote>
<p>et j'ai remplacé le 1 par un 0:</p>
<blockquote>
<hr>
<pre><code>
# ifndef NAMED_BIND
#  define NAMED_BIND    0       /* use Berkeley Internet Domain Server */
# endif
</code></pre>
<hr></blockquote>
<p>Sur la Debian 1.3, <code>db.h</code> est installé par défaut
dans <code>/usr/include/db</code>, au lieu de
<code>/usr/include</code> où sendmail espère le trouver.
Placez-vous successivement dans les sous-répertoires
<code>src</code>, <code>mailstats</code>, <code>makemap</code>,
<code>praliases</code>, <code>rmail</code> et <code>smrsh</code> et
éxecutez la commande suivante&nbsp;:</p>
<blockquote>
<pre><code>
 ./Build -I/usr/include/db
</code></pre></blockquote>
<p>Ensuite, <code>cd ..</code> et tapez <code>make install</code>.
Voilà&nbsp;! La version 8.9.0 de Sendmail doit maintenant être
installée&nbsp;! Bien sûr, ça suppose que vous avez déjà votre
configuration d'origine. Pour que tout marche bien sur mon système,
comme j'héberge des listes de diffusion gratuites utilisant
majordomo, j'ai ajouté la ligne suivante au début de mon
<code>/etc/sendmail.cf</code>&nbsp;:</p>
<blockquote>
<hr>
<pre><code>
O DontBlameSendmail=forwardfileinunsafedirpath, forwardfileinunsafedirpathsafe
</code></pre>
<hr></blockquote>
<p>Sendmail 8.9.0 est à l'heure actuelle plutôt bavard à propos des
permissions des répertoires et des fichiers, et il va se plaindre à
propos des répertoires et des fichiers qui autorisent l'accès en
écriture pour le groupe ou pour tout le monde parmi les fichiers
d'alias ou <code>.forward</code>. 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 sécurité mineur n'était en fait pas
gênant. C'est vous qui voyez.</p>
<h2><a name="ss3.7">3.7 Quelques astuces pour les administrateurs
système débutants. <em>Jim Dennis,</em>
<code>jadestar@rahul.net</code></a></h2>
<p>Créez et tenez à jour un fichier <code>/README.`hostname`</code>
ou <code>/etc/README.`hostname`</code> <em>[&nbsp;ou éventuellement
<code>/usr/local/etc/README.`hostname`</code> - le
rédacteur&nbsp;]</em></p>
<p>Absolument, à compter du <em>premier jour</em> de
l'administration d'un système, prenez des notes dans un fichier
journal. Vous pouvez mettre "vi /README.$(hostname)" sur une ligne
du fichier <code>.bash_logout</code> de root. Une autre façon de
faire est d'écrire un script <code>su</code> ou <code>sudo</code>
qui fait quelque chose comme ça&nbsp;:</p>
<blockquote>
<pre><code>
                function exit \
                        { unset exit; exit; \
                          cat ~/tmp/session.$(date +%y%m%d) \
                          &gt;&gt; /README.$(hostname) &amp;&amp; \
                          vi /README.$(hostname)
                          }
                script -a ~/tmp/session.$(date +%y%m%d)
                /bin/su.org -
</code></pre></blockquote>
<p>(utilise la commande tapée pour créer une trace de la session et
crée une fonction pour automatiser la mise à jour du fichier
journal).</p>
<p>J'admets que je n'ai pas implanté cette automatisation - jusqu'à
maintenant je me suis reposé sur ma discipline. Cependant j'ai
envisagé l'idée (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-même. Je pense qu'il va falloir que je me procure les
sources et que je rajoute une paire de paramètres (pour arrêter
l'enregistrement du script depuis la ligne de commandes) avant de
me mettre à utiliser ça.</p>
<p>Ma dernière suggestion (pour cette fois)&nbsp;:</p>
<p>La variable PATH de root devrait contenir
<code>PATH=~/bin</code>.</p>
<p>C'est tout. Rien d'autre dans le PATH de root. Tout ce que root
peut faire est fourni par un lien symbolique dans
<code>~/bin</code>, un alias, une fonction shell, un script ou un
binaire situé dans <code>~/bin</code>, ou bien la commande est
tapée avec un chemin d'accès explicite.</p>
<p>De cette façon, toute personne utilisant le compte root se rend
compte (parfois douloureusement) à quel point elle fait confiance
aux binaires. L'administrateur avisé d'un système
multi-utilisateurs va en plus parcourir régulièrement son
répertoire <code>~/bin</code> et ses fichiers
<code>~/.*history</code> pour y chercher des répétitions et des
moyens de les contourner.</p>
<p>L'administrateur vraiment motivé va repérer les enchaînements
qui peuvent être automatisés, les endroits où des vérifications
peuvent être ajoutées, et les tâches pour lesquelles les privilèges
de root peuvent être abandonnées (comme lancer un éditeur, un agent
de transport de courrier électronique ou autre gros programme
pouvant exécuter des scripts qui *pourraient* être inclus dans des
fichiers de données - comme vi (<code>./.exrc</code>) ou emacs
(<code>./.emacs</code>) ou même, plus insidieux, $EXINIT et les
macros contenues au début ou à la fin des documents). Bien sûr, les
commandes de ce genre peuvent être lancées avec quelque chose comme
ça&nbsp;:</p>
<blockquote>
<pre><code>
                cp $données $répertoire_utilisateur/tmp
                su -c $commande_d_origine $paramètres
                cp $répertoire_utilisateur/tmp $données
</code></pre></blockquote>
<p>(... où les détails dépendent de la commande).</p>
<p>Ces dernières précautions sont pour la plupart superflues pour
la machine personnelle ou la station "mono-utilisateur". Mais elles
représentent une très bonne manière d'administrer un gros système
multi-utilisateurs, particulièrement dans le cas d'un accès public
(comme les machines de netcom).</p>
<h2><a name="ss3.8">3.8 Comment configurer <code>xdm</code> pour
qu'il permette de choisir le système hôte ? <i>Arrigo Triulzi,</i>
<code>a.triulzi@ic.ac.uk</code>.</a></h2>
<ol>
<li>Modifier le fichier lançant xdm lors du démarrage (probablement
nommé /etc/rc/rc.6 ou /etc/rc.local) de façon que la section de xdm
contienne :
<blockquote>
<pre><code>
/usr/bin/X11/xdm
exec /usr/bin/X11/X -indirect hostname
</code></pre></blockquote>
</li>
<li>Modifier le fichier /usr/lib/X11/xdm/Xservers et commenter la
ligne invoquant le serveur sur la machine locale (commence par
"0:")</li>
<li>Relancer le système... tout doit fonctionner&nbsp;!</li>
</ol>
<p>J'ajoute cette section après avoir sué une semaine durant sur ce
problème&nbsp;!</p>
<p>Attention : certaines anciennes versions de la distribution SLS
(1.1.1) exigent qu'un paramètre "-nodaemon" accompagne l'invocation
d'xdm. Les version ultérieures ne présentent <b>PAS</b> cette
caractéristique.</p>
</body>
</html>