Trucs et astuces Linux

Rubriques

Note

Linux possède plusieurs centaines d'utilitaires en ligne de commande, et peu nombreux sont ceux qui peuvent se targuer de les connaître toutes. Cet ensemble de notes me sert principalement d'aide-mémoire. De nombreuses rubriques ont été trouvées sur le web.

[28/10/06] Ce document a été initialement rédigé lorsque je travaillais exclusivement sous un environnement linux (Debian) ; il inclut à présent quelques notes relativesà une utilisation sous Mac OS X, avec les briques de bases BSD qui le constituent. Ces notes sont toujours édité avec Emacs, dans sa version pré-compilée et personnalisée pour Mac OS X : Aquamacs.

Segmentation d'un gros fichier

On peut découper un gros fichier en un ensemble de petits fichiers, aisément transportables sur un support amovible de faible capacité (e.g. disquette) ou en pièces jointes par e-mail, grâce à la commande split:

split -b10m -d foriginal part

qui donne un ensemble de fichier numérotés et préfixés par part, de taille 10 Mo, à partir du gros fichier de départ foriginal.

On peut les réassembler à l'aide de la commande

cat part01 part02 part03 > fentier

ou plus généralement,

cat chunk0* > fentier

Gestion des fichiers audio/vidéo

Pour extraire la piste audio d'un fichier avi, on peut utiliser mplayer comme suit:

mplayer -ao pcm -aofile outputfile.wav mymovie.avi

On peut ensuite utiliser l'utilitaire oggenc pour exporter le fichier wav produit au format Ogg Vorbis. Si l'on veut exporter le fichier au format mp3, on pourra utiliser lame.

Lorsque l'on souhaite, au contraire, graver des fichiers mp3 pour les écouter sur une chaîne hi-fi, il est nécessaire de les convertir préalablement. Pour cela, on pourra regrouper tous les fichiers souhaités dans un répertoire, puis utiliser mpg123:

for i in *.mp3; do mpg123 -w `basename $i .mp3`.wav $i; done

On peut faire le même type de conversion mp3 -> wav avec lame:

for i in *.mp3; do lame --decode $i `basename $i .mp3`.wav; done

Notons qu'il est préférable que les fichiers ne contiennent ni espace, ni extension en majuscules (typique de l'environnement Windows :-). Dans ce cas, on peut remédier à cela à l'aide des commandes:

# conversion des espaces en '_' (underscore)
for i in *.mp3; do mv "$i" `echo $i | tr ' ' '_'`; done
# conversion en minuscules (toute la chaîne)
for i in *.[Mm][Pp]3; do mv "$i" `echo $i | tr '[A-Z]' '[a-z]'`; done

Il ne reste plus qu'à graver les fichiers avec cdrecord (cf. Gestion des CD).

Pour écouter de la musique, on a bien sûr à notre disposition tout un ensemble de logiciels, comme xmms ou amarok. Il existe également un utilitaire en ligne de commande, mpc (à ne pas confondre avec le format homonyme mpc basé sur mpeg2) reposant sur l'utilitaire mpd tournant en démon, que l'on peut télécharger librement à l'adresse suivante : http://www.musicpd.org/.

(Des)activation du touchpad

Pour désactiver (définitivement) la détection des appuis sur le touchpad, on peut éditer le fichier /etc/X11/xorg.conf et inclure l'option

"TouchpadOff" "2"

dans la section InputDevice.

info:/usr/share/doc/synaptics-0.14.1/README

Remplacement d'un mot dans un ensemble de fichiers

Pour remplacer les occurences de mot1 par mot2 dans un ensemble de fichiers, on peut utiliser sed:

for i in "*.html"; do sed -i -e "s/mot1/mot2/g" $i; done

ou perl

perl -pi.bak -e 's/\bmot1\b/mot2/g' *.html

Dans les deux cas, on utilise en fait une commande de remplacement de motif à l'aide de l'expression régulière : s/find/replace/g.

Notons que pour rechercher un mot dans un fichier, on peut utiliser la commande grep.

Utilisation de apropos

Avant d'utiliser la commande apropos (ou man -k), il est nécessaire de construire les références, en tapant (sous root)

/usr/sbin/makewhatis

apropos est utile quand on ne connaît pas le nom exact de la fonction que l'on souhaite utiliser ou pour laquelle on voudrait obtenir de l'aide (avec man par exemple) ; elle utilise en fait les descripteurs contenus dans chaque page de man.

Recherche de fichiers

La commande find permet de localiser des fichiers sur le disque.

find . -name 'filename'
find . -name '*.doc'
find ~ -daystart -type f -atime 1

Gestion du réseau

Pour configurer le réseau, on a besoin de connaître le nom de l'interface (généralement, eth0, eth1), l'adresse IP, le masque de sous-réseau et la passerelle d'accès.

ifconfig eth0 IP netmask MASK up
route add -net default gw GATEWAY netmask 0.0.0.0 eth0
hostname HOSTNAME
echo "domain DOMAIN" >/etc/resolv.conf
echo "nameserver DNS" >>/etc/resolv.conf

Si l'adressage IP est automatique (DHCP), un simple ifup eth0 (sous root) devrait suffire à activer le réseau.

Pour savoir quels sont les services réseaux en train de tourner sur la machine, on peut taper (sous root):

netstat -atup | grep LISTEN

Pour vérifier que le service portmap est lancé en mode init 3:

chkconfig --list | grep portmap

et pour l'enlever:

chkconfig --del portmap
infos:http://www.coagul.org/article_imprime.php3?id_article=129

Ligne de commande (bash, csh, etc.)

http://www.oreillynet.com/linux/cmd/ http://www.gnu.org/software/bash/manual/bashref.html

infos:http://loll.sourceforge.net/linux/links/

Gestion des CD

Pour graver un cd, on utilise la commande cdrecord:

mkisofs -o cd.iso -J -R /tmp/mycd
ls -l cd.iso
cdrecord -scanbus
cdrecord dev=x,y,z -multi speed=0 -data cd.iso (x,y,z donnés par scanbus)

et pour un CD audio:

cdrecord dev=x,y,z -pad speed=0 -audio *.wav (CD audio)

Pour monter une image iso, on utilise

mount -o loop -t iso9660 /chemin/vers/votreImage.iso /repertoire/de/destination/

Le module loop doit être préalablement chargé en mémoire à l'aide de la commande modprobe loop. Pour vérifier que celui-ci est bien chargé, un simple lsmod | grep -i loop devrait suffire.

infos:http://linuxfr.org/tips/index.html

Impression

Pour imprimer en ligne de commande:

lpr -P printername file.ps

La liste des imprimantes disponibles sur le système (via port parallèle, série ou usb) peut être obtenue grâce à

lpstat -p -d

et la gestion des tâches par

lpstat -a
lprm job-id

Si on utilise l'interface CUPS pour la gestion de l'impression, on peut accéder directement aux services sur son navigateur à l'adresse : http://localhost:631/

Date et heure

C'est la commande date qui permet d'afficher et de modifier l'heure. Notons qu'il existe deux types d'horloge :

C'est l'horloge physique qui est utilisée lors du démarrage pour initialiser l'horloge système, qui garde trace du temps écoulé jusqu'à l'arrêt du système.

Pour régler l'horloge système, un simple:

date 04262217

devrait suffire à mettre l'horloge à la date 26/04/2006, 22:17.

On vérifiera la bonne correspondance entre les deux horloges à l'aide des commandes date et /sbin/hwclock (sous root). En cas de discordance, l'idée est qu'on peut mettre à jour l'horloge physique à partir de l'horloge système grâce à la commande

hwclock --systohc
todo:il faut expliquer le principe UTC/GMT

Gestion des fichiers images avec ImageMagick

ImageMagick fournit un ensemble d'utilitaire permettant de manipuler les fichiers images, par exemple:

display file.gif
convert file1 file2
import file.png

Ces commandes acceptent de nombreuses options (taper le nom de la commande suivi de -help) ; par exemple, la commande import permet de faire une copie d'écran soit de la fenêtre cliente soit de l'ensemble du bureau à l'aide, respectivement, des options -frame et -window root. Notons que l'on peut égalemnt tirer partie des commandes de XWindow, avec xwd -root -out root.xwd (ou xwd -frame > image1.xwd).

Exemples

Les captures d'écran ci-dessous ont été réalisées sous Linux (avec gnome et ion3 comme gestionnaire de bureau/fenêtre), et sous Mac OS X.

capture d'écran (1)
capture d'écran (2)
capture d'écran (3)

On peut également modifier son fond d'écran à l'aide de la commande:

display -window root nom_du_fichier

en remplacement de la commande xpmroot (qui n'accepte que les formats xbm, xpm et png).

Pour convertir plusieurs fichiers d'un format (e.g. eps) à un autre, on peut utiliser la séquence suivante

for f in *.eps; do convert $f ${f/%.eps/.jpg}; done

On peut également utiliser les outils Netpbm, qui fournissent un certain nombres d'utilitaires pour manipuler et convertir les images. Par exemple, ppmlabel permet d'annoter une image existante, mais il faut que celle-ci soit préalablement convertie au format pnm. Voici un exemple d'ajout automatique du titre d'une image en haut à gauche de celle-ci :

for i in *.jpg
do
  CODE=`echo $i`
  jpegtopnm < $i \
    | ppmlabel -x 0 \
               -y 50 \
               -colour white \
               -size 30 \
               -background black \
               -text "$CODE" - \
    | pnmtojpeg > $i.new
done

Une autre solution (avec ImageMagick) peut être proposée, notamment dans le cas du watermarking. Dans ce cas, il faut utiliser deux couleurs afin que le texte ne disparaisse pas lorsque la couleur de fond est modifié. Par exemple:

convert sudoku.jpg  -font Arial -pointsize 20 \
         -draw "gravity southeast \
                fill black  text 10,24 'Copyright' \
                fill white  text 11,23 'Copyright' " \
         sudoku_wmark.jpg
image originale image modifiée
sudoku
sudoku wmark

Gestion des fichiers

Les principales commandes de gestion du système de fichiers et leur usage sont indiquées ci-dessous

ls *.pdf | wc
cp -a dir1 dir2
rm -r dir1
du -k | sort -rn

Ces commandes effectuent respectivement:

On peut comparer deux fichiers à l'aide de la commande diff

diff file1 file2

Pour créer un patch indiquant les changements entre la version 1 et la version 2

diff -aur version1 version2 >dir2.diff
patch -p1 <dir2.diff

On peut synchroniser des répertoires à l'aide de rsync ou unison

rsync -a dir1 dir2
rsync -a --delete dir1 dir2

Pour créer des liens symboliques, on utilise la commande ln

ln -s filename newname

Pour vérifier que les liens ne sont pas "morts"

symlinks -rd directory

La gestion d'archives se fait avec les commandes tar, accompagnée éventuellement de l'utilitaire de compression gzip

tar cf file.tar directory
gzip file

La compression d'un répertoire peut se faire comme suit

tar czf aga.tar.gz directory # compressing
tar tzf aga.tar.gz # listing
tar xf aga.tar directory # uncompressing

Pour la compression de type bz2, il faut utiliser par exemple

tar xvfj fichier.tbz2
infos:http://www.pallier.org/docs/

Connexion à distance avec ssh

Dans un premier temps, il faut créer une clé ssh

ssh-keygen -t rsa1 (local)

This generates, among other things, a public key (in a file .ssh/identity.pub) that you have to copy in the authorized_keys file in the .ssh directory of the remote computer.

put in .bash_profile: eval ssh-agent ssh-add < /dev/null

Gestionnaire d'amorçage (Lilo)

Si Lilo est le chargeur de démarrage, on peut paramétrer quelques options dans /etc/lilo.conf afin par exemple d'avoir un écran en 1280x1024 lorsque l'on souhaite se logger et utiliser la console dans lancer de terminal X. Les différents modes sont indiqués à l'aide de la commande vga=xxx, où xxx est une des valeurs suivantes :

640x480 vga=769
800x600 vga=771
1024x768 vga=773
1280x1024 vga=775
1600x1200 vga=796

On peut également passer l'option vga=ask afin que la question soit posée lors du démarrage.

Voici un extrait d'un fichier lilo.conf :

default="linux"
boot=/dev/hda
map=/boot/map
keytable=/boot/fr-latin1.klt
prompt
nowarn
timeout=100
message=/boot/message
menu-scheme=wb:bw:wb:bw
image=/boot/vmlinuz
        label="linux"
        root=/dev/hda1
        initrd=/boot/initrd.img
        append="resume=/dev/hda5 splash=silent"
        vga=775
        read-only

La table complète pour le mode VESA est indiquée ci-dessous :

Colors (depth)  640x480 800x600 1024x768 1280x1024 1600x1200
---------------+-------+-------+--------+---------+---------
256 ( 8 bit)   |  769     771     773      775       796
32,768 (15 bit)|  784     787     790      793       797
65,536 (16 bit)|  785     788     791      794       798
16.8M (24 bit) |  786     789     792      795       799

Gestionnaire de bureau

Pour définir le gestionnaire de bureau utilisé par défaut lors du lancement du serveur X, il faut éditer le fichier .xsession et y rajouter le script d'initialisation correspondant. Par exemple pour KDE, on met :

exec startkde

Les autres gestionnaires, s'ils sont disponibles sur le système, peuvent être invoqués comme suit :

startkde      (to run kde. on some systems, the command may be kde)
gnome-session (to run Gnome)
xfce          (to run XFce, my favourite "lightweight" desktop)
afterstep     (to run afterstep)
AnotherLevel  (to run AnotherLevel)
fvwm2         (to run fvwm2)
fvwm          (to run fvwm)

Pour démarrer le serveur X automatiquement lorsqu'on allume l'ordinateur, il faut passer en mode init 5 (le mode init 3 permet de démarrer en mode console, ensuite il faut faire startx & pour lancer le serveur X et l'écran de login). Pour cela, on édite le fichier /etc/inittab, et on remplace id:3:initdefault: par id:5:initdefault:.

Notons que sous Debian, la procédure est un peu différente, puisque le lancement d'un gestionnaire de bureau se fait grâce à gdm (par défaut). En fait, c'est gdm qui assure le lancement de xinit, et il est présent dans tous les niveaux de démarrage, contrairement aux systèmes RedHat/Mandrake.

Parmi les nombreux gestionnaires de bureau et de fenêtres disponibles sous linux, voici ceux que j'apprécie le plus :

note:WMII est conçu pour faciliter la navigation au clavier, et utilise des concepts un peu différents des gestionnaires classiques (Gnome, KDE, Blackbox, etc.). Les deux concepts essentiels sont sans doute la notion de (i) pages -- l'équivalent des bureaux de Gnome, KDE et autres -- dans lesquelles on peut naviguer grâce à la commande M-l après qu'elles aient été créées grâce à la commande A-y, et celle de (ii) cadres qui peuvent être disposés de différentes manières sur la page, notamment en mode 'tiled' ou 'layout'. Une option interéssante est la possibilité de placer plusieurs application dans un même cadre et de naviguer entre les applications à l'aide d'onglets (mode 'tabbed frames'). Pour cela, il suffit de sélectionner une fenêtre, par exemple un xterm, de taper M-u, puis de lancer une nouvelle application. Pour naviguer entre les applications, identifiées à l'aide d'onglets, on utilisera le raccourci M-S-Tab. Les principaux raccourcis sont donnés dans l'aide en ligne (M-C-a > welcome).

Gestion des mails en ligne de commande

Il nous faut :

et un lecteur de mail quelconque (mutt, emacs, etc.). Si sendmail n'est pas présent sur la machine, on peut utiliser un autre agent de transport de mail, comme postfix, et créer des liens du binaire sendmail sur le nouvel agent choisi. Sur ma machine, c'est le cas ; quand on regarde dans /usr/lib avec un ls -l send*, on a :

lrwxrwxrwx  1 root root 31 jui 24 16:28 sendmail -> /etc/alternatives/mta-in_libdir*
infos:

Pour convertir une boîte à mail au format maildir en un fichier mbox, on peut utiliser la séquence de commande suivante (sous bash) :

for mail in *; do
  cat $mail | formail >> ~/sent
done

Cela a pour effet de concaténer tous les fichiers présents dans le répertoire courant dans le fichier ~/sent, au format mbox (lisible sous emacs vm par exemple). Notez qu'on utilise l'utilitaire de formatage formail.

Gestion des paquetages sous Debian

Quelques options utiles pour la commande dpkg :

dpkg -i archive.deb : installation paquet debian
dpkg -s archive.deb : info sur une archive

dpkg -l : liste les paquets disponibles

dpkg --extract paquet.deb /répertoire/ : extraire un paquet deb


dpkg -P programme : suppression packetage debian
dpkg --force-overwrite -i nomdupaquet.deb

dpkg-deb --build paquet : générer un paquet debian

dpkg --get-selections > selections.txt : liste des paquets installés

apt-get install programme : installe un programme
apt-get remove --purge programme : supprime un programme
apt-cache search nom : cherche des infos dans les paquets disponible
apt-cache show paquet.deb : liste les infos sur un paquet.
infos:http://people.debian.org/~debacle/refcard/

Gestions des paquetages sous Mandrake

Mandrake inclut un gestionnaire de paquetages relativement pratique, urpmi, qui repose sur rpm, le gestionnaire de paquetage de Red Hat. Les principale commande sont les suivantes :

urpmi package_name
urpmi

On peut configurer les sources de paquetages que urpmi consulte (en plus par exemple des CD d'installation que l'on a utilisés la première fois). Pour cela, il faut utiliser la commande urpmi.addmedia, avec la syntaxe suivante :

urpmi.addmedia [options] [with ]

La commande urpme permet de désinstaller un paquetage Pour mettre à jour la base de données des paquetages, il suffit de taper urpmi.update.

infos:

Commandes vi

L'éditeur vi est fourni par défaut sur toutes les distributions linux et sur l'ensemble des systèmes UNIX. Il y a 3 modes de fonctionnement : - commande : les caractères entrés sont traités comme des commandes - insertion : les caractères sont traités comme du texte - "dernière ligne" : inviqué avec l'opérateur :

Les principaux raccourcis sont

:w   (sauvegarde)
:q   (quitter)
:q!  (quitter sans sauver)
:wq  (sauvegarder et quitter)

Commandes Emacs

emacs est également un éditeur pleine page, possédant de nombreuses extensions pour traiter pratiquement n'importe quel type de fichier et ajouter aux facilités d'interaction déjà disponibles. Il est disponible sous environnement X11, mais également en mode console avec la commande

emacs -nw

L'"inconvénient" de emacs est la nécessité de s'habituer aux raccourcis clavier. En voici une liste non-exhaustive qui permet d'effectuer la majorité des activités quotidiennes sous Emacs.:

Aide
----
\C-h t    (tuteur)
\C-h b    (liste des macros ou commandes clés)
\C-h k    (description d'une macro)
\C-h a    (apropos)
\C-h \C-h (aide de l'aide)
\M-x      (recherche de commande)

Sauvegarder et Quitter
----------------------
\C-x s    (sauvegarde tous les buffers)
\C-x \C-s (sauvegarde le buffer courant)
\C-x \C-w (écriture dans un fichier)
\C-x \C-c (sauvegarde puis sortie)

Navigation dans un fichier
--------------------------
\C-p \C-b \C-f \C-n (ligne par ligne ou caractère par caractère)
\C-v                (descend d'une page)
\M-v                (remonte d'une page)
\C-m                (retour chariot)

Gestion des fenêtres
--------------------
\C-x 2           (2 fenêtres horizontales)
\C-x 3           (2 fenêtres verticales)
\C-x 0 ou \C-x 1 (revient à 1 fenêtre)
\C-x o           (change de fenêtre)

Gestion des buffers
-------------------
\C-x \C-b (liste les buffers ou mémoires tampons)
\C-x b    (change de buffer ou mémoire tampon)

Divers
------
\C-_ ou \C-u (annule l'effet des commandes précédentes)
\C-a         (début de ligne)
\C-e         (fin de ligne)
\C-k         (efface la ligne)
\C-d         (efface un caractère)
erase        (efface le caractère précédant)
\C-g         (stoppe toutes commandes)
\C-@         (marque le début d'une région)
\C-espace    (marque la fin d'une région)
\C-w         (détruit une région)
\C-y         (copie)
\C-l         (va à la ligne)
\C-s ou \C-r (cherche en avant ou cherche en arrière)
\C-          (remplace)
\M %         (interroge et remplace)
\C-x (       (début d'une macro)
\C-x )       (fin d'une macro)
\C-x e       (rappelle la dernière macro)
\M-<         (début du fichier)
\M->         (fin du fichier)
\M-          (efface l'indentation)
\C-x i       (insére un fichier)
\C-x \C-f    (charge un fichier)
touche <tab> (indente)

Pour une utilisation de Emacs avec des fichiers LaTeX, on pourra consulter un tutoriel disponible à l'adresse suivante : http://www.pallier.org/ressources/emacs_latex/emacs_latex.html

Commandes en mode console

Il existe plusieurs raccourcis utiles lorsque l'on est sur un terminal, avec un shell bash par exemple :

Ctrl-C    (interrompre la tâche en cours)
Ctrl-s    (arrête le défilement à l'écran)
Ctrl-q    (relance le défilement à l'écran)
Ctrl-R    (recherche récursive)
Ctrl-Z    (suspendre une tâche interactive, i.e. en premier plan)

Les autres commandes dont on peut être amené à se servir dans une utilisation quotidienne d'un système Linux sont indiquées ci-dessous :

history n (liste les n dernières commandes, defaut=50)
date      (comme son nom l'indique)
who       (liste des utilisateurs, avec leur console et date de login)
ps        (liste des processus attachés au terminal)
ps aux    (liste de tous les processus tournant sur la machine)
mount     (liste les disques montés)
&         (met en arrière plan la tâche)
jobs      (liste l'ensemble des tâches avec leur n°)
kill x    (tue la tâche n° x)
%         (après un Ctrl-Z, réactive la tâche en premier plan)
bg % x    (réactive la tâche n° x)

On peut également spécifier l'exécution de plusieurs commandes de manière séquentielle :

commande1 ; commande 2

permet d'exécuter commande1, puis commande2 , quelque soit le résultat de commande1, tandis que

commande1 && commande 2

exécute commande2 ssi commande1 s'est bien terminée.

Expressions rationnelles