====================== 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|)