This file is indexed.

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

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
 949
 950
 951
 952
 953
 954
 955
 956
 957
 958
 959
 960
 961
 962
 963
 964
 965
 966
 967
 968
 969
 970
 971
 972
 973
 974
 975
 976
 977
 978
 979
 980
 981
 982
 983
 984
 985
 986
 987
 988
 989
 990
 991
 992
 993
 994
 995
 996
 997
 998
 999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<meta name="generator" content=
"HTML Tidy for Linux (vers 25 March 2009), see www.w3.org">
<meta name="GENERATOR" content="LinuxDoc-Tools 0.9.71">
<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&eacute;vitch</a></h2>
v3.6, Juin 1998 traduction du 2 janvier 1999
<hr>
<em>Ce document contient ces astuces et r&eacute;glages difficiles
&agrave; 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 &agrave; rendre
Linux plus agr&eacute;able. Tout ce qui est ici sort ou bien de ma
t&ecirc;te, ou bien de l'ancien Astuces HOWTO (apr&egrave;s tout,
pourquoi enlever des astuces qui marchent&nbsp;?) Alors envoyez-moi
vos astuces pr&eacute;f&eacute;r&eacute;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&eacute;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&eacute;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 &Agrave; 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&eacute;s. <em>Didier Juges,</em>
<code>dj@destin.nfds.net</code>.</a></h2>
<p>De d&eacute;butant &agrave; d&eacute;butant, voici un petit
script qui facilite la lectures des howto. Mes howto sont dans
<code>/usr/doc/faq/howto/</code> et sont compress&eacute;s avec
<code>gzip</code>. Les fichiers s'appellent
<code>XXX-HOWTO.gz</code>, o&ugrave; XXX est le titre. J'ai
appel&eacute; le script suivant <code>howto</code> et je l'ai
plac&eacute; 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&eacute; sans argument, il affiche la liste des howto
disponibles. Quand on lui passe en argument la premi&egrave;re
partie du nom du fichier (avant le trait d'union), il
d&eacute;compacte le document (en laissant l'original intact) et
l'affiche &agrave; l'&eacute;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&eacute;rifie &agrave; intervalles
r&eacute;guliers qu'il reste de la place sur tout ce qui est
mont&eacute; (disques durs, CDROM, disquettes...)</p>
<p>En cas de p&eacute;nurie d'espace libre, un message est
affich&eacute; &agrave; l'&eacute;cran toutes les X secondes et un
courrier &eacute;lectronique est envoy&eacute; pour chaque
p&eacute;riph&eacute;rique qui d&eacute;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 &eacute;t&eacute; confront&eacute; &agrave; des
# messages d'erreur myst&eacute;rieux pendant les compilations
# quand les fichiers temporaires remplissaient mes disques, j'ai
# &eacute;crit &ccedil;a pour &ecirc;tre averti avant que les disques
# ne soient pleins.
#
# Si &ccedil;a a empech&eacute; vos serveurs d'exploser, envoyez
# les courriers de remerciement &agrave; zocki@goldfish.cube.net.
# Si votre site flambe &agrave; cause de &ccedil;a, d&eacute;sol&eacute;
# mais je vous avais pr&eacute;venu: c'est votre probl&egrave;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&eacute;rifie l'espace libre toutes les
# $SLEEPTIME secondes. Vous pouvez m&ecirc;me surveiller vos
# disquettes et vos bandes.  :)
# Si l'espace libre est inf&eacute;rieur &agrave; $MINFREE (Ko),
# le script va afficher un message d'avertissement et envoyer un
# courrier &agrave; $MAIL_TO_ME pour chaque p&eacute;riph&eacute;rique
# concern&eacute;. D&egrave;s qu'il y a &agrave; nouveau plus de place
# libre que la limite, le syst&egrave;me d'envoi de courrier est 
# r&eacute;amorc&eacute;.
#

# RESTE &Agrave; FAIRE:
# Des $MINFREE diff&eacute;rents pour chaque p&eacute;riph&eacute;rique
# Nettoyer les r&eacute;pertoires /*tmp des vieilleries en cas de
#           p&eacute;nurie d'espace.


DEVICES='/dev/sda2 /dev/sda8 /dev/sda9' # vos disques
MINFREE=20480                           # la limite
SLEEPTIME=10                            # secondes entre deux v&eacute;rifications
MAIL_TO_ME='root@localhost'             # la personne &agrave; avertir


# ------- rien &agrave; changer en dessous (j'esp&egrave;re :) -------

MINMB=0
ISFREE=0
MAILED=""
let MINMB=$MINFREE/1024         # oui, on fait &ccedil;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 &agrave; 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&eacute;dacteur du Linux
Astuces HOWTO</em>.</a></h2>
<p>Si vous &ecirc;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 &eacute;normes fichiers journaux&nbsp;? Il peut installer
<code>chklogs</code>. <code>chklogs</code> a &eacute;t&eacute;
&eacute;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&egrave;s simple &agrave; installer (il faut bien s&ucirc;r
lire le contenu du r&eacute;pertoire <code>doc</code>). Une fois le
paquetage install&eacute;, rajoutez une entr&eacute;e &agrave;
votre crontab&nbsp;:</p>
<blockquote>
<pre>
<code># Lance chklogs tous les jours &agrave; 21h
00 21 * * *          /usr/local/sbin/chklogs -m
</code>
</pre></blockquote>
<p>Pendant que vous y &ecirc;tes, n'oubliez pas de dire &agrave;
l'auteur &agrave; quel point vous appr&eacute;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&eacute;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 &agrave; intervalles
r&eacute;guliers.</p>
<h2><a name="ss2.6">2.6 D&eacute;placement de r&eacute;pertoires
inter partitions Linux (filesystems). <i>Alan Cox,</i>
<code>A.Cox@swansea.ac.uk</code>.</a></h2>
<blockquote>
<pre>
<code>(cd /r&eacute;pertoire_source &amp;&amp; tar cf - . ) | (cd /r&eacute;pertoire_cible &amp;&amp; tar xvf -)
</code>
</pre></blockquote>
<p><i>[ Et pas cd /r&eacute;pertoire_source; tar...etc., qui laisse
la possibilit&eacute; de bousiller un r&eacute;pertoire en cas de
probl&egrave;me. Merci &agrave; Jim Dennis,
<code>jim@starshine.org</code>, qui me l'a signal&eacute;. -le
r&eacute;dacteur ]</i></p>
<h2><a name="ss2.7">2.7 Trouver les plus gros r&eacute;pertoires.
<em>Mick Ghazey</em>.</a></h2>
<p>Vous vous &ecirc;tes d&eacute;j&agrave; demand&eacute; quels
&eacute;taient les plus gros r&eacute;pertoires sur votre
machine&nbsp;? Voici une fa&ccedil;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 &agrave; John Fisk, le cr&eacute;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 &agrave; l'adresse&nbsp;:</p>
<blockquote>
<pre>
<code>http://www.linuxgazette.com
</code>
</pre></blockquote>
<p>Au fait, il s'av&egrave;re que (1) la LG est maintenant
mensuelle et (2) elle n'est plus maintenue par John Fisk, mais par
l'&eacute;quipe de SSC.</p>
<h2><a name="ss2.9">2.9 Indication permettant de r&eacute;soudre le
probl&egrave;me pos&eacute; 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&egrave;me concerne de nombreux utilisateurs
mais l'une des caract&eacute;ristiques de la version 3.7 du GNU
make ne m'enthousiasme pas. Il s'agit du comportement d'un VPATH
sur r&eacute;pertoire absolu. Un robuste patch corrige cela, vous
pourrez l'obtenir aupr&egrave;s de Paul D. Smith
<code>&lt;psmith@wellfleet.com&gt;</code></p>
<blockquote>Veuillez r&eacute;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&egrave;s parution de
chaque nouvelle version du GNU make. En ce qui me concerne... il
est install&eacute; sur tous les syst&egrave;mes auxquels j'ai
acc&egrave;s !
<h2><a name="ss2.10">2.10 Comment interdire &agrave; ma machine de
lancer fsck apr&egrave;s chaque d&eacute;marrage&nbsp;? <i>Dale
Lutz,</i> <code>dal@wimsey.com</code>.</a></h2>
<p>R&eacute;ponse&nbsp;: Apr&egrave;s recompilation du noyau le
syst&egrave;me de fichiers est consid&eacute;r&eacute; comme non
v&eacute;rifi&eacute; ("marked as dirty"), ce qui implique que fsck
sera mis en action lors de chaque d&eacute;marrage. Pour
&eacute;viter cela lancer :</p>
<blockquote>
<pre>
<code>rdev -R /zImage 1
</code>
</pre></blockquote>
Cela modifie le noyau qui, d&egrave;s lors, consid&egrave;re que le
syst&egrave;me de fichiers est sain.
<p>Note&nbsp;: Ajoutez, si vous employez LILO,
<code>read-only</code> &agrave; la section de l'image de boot de
votre fichier de configuration LILO (souvent nomm&eacute;
/etc/lilo/config ou /etc/lilo.conf).</p>
<h2><a name="ss2.11">2.11 Comment &eacute;viter les lancements de
fsck, au boot, d&ucirc;s au "device busy"&nbsp;? <i>Jon Tombs,</i>
<code>jon@gtex02.us.es</code>.</a></h2>
<p>Si votre syst&egrave;me conna&igrave;t de fr&eacute;quentes
erreurs de type "device busy" au d&eacute;marrage qui laissent le
syst&egrave;me de fichiers dans un &eacute;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&egrave;mes de fichiers mont&eacute;s, sauf la
racine, avant l'invocation de umount -a. Cela signifie que si, pour
une quelconque raison, "shutdown" ne parvient pas &agrave; tuer
tous les processus puis d&eacute;monter les partitions ces
derni&egrave;res seront malgr&eacute; tout
consid&eacute;r&eacute;es comme saines lors du red&eacute;marrage.
Cette astuce a consid&eacute;rablement &eacute;court&eacute; le
temps de d&eacute;marrage de mon syst&egrave;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 &agrave;
l'&eacute;troit, &ccedil;a prend du temps, mais &ccedil;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&eacute;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&eacute;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&eacute;signe, par "expressions rationnelles", les
<code>regexp</code> de "grep" et consorts.</p>
<p>J'ai appel&eacute; 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&eacute;nage
derri&egrave;re les programmes qui cr&eacute;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
&eacute;galement les fichiers .tex et README. Sur mon
syst&egrave;me, je l'ai appel&eacute; "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&eacute;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&eacute;dacteur du Linux
Astuces HOWTO</em>.</a></h2>
<p>Je passe beaucoup de temps &agrave; programmer en C, et j'ai
pris le temps de configurer vi pour me faciliter la t&acirc;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 &ccedil;a fait&nbsp;? <code>autoindent</code>
force vi &agrave; indenter automatiquement toutes les lignes qui
suivent la premi&egrave;re ligne indent&eacute;e,
<code>shiftwidth</code> impose une taille de 4 espaces pour ^T,
<code>backspace</code> configure la touche d'espacement
arri&egrave;re, et <code>ruler</code> force l'affichage des
num&eacute;ros de lignes. Notez que pour placer le curseur sur une
ligne donn&eacute;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&eacute;j&agrave; ctags sur leur
machine, mais ne s'en servent pas. Cela peut &ecirc;tre tr&egrave;s
pratique pour &eacute;diter des fonctions sp&eacute;cifiques.
Supposez que vous avez une fonction dans l'un des nombreux fichiers
sources contenus dans un r&eacute;pertoire pour un programme que
vous &ecirc;tes en train d'&eacute;crire, et que vous voulez
&eacute;diter cette fonction pour faire une mise &agrave; jour.
Appelons cette fonction foo(). Vous ne savez pas non plus o&ugrave;
elle se trouve dans le fichier source. C'est l&agrave; que ctags
peut &ecirc;tre tr&egrave;s pratique. Quand vous le lancez, ctags
cr&eacute;e un fichier nomm&eacute; <code>tags</code> dans le
r&eacute;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 &agrave; &ccedil;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 &eacute;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'&eacute;diteur et placer le
curseur au d&eacute;but de la fonction.</p>
<h2><a name="ss2.19">2.19 Pourquoi sendmail se bloque-t-il pendant
5 minutes au d&eacute;marrage d'une Red Hat&nbsp;? <em>Paul
Anderson</em>.</a></h2>
<p>C'est un probl&egrave;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&eacute;parer &ccedil;a
vous-m&ecirc;me. Si vous regardez dans votre fichier
<code>/etc/hosts</code>, vous allez trouver quelque chose qui
ressemble &agrave; &ccedil;a&nbsp;:</p>
<blockquote>
<pre>
<code>127.0.0.1        localhost        votremachine
</code>
</pre></blockquote>
<p>Quand sendmail d&eacute;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 &ccedil;a et recommence la recherche. Il
continue comme &ccedil;a pendant un moment avant d'abandonner.
Corriger ce probl&egrave;me est tr&egrave;s facile&nbsp;:
&eacute;ditez votre fichier <code>/etc/hosts</code> et mettez-y
quelque chose comme &ccedil;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 &agrave; comprendre pourquoi ils ne
le configurent pas pour utiliser les couleurs par d&eacute;faut.
Voici une fa&ccedil;on d'arranger &ccedil;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&egrave;que de /usr/lib contient une fonction
donn&eacute;e&nbsp;? <em>Pawel Veselow</em>.</a></h2>
<p>Vous &ecirc;tes en train de compiler un programme et vous avez
oubli&eacute; de lier une biblioth&egrave;que n&eacute;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&eacute; un petit programme en
C, mais quand je le lance, je ne vois aucun
r&eacute;sultat&nbsp;!</a></h2>
<p>Vous avez compil&eacute; le programme et cr&eacute;&eacute; un
programme appel&eacute; <code>test</code>, non? Linux a
d&eacute;j&agrave; un programme <code>test</code>, qui teste si une
certaine condition est vraie et qui n'affiche aucun r&eacute;sultat
&agrave; l'&eacute;cran. Pour lancer votre programme
<code>test</code>, tapez <code>./test</code>.</p>
<h2><a name="s3">3. Astuces d&eacute;taill&eacute;es</a></h2>
<h2><a name="ss3.1">3.1 Linux et Windows peuvent utiliser une
m&ecirc;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'&eacute;change de Windows. Ne pas employer Windows tout de suite
afin de laisser ce fichier compl&egrave;tement "vide" pour
faciliter son compactage.</li>
<li>D&eacute;marrer Linux et sauver ce fichier dans un fichier.
Exemple (cas d'une partition de "swap" commun nomm&eacute;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&eacute;parer et installer la partition de swap lorsqu'elle est
employ&eacute;e par Linux : <em>XXXXX repr&eacute;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&eacute;e &agrave; cette partiton de swap
dans le fichier /etc/fstab</li>
<li>Si les programmes init et shutdown employ&eacute;s utilisent
/etc/brc ajouter &agrave; 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&eacute;termin&eacute; que rien ne sert d'en &eacute;crire
davantage&nbsp;!
<p>&gt;&gt; Quels sont les avantages et inconv&eacute;nients de
cette m&eacute;thode ?</p>
<p>Avantages&nbsp;: gain d'espace disponible sur le disque !</p>
<p>Inconv&eacute;nients&nbsp;: si l'&eacute;tape de restauration du
fichier d'&eacute;change Windows n'est pas automatique il ne faudra
pas n&eacute;gliger, sous Linux et avant chaque red&eacute;marrage
"vers" Windows, de lancer les commandes charg&eacute;es de cette
remise en place.</p>
<h2><a name="ss3.2">3.2 R&eacute;cup&eacute;ration de fichiers
effac&eacute;s. <em>Michael Hamilton,</em>
<code>michael@actrix.gen.nz</code>.</a></h2>
<p>Voici une astuce dont j'ai eu besoin &agrave; quelques
reprises.</p>
<p>La r&eacute;cup&eacute;ration d'un fichier texte par une
personne d&eacute;sesp&eacute;r&eacute;e.</p>
<p>Si vous effacez un fichier texte par accident, par exemple un
courrier &eacute;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 &agrave; dire s'il a exist&eacute;
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&eacute;cemment, j'ai effac&eacute; un courrier
&eacute;lectronique par accident. J'ai imm&eacute;diatement
cess&eacute; toute activit&eacute; 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&eacute; jusqu'&agrave; passer le
syst&egrave;me en mode mono-utilisateur et d&eacute;monter le
syst&egrave;me de fichiers.</p>
<p>J'ai ensuite utilis&eacute; 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&egrave;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&ecirc;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&eacute;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&eacute; -50 pour avoir toutes
les lignes assez proches de la phrase. Il m'est d&eacute;j&agrave;
arriv&eacute; d'utiliser -3000 pour &ecirc;tre s&ucirc;r de
r&eacute;perer toutes les lignes d'un code source. J'ai
redirig&eacute; le sortie de egrep vers une autre partition pour
&eacute;viter d'&eacute;craser le message que je recherchais.</p>
<p>J'ai ensuite utilis&eacute; la commande strings pour examiner le
r&eacute;sultat.</p>
<blockquote>
<pre>
<code>  strings /tmp/x | less
</code>
</pre></blockquote>
<p>Effectivement, le message &eacute;tait l&agrave;.</p>
<p>Cette m&eacute;thode peut ne pas &ecirc;tre efficace si tout ou
partie de l'espace disque a d&eacute;j&agrave; &eacute;t&eacute;
r&eacute;utilis&eacute;.</p>
<p>Cette astuce n'est probablement utilisable que sur un
syst&egrave;me mono-utilisateur. Sur un syst&egrave;me
multi-utilisateurs avec beaucoup d'activit&eacute; sur les disques,
l'emplacement que vous avez lib&eacute;r&eacute; peut tr&egrave;s
bien d&eacute;j&agrave; avoir &eacute;t&eacute;
r&eacute;utilis&eacute;. Et pour la plupart nous ne pouvons pas
nous permettre d'enlever la machine de sous les pieds de nos
utilisateurs d&egrave;s que nous avons besoin de
r&eacute;cup&eacute;rer un fichier.</p>
<p>Sur mon syst&egrave;me personnel, cette astuce a
&eacute;t&eacute; bien pratique &agrave; environ trois occasions
ces quelques derni&egrave;res
ann&eacute;es&nbsp;-&nbsp;g&eacute;n&eacute;ralement apr&egrave;s
que j'ai d&eacute;truit accidentellement une partie de mon travail
du jour. Si ce que je fais survit assez longtemps pour progresser
de fa&ccedil;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&eacute;. <em>Jim Dennis,</em>
<code>jadestar@rahul.net</code>.</a></h2>
<p>Utilisez le marqueur d'immutabilit&eacute;.</p>
<p>Juste apr&egrave;s avoir install&eacute; et configur&eacute;
votre syst&egrave;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&eacute;sitez pas &agrave;
vous servir de la commande "<code>chattr +i</code>". Appliquez-la
aussi aux fichiers du noyau &agrave; la racine. Maintenant,
"<code>mkdir /etc/.dist</code>" et copiez-y toute l'arborescence
contenue dans <code>/etc</code> (je le fais en deux &eacute;tapes
en utilisant <code>/tmp/etcdist.tar</code> pour &eacute;viter la
r&eacute;cursion). (Vous pouvez aussi vous contenter de
<code>/etc/.dist.tar.gz</code>). Et placez-y un marqueur
d'immutabilit&eacute;.</p>
<p>Tout cela sert &agrave; limiter les d&eacute;g&acirc;ts que vous
pouvez faire en tant que root. Vous &eacute;viterez ainsi
d'&eacute;craser des fichiers avec une redirection mal
contr&ocirc;l&eacute;e, et vous ne risquez pas de rendre le
syst&egrave;me inutilisable &agrave; cause d'une espace mal
plac&eacute;e dans une commande "<code>rm -fr</code>"&nbsp;; vous
pouvez toujours faire tr&egrave;s mal &agrave; vos donn&eacute;es,
mais vos binaires et vos biblioth&egrave;ques seront &agrave;
l'abri.</p>
<p>De plus, cela pr&eacute;vient, ou du moins complique,
l'exploitation d'un certain nombre de trous de
s&eacute;curit&eacute;&nbsp;; en effet, beaucoup d'attaques de ce
type &eacute;crasent un fichier au moyen d'un quelconque programme
SUID qui <em>ne permet pas d'ex&eacute;cuter une commande
arbitraire</em>.</p>
<p>Le seul inconv&eacute;nient se pr&eacute;sente &agrave;
l'installation de divers logiciels syst&egrave;me. D'un autre
c&ocirc;t&eacute;, &ccedil;a emp&ecirc;che l'&eacute;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 &ecirc;tre &eacute;cras&eacute;s (et aux
r&eacute;pertoires auxquels vous voulez ajouter des fichiers), le
make &eacute;choue, et il suffit d'utiliser chattr avant de le
relancer. Vous pouvez aussi en profiter pour d&eacute;placer vos
anciens binaires, biblioth&egrave;ques et autres dans un
r&eacute;pertoire <code>.old/</code>, les renommer, les archiver ou
autre.</p>
<h2><a name="ss3.4">3.4 Une suggestion quant &agrave; l'endroit
o&ugrave; 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&eacute;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&eacute;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'&agrave; leurs propres fichiers et que tous les nouveaux
fichiers vont appartenir au groupe wheel).</p>
<p>Maintenant, forcez-vous &agrave; <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 &agrave; les compiler sous
<code>/usr/local/src</code> (ou <code>.../$HOSTNAME/src</code>).
Assurez-vous qu'ils s'installent sous la hi&eacute;rarchie locale.
Si quelque chose *doit obligatoirement* &ecirc;tre install&eacute;
dans <code>/bin</code> ou <code>/usr/bin</code> ou autre,
cr&eacute;ez un lien symbolique depuis la hi&eacute;rarchie locale
vers tout ce qui est install&eacute; ailleurs.</p>
<p>La raison de tout &ccedil;a, m&ecirc;me si &ccedil;a
repr&eacute;sente plus de travail, est que &ccedil;a permet de
trouver facilement ce qui doit &ecirc;tre sauvegard&eacute; et
r&eacute;install&eacute; en cas de r&eacute;installation
compl&egrave;te depuis le m&eacute;dia de distribution
(habituellement un CD &agrave; l'heure actuelle). En utilisant un
r&eacute;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 &agrave; jour et qui peut s'av&eacute;rer
critique pour suivre les listes d'annonces de
s&eacute;curit&eacute;.</p>
<p>Un de mes syst&egrave;mes personnels (celui que j'utilise) a
&eacute;t&eacute; mont&eacute; avant que je n'applique
moi-m&ecirc;me cette politique. Je ne "sais" toujours pas en quoi
il diff&egrave;re du syst&egrave;me de base "tel
qu'install&eacute;". Et cela bien que je n'ai chang&eacute; que
tr&egrave;s peu de choses quant &agrave; sa configuration et que je
suis le *seul* &agrave; l'utiliser.</p>
<p>A contrario, tous les syst&egrave;mes que j'ai mis en place au
travail (o&ugrave; j'ai &eacute;t&eacute; bombard&eacute;
administrateur syst&egrave;me) ont &eacute;t&eacute;
configur&eacute;s de cette fa&ccedil;on. Ils ont &eacute;t&eacute;
administr&eacute;s par plusieurs personnes ext&eacute;rieures et
autres membres du d&eacute;partement informatique, et ils ont subi
de nombreuses mises &agrave; jour et installations de logiciels.
Pourtant, j'ai une id&eacute;e tr&egrave;s pr&eacute;cise de ce qui
a &eacute;t&eacute; rajout&eacute; *apr&egrave;s* l'installation et
la configuration initiales.</p>
<h2><a name="ss3.5">3.5 Conversion de tous les fichiers d'un
r&eacute;pertoire en minuscules. <em>Justin Dossey,</em>
<code>dossey@ou.edu</code>.</a></h2>
<p>J'ai remarqu&eacute; quelques proc&eacute;dures difficiles ou
superflues recommand&eacute;es dans les trucs et astuces du
num&eacute;ro 12</p>
<blockquote>NdT&nbsp;: Apparemment, cette section est tir&eacute;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&eacute;pertoire
         # courant en minuscules
         # n'affecte que les fichiers, pas les sous-r&eacute;pertoires
         # demande confirmation avant d'&eacute;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&agrave; un long script. Je n'&eacute;crirais pas un script
pour &ccedil;a&nbsp;; j'utiliserais plut&ocirc;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 &eacute;crit le script de cette
fa&ccedil;on pour des raisons de lisibilit&eacute; (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'&agrave; la
derni&egrave;re &eacute;tape. Rebooter&nbsp;? J'esp&egrave;re qu'il
ne reboote pas &agrave; chaque fois qu'il supprime un utilisateur.
Les deux premi&egrave;res &eacute;tapes suffisent. De toutes
fa&ccedil;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 &eacute;tant class&eacute;e, passons au mot de
passe de root oubli&eacute;.</p>
<p>La solution donn&eacute;e dans la Gazette est la plus
universelle, mais pas la plus facile. Aussi bien avec LILO qu'avec
Loadlin, le param&egrave;tre "single" permet de lancer directement
le shell par d&eacute;faut au d&eacute;marrage, sans entrer de
login ni de mot de passe. &Agrave; partir de l&agrave;, il suffit
de changer ou d'enlever le mot de passe probl&eacute;matique, avant
de taper "<code>init 3</code>" pour passer en mode
multi-utilisateurs. De cette fa&ccedil;on, un seul reboot&nbsp;; de
l'autre, deux reboots.</p>
<p>Justin Dossey.</p>
<h2><a name="ss3.6">3.6 Mise &agrave; 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&eacute;l&eacute;charg&eacute; la
version 8.9.0, qui est comme vous pouvez le voir &agrave; la pointe
du progr&egrave;s. Je l'ai r&eacute;cup&eacute;r&eacute;e depuis
ftp.sendmail.org:/pub/sendmail/sendmail-8.9.0.tar.gz</p>
<p>Il p&egrave;se &agrave; peu pr&egrave;s un m&eacute;ga-octet, et
sachant que j'utilise la version 8.7.6, je crois que &ccedil;a vaut
le co&ucirc;t. Si &ccedil;a marche, vous en entendrez
s&ucirc;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&eacute;l&eacute;charg&eacute; le
source, d&eacute;compactez-le. Cela va cr&eacute;er un
sous-r&eacute;pertoire <code>sendmail-8.9.0</code> dans le
r&eacute;pertoire courant. Placez-vous dans ce
sous-r&eacute;pertoire et lisez les fichiers <code>README</code> et
<code>RELEASE_NOTES</code> (et soyez &eacute;poustoufl&eacute; par
toutes les am&eacute;liorations qu'ils ont apport&eacute;es).
Maintenant, placez-vous dans <code>src</code>. C'est l&agrave; 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 &eacute;crit. Le binaire
<code>sendmail</code> lui-m&ecirc;me a mis moins de 5 minutes
&agrave; compiler sur mon 5x86 133 avec 32 Mo de RAM&nbsp;! La
totalit&eacute; 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&egrave;me, donc j'ai
cherch&eacute; 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&eacute; 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&eacute; par
d&eacute;faut dans <code>/usr/include/db</code>, au lieu de
<code>/usr/include</code> o&ugrave; sendmail esp&egrave;re le
trouver. Placez-vous successivement dans les
sous-r&eacute;pertoires <code>src</code>, <code>mailstats</code>,
<code>makemap</code>, <code>praliases</code>, <code>rmail</code> et
<code>smrsh</code> et &eacute;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&agrave;&nbsp;! La version 8.9.0 de Sendmail doit maintenant
&ecirc;tre install&eacute;e&nbsp;! Bien s&ucirc;r, &ccedil;a
suppose que vous avez d&eacute;j&agrave; votre configuration
d'origine. Pour que tout marche bien sur mon syst&egrave;me, comme
j'h&eacute;berge des listes de diffusion gratuites utilisant
majordomo, j'ai ajout&eacute; la ligne suivante au d&eacute;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 &agrave; l'heure actuelle plut&ocirc;t bavard
&agrave; propos des permissions des r&eacute;pertoires et des
fichiers, et il va se plaindre &agrave; propos des
r&eacute;pertoires et des fichiers qui autorisent l'acc&egrave;s en
&eacute;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&eacute; d'inhiber ces avertissements, je suis toujours
seul &agrave; la console et j'ai trouv&eacute; que ce trou de
s&eacute;curit&eacute; mineur n'&eacute;tait en fait pas
g&ecirc;nant. C'est vous qui voyez.</p>
<h2><a name="ss3.7">3.7 Quelques astuces pour les administrateurs
syst&egrave;me d&eacute;butants. <em>Jim Dennis,</em>
<code>jadestar@rahul.net</code></a></h2>
<p>Cr&eacute;ez et tenez &agrave; jour un fichier
<code>/README.`hostname`</code> ou
<code>/etc/README.`hostname`</code> <em>[&nbsp;ou
&eacute;ventuellement <code>/usr/local/etc/README.`hostname`</code>
- le r&eacute;dacteur&nbsp;]</em></p>
<p>Absolument, &agrave; compter du <em>premier jour</em> de
l'administration d'un syst&egrave;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&ccedil;on de faire est d'&eacute;crire un script <code>su</code>
ou <code>sudo</code> qui fait quelque chose comme
&ccedil;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&eacute;e pour cr&eacute;er une trace de
la session et cr&eacute;e une fonction pour automatiser la mise
&agrave; jour du fichier journal).</p>
<p>J'admets que je n'ai pas implant&eacute; cette automatisation -
jusqu'&agrave; maintenant je me suis repos&eacute; sur ma
discipline. Cependant j'ai envisag&eacute; l'id&eacute;e (au point
d'&eacute;crire les scripts et les fonctions que vous avez sous les
yeux). Une chose qui me retient est la commande "script"
elle-m&ecirc;me. Je pense qu'il va falloir que je me procure les
sources et que je rajoute une paire de param&egrave;tres (pour
arr&ecirc;ter l'enregistrement du script depuis la ligne de
commandes) avant de me mettre &agrave; utiliser &ccedil;a.</p>
<p>Ma derni&egrave;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&eacute; dans <code>~/bin</code>, ou bien la commande
est tap&eacute;e avec un chemin d'acc&egrave;s explicite.</p>
<p>De cette fa&ccedil;on, toute personne utilisant le compte root
se rend compte (parfois douloureusement) &agrave; quel point elle
fait confiance aux binaires. L'administrateur avis&eacute; d'un
syst&egrave;me multi-utilisateurs va en plus parcourir
r&eacute;guli&egrave;rement son r&eacute;pertoire
<code>~/bin</code> et ses fichiers <code>~/.*history</code> pour y
chercher des r&eacute;p&eacute;titions et des moyens de les
contourner.</p>
<p>L'administrateur vraiment motiv&eacute; va rep&eacute;rer les
encha&icirc;nements qui peuvent &ecirc;tre automatis&eacute;s, les
endroits o&ugrave; des v&eacute;rifications peuvent &ecirc;tre
ajout&eacute;es, et les t&acirc;ches pour lesquelles les
privil&egrave;ges de root peuvent &ecirc;tre abandonn&eacute;es
(comme lancer un &eacute;diteur, un agent de transport de courrier
&eacute;lectronique ou autre gros programme pouvant ex&eacute;cuter
des scripts qui *pourraient* &ecirc;tre inclus dans des fichiers de
donn&eacute;es - comme vi (<code>./.exrc</code>) ou emacs
(<code>./.emacs</code>) ou m&ecirc;me, plus insidieux, $EXINIT et
les macros contenues au d&eacute;but ou &agrave; la fin des
documents). Bien s&ucirc;r, les commandes de ce genre peuvent
&ecirc;tre lanc&eacute;es avec quelque chose comme
&ccedil;a&nbsp;:</p>
<blockquote>
<pre>
<code>                cp $donn&eacute;es $r&eacute;pertoire_utilisateur/tmp
                su -c $commande_d_origine $param&egrave;tres
                cp $r&eacute;pertoire_utilisateur/tmp $donn&eacute;es
</code>
</pre></blockquote>
<p>(... o&ugrave; les d&eacute;tails d&eacute;pendent de la
commande).</p>
<p>Ces derni&egrave;res pr&eacute;cautions sont pour la plupart
superflues pour la machine personnelle ou la station
"mono-utilisateur". Mais elles repr&eacute;sentent une tr&egrave;s
bonne mani&egrave;re d'administrer un gros syst&egrave;me
multi-utilisateurs, particuli&egrave;rement dans le cas d'un
acc&egrave;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&egrave;me h&ocirc;te ? <i>Arrigo
Triulzi,</i> <code>a.triulzi@ic.ac.uk</code>.</a></h2>
<ol>
<li>Modifier le fichier lan&ccedil;ant xdm lors du d&eacute;marrage
(probablement nomm&eacute; /etc/rc/rc.6 ou /etc/rc.local) de
fa&ccedil;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&egrave;me... tout doit fonctionner&nbsp;!</li>
</ol>
<p>J'ajoute cette section apr&egrave;s avoir su&eacute; une semaine
durant sur ce probl&egrave;me&nbsp;!</p>
<p>Attention : certaines anciennes versions de la distribution SLS
(1.1.1) exigent qu'un param&egrave;tre "-nodaemon" accompagne
l'invocation d'xdm. Les version ult&eacute;rieures ne
pr&eacute;sentent <b>PAS</b> cette caract&eacute;ristique.</p>
</body>
</html>