======================
Trucs et astuces Linux
======================
.. contents:: Rubriques
..
1 Segmentation d'un gros fichier
2 Gestion des fichiers audio/vidéo
3 (Des)activation du touchpad
4 Remplacement d'un mot dans un ensemble de fichiers
5 Utilisation de ``apropos``
6 Recherche de fichiers
7 Gestion du réseau
8 Ligne de commande (bash, csh, etc.)
9 Gestion des CD
10 Impression
11 Date et heure
12 Gestion des fichiers images avec ``ImageMagick``
13 Gestion des fichiers
14 Connexion à distance avec ssh
15 Gestionnaire d'amorçage (``Lilo``)
16 Gestionnaire de bureau
17 Gestion des mails en ligne de commande
18 Gestion des paquetages sous Debian
19 Gestions des paquetages sous Mandrake
20 Commandes vi
21 Commandes Emacs
22 Commandes en mode console
23 Expressions rationnelles
.. 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_.
.. _Emacs: http://www.emacs.org
.. _Aquamacs: http://aquamacs.org
.. _Docutils: http://docutils.sourceforge.net/
.. _reStructuredText: ./tips.txt
.. |date| date:: %d/%m/%Y
.. |time| date:: %H:%M
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 :
* l'horloge physique (`hardware` ou `bios clock`)
* l'horloge système (`system clock`)
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``).
.. topic:: 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.
.. image:: ./img/desktop1.png
:scale: 25
:align: center
:alt: capture d'écran (1)
:target: ./img/desktop1.png
.. image:: ./img/float.png
:scale: 25
:align: center
:alt: capture d'écran (2)
:target: ./img/float.png
.. image:: ./img/desktop2.png
:scale: 25
:align: center
:alt: capture d'écran (3)
:target: ./img/desktop2.png
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 |
+=============================+===================================+
| .. image:: ./img/sudoku.jpg | .. image:: ./img/sudoku_wmark.jpg |
| :scale: 50 | :scale: 50 |
| :align: center | :align: center |
| :alt: sudoku | :alt: sudoku wmark |
+-----------------------------+-----------------------------------+
.. _ImageMagick: http://www.imagemagick.org/
.. _Netpbm: http://netpbm.sourceforge.net/
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:
- l'affichage du nombre de fichiers avec extension pdf dans le
répertoire courant
- la copie récursive de dir1 dans dir2
- la suppression récursive d'un répertoire
- l'affichage de l'occupation disque par taille croissante de
répertoires
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
welcome``).
.. _KDE: http://www.kde.org/
.. _WMII: http://wmii.de/
.. _ION3: http://modeemi.cs.tut.fi/~tuomov/ion/
.. _FVWM: http://fvwm-crystal.org/
Gestion des mails en ligne de commande
--------------------------------------
Il nous faut :
- fetchmail, pour rapatrier les mails du serveur sur l'ordinateur
- procmail, pour les trier
- postfix (préférable à sendmail), pour envoyer des mails
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:
- http://www.catb.org/~esr/fetchmail/
- http://www.procmail.org/
- http://www.linux-france.org/article/appli/procmail.html
- http://www.linux-france.org/article/mail/postfix-jaco/
- http://www.postfix.org/documentation.htm
- http://www.pingouin-land.com/howto/Mail-Administrator-HOWTO.html
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:
- http://www.mandrakehelp.com/RPM-HOWTO.html
- http://easyurpmi.zarb.org/
- http://www.linux-wizard.net/howto.php?section=5&key=gestion_packages
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 (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
------------------------
.. footer:: Document produit avec Docutils_, Ã partir d'un source reStructuredText_ (|date|, |time|)