Consultez le BootPrompt-HOWTO
du LDP pour des informations détaillées sur l'invite de démarrage.
On peux démarrer dans le compte administrateur (root) sans connaître le mot de
passe de root si on a un accès au clavier de la console. (Cela suppose qu'il
n'y a pas de mot de passe requis pour le BIOS ni pour le chargeur de démarrage
comme lilo
qui empêche de lancer le système).
Cette procédure ne nécessite ni disquette de démarrage externe ni changement dans les réglages du BIOS. Ici, "Linux" est le nom du noyau Linux par défaut qui lance le système Debian.
A l'écran d'invite de lilo
, dès que boot: apparaît
(il faut appuyer sur la touche MAJ sur certains systèmes pour éviter le
démarrage automatique et lorsque lilo
utilise le framebuffer il
faut appuyer sur TAB pour voir les options que vous tapez), entrez :
boot: Linux init=/bin/sh
Le système lance alors le noyau et exécute /bin/sh
au lieu du
processus init
standard. Vous avez maintenant les droits et le
shell de l'administrateur root. Puisque /
est monté en lecture
seule et que beaucoup de partitions ne sont pas encore montées, vous devez
faire ce qui suit pour obtenir un système à peu près fonctionnel.
init-2.03# mount -n -o remount,rw / init-2.03# mount -avt nonfs,noproc,nosmbfs init-2.03# cd /etc init-2.03# vi passwd init-2.03# vi shadow
(Si la seconde colonne de /etc/passwd
est « x » pour
tous les utilisateurs, votre système utilise les "shadow passwords"
(NdT : mots de passes cachés), et il faut éditer
/etc/shadow
.) Une entrée vide dans la seconde colonne de l'un de
ces fichiers désactive le mot de passe. Maintenant le système peut être lancé
sans le mot de passe de root. Debian (au moins après Potato) nécessite
d'entrer un mot de passe si le système est lancé au niveau d'exécution
(runlevel) 1, ce que d'anciennes distributions ne faisait pas.
C'est une bonne idée d'avoir un éditeur minimum dans /bin
au cas
où /usr
ne serait pas accessible (voir Editeurs de sauvetage, Section 11.2).
Vous pouvez aussi installer le paquet sash
. Si le système ne
démarre plus, lancez :
boot: Linux init=/bin/sash
sash
sert de substitution intéractive à sh
même
lorsque /bin/sh
est inutilisable. Il est lié statiquement, et
inclut beaucoup d'utilitaires standard (tapez « help » à l'invite
pour une liste).
Démarrez depuis n'importe quel ensemble de disquettes de boot/root. Si
/dev/hda3
est la partition racine originale, la suite
vous laissera éditer le fichier de mots de passe aussi facilement que
précédemment.
# mkdir fixit # mount /dev/hda3 fixit # cd fixit/etc # vi shadow # vi passwd
L'avantage de cette méthode sur la précédente est qu'on n'est pas obligé de
connaître le mot de passe de lilo
, mais on doit pouvoir régler le
BIOS pour que le système se lance depuis la disquette ou le CD.
Pas de problème, personne ne prend la peine de faire une disquette de démarrage
lors de l'installation. Si lilo
est cassé, récupérez la disquette
de démarrage de l'installation de Debian (rescue). Démarrez depuis cette
disquette. A l'invite de démarrage, en supposant que la partition racine de
Linux est /dev/hda12
et que vous voulez le niveau
d'exécution (runlevel) 3, entrez :
boot: rescue root=/dev/hda12 3
Vous avez maintenant lancé un système presque totalement fonctionnel depuis le noyau présent sur la disquette. (Il peut y avoir quelques problèmes et messages d'erreur mineurs à cause d'un manque dans les options du noyau ou d'un module absent.)
Voyez aussi Installer un paquet sur un système qui ne démarre plus, Section 6.3.6 si votre système est planté.
Si vous avez besoin d'une disquette de démarrage personnalisée, suivez les
instructions de readme.txt
sur la disquette de secours.
Suivre unstable/sid est sympa, mais un bogue de xdm
,
gdm
, kdm
, ou wdm
lancé pendant le
processus de démarrage peut faire mal.
D'abord, obtenez un shell avec root en tapant ce qui suit à l'invite de démarrage :
boot: Linux vga=normal s
Là, Linux est le nom de l'image du noyau que vous démarrez,
« vga=normal » s'assure que lilo
s'exécute en mode VGA,
et « s » (ou « S ») est le paramètre passé à
init
pour lancer le mode mono-utilisateur. Entrez le mot de passe
de root à l'invite.
Il existe quelques moyens de désactiver tous les démons X qui démarrent :
/etc/init.d/?dm
/etc/rc2.d/S99?dm
en /etc/rc2.d/K99?dm
/etc/rc2.d/S99?dm
Ici, rc2.d
doit correspondre au niveau de
fonctionnement spécifié dans /etc/inittab
. De plus,
?dm
signifie tous les fichiers parmi xdm
,
gdm
, kdm
, et wdm
.
Seul le premier est le « véritable moyen unique » de Debian. Le
dernier est facile mais marche seulement sur Debian et nécessite que vous
reconfiguriez le gestionnaire d'affichage par la suite avec
dpkg-reconfigure
. Les autres sont des méthodes génériques pour
désactiver des démons.
Vous pouvez toujours lancer X avec la commande startx
depuis une
console.
Le système peut être lancé à un niveau d'exécution particulier et avec des
options de configurations en utilisant l'invite de démarrage de
lilo
. Les détails sont données dans le BootPrompt-HOWTO
(LDP).
Si vous voulez lancer le système au niveau d'exécution 4, entrez la ligne
suivante à l'invite de lilo
.
boot: Linux 4
Si vous voulez lancer le système en mode de fonctionnement mono-utilisateur
normal, et que vous connaissez le mot de passe de root, un des exemples
suivants à l'invite de lilo
fonctionnera.
boot: Linux S boot: Linux 1 boot: Linux -s
Si vous voulez lancer le système en utilisant moins de mémoire vive que le
système n'en a en réalité (par exemple 48Mo sur un ordinateur qui a 64Mo),
utilisez la commande suivante à l'invite de démarrage de lilo
:
boot: Linux mem=48M
Assurez-vous de ne pas spécifier plus de mémoire que le système n'en a en
réalité, sinon le noyau va planter. Si vous avez plus de 64Mo de mémoire vive,
128Mo par exemple, à moins de spécifier mem=128M à l'invite de
lilo
ou d'inclure une ligne "append" similaire dans
/etc/lilo.conf
, les vieux noyaux et/ou les cates mères avec un
vieux BIOS n'utiliseront pas la mémoire au-delà des 64Mo.
GRUB est un nouveau gestionnaire de démarrage issu du projet Hurd et est beaucoup plus flexible que Lilo mais a une manière différente de gérer les paramètres de démarrage.
grub> find /vmlinuz grub> root (hd0,0) grub> kernel /vmlinuz root=/dev/hda1 grub> initrd /initrd grub> boot
Là, vous devez connaître les noms de périphériques de Hurd :
the Hurd/GRUB Linux MSDOS/Windows (fd0) /dev/fd0 A: (hd0,0) /dev/hda1 C: (habituellement) (hd0,3) /dev/hda4 F: (habituellement) (hd1,3) /dev/hdb4 ?
Voir /usr/share/doc/grub/README.Debian
et
/usr/share/doc/grub-doc/html/
pour les détails.
L'administration système est une série d'activités beaucoup plus élaborées dans un environnement Unix que dans un environnement de PC ordinaire. Soyez sûr de connaître les méthodes de configuration de base si vous avez besoin de réparer les problèmes d'un système. Les interfaces graphiques des outils de configuration peuvent avoir l'air agréable et commode, mais sont parfois limitées surtout dans de telles situations.
Dans ce contexte, enregistrer les activités du shell est une bonne habitude, surtout si l'on est root.
Sous Emacs : utilisez M-x shell pour démarrer l'enregistrement dans le buffer, et utilisez C-x C-w pour écrire le contenu du buffer dans un fichier.
Sous le shell : utilisez la commande screen
avec « ^A
H » comme décrit à la section Changement de console
avec screen
, Section 8.6.28 ou la commande
script
.
$ script Script started, file is typescript .... faites ce que vous voulez ... Ctrl-D $ col -bx <typescript >savefile $ vi savefile
La méthode suivante peut être utilisée à la place de script
.
$ bash -i 2>&1 | tee typescript
Si vous avez besoin d'enregistrer l'image d'une application sous X, y compris
une fenêtre de xterm
, utilisez gimp
. Il peut
capturer une fenêtre isolée ou l'écran entier. Des alternatives existent comme
xwd
(paquet xbase-clients
), import
(imagemagick
), ou scrot
(scrot
).
En cas de réarrangement de la structure de fichiers, déplacez le contenu des dossiers y compris les liens par les commandes :
Méthode classique : # cp -a /source/directory /dest/directory # version GNU de cp # (cd /source/directory && tar cf - . ) | \ (cd /dest/directory && tar xvfp - ) S'il y a des liens durs, la méthode suivante est nécessaire : # cd /path/to/old/directory # find . -depth -print0 | afio -p -xv -0a /mount/point/of/new/directory Si le système de fichier est distant : # (cd /source/directory && tar cf - . ) | \ ssh user@host.dom (cd /dest/directory && tar xvfp - ) S'il n'y a pas de fichiers liés : # scp -pr user1@host1.dom:/source/directory \ user2@host2.dom:/dest/directory
Ici, scp
<==> rcp
et ssh
<==> rsh
.
La méthode de copie d'un sous-répertoire entier est basée sur l'information
fournie par Manoj Srivastava srivasta@debian.org
sur la liste
de diffusion debian-user@lists.debian.org.
cp
Traditionnellement, cp
n'était pas réellement utilisable puisqu'il
ne déréférence pas les liens symboliques, ni ne préserve les liens durs. Une
autre chose à considérer était les fichiers à faible densité (avec des trous).
La version GNU de cp
a dépassé ces limitations ; cependant,
sur un système non GNU, cp
peut toujours avoir ces problèmes. De
plus, on ne peut pas générer de petites archives portables avec
cp
.
% cp -a . newdir
tar
tar
a éliminé certains des problèmes que cp
avait
avec les liens symboliques. Cependant, bien que cpio
gère les
fichiers spéciaux, le tar
traditionnel ne les gère pas.
tar
gère de multiples liens durs en plaçant une copie du lien sur
la bande, mais le nom de cette copie est le seul que vous pouvez
utiliser pour récupérer le fichier ; cpio
met une copie pour
chaque lien, et vous pouvez le récupérer en utilisant n'importe lequel des
noms.
La commande tar
a changé l'option pour les fichiers
.bz2
entre Potato et Woody, donc utilisez --bzip2
dans des scripts au lieu de -I (Potato) ou -j
(Woody).
pax
C'est le nouvel utilitaire d'archivage portable, compatible POSIX (IEEE Std
1003.2-1992, pages 380-388 (section 4.48) et pages 936-940 (section E.4.48)),
"qui chante et danse". pax
lit, écrit, et liste les
fichiers d'une archive, et copie des hiérarchies de répertoires.
pax
travaille indépendament du format de l'archive et supporte un
grand nombre de formats d'archives.
Les implémentations de pax
sont récentes et encore chaudes.
# apt-get install pax $ pax -rw -p e . newdir ou $ find . -depth | pax -rw -p e newdir
cpio
cpio
stocke ou extrait les fichiers dans ou à partir d'une archive
cpio
ou tar
. L'archive peut être un autre fichier
sur le disque, une bande magnétique ou un tube.
$ find . -depth -print0 | cpio --null --sparse -pvd new-dir
afio
afio
permet de mieux gérer les archives au format
cpio
. Il est généralement plus rapide que cpio
,
fournit plus d'options pour les bandes magnétiques, gère mieux les erreurs de
données en entrée et supporte des archives multi-volume en utilisation
intéractive. afio
peut créer des archives compressées qui sont
plus sûres que les archives compressées de tar
ou
cpio
. afio
est utilisé au mieux en tant que machine
à archiver dans un script de sauvegarde.
$ find . -depth -print0 | afio -px -0a new-dir
Toutes mes sauvegardes sur bande sont faites avec afio
.
La sauvegarde différentielle et la synchronisation de données peuvent être implémentés par plusieurs méthodes :
rcs
: sauvegarde et historique, texte seulement
rdiff-backup
: sauvegarde et historique. liens symboliques
OK.
pdumpfs
: sauvegarde et historique à l'intérieur d'un système
de fichier. liens symboliques OK.
rsync
: synchronisation dans un seul sens
unison
: synchronisation dans deux sens
cvs
: synchronisation dans plusieurs sens avec sauvegarde et
historique sur un serveur, texte seulement, mûr. Voir Concurrent Versions System (CVS), Section 12.1.
arch
: synchronisation dans plusieurs sens avec sauvegarde et
historique sur un serveur, pas de « répertoire de travail ».
subversion
: synchronisation dans plusieurs sens avec
sauvegarde et historique sur un serveur, Apache.
La combinaison d'une des méthodes décrites dans la section Copier et archiver un sous-répertoire entier, Section
8.3 et le processus régulier automatisé décrit dans la section Programmer des activités (cron
,
at
), Section 8.6.27 permet de faire un bon système de
sauvegarde.
Je vais décrire trois outils faciles à utiliser.
rdiff-backup
offre une sauvegarde bonne et simple avec historique
différentiel pour n'importe quel type de fichiers y compris des liens
symboliques. Pour sauvegarder la plus grande partie de ~/
vers
/mnt/backup
:
$ rdiff-backup --include ~/tmp/keep --exclude ~/tmp ~/ /mnt/backup
Pour restaurer les données d'il y a trois jours de cette archive vers
~/old
:
$ rdiff-backup -r 3D /mnt/backup ~/old
Voir rdiff-backup(1)
.
pdumpfs
pdumpfs
est un système simple de sauvegarde quotidienne similaire
à dumpfs
du système Plan9, et qui garde chaque image quotidienne.
Vous pouvez accéder aux images antérieures n'importe quand pour récupérer un
fichier d'un certain jour. Sauvegardons votre répertoire personnel avec
pdumpfs
et cron
!
pdumpfs
construit une image AAAA/MM/JJ dans le
répertoire destination. Tous les fichiers source sont copiés vers le
répertoire de l'image la première fois que pdumpfs
est exécuté. A
partir de la deuxième fois, pdumpfs
copie seulement les ficheirs
modifiés ou créés et stocke les fichiers inchangés avec des liens durs vers les
fichiers du jour précédent, pour économiser de l'espace disque.
$ pdumpfs src-dir dest-dir [dest-basename]
Voir pdumpfs(8)
.
changetrack
enregistre les changements des fichiers texte de
configuration dans des archives RCS régulièrement. Voir
changetrack(1)
.
# apt-get install changetrack # vi changetrack.conf
Exécutez top
pour voir quel processus agit bizarrement. Appuyez
sur « P » pour trier par temps CPU utilisé, « M » pour
trier par mémoire utilisée, et « k » pour tuer un processus.
Autrement, ps aux | less (style BSD) ou ps -efH |
less (style System V) peut être utilisé. La syntaxe System V affiche le
numéro de processus parent PPID qui peut être utilisé pour tuer
des processus zombie (defunct).
Utilisez kill
pour tuer (ou envoyer un signal à) un processus à
partir de son numéro de processus, ou killall
pour faire la même
chose à partir du nom de la commande du processus. Signaux fréquemment
utilisés :
1 : HUP, redémarre un démon 15 : TERM, termine un process normalement 9 : KILL, tue un process
L'option de compilation du noyau "Magic SysRq key" donne une assurance contre un mauvais fonctionnement du système. Appuyer sur Alt-SysRq sur un i386, suivi par une des touches r 0 k e i s u b, agit magiquement.
Un`R'aw récupère le clavier en cas de plantage de logiciels comme X. Mettre le
niveau de log de la console à `0' réduit le nombre de messages d'erreur. sa`K'
(touche d'attention système, NdT : system attention key en Anglais) tue
tous les processus de la console vituelle courante. t`E'rminate tue tous les
processus du terminal courant excepté init
. k`I'll tue tous les
processus excepté init
.
`S'ync, `U'mount, et re`B'oot permettent de se sortir de très mauvaises situations.
Les noyaux de l'installation par défaut de Debian ne sont pas compilés avec
cette option au moment où ce document est écrit. Recompilez le noyau pour
activer cette fonction. Des informations détaillées se trouvent dans
/usr/share/doc/kernel-doc-version/Documentation/sysrq.txt.gz
ou /usr/src/kernel-version/Documentation/sysrq.txt.gz
.
less
est le pager (visualisateur de contenu des
fichiers). Appuyez sur `h' pour de l'aide. Il peut faire beaucoup plus que
more
. less
peut être amélioré en exécutant
eval $(lesspipe) ou eval $(lessfile) dans les scripts
de démarrage du shell. Plus d'information dans
/usr/share/doc/lessf/LESSOPEN
. L'option -R permet
l'affichage de caractères bruts et active les séquences d'échappement couleur
ANSI. Voir less(1)
.
w3m
peut être une bonne solution de rechange pour les systèmes de
code (EUC).
free
et top
donnent de bonnes informations sur les
ressources mémoire. Ne vous inquiétez pas de la taille de "used" sur
la ligne "Mem:", lisez plutôt la ligne en-dessous (38792 dans
l'exemple ci-dessous).
$ free -k # for 256MB machine total used free shared buffers cached Mem: 257136 230456 26680 45736 116136 75528 -/+ buffers/cache: 38792 218344 Swap: 264996 0 264996
La quantité exacte de mémoire physique peut être confirmée par grep '^Memory' /var/log/dmesg, qui dans notre cas d'exemple donne « Memory: 256984k/262144k available (1652k kernel code, 412k reserved, 2944k data, 152k init) ».
Total = 262144k = 256M (1k=1024, 1M=1024k) Free to dmesg = 256984k = Total - kernel - reserved - data - init Free to shell = 257136k = Total - kernel - reserved - data
Environ 5Mo ne sont pas utilisables par le système parce que le noyau les utilise.
# date MMJJhhmmAAAA # hwclock --utc --systohc # hwclock --show
Cela va régler l'heure du système et du matériel à JJ/MM hh:mm, AAAA. L'heure est affichée selon le fuseau horaire local, mais le matériel utilise UTC.
Si l'heure matérielle (BIOS) est réglée en GMT, changez le réglage pour
UTC=yes dans le fichier /etc/default/rcS
.
Référence : Managing
Accurate Date and Time HOWTO
.
Régler l'horloge système automatiquement via un serveur distant :
# ntpdate server
Il est bon d'avoir cette commande dans /etc/cron.daily
si votre
système possède une connexion permanente à Internet.
Utilisez le paquet chrony
.
Pour désactiver l'écran de veille, utilisez les commandes suivantes.
En mode console :
# setterm -powersave off
Démarrez la console kon2 (kanji) avec :
# kon -SaveTime 0
Sous X :
# xset s off ou # xset -dpms ou # xscreensaver-command -prefs
Lisez les pages de manuel correspondantes pour contrôler d'autres possibilités
de la console. Voir aussi stty(1)
pour changer et afficher la
configuration du terminal.
La Glibc offre getent(1)
pour chercher dans les entrées des bases
de données administratives, càd., passwd, group, hosts, services, protocols, ou
networks.
getent database [key ...]
On peut toujours débrancher le haut-parleur PC ;-) Pour le shell Bash :
echo "set bell-style none">> ~/.inputrc
Afin de ne pas avoir de messages d'erreur sur l'écran, le premier endroit à
regarder est /etc/init.d/klogd
. Réglez KLOGD="-c
3" dans ce script et lancez /etc/init.d/klogd
restart. Une autre méthode est de lancer dmesg
-n3.
Voici la signification des niveaux d'erreur :
Si un message d'erreur particuler vous embête, pensez à faire une rustine
facile pour le noyau comme shutup-abit-bp6
(disponible dans le
sous-répertoire des exemples
).
Un autre endroit à regarder peut être le fichier
/etc/syslog.conf
; vérifiez si les messages d'erreurs ne sont
pas envoyés vers une console.
Les consoles sur les systèmes Unix sont habituellement accédées par des
fonctions de la bibliothèque (n)curses. Cela donne à l'utilisateur une méthode
indépendante du terminal pour mettre à jour les caractères sur l'écran avec une
optimisation raisonnable. Voir ncurses(3X)
et
terminfo(5)
.
Sur un système Debian, il existe beaucoup d'entrées prédéfinies :
$ toe | less # toutes les entrées $ toe /etc/terminfo/ | less # entrées reconfigurables
Exportez votre sélection dans une variable d'environnement TERM.
Si l'entrée terminfo pour xterm
ne marche pas avec un
xterm
non Debian, changez le type de terminal de
« xterm » à l'une des versions limitée en options comme
« xterm-r6 » lorsque vous vous connectez à un système Debian à
distance. Voir /usr/share/doc/libncurses5/FAQ
pour plus
d'information. « dumb » est le plus petit dénominateur commun pour
terminfo.
Lorsque l'écran devient illisible après $ cat fichierbinaire (il se peut que vous ne voyiez pas la commande en tapant) :
$ reset
Pour convertir un fichier texte DOS (fin de ligne ^M^J) en fichier texte Unix (^J) :
# apt-get install sysutils $ dos2unix dosfile
recode
Ce qui suit convertit les fichiers entre les caractères de fin de ligne DOS, Mac et Unix :
$ recode /cl../cr <dos.txt >mac.txt $ recode /cr.. <mac.txt >unix.txt $ recode ../cl <unix.txt >dos.txt
recode
convertir aussi les fichiers entre les différents jeux de
caractères et surfaces :
$ recode charset1/surface1..charset2/surface2 \ <input.txt >output.txt
Les jeux de caractères les plus courants sont (voir aussi Introduction aux locales, Section 9.7.3) [4] :
Les surfaces les plus courantes sont [5] :
Pour plus de détails, voir la description de info recode.
Il existe aussi des outils de conversion plus spécialisés :
iconv
— conversions de codages de locales
konwert
— conversions de codages variés
uuencode
et uudecode
— pour Unix
mimencode
— pour le courriel
Pour remplacer toutes les occurences de FROM_REGEX par TO_REGEX dans tous les fichiers FILES ... :
$ perl -i -p -e 's/FROM_REGEX/TO_REGEX/g;' FILES ...
-i est pour « édition sur place », -p est pour « boucle implicite sur FILES ... ». Si la substitution est complexe, vous pouvez faciliter le retour sur des erreurs en utilisant le paramètre -i.bak au lieu de -i ; cela permet de garder les fichiers originaux en leur ajoutant le suffixe .bak.
Le script suivant supprime les lignes 5 à 10 et 16 à 20.
#!/bin/bash ed $1 <<EOF 16,20d 5,10d w q EOF
Les commandes de ed
sont les mêmes que celles de vi
en mode commande. L'édition de fichiers de cette façon rend facile la création
de scripts.
Suivez l'une de ces procédures pour extraire les différences par rapport au fichier source et créer des fichiers diff unifiés file.patch0 ou file.patch1 selon l'emplacement du fichier :
$ diff -u file.old file.new1 > file.patch0 $ diff -u old/file new1/file > file.patch1
Le fichier diff (aussi appelé rustine ou patch) est utilisé pour envoyer des mises à jour du programme. Celui qui le reçoit peut appliquer cette mise à jour à un autre fichier file avec :
$ patch -p0 file < file.patch0 $ patch -p1 file < file.patch1
Si vous avez trois versions d'un code source, vous pouvez les mélanger plus
efficacement avec diff3
:
$ diff3 -m file.mine file.old file.yours > file
$ split -b 650m file # sépare file en morceaux de 650Mo $ cat x* >largefile # assemble les fichiers en 1 gros fichier
Considérons un fichier texte DPL
dans lequel tous les responsables
précédents du projet Debian (DPL, Debian Project Leader) et leur date
d'investiture sont listés séparés par des espaces dans un tableau.
Ian Murdock August 1993 Bruce Perens April 1996 Ian Jackson January 1998 Wichert Akkerman January 1999 Ben Collins April 2001 Bdale Garbee April 2002 Martin Michlmayr March 2003
AWK est fréquemment utilisé pour extraire des données à partir de ce type de tableaux.
$ awk '{ print $3 }' <DPL # mois d'investiture August April January January April April March $ awk '($1=="Ian") { print }' <DPL # DPL appelé Ian Ian Murdock August 1993 Ian Jackson January 1998 $ awk '($2=="Perens") { print $3,$4 }' <DPL # quand Perens a été investi April 1996
Des shells comme Bash peuvent aussi être utilisés pour ce genre de fichiers :
$ while read first last month year; do echo $month done <DPL ... même sortie que le premier exemple Awk
Ici, la commande de Bash read
utilise les caractères de $IFS
(internal field separators, séparateurs de champs internes) pour séparer les
lignes en mots.
Si vous changez $IFS à ":", vous pouvez traiter le fichier
/etc/passwd
avec le shell :
$ oldIFS="$IFS" # garde l'ancienne valeur $ IFS=":" $ while read user password uid gid rest_of_line; do if [ "$user" = "osamu" ]; then echo "$user's ID is $uid" fi done < /etc/passwd osamu's ID is 1001 $ IFS="$oldIFS" # remet l'ancienne valeur
(Si Awk est utilisé pour faire cela, utilisez FS=":" pour régler le séparateur de champs.)
IFS est aussi utilisé par le shell pour séparer les résultats de l'expansion de paramètres, de la substitution de commande, et l'expansion arithmétique. Celles-ci ne sont pas effectuées à l'intérieur de guillemets simples ou doubles. La valeur par défaut de IFS est <space>, <tab> et <newline>.
Faites attention en utilisant IFS. Des choses étranges peuvent survenir, lorsque le shell interprète certaines parties du script comme entrée.
$ IFS=":," # utilise ":" et "," come IFS $ echo IFS=$IFS, IFS="$IFS" # echo est une commande Bash IFS= , IFS=:, $ date -R # une simple sortie de commande Sat, 23 Aug 2003 08:30:15 +0200 $ echo $(date -R) # sous-shell --> entrée vers le shell principal Sat 23 Aug 2003 08 30 36 +0200 $ unset IFS # restaure la valeur par défaut $ echo $(date -R) Sat, 23 Aug 2003 08:30:50 +0200
Les scripts suivants font des choses sympa avec les tubes.
find /usr | egrep -v "/usr/var|/usr/tmp|/usr/local" # trouve tous les fichiers de /usr sauf certains xargs -n 1 command # exécute command avec tous les arguments de stdin xargs -n 1 echo | # place chaque argument séparé par des espaces sur une ligne xargs echo | # fusionne toutes les lignes en une seule grep -e pattern| # extrait les lignes contenant pattern cut -d: -f3 -| # extrait le 3e champ séparé par : (fichier passwd, etc.) awk '{ print $3 }' | # extrait le 3e champ séparé par des espaces awk -F'\t' '{ print $3 }' | # extrait le 3e champ séparé par des tabulations col -bx | # supprime les retour-arrières et transforme les tabulations en espaces expand -| # transforme les tabulations sort -u| # trie et supprime les doublons tr '\n' ' '| # concatène les lignes en une seule tr '\r' ''| # supprime CR tr 'A-Z' 'a-z'| # convertit les majuscules en minuscules sed 's/^/# /'| # change chaque ligne en commentaire sed 's/\.ext//g'| # supprime .ext sed -n -e 2p| # affiche la 2e ligne head -n 2 -| # affiche les 2 premières lignes tail -n 2 -| # affiche les 2 dernières lignes
Les façons suivantes de boucler sur chaque fichier correspondant à *.ext assure une gestion correcte des noms de fichiers atypiques comme ceux ayant des espaces et effectuent la même chose :
for x in *.ext; do if test -f "$x"; then command "$x" fi done
find
et xargs
:
find . -type f -maxdepth 1 -name '*.ext' -print0 | \ xargs -0 -n 1 command
find
avec l'option -exec et une commande :
find . -type f -maxdepth 1 -name '*.ext' \ -exec command '{}' \;
find
avec l'option -exec et un script shell :
find . -type f -maxdepth 1 -name '*.ext' \ -exec sh -c "command '{}' && echo 'successful'" \;
Tous les scripts Awk peuvent être réécrits avec Perl. Par exemple :
awk '($2=="1957") { print $3 }'|
peut être remplacé par l'une des lignes suivantes au choix :
perl -ne '@f=split; if ($f[1] eq "1957") { print "$f[2]\n"}' | perl -ne 'if ((@f=split)[1] eq "1957") { print "$f[2]\n"}' | perl -ne '@f=split; print $f[2] if ( $f[1]==1957 )' | perl -lane 'print $F[2] if $F[1] eq "1957"' |
On peut enlever tous les espaces dans les arguments de perl
dans
la ligne précédente et prendre avantage de la conversion automatique entre les
nombres et les chaînes de caractères en Perl :
perl -lane 'print$F[2]if$F[1]eq+1957' |
Voir perlrun(1)
pour les options de la ligne de commande. Pour
des scripts Perl plus fous, le site http://perlgolf.sourceforge.net
peut être intéressant.
Les commandes suivantes récupèrent une page web dans un fichier texte. Très utile pour copier des configurations depuis le Web.
$ lynx -dump http://www.remote-site.com/help-info.html >textf ile
links
et w3m
peuvent aussi être utilisés, avec de
légères différences dans le rendu.
S'il s'agit d'une archive de liste de diffusion, utilisez munpack
pour obtenir les contenus MIME à partir du texte.
Les commandes suivantes vont lire une page web et l'imprimer sur une imprimante/dans un fichier PostScript.
$ apt-get install html2ps $ html2ps URL | lpr
Voir lpr
/lpd
,
Section 3.6.1. Regardez aussi a2ps
et mpage
pour
créer des fichiers PostScript.
Les commandes suivantes impriment une page de manuel sur une imprimante/un fichier PostScript.
$ man -Tps some-man-page | lpr $ man -Tps some-man-page | mpage -2 | lpr
Vous pouvez joindre deux fichiers PostScript ou PDF.
$ gs -q -dNOPAUSE -dBATCH -sDEVICE=pswrite \ -sOutputFile=bla.ps -f foo1.ps foo2.ps $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \ -sOutputFile=bla.pdf -f foo1.pdf foo2.pdf
Affiche le temps pris par un processus.
# time commande >/dev/null real 0m0.035s # durée sur l'horloge (temps réel écoulé) user 0m0.000s # durée en mode utilisateur sys 0m0.020s # durée en mode noyau
nice
Utilisez nice
(du paquet GNU shellutils
) pour régler
la « gentillesse » (valeur nice) d'une commande lors de son
exécution. renice
(paquet bsdutils
) ou
top
peuvent changer la valeur nice d'un processus. Le
processus le plus lent (priorité la plus basse) aura une valeur de 19 ;
les valeurs négatives sont not-nice (NdT : litt. pas gentilles),
une valeur de -20 étant donnée au processus le plus rapide (priorité la plus
haute). Seul le superutilisateur peut donner des valeurs nice
négatives.
# nice -19 top # très gentil # nice --20 cdrecord -v -eject speed=2 dev=0,0 disk.img # très rapide
Parfois, une valeur extrême de nice fait plus de mal que de bien au système. Utilisez cette commande en faisant attention.
cron
, at
)
Utilisez cron
et at
pour programmer des tâches sous
Linux. Consultez at(1)
, crontab(5)
,
crontab(8)
.
Exécutez la commande crontab -e pour créer ou éditer un fichier crontab pour programmer des événements régulièrement. Exemple de fichier crontab :
# utilise /bin/sh pour exécuter les commandes, quoi que dise /etc/passwd SHELL=/bin/sh # envoie un courrier électronique à Paul contenant tous les résultats, # quelle que soit la personne à qui appartienne la crontab MAILTO=paul # Minute Heure JourDuMois Mois JourDeLaSemaine commande # est exécuté à 00:05 chaque jour 5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1 # est exécuté à 14:15 le 1e de chaque mois -- le résultat est envoyé à Paul # par courrier électronique 15 14 1 * * $HOME/bin/monthly # est exécuté à 22:00 chaque jour de la semaine(1-5), ennuie Joe. # % pour une nouvelle ligne, dernier % pour cc: 0 22 * * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%.%% 23 */2 1 2 * echo "run 23 minutes after 0am, 2am, 4am ..., on Feb 1" 5 4 * * sun echo "run at 04:05 every sunday" # est exécuté à 03:40 le premier lundi de chaque mois 40 3 1-7 * * [ "$(date +%a)" == "Mon" ] && command -args
Exécutez la commande at
pour programmer une tâche unique :
$ echo 'command -args'| at 3:40 monday
screen
Le programme screen
permet d'exécuter plusieurs terminaux virtuels
avec un shell intéractif sur chacun, sur un unique terminal physique ou
émulateur de terminal. Même si vous utilisez les consoles virtuelles de Linux
ou plusieurs fenêtres xterm
, explorer screen
vaut le
coup, de par son nombre de possibilités, qui incluent
screen
du
terminal pour la réattacher plus tard.
Si vous vous connectez fréquemment sur une machine Linux depuis un terminal
distant ou en utilisant un terminal VT100, screen
vous facilitera
la vie avec la possibilité de détacher une session.
screen
complexe avec des éditeurs et des
programmes ouverts dans plusieurs fenêtres.
screen
détache la session et déconnecte lui-même.)
screen
va automatiquement réattacher toutes les
fenêtres que vous aviez ouvertes.
screen
Une fois que screen
est démarré, toutes les entrées au clavier
sont envoyées à la fenêtre excepté la combinaison de touches de commande, par
défaut ^A. Toutes les commandes screen
sont entrées
en tapant ^A et une touche unique [ainsi que des paramètres].
Commandes utiles :
^A ? affiche un écran d'aide (affiche les combinaisons de touches) ^A c crée une nouvelle fenêtre et l'affiche ^A n va à la fenêtre suivante ^A p va à la fenêtre précédente ^A 0 va à la fenêtre numéro 0 ^A w affiche la liste des fenêtres ^A a envoie Ctrl-A à la fenêtre courante ^A h enregistre une copie de la fenêtre courante dans un fichier ^A H commence/termine l'enregistrement de la fenêtre courante dans un fichier ^A ^X verrouille le terminal (protection par mot de passe) ^A d détache la session screen du terminal ^A DD détache la session screen du terminal et déconnecte
Ceci est seulement un petit aperçu des possibilités de screen
.
S'il y a quelquechose que vous souhaiteriez que screen
fasse pour
vous, il y a des chances qu'il puisse ! Consultez screen(1)
pour
plus de détails.
screen
Si la touche backspace et/ou Ctrl-H ne marchent plus correctement lorsque vous
exécutez screen
, éditez /etc/screenrc
, trouvez la
ligne
bindkey -k kb stuff "\177"
et commentez-la (càd, ajoutez « # » devant).
screen
pour X
Consultez xmove
. Voir xmove(1)
.
Installez les paquets netkit-ping
, traceroute
,
dnsutils
, ipchains
(noyau 2.2) iptables
(noyau 2.4), et net-tools
, puis :
$ ping yahoo.com # teste la connexion Internet $ traceroute yahoo.com # trace les paquets IP $ ifconfig # affiche la configuration de la machine $ route -n # affiche la configuration de routage $ dig [@dns-server.com] host.dom [{a|mx|any}] |less # affiche les enregistrements DNS de host.dom # sur dns-server.com pour un enregistrement {a|mx|any} $ ichains -L -n |less # affiche le filtre de paquets (noyau 2.2) $ iptables -L -n |less # affiche le filtre de paquets (noyau 2.4) $ netstat -a # recherche tous les ports ouverts $ netstat -l --inet # recherche tous les ports en écoute $ netstat -ln --tcp # recherche tous les ports tcp en écoute (affichage numérique)
Pour vider la file locale des courriers électroniques présents :
# exim -q # vide les courriers électroniques en attente # exim -qf # vide tous les courriers électroniques # exim -qff # vide même les courriers électroniques gelés
-qff est peut-être une meilleure option pour le script
/etc/ppp/ip-up.d/exim
. Pour Sarge, remplacez exim
par exim4
.
Pour supprimer les courriers électroniques gelés de la file locale en renvoyant un message d'erreur :
# exim -Mg `mailq | grep frozen | awk '{ print $3 }'`
Pour Sarge, remplacez exim
par exim4
.
mbox
Vous devez redélivrer manuellement les courriels dans vos boîtes triées de
votre répertoire personnel depuis le fichier
/var/mail/username
si votre répertoire personnel est
devenu plein ou si procmail
a planté. Après avoir fait de
l'espace dans le répertoire personnel, lancez :
# /etc/init.d/exim stop # formail -s procmail </var/mail/username # /etc/init.d/exim start
Pour Sarge, remplacez exim
par exim4
.
Pour supprimer le contenu d'un fichier, par exemple un fichier de journal, n'utilisez pas rm pour effacer le fichier et créer ensuite un fichier vide, parce que le fichier peut toujours être accédé entre les commandes. Ce qui suit est une façon sûre de supprimer le contenu d'un fichier.
$ :>file-to-be-cleared
Les commandes suivantes créent des fichiers fantômes ou vides.
$ dd if=/dev/zero of=filename bs=1k count=5 # 5Ko sans contenu $ dd if=/dev/urandom of=filename bs=1m count=7 # 7Mo de contenu aléatoire $ touch filename # crée un fichier de taille 0 (si le fichier existe, met à jour mtime)
Par exemple, les commandes suivantes exécutées depuis le shell de la disquette
de dméarrage Debian efface tout le contenu du disque dur /dev/hda
.
# dd if=/dev/urandom of=/dev/hda ; dd if=/dev/zero of=/dev/hda
chroot
Le programme chroot
, chroot(8)
, nous permet de lancer
plusieurs environnements GNU/Linux simultanément sur un seul système sans
redémarrer.
On peut aussi lancer un programme demandant des ressources comme
apt-get
ou dselect
dans le chroot d'une machine
rapide. On monte alors par NFS le système de fichiers d'une machine auxiliaire
lente sur la machine rapide, en lecture/écriture, le point de montage étant le
répertoire chroot.
chroot
Un environnment chroot Debian peut aisément être créé par la commande
debootstrap
de Woody. Par exemple, pour créer un chroot Sid sur
/sid-root avec une connexion Internet rapide :
main # cd / ; mkdir /sid-root main # debootstrap sid /sid-root http://ftp.debian.org/debian/ ... regardez le système se télécharger main # echo "proc-sid /sid-root/proc proc none 0 0" >> /etc/fstab main # mount proc-sid /sid-root/proc -t proc main # cp /etc/hosts /sid-root/etc/hosts main # chroot /sid-root /bin/bash chroot # apt-setup # set-up /etc/apt/sources.list chroot # vi /etc/apt/sources.list # mettre la source sur unstable chroot # dselect # ou aptitude, installez mc et vim :-)
A ce point, vous devriez avoir un système Debian complètement fonctionnel, avec lequel vous pouvez jouer sans avoir peur de toucher votre installation Debian principale.
Cette astuce avec debootstrap
peut aussi être utilisée pour
installer Debian sur un système dans utiliser le disque d'installation Debian
mais celui d'une autre distribution GNU/Linux. Voir http://www.debian.org/releases/stable/i386/ch-preparing#s-linux-upgrade
.
chroot
Taper chroot /sid-root /bin/bash est facile, mais cela garde toutes les variables d'environnement, ce que vous pouvez ne pas vouloir, et apporte d'autres problèmes. Une meilleure approche est d'exécuter un autre processus login sur un terminal virtuel différent où vous pouvez vous connecter au chroot directement.
Puisque, sur les systèmes Debian par défaut, les consoles Linux sont de
tty1 à tty6 et X Window System sur tty7,
configurons une console chroot sur tty8. Après avoir créé un
système chroot comme décrit dans Exécuter plusieurs
versions de Debian avec chroot
, Section 8.6.35.1, exécutez ce
qui suit en root sur le système principal :
main # echo "8:23:respawn:/usr/sbin/chroot /sid-root "\ "/sbin/getty 38400 tty8" >> /etc/inittab main # init q # reload init
chroot
Vous voulez exécuter les dernières version de X et GNOME en toute sécurité dans votre chroot ? C'est possible ! L'exemple suivant permet d'exécuter GDM sur le terminal virtuel vt9.
D'abord, installez un système chroot comme décrit dans Exécuter plusieurs versions de Debian avec
chroot
, Section 8.6.35.1. Avec le root du système principal,
copiez les fichiers de configration importants vers le système chroot.
main # cp /etc/X11/XF86Config-4 /sid-root/etc/X11/XF86Config-4 main # chroot /sid-root # ou utilisez la console chroot chroot # apt-get install gdm gnome x-window-system chroot # vi /etc/gdm/gdm.conf # faites s/vt7/vt9 dans la section [servers] chroot # /etc/init.d/gdm start
Ici, /etc/gdm/gdm.conf
a été édité pour que la console virtuelle
de lancement soit vt9 au lieu de vt7.
Maintenant vous pouvez facilement passer de l'environnement X du chroot à celui du système principal simplement en changeant de terminal virtuel, par exemple en utilisant Ctrl-Alt-F7 et Ctrl-Alt-F9. Amusez-vous bien !
[FIXME] Ajouter un commentaire et un lien vers le script gdm
du
chroot.
chroot
Un environnement chroot avec une autre distribution peut facilement être créé.
Vous installez un système sur une partition séparée en utilisant son
installateur. Si sa partition racine est
/dev/hda9
:
main # cd / ; mkdir /other-dist main # mount -t ext3 /dev/hda9 /other-dist main # chroot /other-dist /bin/bash
La suite est similaire à Exécuter plusieurs versions
de Debian avec chroot
, Section 8.6.35.1, Configurer login pour chroot
, Section
8.6.35.2, et Configurer X pour chroot
,
Section 8.6.35.3.
chroot
Il existe un paquet chroot plus spécialisé, pbuilder
, qui
construit un système chroot et compile un paquet dans le chroot. C'est un
système idéal pour vérifier que les dépendances de compilation d'un paquet sont
correctes, et pour être sûr que des dépendances non nécessaires ou fausses
n'existent dans le paquet résultant.
Vous pouvez vérifier si deux fichiers sont le même avec deux liens durs avec :
$ ls -li file1 file2
Si file.img
contient l'image d'un disque dur et que le
disque dur original avait une configuration xxxx = (octets/secteur)
* (secteurs/cylindres), les commandes suivantes vont le monter sur
/mnt
:
# mount -o loop,offset=xxxx file.img /mnt
Notez que la plupart des disques durs ont 512 octets/secteur.
Bases pour récupérer des fichiers depuis Windows :
# mount -t smbfs -o username=myname,uid=my_uid,gid=my_gid \ //server/share /mnt/smb # monte un répertoire Windows sous Linux # smbmount //server/share /mnt/smb \ -o "username=myname,uid=my_uid,gid=my_gid" # smbclient -L 192.168.1.2 # list the shares on a computer
Les voisins de Samba peuvent être trouvés depuis Linux :
# smbclient -N -L ip_address_of_your_PC | less # nmblookup -T "*"
Un grand nombre de systèmes de fichiers est supporté par le noyau Linux, et peuvent être utilisés simplement en montant les périphériques les contenant. Pour certains systèmes de fichiers, il existe aussi des outils spécifiques permettant de les utiliser sans les monter. Ces opérations sont accomplies par des programmes en espace utilisateur, et donc le support du système de fichiers par le noyau n'est pas nécessaire.
mtools
: pour le système de fichiers MSDOS (MS-DOS, Windows)
cpmtools
: pour le système de fichiers CP-M
hfsutils
: pour le système de fichiers HFS (anciens
Macintosh)
hfsplus
: pour le système de fichiers HFS+ (Macintosh
modernes)
Pour créer et vérifier un système de fichiers FAT MSDOS, le paquet
dosfstools
est utile.
Voici quelques exemples d'actions dangereuses. Les aspects négatifs seront amplifiés si vous utilisez le compte root.
Dans rm -rf .*, ".*" est remplacé et contient "." and "..", ce qui, si vous en avez les privilèges, supprime aussi tous les répertoires à côté du répertoire courant.
La perte de fichiers importants comme /etc/passwd
par stupidité
est dur. Le système Debian en effectue des sauvegardes régulières dans
/var/backups/
. Lorsque vous restaurez ces fichiers, vous devez
manuellement configurer les permissions.
# cp /var/backups/passwd /etc/passwd # chmod 644 /etc/passwd
Voir aussi Récupérer les données de sélection des paquets, Section 6.3.4.
Guide de référence pour Debian
CVS, lun 03 avr 2005 22:57:18 UTCosamu@debian.org
gerbs@free.fr