traduction du 2 janvier 1999 Astuces Linux HOWTO
Paul Anderson <mailto:
[email protected]>, traduit par
Arnaud Gomes-do-Vale <mailto:
[email protected]> et Nat
Makar�vitch <mailto:
[email protected]>
v3.6, Juin 1998
Ce document contient ces astuces et r�glages difficiles � trouver qui
rendent Linux un peu plus sympathique.
______________________________________________________________________
Table des mati�res
1. Introduction
2. Astuces simples
2.1 Un truc pratique pour syslog.
2.2 Un script pour afficher les HOWTO compact�s.
2.3 Reste-t-il assez de place libre ?
2.4 Un utilitaire pour nettoyer vos fichiers journaux (logs).
2.5 Un script pratique pour nettoyer les fichiers
2.6 D�placement de r�pertoires inter partitions Linux (filesystems).
2.7 Trouver les plus gros r�pertoires.
2.8 La Linux Gazette.
2.9 Indication permettant de r�soudre le probl�me pos� par le VPATH du GNU make version 3.7.
2.10 Comment interdire � ma machine de lancer fsck apr�s chaque d�marrage ?
2.11 Comment �viter les lancements de fsck, au boot, d�s au "device busy" ?
2.12 Comment trouver les plus gros fichiers sur votre disque dur.
2.13 Comment imprimer sur des pages avec marges ?
2.14 M�thode permettant de rechercher des expressions rationnelles dans des fichiers.
2.15 Un script pour faire le m�nage derri�re les programmes qui cr�ent des fichiers de sauvegarde.
2.16 Comment trouver le processus qui occupe le plus de m�moire.
2.17 Configuration de
2.18 Utilisation de ctags pour faciliter la programmation
2.19 Pourquoi sendmail se bloque-t-il pendant 5 minutes au d�marrage d'une Red Hat ?
2.20 Comment configurer une Red Hat pour avoir
2.21 Comment trouver quelle biblioth�que de /usr/lib contient une fonction donn�e ?
2.22 J'ai compil� un petit programme en C, mais quand je le lance, je ne vois aucun r�sultat !
3. Astuces d�taill�es
3.1 Linux et Windows peuvent utiliser une m�me partition pour le swap !
3.2 R�cup�ration de fichiers effac�s.
3.3 Comment utiliser le marqueur d'immutabilit�.
3.4 Une suggestion quant � l'endroit o� mettre ce que vous rajoutez.
3.5 Conversion de tous les fichiers d'un r�pertoire en minuscules.
3.6 Mise � jour de Sendmail.
3.7 Quelques astuces pour les administrateurs syst�me d�butants.
3.8 Comment configurer
______________________________________________________________________
11.. IInnttrroodduuccttiioonn
Ce document est le LLiinnuuxx AAssttuucceess HHOOWWTTOO (titre original : LLiinnuuxx TTiippss
HHOOWWTTOO), 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 ?) Alors envoyez-moi vos
astuces pr�f�r�es (NdT : en anglais !) pour que je puisse les inclure
dans la prochaine version du Linux Astuces HOWTO.
Paul Anderson _R_�_d_a_c_t_e_u_r _d_e _"_L_i_n_u_x _T_I_P_S _H_O_W_T_O_"
[email protected]
22.. AAssttuucceess ssiimmpplleess
22..11.. UUnn ttrruucc pprraattiiqquuee ppoouurr ssyysslloogg.. PPaauull AAnnddeerrssoonn,, rr��ddaacctteeuurr dduu
LLiinnuuxx AAssttuucceess HHOOWWTTOO ..
Editez le ficher /etc/syslog.conf et ajoutez-y la ligne suivante :
# Tout envoyer sur tty8
*.* /dev/tty8
Attention : PENSEZ � UTILISER DES TABULATIONS ! Syslog n'aime pas les
espaces.
22..22.. UUnn ssccrriipptt ppoouurr aaffffiicchheerr lleess HHOOWWTTOO ccoommppaacctt��ss.. DDiiddiieerr JJuuggeess,,
ddjj@@ddeessttiinn..nnffddss..nneett ..
De d�butant � d�butant, voici un petit script qui facilite la lectures
des howto. Mes howto sont dans /usr/doc/faq/howto/ et sont compress�s
avec gzip. Les fichiers s'appellent XXX-HOWTO.gz, o� XXX est le titre.
J'ai appel� le script suivant howto et je l'ai plac� dans
/usr/local/sbin/ :
______________________________________________________________________
#!/bin/sh
if [ "$1" = "" ]; then
ls /usr/doc/faq/howto | less
else
gunzip -c /usr/doc/faq/howto/$1-HOWTO.gz | less
fi
______________________________________________________________________
Appel� sans argument, il affiche la liste des howto disponibles. Quand
on lui passe en argument la premi�re partie du nom du fichier (avant
le trait d'union), il d�compacte le document (en laissant l'original
intact) et l'affiche � l'�cran.
Par exemple, pour afficher le document Serial-HOWTO.gz, tapez :
$ howto serial
22..33.. zzoocckkii@@ggoollddffiisshh..ccuubbee..nneett .. RReessttee--tt--iill aasssseezz ddee ppllaaccee lliibbrree ??
HHaannss ZZooeebbeelleeiinn,,
Voici un script qui v�rifie � intervalles r�guliers qu'il reste de la
place sur tout ce qui est mont� (disques durs, CDROM, disquettes...)
En cas de p�nurie d'espace libre, un message est affich� � l'�cran
toutes les X secondes et un courrier �lectronique est envoy� pour
chaque p�riph�rique qui d�borde.
______________________________________________________________________
#!/bin/sh
#
# $Id: Tips-HOWTO.sgml,v 1.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 �
[email protected].
# Si votre site flambe � cause de �a, d�sol�
# mais je vous avais pr�venu: c'est votre probl�me
# Si vous savez vraiment vous servir de sed, excusez moi :)
#
#
# Lancez-le et vous pouvez l'oublier: mettez "check_hdspace &"
# dans rc.local. Il v�rifie l'espace libre toutes les
# $SLEEPTIME secondes. Vous pouvez m�me surveiller vos
# disquettes et vos bandes. :)
# Si l'espace libre est inf�rieur � $MINFREE (Ko),
# le script va afficher un message d'avertissement et envoyer un
# courrier � $MAIL_TO_ME pour chaque p�riph�rique
# concern�. D�s qu'il y a � nouveau plus de place
# libre que la limite, le syst�me d'envoi de courrier est
# r�amorc�.
#
# RESTE � FAIRE:
# Des $MINFREE diff�rents pour chaque p�riph�rique
# Nettoyer les r�pertoires /*tmp des vieilleries en cas de
# p�nurie d'espace.
DEVICES='/dev/sda2 /dev/sda8 /dev/sda9' # vos disques
MINFREE=20480 # la limite
SLEEPTIME=10 # secondes entre deux v�rifications
MAIL_TO_ME='root@localhost' # la personne � avertir
# ------- rien � changer en dessous (j'esp�re :) -------
MINMB=0
ISFREE=0
MAILED=""
let MINMB=$MINFREE/1024 # oui, on fait �a bien :)
while [ 1 ]; do
DF="`/bin/df`"
for DEVICE in $DEVICES ; do
ISFREE=`echo $DF | sed s#.\*$DEVICE" "\*[0-9]\*""\*[0-9]\*" "\*## | sed s#" ".\*##`
if [ $ISFREE -le $MINFREE ] ; then
let ISMB=$ISFREE/1024
echo "WARNING: $DEVICE only $ISMB mb free." >&2
#echo "more stuff here" >&2
echo -e "\a\a\a\a"
if [ -z "`echo $MAILED | grep -w $DEVICE`" ] ; then
echo "WARNING: $DEVICE only $ISMB mb free. (Trigger is set to $MINMB mb)" \
| mail -s "WARNING: $DEVICE only $ISMB mb free!" $MAIL_TO_ME
MAILEDH="$MAILED $DEVICE"
MAILED=$MAILEDH
# rajoutez ce qu'il reste � faire
# par exemple nettoyer les */tmp
fi
elif [ -n "`echo $MAILED | grep -w $DEVICE`" ] ; then
# Enlever le marqueur de courrier si
# l'espace disponible remonte
# au-dessus de la limite. Pour pouvoir
# envoyer un nouveau message en cas de
# besoin.
MAILEDH="`echo $MAILED | sed s#$DEVICE##`"
MAILED=$MAILEDH
fi
done
sleep $SLEEPTIME
done
______________________________________________________________________
22..44.. ((llooggss)).. PPaauull AAnnddeerrssoonn,, rr��ddaacctteeuurr dduu LLiinnuuxx AAssttuucceess HHOOWWTTOO .. UUnn
uuttiilliittaaiirree ppoouurr nneettttooyyeerr vvooss ffiicchhiieerrss jjoouurrnnaauuxx
Si vous �tes comme moi, vous avez une liste de diffusion avec 430
inscrits et plus de 100 messages qui arrivent tous les jours par UUCP.
Qu'est-ce qu'un bidouilleur peut bien faire avec ces �normes fichiers
journaux ? Il peut installer chklogs. chklogs a �t� �crit par Emilio
Grimaldo,
[email protected], et la version 1.8 actuelle est
disponible sur ftp.iaehv.nl:/pub/users/grimaldo/chklogs-1.8.tar.gz.
C'est tr�s simple � installer (il faut bien s�r lire le contenu du
r�pertoire doc). Une fois le paquetage install�, rajoutez une entr�e �
votre crontab :
# Lance chklogs tous les jours � 21h
00 21 * * * /usr/local/sbin/chklogs -m
Pendant que vous y �tes, n'oubliez pas de dire � l'auteur � quel point
vous appr�ciez son logiciel :)
22..55.. ccoorree .. OOttttoo HHaammmmeerrssmmiitthh .. UUnn ssccrriipptt pprraattiiqquuee ppoouurr nneettttooyyeerr lleess
ffiicchhiieerrss
Cr�ez un fichier rmcores (l'auteur l'appelle handle-cores) contenant
ceci :
______________________________________________________________________
#!/bin/sh
USAGE="$0 <directory> <message-file>"
if [ $# != 2 ] ; then
echo $USAGE
exit
fi
echo Deleting...
find $1 -name core -atime 7 -print -type f -exec rm {} \;
echo e-mailing
for name in `find $1 -name core -exec ls -l {} \; | cut -c16-24`
do
echo $name
cat $2 | mail $name
done
______________________________________________________________________
Et utilisez cron pour le lancer � intervalles r�guliers.
22..66.. DD��ppllaacceemmeenntt ddee rr��ppeerrttooiirreess iinntteerr ppaarrttiittiioonnss LLiinnuuxx ((ffiilleessyysstteemmss))..
AAllaann CCooxx,, AA..CCooxx@@sswwaannsseeaa..aacc..uukk ..
(cd /r�pertoire_source && tar cf - . ) | (cd /r�pertoire_cible && tar xvf -)
_[ _E_t _p_a_s _c_d _/_r_�_p_e_r_t_o_i_r_e___s_o_u_r_c_e_; _t_a_r_._._._e_t_c_._, _q_u_i _l_a_i_s_s_e _l_a _p_o_s_s_i_b_i_l_i_t_�
_d_e _b_o_u_s_i_l_l_e_r _u_n _r_�_p_e_r_t_o_i_r_e _e_n _c_a_s _d_e _p_r_o_b_l_�_m_e_. _M_e_r_c_i _� _J_i_m _D_e_n_n_i_s_,
[email protected], qui me l'a signal�. -le r�dacteur ]
22..77.. TTrroouuvveerr lleess pplluuss ggrrooss rr��ppeerrttooiirreess.. MMiicckk GGhhaazzeeyy ..
Vous vous �tes d�j� demand� quels �taient les plus gros r�pertoires
sur votre machine ? Voici une fa�on de les trouver.
du -S | sort -n
22..88.. LLaa LLiinnuuxx GGaazzeettttee..
Bravo et merci � John Fisk, le cr�ateur de la Linux Gazette. C'est un
excellent magazine en ligne, qui plus est GGRRAATTUUIITT !! Que demander de
plus ? Vous pouvez le trouver � l'adresse :
http://www.linuxgazette.com
Au fait, il s'av�re que (1) la LG est maintenant mensuelle et (2) elle
n'est plus maintenue par John Fisk, mais par l'�quipe de SSC.
22..99.. IInnddiiccaattiioonn ppeerrmmeettttaanntt ddee rr��ssoouuddrree llee pprroobbll��mmee ppooss�� ppaarr llee VVPPAATTHH
dduu GGNNUU mmaakkee vveerrssiioonn 33..77.. TTeedd SStteerrnn,, sstteerrnn@@aammaatthh..wwaasshhiinnggttoonn..eedduu ..
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 <
[email protected]> (-- Veuillez r�diger votre courrier en
anglais ! NDT--) . Ce dernier poste dans le groupe gnu.utils.bug un
article contenant ce patch et sa documentation apr�s parution de
chaque nouvelle version du GNU make. En ce qui me concerne... il est
install� sur tous les syst�mes auxquels j'ai acc�s !
22..1100.. CCoommmmeenntt iinntteerrddiirree �� mmaa mmaacchhiinnee ddee llaanncceerr ffsscckk aapprr��ss cchhaaqquuee
dd��mmaarrrraaggee ?? DDaallee LLuuttzz,, ddaall@@wwiimmsseeyy..ccoomm ..
R�ponse : Apr�s recompilation du noyau le syst�me de fichiers est
consid�r� comme non v�rifi� ("marked as dirty"), ce qui implique que
fsck sera mis en action lors de chaque d�marrage. Pour �viter cela
lancer :
rdev -R /zImage 1
Cela modifie le noyau qui, d�s lors, consid�re que le syst�me de
fichiers est sain.
Note : Ajoutez, si vous employez LILO, read-only � la section de
l'image de boot de votre fichier de configuration LILO (souvent nomm�
/etc/lilo/config ou /etc/lilo.conf).
22..1111.. CCoommmmeenntt ��vviitteerr lleess llaanncceemmeennttss ddee ffsscckk,, aauu bboooott,, dd��ss aauu ""ddeevviiccee
bbuussyy"" ?? JJoonn TToommbbss,, jjoonn@@ggtteexx0022..uuss..eess ..
Si votre syst�me conna�t de fr�quentes erreurs de type "device busy"
au d�marrage qui laissent le syst�me de fichiers dans un �tat exigeant
un fsck, veuillez suivre les recommandations suivantes :
Ajoutez, au fichier /etc/rc.d/init.d/halt ou /etc/rc.d/rc.0, la ligne
mount -o remount,ro /mount.dir
pour tous vos syst�mes de fichiers mont�s, sauf la racine, avant
l'invocation de umount -a. Cela signifie que si, pour une quelconque
raison, "shutdown" ne parvient pas � tuer tous les processus puis
d�monter les partitions ces derni�res seront malgr� tout consid�r�es
comme saines lors du red�marrage. Cette astuce a consid�rablement
�court� le temps de d�marrage de mon syst�me !
22..1122.. dduurr.. SSiimmoonn AAmmoorr,, ssiimmoonn@@ffoooobbaarr..ccoo..uukk .. CCoommmmeenntt ttrroouuvveerr lleess
pplluuss ggrrooss ffiicchhiieerrss ssuurr vvoottrree ddiissqquuee
ls -l | sort +4n
Pour ceux d'entre vous qui sont vraiment � l'�troit, �a prend du
temps, mais �a marche bien :
cd /
ls -lR | sort +4n
22..1133.. CCoommmmeenntt iimmpprriimmeerr ssuurr ddeess ppaaggeess aavveecc mmaarrggeess ?? MMiikkee DDiicckkeeyy,,
mmddiicckkeeyy@@tthhoorrpplluuss..lliibb..ppuurrdduuee..eedduu ..
______________________________________________________________________
#!/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
______________________________________________________________________
22..1144.. MM��tthhooddee ppeerrmmeettttaanntt ddee rreecchheerrcchheerr ddeess eexxpprreessssiioonnss rraattiioonnnneelllleess
ddaannss ddeess ffiicchhiieerrss.. RRaauull DDeelluutthh MMiilllleerr,, rroocckkwweellll@@nnoovvaa..uummdd..eedduu ..
Je d�signe, par "expressions rationnelles", les regexp de "grep" et
consorts.
J'ai appel� ce script "forall" et l'utilise ainsi :
forall /usr/include grep -i ioctl
forall /usr/man grep ioctl
Voici le script forall:
______________________________________________________________________
#!/bin/sh
if [ 1 = `expr 2 \> $#` ]
then
echo Syntaxe: $0 repertoire commande [arguments]
exit 1
fi
dir=$1
shift
find $dir -type f -print | xargs "$@"
______________________________________________________________________
22..1155.. pprrooggrraammmmeess qquuii ccrr��eenntt ddeess ffiicchhiieerrss ddee ssaauuvveeggaarrddee.. UUnn ssccrriipptt
ppoouurr ffaaiirree llee mm��nnaaggee ddeerrrrii��rree lleess
Voici un petit script de deux lignes qui parcourt une arborescence et
qui y efface les fichiers de sauvegarde (# et ~) d'emacs, les fichiers
.o, et les fichiers .log de TeX. Il compacte �galement les fichiers
.tex et README. Sur mon syst�me, je l'ai appel� "squeeze".
______________________________________________________________________
#!/bin/sh
#SQUEEZE efface les fichiers superflus et compacte les fichiers .tex
#et README.
#Par Barry tolnas,
[email protected]
#
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 {} \;
______________________________________________________________________
22..1166.. mm��mmooiirree.. SSiimmoonn AAmmoorr .. CCoommmmeenntt ttrroouuvveerr llee pprroocceessssuuss qquuii ooccccuuppee
llee pplluuss ddee
ps -aux | sort +4n
-OU-
ps -aux | sort +5n
22..1177.. AAnnddeerrssoonn,, rr��ddaacctteeuurr dduu LLiinnuuxx AAssttuucceess HHOOWWTTOO .. CCoonnffiigguurraattiioonn ddee
vvii ppoouurr llaa pprrooggrraammmmaattiioonn eenn CC.. PPaauull
Je passe beaucoup de temps � programmer en C, et j'ai pris le temps de
configurer vi pour me faciliter la t�che. Voici le contenu de mon
fichier .exrc :
______________________________________________________________________
set autoindent
set shiftwidth=4
set backspace=2
set ruler
______________________________________________________________________
Qu'est-ce que �a fait ? autoindent force vi � indenter automatiquement
toutes les lignes qui suivent la premi�re ligne indent�e, shiftwidth
impose une taille de 4 espaces pour ^T, backspace configure la touche
d'espacement arri�re, et ruler force l'affichage des num�ros de
lignes. Notez que pour placer le curseur sur une ligne donn�e, par
exemple la ligne 20, vous pouvez utiliser :
vi +20 monfichier.c
22..1188.. UUttiilliissaattiioonn ddee ccttaaggss ppoouurr ffaacciilliitteerr llaa pprrooggrraammmmaattiioonn
Beaucoup de bidouilleurs ont d�j� ctags sur leur machine, mais ne s'en
servent pas. Cela peut �tre tr�s pratique pour �diter des fonctions
sp�cifiques. Supposez que vous avez une fonction dans l'un des
nombreux fichiers sources contenus dans un r�pertoire pour un
programme que vous �tes en train d'�crire, et que vous voulez �diter
cette fonction pour faire une mise � jour. Appelons cette fonction
foo(). Vous ne savez pas non plus o� elle se trouve dans le fichier
source. C'est l� que ctags peut �tre tr�s pratique. Quand vous le
lancez, ctags cr�e un fichier nomm� tags dans le r�pertoire courant,
qui contient la liste de toutes les fonctions, le fichier source dans
lequel elles se trouvent et leur emplacement dans ce fichier source.
Le fichier tags ressemble � �a :
______________________________________________________________________
ActiveIconManager iconmgr.c /^void ActiveIconManager(active)$/
AddDefaultBindings add_window.c /^AddDefaultBindings ()$/
AddEndResize resize.c /^AddEndResize(tmp_win)$/
AddFuncButton menus.c /^Bool AddFuncButton (num, cont, mods, func, menu, item)$/
AddFuncKey menus.c /^Bool AddFuncKey (name, cont, mods, func, menu, win_name, action)$/
AddIconManager iconmgr.c /^WList *AddIconManager(tmp_win)$/
AddIconRegion icons.c /^AddIconRegion(geom, grav1, grav2, stepx, stepy)$/
AddStartResize resize.c /^AddStartResize(tmp_win, x, y, w, h)$/
AddToClientsList workmgr.c /^void AddToClientsList (workspace, client)$/
AddToList list.c /^AddToList(list_head, name, ptr)$/
______________________________________________________________________
Pour �diter, par exemple, AddEndResize() avec vim, tapez :
vim -t AddEndResize
Cela va ouvrir le bon fichier dans l'�diteur et placer le curseur au
d�but de la fonction.
22..1199.. dd��mmaarrrraaggee dd''uunnee RReedd HHaatt ?? PPaauull AAnnddeerrssoonn .. PPoouurrqquuooii sseennddmmaaiill ssee
bbllooqquuee--tt--iill ppeennddaanntt 55 mmiinnuutteess aauu
C'est un probl�me assez courant, presque au point d'en faire une FAQ.
Je ne sais pas si Red Hat corrige l'erreur dans sa distributions, mais
vous pouvez r�parer �a vous-m�me. Si vous regardez dans votre fichier
/etc/hosts, vous allez trouver quelque chose qui ressemble � �a :
127.0.0.1 localhost votremachine
Quand sendmail d�marre, il fait une recherche sur le nom de votre
machive (votremachine dans l'exemple). Ensuite, il trouve que
l'adresse IP de la machine est 127.0.0.1; sendmail n'aime pas �a et
recommence la recherche. Il continue comme �a pendant un moment avant
d'abandonner. Corriger ce probl�me est tr�s facile : �ditez votre
fichier /etc/hosts et mettez-y quelque chose comme �a :
127.0.0.1 localhost
10.56.142.1 votremachine
22..2200.. PPaauull AAnnddeerrssoonn,, ppaauull@@ggeeeekkyy11..eebbtteecchh..nneett .. CCoommmmeenntt ccoonnffiigguurreerr
uunnee RReedd HHaatt ppoouurr aavvooiirr llss eenn ccoouulleeuurrss??
La distribution Red Hat est fournie avec color-ls (ls en couleurs),
mais je n'arrive pas � comprendre pourquoi ils ne le configurent pas
pour utiliser les couleurs par d�faut. Voici une fa�on d'arranger �a.
Commencez par taper eval `DIRCOLORS`
Puis alias ls='ls --color=auto'
Enfin, mettez la ligne "alias ....." dans votre /etc/bashrc.
22..2211.. ccoonnttiieenntt uunnee ffoonnccttiioonn ddoonnnn��ee ?? PPaawweell VVeesseellooww .. CCoommmmeenntt ttrroouuvveerr
qquueellllee bbiibblliiootthh��qquuee ddee //uussrr//lliibb
Vous �tes en train de compiler un programme et vous avez oubli� de
lier une biblioth�que n�cessaire? Et gcc qui ne donne que les noms des
fonctions manquantes... Voici une commande pour trouver ce que vous
cherchez :
for i in *; do echo $i:;nm $i|grep tgetnum 2>/dev/null;done
Remplacez tgetnum par le nom de la fonction que vous cherchez.
22..2222.. llaannccee,, jjee nnee vvooiiss aauuccuunn rr��ssuullttaatt !! JJ''aaii ccoommppiill�� uunn ppeettiitt pprroo��
ggrraammmmee eenn CC,, mmaaiiss qquuaanndd jjee llee
Vous avez compil� le programme et cr�� un programme appel� test, non?
Linux a d�j� un programme test, qui teste si une certaine condition
est vraie et qui n'affiche aucun r�sultat � l'�cran. Pour lancer votre
programme test, tapez ./test.
33.. AAssttuucceess dd��ttaaiillll��eess
33..11.. LLiinnuuxx eett WWiinnddoowwss ppeeuuvveenntt uuttiilliisseerr uunnee mm��mmee ppaarrttiittiioonn ppoouurr llee
sswwaapp !! TToonnyy AAcceerroo,, aaccee33@@mmiiddwwaayy..uucchhiiccaaggoo..eedduu ..
1. Formater la partition sous DOS puis y disposer le fichier d'�change
de Windows. Ne pas employer Windows tout de suite afin de laisser
ce fichier compl�tement "vide" pour faciliter son compactage.
2. D�marrer Linux et sauver ce fichier dans un fichier. Exemple (cas
d'une partition de "swap" commun nomm�e /dev/hda8) :
dd if=/dev/hda8 of=/etc/dosswap
3. Compacter le fichier de swap :
gzip -9 /etc/dosswap
4. Ajouter au fichier /etc/rc la ligne suivante afin de pr�parer et
installer la partition de swap lorsqu'elle est employ�e par Linux :
_X_X_X_X_X _r_e_p_r_�_s_e_n_t_e _i_c_i _l_e _n_o_m_b_r_e _d_e _b_l_o_c_s _q_u_e _c_o_m_p_t_e _l_a _p_a_r_t_i_t_i_o_n _d_e
_s_w_a_p
mkswap /dev/hda8 XXXXX
swapon -av
Ajoutez une ligne destin�e � cette partiton de swap dans le fichier
/etc/fstab
5. Si les programmes init et shutdown employ�s utilisent /etc/brc
ajouter � ce fichier les lignes suivantes :
swapoff -av
zcat /etc/dosswap.gz | dd of=/dev/hda8 bs=1k count=100
Dans le cas contraire il vous faudra invoquer ces commandes avant
chaque fin de session Linux (placer ces commandes dans un script...)
Note : dd ne traite que 100 blocs car j'ai empiriquement d�termin� que
rien ne sert d'en �crire davantage !
>> Quels sont les avantages et inconv�nients de cette m�thode ?
Avantages : gain d'espace disponible sur le disque !
Inconv�nients : 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.
33..22.. RR��ccuupp��rraattiioonn ddee ffiicchhiieerrss eeffffaacc��ss.. MMiicchhaaeell HHaammiillttoonn,,
mmiicchhaaeell@@aaccttrriixx..ggeenn..nnzz ..
Voici une astuce dont j'ai eu besoin � quelques reprises.
La r�cup�ration d'un fichier texte par une personne d�sesp�r�e.
Si vous effacez un fichier texte par accident, par exemple un courrier
�lectronique ou le produit d'une nuit de programmation, tout n'est pas
perdu. Si le fichier a eu le temps d'aller jusqu'au disque, c'est �
dire s'il a exist� pendant plus de 30 secondes, il est possible que
son contenu se trouve encore sur la partition.
Vous pouvez le rechercher dans la partition en utilisant la commande
grep.
Par exemple, 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 : 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.
J'ai ensuite utilis� la commande egrep sur la partition : dans mon
cas, le message se trouvait dans /usr/local/home/michael/, et donc
d'apr�s la sortie de df, dans /dev/hdb5.
sputnik3:~ % df
Filesystem 1024-blocks Used Available Capacity Mounted on
/dev/hda3 18621 9759 7901 55% /
/dev/hdb3 308852 258443 34458 88% /usr
/dev/hdb5 466896 407062 35720 92% /usr/local
sputnik3:~ % su
Password:
[michael@sputnik3 michael]# egrep -50 'ftp.+COL' /dev/hdb5 > /tmp/x
Je suis 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.
J'ai ensuite utilis� la commande strings pour examiner le r�sultat.
strings /tmp/x | less
Effectivement, le message �tait l�.
Cette m�thode peut ne pas �tre efficace si tout ou partie de l'espace
disque a d�j� �t� r�utilis�.
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.
Sur mon syst�me personnel, cette astuce a �t� bien pratique � environ
trois occasions ces quelques derni�res ann�es - 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.
33..33.. DDeennnniiss,, jjaaddeessttaarr@@rraahhuull..nneett .. CCoommmmeenntt uuttiilliisseerr llee mmaarrqquueeuurr
dd''iimmmmuuttaabbiilliitt��.. JJiimm
Utilisez le marqueur d'immutabilit�.
Juste apr�s avoir install� et configur� votre syst�me, faites un tour
dans /bin, /sbin, /usr/bin, /usr/sbin, /usr/lib et autres, et
n'h�sitez pas � vous servir de la commande "chattr +i". Appliquez-la
aussi aux fichiers du noyau � la racine. Maintenant, "mkdir
/etc/.dist" et copiez-y toute l'arborescence contenue dans /etc (je le
fais en deux �tapes en utilisant /tmp/etcdist.tar pour �viter la
r�cursion). (Vous pouvez aussi vous contenter de /etc/.dist.tar.gz).
Et placez-y un marqueur d'immutabilit�.
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 "rm
-fr" ; vous pouvez toujours faire tr�s mal � vos donn�es, mais vos
binaires et vos biblioth�ques seront � l'abri.
De plus, cela pr�vient, ou du moins complique, l'exploitation d'un
certain nombre de trous de s�curit� ; en effet, beaucoup d'attaques de
ce type �crasent un fichier au moyen d'un quelconque programme SUID
qui _n_e _p_e_r_m_e_t _p_a_s _d_'_e_x_�_c_u_t_e_r _u_n_e _c_o_m_m_a_n_d_e _a_r_b_i_t_r_a_i_r_e.
Le seul 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 "make install". Si vous oubliez de lire le Makefile et
d'appliquer chattr -i 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 .old/, les renommer, les
archiver ou autre.
33..44.. qquuee vvoouuss rraajjoouutteezz.. UUnnee ssuuggggeessttiioonn qquuaanntt �� ll''eennddrrooiitt oo�� mmeettttrree
ccee
Tout ce que vous rajoutez doit se trouver sous /usr/local ou
/usr/local/`hostname`!
Si votre distribution laisse /usr/local vide, cr�ez /usr/local/src,
/usr/local/bin, etc. et utilisez-les. Si votre distribution met des
choses dans /usr/local, cr�ez /usr/local/`hostname` et donnez-lui le
mode +w pour le groupe wheel (en plus, je le rends SUID et SGID pour
m'assurer que les membres du groupe wheel ne peuvent toucher qu'�
leurs propres fichiers et que tous les nouveaux fichiers vont
appartenir au groupe wheel).
Maintenant, forcez-vous � _T_O_U_J_O_U_R_S placer les nouveaux paquetages sous
/usr/local/src/.from/$OU_JE_L_AI_EU (pour les fichiers .tar ou autres)
et � les compiler sous /usr/local/src (ou .../$HOSTNAME/src). Assurez-
vous qu'ils s'installent sous la hi�rarchie locale. Si quelque chose
*doit obligatoirement* �tre install� dans /bin ou /usr/bin ou autre,
cr�ez un lien symbolique depuis la hi�rarchie locale vers tout ce qui
est install� ailleurs.
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 /usr/local/src/.from, vous gardez aussi une trace de la
provenance de vos sources, ce qui est utile pour trouver les mises �
jour et qui peut s'av�rer critique pour suivre les listes d'annonces
de s�curit�.
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.
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.
33..55.. mmiinnuussccuulleess.. JJuussttiinn DDoosssseeyy,, ddoosssseeyy@@oouu..eedduu .. CCoonnvveerrssiioonn ddee ttoouuss
lleess ffiicchhiieerrss dd''uunn rr��ppeerrttooiirree eenn
J'ai remarqu� quelques proc�dures difficiles ou superflues
recommand�es dans les trucs et astuces du num�ro 12 (-- NdT :
Apparemment, cette section est tir�e de la Linux Gazette--) . Comme il
y en a plusieurs, je vous adresse ce message.
______________________________________________________________________
#!/bin/sh
# lowerit
# convertit les noms de tous les fichiers du 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
______________________________________________________________________
Voil� un long script. Je n'�crirais pas un script pour �a ;
j'utiliserais plut�t la commande suivante :
for i in * ; do [ -f $i ] && mv -i $i `echo $i | tr '[A-Z]' '[a-z]'`;
done;
Ce contributeur dit qu'il a �crit le script de cette fa�on pour des
raisons de lisibilit� (voir plus bas).
Pour l'astuce suivante, qui traite de l'ajout et de la suppression
d'utilisateurs, Geoff s'en sort bien jusqu'� la derni�re �tape.
Rebooter ? 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 ? Un bot
IRC ? Tuez simplement les processus avec :
kill -9 `ps -aux |grep ^<nom d'utilisateur> |tr -s " " |cut -d " " -f2`
Par exemple, pour l'utilisateur foo:
kill -9 `ps -aux |grep ^foo |tr -s " " |cut -d " " -f2`
Cette question �tant class�e, passons au mot de passe de root oubli�.
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 "init 3" pour passer en mode multi-utilisateurs. De cette fa�on,
un seul reboot ; de l'autre, deux reboots.
Justin Dossey.
33..66.. ppaauull@@ggeeeekkyy11..eebbtteecchh..nneett MMiissee �� jjoouurr ddee SSeennddmmaaiill.. PPaauull AAnnddeerrssoonn,,
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
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 ; sinon, je n'aurai plus de courrier et je ne pourrai
pas distribuer la nouvelle version de ce HOWTO :)
Maintenant que vous avez t�l�charg� le source, d�compactez-le. Cela va
cr�er un sous-r�pertoire sendmail-8.9.0 dans le r�pertoire courant.
Placez-vous dans ce sous-r�pertoire et lisez les fichiers README et
RELEASE_NOTES (et soyez �poustoufl� par toutes les am�liorations
qu'ils ont apport�es). Maintenant, placez-vous dans src. C'est l� que
vous allez faire le plus gros du travail.
_U_n_e _r_e_m_a_r_q_u_e _a_u _p_a_s_s_a_g_e _: _S_e_n_d_m_a_i_l _e_s_t _u_n _p_r_o_g_r_a_m_m_e _p_e_t_i_t_, _p_u_i_s_s_a_n_t _e_t
_b_i_e_n _�_c_r_i_t_. _L_e _b_i_n_a_i_r_e sendmail lui-m�me a mis moins de 5 minutes �
compiler sur mon 5x86 133 avec 32 Mo de RAM ! La totalit� de la
compilation et de l'installation (sans compter la configuration) ont
pris moins de 15 minutes !
Je n'utilise pas BIND sur mon syst�me, donc j'ai cherch� les lignes
suivantes :
______________________________________________________________________
# ifndef NAMED_BIND
# define NAMED_BIND 1 /* use Berkeley Internet Domain Server */
# endif
______________________________________________________________________
et j'ai remplac� le 1 par un 0:
______________________________________________________________________
# ifndef NAMED_BIND
# define NAMED_BIND 0 /* use Berkeley Internet Domain Server */
# endif
______________________________________________________________________
Sur la Debian 1.3, db.h est install� par d�faut dans /usr/include/db,
au lieu de /usr/include o� sendmail esp�re le trouver. Placez-vous
successivement dans les sous-r�pertoires src, mailstats, makemap,
praliases, rmail et smrsh et �xecutez la commande suivante :
./Build -I/usr/include/db
Ensuite, cd .. et tapez make install. Voil� ! La version 8.9.0 de
Sendmail doit maintenant �tre install�e ! 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 /etc/sendmail.cf :
______________________________________________________________________
O DontBlameSendmail=forwardfileinunsafedirpath, forwardfileinunsafedirpathsafe
______________________________________________________________________
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 .forward. Bien qu'il ne soit pas recommand� d'inhiber ces
avertissements, je suis toujours seul � la console et j'ai trouv� que
ce trou de s�curit� mineur n'�tait en fait pas g�nant. C'est vous qui
voyez.
33..77.. dd��bbuuttaannttss.. JJiimm DDeennnniiss,, jjaaddeessttaarr@@rraahhuull..nneett QQuueellqquueess aassttuucceess ppoouurr
lleess aaddmmiinniissttrraatteeuurrss ssyysstt��mmee
Cr�ez et tenez � jour un fichier /README.`hostname` ou
/etc/README.`hostname` _[ _o_u _�_v_e_n_t_u_e_l_l_e_m_e_n_t
/usr/local/etc/README.`hostname` - le r�dacteur ]
Absolument, � compter du _p_r_e_m_i_e_r _j_o_u_r 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 .bash_logout de
root. Une autre fa�on de faire est d'�crire un script su ou sudo qui
fait quelque chose comme �a :
function exit \
{ unset exit; exit; \
cat ~/tmp/session.$(date +%y%m%d) \
>> /README.$(hostname) && \
vi /README.$(hostname)
}
script -a ~/tmp/session.$(date +%y%m%d)
/bin/su.org -
(utilise la commande tap�e pour cr�er une trace de la session et cr�e
une fonction pour automatiser la mise � jour du fichier journal).
J'admets que je n'ai pas implant� cette automatisation - jusqu'�
maintenant je me suis repos� sur ma discipline. Cependant j'ai
envisag� l'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.
Ma derni�re suggestion (pour cette fois) :
La variable PATH de root devrait contenir PATH=~/bin.
C'est tout. Rien d'autre dans le PATH de root. Tout ce que root peut
faire est fourni par un lien symbolique dans ~/bin, un alias, une
fonction shell, un script ou un binaire situ� dans ~/bin, ou bien la
commande est tap�e avec un chemin d'acc�s explicite.
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 ~/bin et ses fichiers
~/.*history pour y chercher des r�p�titions et des moyens de les
contourner.
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 (./.exrc) ou emacs (./.emacs) 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 :
cp $donn�es $r�pertoire_utilisateur/tmp
su -c $commande_d_origine $param�tres
cp $r�pertoire_utilisateur/tmp $donn�es
(... o� les d�tails d�pendent de la commande).
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).
33..88.. CCoommmmeenntt ccoonnffiigguurreerr xxddmm ppoouurr qquu''iill ppeerrmmeettttee ddee cchhooiissiirr llee
ssyysstt��mmee hh��ttee ?? AArrrriiggoo TTrriiuullzzii,, aa..ttrriiuullzzii@@iicc..aacc..uukk ..
1. 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 :
/usr/bin/X11/xdm
exec /usr/bin/X11/X -indirect hostname
2. Modifier le fichier /usr/lib/X11/xdm/Xservers et commenter la ligne
invoquant le serveur sur la machine locale (commence par "0:")
3. Relancer le syst�me... tout doit fonctionner !
J'ajoute cette section apr�s avoir su� une semaine durant sur ce
probl�me !
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 PPAASS cette
caract�ristique.