<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Coder-Studio &#187; gnu</title>
	<atom:link href="http://www.coder-studio.com/blog/tag/gnu/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.coder-studio.com/blog</link>
	<description></description>
	<lastBuildDate>Wed, 31 Mar 2010 00:00:53 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Trucs et astuces sous GNU/Linux</title>
		<link>http://www.coder-studio.com/blog/trucs-et-astuces-gnu-linux/</link>
		<comments>http://www.coder-studio.com/blog/trucs-et-astuces-gnu-linux/#comments</comments>
		<pubDate>Sat, 11 Apr 2009 22:01:11 +0000</pubDate>
		<dc:creator>nicolas66</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[astuces]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[gnu]]></category>

		<guid isPermaLink="false">http://www.coder-studio.com/blog/?p=197</guid>
		<description><![CDATA[Bonjour à tous,
Mon premier billet sur ce blog dresse une liste de quelques &#171;&#160;trucs et astuces&#160;&#187; utiles dans un environnement GNU/Linux. Cette liste sera progressivement complétée à l&#8217;avenir. On considère ici que le shell utilisé est bash. Les astuces sont facilement transposables à d&#8217;autres shells.

Sommaire :

Backspace sous Firefox
Suppression de fichiers
Recherche de texte dans les pages [...]]]></description>
			<content:encoded><![CDATA[<p>Bonjour à tous,</p>
<p>Mon premier billet sur ce blog dresse une liste de quelques &laquo;&nbsp;trucs et astuces&nbsp;&raquo; utiles dans un environnement GNU/Linux. Cette liste sera progressivement complétée à l&#8217;avenir. On considère ici que le shell utilisé est <em>bash</em>. Les astuces sont facilement transposables à d&#8217;autres shells.</p>
<p><span id="more-197"></span></p>
<h3>Sommaire :</h3>
<ol>
<li><a href="#backspace_firefox">Backspace sous Firefox</a></li>
<li><a href="#suppression_fichiers">Suppression de fichiers</a></li>
<li><a href="#recherche_manpages">Recherche de texte dans les pages de manuel</a></li>
<li><a href="#coloration_nano">Coloration syntaxique sous nano</a></li>
<li><a href="#manpages_couleur">Manpages en couleur</a></li>
<li><a href="#coloration_enscript">Coloration syntaxique avec <em>enscript</em></a></li>
<li><a href="#renommage_massif">Renommage de fichiers massif</a></li>
<li><a href="#grep_couleurs">Couleurs sous <em>grep</em></a></li>
<li><a href="#terminal_repertoire_travail">Terminal &amp; répertoire de travail</a></li>
<li><a href="#tuer_processus">Tuer un processus par son nom</a></li>
<li><a href="#detacher_commande_terminal">Détacher une commande d&#8217;un terminal</a></li>
<li><a href="#backup_paquets">Backup des paquets sous <em>Debian</em> / <em>Ubuntu</em></a></li>
<li><a href="#expansion_accolades">Expansion d&#8217;accolades</a></li>
<li><a href="#recherche_fichiers">Recherche de fichiers</a></li>
<li><a href="#remplacement_chaines_fichiers">Remplacement de chaînes dans des fichiers</a></li>
<li><a href="#creation_repertoires">Création de répertoires</a></li>
<li><a href="#recuperation_codes_retour">Récupération de codes de retour</a></li>
<li><a href="#raccourcis_clavier_sous_bash">Raccourcis clavier sous bash</a></li>
<li><a href="#generation_chaine_aleatoire">Génération de chaîne aléatoire</a></li>
<li><a href="#reutilisation_commandes_arguments">Réutilisation de commandes et d&#8217;arguments</a></li>
<li><a href="#recherche_rapide_fichier">Recherche rapide dans un fichier</a></li>
<li><a href="#decompression_archives">Décompression d&#8217;archives</a></li>
<li><a href="#comparaison_fichiers">Comparaison de fichiers</a></li>
<li><a href="#comparaison_fichiers_ssh">Comparaison de fichiers via <em>ssh</em></a></li>
</ol>
<p><a name="backspace_firefox"><br />
<h3>1 &#8211; Backspace sous Firefox</h3>
<p></a><br />
Cette première astuce permet d&#8217;activer la touche <em>backspace</em> pour revenir aux pages précédentes sous Firefox. Voici la démarche à suivre :</p>
<ol>
<li>Démarrer Firefox.</li>
<li>Taper <em>about:config</em> dans la barre d&#8217;adresse.</li>
<li>Taper <em>backspace</em> dans le champ <em>filtre</em> de la page pour voir apparaître la clé <em>browser.backspace_action</em>.</li>
<li>Remplacer la valeur de la clé par 0.</li>
</ol>
<p><a name="suppression_fichiers"><br />
<h3>2 &#8211; Suppression de fichiers</h3>
<p></a><br />
La plupart des adeptes de la console sous GNU/Linux savent que la suppression des fichiers / répertoires est définitive. Même avec la meilleure des attentions, il reste possible de supprimer un fichier / répertoire par erreur. Pour pallier ce problème, une solution simple est de dériver le comportement initial de la commande <em>rm</em>. Le code qui suit se place dans le fichier <em>~/.bashrc</em> :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code43'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19743"><td class="code" id="p197code43"><pre class="shell" style="font-family:monospace;">function Delete()
{
	mv $@ $HOME/.local/share/Trash/files/
}
&nbsp;
function Purge()
{
	\rm -rf $HOME/.local/share/Trash/files/*
	\rm -rf $HOME/.local/share/Trash/info/*
}
&nbsp;
alias rm='Delete'
alias purge='Purge'</pre></td></tr></table></div>

<p>La première fonction sert à supprimer déplacer les fichiers dans la corbeille tandis que la seconde vide son contenu.<br />
<strong>Note:</strong> sur les anciennes version d&#8217;<em>Ubuntu</em> par exemple, la corbeille pointait sur <em>~/.Trash</em>.</p>
<p><a name="recherche_manpages"><br />
<h3>3 &#8211; Recherche de texte dans les pages de manuel</h3>
<p></a><br />
Les pages de manuel sont un outil essentiel pour tout programmeur sous GNU/Linux. Seulement parfois, certaines pages sont très longues (ex: <em>gcc</em>) et on préfèrerait effectuer une recherche ciblée avec des mots-clés. Mais comment faire ? Admettons que nous souhaitions rechercher le mot-clé <em>color</em> dans la page de manuel de <em>ls</em>. Pour lancer une recherche, il suffit de taper <em>/color</em>. On accède ensuite aux occurences suivantes (respectivement précédentes) via la touche <em>n</em> (respectivement <em>N</em>).</p>
<p><a name="coloration_nano"><br />
<h3>4 &#8211; Coloration syntaxique sous nano</h3>
<p></a><br />
Beaucoup d&#8217;entres vous ont sans doute remarqué que la coloration syntaxique est absente par défaut sous l&#8217;éditeur <em>nano</em>. Nous allons donc voir comment l&#8217;activer simplement. Commencez par créer un fichier de configuration <em>.nanorc</em> à la racine de votre compte avec le contenu suivant puis sauvegardez :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code44'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19744"><td class="code" id="p197code44"><pre class="shell" style="font-family:monospace;">## Fichier nanorc
include &quot;/usr/share/nano/nanorc.nanorc&quot;
&nbsp;
## C/C++
include &quot;/usr/share/nano/c.nanorc&quot;
&nbsp;
## HTML
include &quot;/usr/share/nano/html.nanorc&quot;
&nbsp;
## TeX
include &quot;/usr/share/nano/tex.nanorc&quot;
&nbsp;
## Emails
include &quot;/usr/share/nano/mutt.nanorc&quot;
&nbsp;
## Fichiers patch
include &quot;/usr/share/nano/patch.nanorc&quot;
&nbsp;
&nbsp;
## Pages de manuel
include &quot;/usr/share/nano/man.nanorc&quot;
&nbsp;
## Groff
include &quot;/usr/share/nano/groff.nanorc&quot;
&nbsp;
## Perl
include &quot;/usr/share/nano/perl.nanorc&quot;
&nbsp;
## Python
include &quot;/usr/share/nano/python.nanorc&quot;
&nbsp;
## Ruby
include &quot;/usr/share/nano/ruby.nanorc&quot;
&nbsp;
## Java
include &quot;/usr/share/nano/java.nanorc&quot;
&nbsp;
## Assembleur
include &quot;/usr/share/nano/asm.nanorc&quot;
&nbsp;
## Scripts bash
include &quot;/usr/share/nano/sh.nanorc&quot;
&nbsp;
## POV-Ray
include &quot;/usr/share/nano/pov.nanorc&quot;</pre></td></tr></table></div>

<p>Chaque instruction correspond à l&#8217;inclusion d&#8217;un fichier à l&#8217;extension <em>.nanorc</em>. Ces fichiers contiennent en fait des paramètres de coloration syntaxique pour divers langages (ex: <em>java</em> pour le fichier <em>java.nanorc</em>). Vous pouvez dores et déjà admirer le résultat en éditant un fichier <em>C/C++</em>.</p>
<p>Néanmoins, on peut noter que la coloration de certains types de fichiers (<em>.ini</em>, <em>.sourcelist</em>, <em>.conf</em>, <em>.php</em>, <em>.css</em> et <em>.xml</em>) est absente. Manuel Dorne (alias Korben) met à disposition sur son blog une <a href="http://www.korben.info/wp-content/uploads/2008/08/nano-supplement.tar">archive</a> contenant les fichiers de coloration correspondant. Il suffit ensuite de rajouter les lignes suivantes à votre fichier de configuration <em>~/.nanorc</em> :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code45'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19745"><td class="code" id="p197code45"><pre class="shell" style="font-family:monospace;">## Sources.list
include &quot;/usr/share/nano/sourceslist.nanorc&quot;
&nbsp;
## Fichiers de config. (.ini)
include &quot;/usr/share/nano/ini.nanorc&quot;
&nbsp;
## Xorg.conf
include &quot;/usr/share/nano/xorg.nanorc&quot;
&nbsp;
## CSS
include &quot;/usr/share/nano/css.nanorc&quot;
&nbsp;
## XML
include &quot;/usr/share/nano/xml.nanorc&quot;
&nbsp;
## Generic .conf
include &quot;/usr/share/nano/conf.nanorc&quot;
&nbsp;
## PHP
include &quot;/usr/share/nano/php.nanorc&quot;</pre></td></tr></table></div>

<p><a name="manpages_couleur"><br />
<h3>5 &#8211; Manpages en couleur</h3>
<p></a><br />
Qui n&#8217;a jamais rêvé d&#8217;avoir ses pages de manuel en couleur ? Ajoutez simplement les lignes suivantes à votre fichier de configuration <em>~/.bashrc</em> :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code46'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19746"><td class="code" id="p197code46"><pre class="shell" style="font-family:monospace;">export LESS_TERMCAP_mb=$'\E[01;31m'       # begin blinking
export LESS_TERMCAP_md=$'\E[01;38;5;74m'  # begin bold
export LESS_TERMCAP_me=$'\E[0m'           # end mode
export LESS_TERMCAP_se=$'\E[0m'           # end standout-mode
export LESS_TERMCAP_so=$'\E[38;5;246m'    # begin standout-mode - info box
export LESS_TERMCAP_ue=$'\E[0m'           # end underline
export LESS_TERMCAP_us=$'\E[04;38;5;146m' # begin underline</pre></td></tr></table></div>

<p>Cette <a href="http://www.cyberciti.biz/faq/bash-shell-change-the-color-of-my-shell-prompt-under-linux-or-unix/">page</a> indique comment utiliser d&#8217;autres codes couleurs.</p>
<p><a name="coloration_enscript"><br />
<h3>6 &#8211; Coloration syntaxique avec <em>enscript</em></h3>
<p></a><br />
La commande <em>enscript</em> transforme un fichier texte au format <em>ASCII</em> en <em>PostScript</em>/<em>HTML</em> et permet accessoirement de faire de la coloration syntaxique. Commencez d&#8217;abord par installer le paquet correspondant (paquet <em>enscript</em> sous <em>Debian</em>/<em>Ubuntu</em>). Ensuite, il suffit de convertir le fichier désiré à l&#8217;aide de la commande. Voici un exemple de transformation d&#8217;un fichier assembleur en fichier <em>HTML</em> avec coloration :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code47'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19747"><td class="code" id="p197code47"><pre class="shell" style="font-family:monospace;">enscript -Easm --color -whtml -poutput.html main.asm</pre></td></tr></table></div>

<p>La liste des langages disponibles est accessible via la commande suivante :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code48'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19748"><td class="code" id="p197code48"><pre class="shell" style="font-family:monospace;">enscript --help-highlight | awk '$0 ~/Name:/ {FS=&quot; &quot;; print $2;}'</pre></td></tr></table></div>

<p><a name="renommage_massif"><br />
<h3>7 &#8211; Renommage de fichiers massif</h3>
<p></a><br />
Si vous en avez marre de renommer à la main tous les fichiers musicaux de votre audiothèque alors cette astuce est faite pour vous.</p>
<ul>
<li><strong>rename</strong><br />
Pour renommer massivement des fichiers, le moyen le plus simple est d&#8217;utiliser la commande <em>rename</em> dont les expressions régulières sont similaires à celles de la commande <em>sed</em>.Supposons que nous ayions une liste de chansons nommées ainsi :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code49'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19749"><td class="code" id="p197code49"><pre class="shell" style="font-family:monospace;">01-Les Histoires de Martin-Martin et les abeilles.ogg
02-Les Histoires de Martin-Martin chez les scouts.ogg
03-Les Histoires de Martin-Martin aime Martine.ogg</pre></td></tr></table></div>

<p>On souhaite supprimer les numéros des chansons. Il suffit de lancer la commande suivante :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code50'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19750"><td class="code" id="p197code50"><pre class="shell" style="font-family:monospace;">rename 's/(.*)-(.*)-(.*).ogg/$1-$3.ogg/' *.ogg</pre></td></tr></table></div>

<p>où $k correspond au k-ième match indiqué entre parenthèses par (.*).</p>
<p>On obtient alors :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code51'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19751"><td class="code" id="p197code51"><pre class="shell" style="font-family:monospace;">01-Martin et les abeilles.ogg
02-Martin chez les scouts.ogg
03-Martin aime Martine.ogg</pre></td></tr></table></div>

<p>Pour mettre en majuscule le noms des fichiers, il faut utiliser l&#8217;option <em>y</em> :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code52'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19752"><td class="code" id="p197code52"><pre class="shell" style="font-family:monospace;">rename 's/(.*)-(.*)-(.*).ogg/$1-$3.ogg/;y/[a-z]/[A-Z]/' *.ogg</pre></td></tr></table></div>

<p><strong>Note:</strong> le flag <em>-n</em> permet de pré-visualiser le renommage (pratique pour éviter les éventuelles bourdes).</li>
<li><em><strong>Mmv</strong><br />
</em>Alternativement à <em>rename</em>, le renommage massif peut aussi être effectué via <em>Mmv</em> (paquet <em>mmv</em> sous <em>Debian</em>/<em>Ubuntu</em>), bien plus puissant. <em>Mmv</em> est composé d&#8217;un ensemble de commandes capables de déplacer (<em>mmv</em>), copier (<em>mcp</em>) et créer des liens symboliques (<em>mln</em>) sur des fichiers. Supposons que nous ayions une liste de recettes de cuisine avec le nom de l&#8217;auteur :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code53'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19753"><td class="code" id="p197code53"><pre class="shell" style="font-family:monospace;">26-11-1988_Martin_Gâteau au chocolat.texte
19-04-1972_Elsa_Babas au rhum.texte
03-12-1995_John_Cookies américains.texte</pre></td></tr></table></div>

<p>On souhaite maintenant renommer ces fichiers en excluant la date et en modifiant l&#8217;extension en <em>.txt</em>. On exécute alors la commande qui suit :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code54'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19754"><td class="code" id="p197code54"><pre class="shell" style="font-family:monospace;">mmv -n &quot;*_*_*.texte&quot; &quot;#3 - #2.txt&quot;</pre></td></tr></table></div>

<p>où #k correspond au k-ième match indiqué par un joker (? ou *).</p>
<p>On obtient alors :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code55'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19755"><td class="code" id="p197code55"><pre class="shell" style="font-family:monospace;">Gâteau au chocolat - Martin.txt
Babas au rhum - Elsa.txt
Cookies américains - John.txt</pre></td></tr></table></div>

<p>Pour mettre en majuscule (respectivement minuscule) tous les fichiers, il faut indiquer <em>u</em> dans l&#8217;expression #k (respectivement <em>l</em>) :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code56'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19756"><td class="code" id="p197code56"><pre class="shell" style="font-family:monospace;">mmv -n &quot;*.texte&quot; &quot;#u1.txt&quot;</pre></td></tr></table></div>

<p>L&#8217;option <em>-r</em> permet d&#8217;inclure les répertoire à renommer.</p>
<p>On peut aussi ajouter les recettes les unes à la suite des autres via l&#8217;option <em>-a</em> :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code57'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19757"><td class="code" id="p197code57"><pre class="shell" style="font-family:monospace;">mmv -a &quot;*.texte &quot;recettes.texte&quot;</pre></td></tr></table></div>

<p><strong>Note:</strong> là encore, le flag <em>-n</em> permet de pré-visualiser le renommage.</p>
<p>Pour les adeptes de la souris, il existe d&#8217;autres outils de renommage comme Métamorphose, dotés d&#8217;une interface plus user-friendly. Plus d&#8217;infos sur ce site : <a href="http://file-folder-ren.sourceforge.net">http://file-folder-ren.sourceforge.net</a>.</li>
</ul>
<p><a name="grep_couleurs"><br />
<h3>8 &#8211; Couleurs sous <em>grep</em></h3>
<p></a><br />
La commande <em>grep</em> s&#8217;avère souvent utile pour rechercher facilement un motif dans un flux de données (stdin ou fichier). Néanmoins, il devient difficile de reconnaître le motif lorsque les lignes matchées sont de grande taille. Un moyen simple est d&#8217;activer la coloration en plaçant l&#8217;alias suivant dans votre fichier <em>~/.bashrc</em> :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code58'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19758"><td class="code" id="p197code58"><pre class="shell" style="font-family:monospace;">alias grep=&quot;grep --color=auto&quot;</pre></td></tr></table></div>

<p>La coloration peut-être paramétrée en modifiant la variable <em>GREP_COLORS</em>. Plus d&#8217;infos sur la manpage de <em>grep</em>. Une liste détaillée des couleurs est accessible sur ce site : <a href="http://www.pixelbeat.org/docs/terminal_colours/">site</a>.</p>
<p><a name="terminal_repertoire_travail"><br />
<h3>9 &#8211; Terminal &amp; répertoire de travail</h3>
<p></a><br />
Beaucoup d&#8217;entre vous auront sans doute remarqué que le chemin et l&#8217;historique des commandes n&#8217;est pas sauvegardé lors du lancement d&#8217;un nouveau terminal. Pour pallier ce problème, il suffit de modifier la variable <em>PROMPT_COMMAND</em> du fichier <em>~/.bashrc</em>. Supposons que cette variable ait le contenu suivant (par défaut sous <em>Debian</em>/<em>Ubuntu</em>) :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code59'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19759"><td class="code" id="p197code59"><pre class="shell" style="font-family:monospace;">PROMPT_COMMAND='echo -ne &quot;\033]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}\007&quot;'</pre></td></tr></table></div>

<p>On la modifie alors comme suit :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code60'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19760"><td class="code" id="p197code60"><pre class="shell" style="font-family:monospace;">PROMPT_COMMAND='echo `pwd` &amp;gt; ~/.oldpwd; history -a; echo -ne &quot;\033]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}\007&quot;'</pre></td></tr></table></div>

<p>La première commande permet de sauvegarder le chemin courant dans le fichier <em>.oldpwd</em> tandis que la seconde sauvegarde l&#8217;historique.</p>
<p>Puis, à la fin du fichier, rajoutez cette ligne :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code61'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19761"><td class="code" id="p197code61"><pre class="shell" style="font-family:monospace;">cd &quot;`cat ~/.oldpwd`&quot;</pre></td></tr></table></div>

<p>Du coup, à l&#8217;ouverture d&#8217;un nouveau terminal (xterm, kconsole, etc.), le chemin et l&#8217;historique des commandes sera conservé. Pratique non ? <img src='http://www.coder-studio.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a name="tuer_processus"><br />
<h3>10 &#8211; Tuer un processus par son nom</h3>
<p></a><br />
Pour tuer un processus qui semble ne plus répondre, on procède généralement de la manière suivante :</p>
<ul>
<li>On récupère le numéro du processus via :

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code62'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19762"><td class="code" id="p197code62"><pre class="shell" style="font-family:monospace;">      pid=$(ps -ef | grep nom_processus)</pre></td></tr></table></div>

<li>Puis, on tue le processus en lui envoyant un signal <em>SIGKILL</em> via :

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code63'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19763"><td class="code" id="p197code63"><pre class="shell" style="font-family:monospace;">      kill -9 ${pid}</pre></td></tr></table></div>

</ul>
<p>Une méthode alternative, plus courte, consiste à appeler la commande <em>killall</em> en lui passant directement le nom du processus :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code64'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19764"><td class="code" id="p197code64"><pre class="shell" style="font-family:monospace;">  killall nom_processus</pre></td></tr></table></div>

<p><a name="detacher_commande_terminal"><br />
<h3>11 &#8211; Détacher une commande d&#8217;un terminal</h3>
<p></a><br />
Un utilisateur est souvent amené à lancer des applications à partir d&#8217;un terminal (browser, lecteur audio, etc.). Parfois, il arrive aussi que l&#8217;on ferme un terminal par erreur. Cela a pour effet d&#8217;arrêter toutes les applications lancées à partir de ce terminal. Pour pallier ce problème, il suffit de détacher l&#8217;application du terminal via :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code65'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19765"><td class="code" id="p197code65"><pre class="shell" style="font-family:monospace;">nohup application &amp;</pre></td></tr></table></div>

<p>Par défaut, la commande <em>nohup</em> crée un fichier de sortie <em>nohup.out</em> contenant la sortie standard de la commande passée en paramètre. On peut supprimer ce comportement en redirigeant tous les flux vers <em>/dev/null</em> :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code66'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19766"><td class="code" id="p197code66"><pre class="shell" style="font-family:monospace;">nohup application &amp;&gt;/dev/null &amp;</pre></td></tr></table></div>

<p>Libre à vous ensuite d&#8217;ajouter un alias dans votre <em>.bashrc</em> <img src='http://www.coder-studio.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><a name="backup_paquets"><br />
<h3>12 &#8211; Backup des paquets sous <em>Debian</em> / <em>Ubuntu</em></h3>
<p></a><br />
Lorsqu&#8217;on fait une réinstallation complète, on oublie parfois de sauvegarder la liste des paquets installés. Du coup, on ne réinstalle uniquement qu&#8217;une petite partie des paquets dont on a besoin. Voici comment procéder pour faire une backup de la liste des paquets installés.</p>
<p>Récupérez la liste des paquets installés sur le système dans un fichier appelé <em>packages.txt</em> :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code67'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19767"><td class="code" id="p197code67"><pre class="shell" style="font-family:monospace;">sudo dpkg --get-selections &gt; packages.txt</pre></td></tr></table></div>

<p>Sauvegardez ce fichier sur CD, disquette ou clé USB. Ensuite, lors de la réinstallation, copiez ce fichier sur le disque dur et exécutez les trois commandes suivantes pour récupérer et installer vos paquets :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code68'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19768"><td class="code" id="p197code68"><pre class="shell" style="font-family:monospace;">sudo dpkg --set-selections &lt; packages.txt
sudo apt-get update
sudo apt-get dselect-upgrade</pre></td></tr></table></div>

<p>Pour éviter de télécharger à nouveau vos paquets, vous pouvez encore gagner du temps en les gravant directement sur CD. Ce <a href="https://help.ubuntu.com/community/AptMoveHowto">lien</a> explique la marche à suivre.</p>
<p><a name="expansion_accolades"><br />
<h3>13 &#8211; Expansion d&#8217;accolades</h3>
<p></a><br />
Sous <em>bash</em>, l&#8217;expansion d&#8217;accolades (braces expansion) est un mécanisme souvent méconnu mais extrêmement puissant qui permet de générer des chaînes de caractères arbitraires. Ce mécanisme est similaire à l&#8217;expansion de noms de fichiers hormis le fait qu&#8217;ils n&#8217;ont pas besoin d&#8217;exister. Les chaînes de caractères à générer sont décrites par des patterns. Ces patterns sont entourés d&#8217;accolades et séparés par des virgules. Chaque pattern peut lui-même être décrit par une liste de patterns. L&#8217;expansion s&#8217;effectue toujours de gauche à droite.</p>
<p>L&#8217;exemple qui suit permet de générer les chaînes <em>ade</em>, <em>ace</em> et <em>abe</em>.</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code69'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19769"><td class="code" id="p197code69"><pre class="shell" style="font-family:monospace;">echo a{d,c,b}e
ade ace abe</pre></td></tr></table></div>

<p>Les patterns peuvent aussi contenir des nombres contenus dans un intervalle donné (un argument d&#8217;incrément est disponible uniquement à partir de bash 4). Par exemple, on peut vouloir générer les chaînes A0 à A9 pour chacune des lettres de l&#8217;alphabet :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code70'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19770"><td class="code" id="p197code70"><pre class="shell" style="font-family:monospace;">echo {A..Z}{0..9}
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 G0 G1 G2 G3 G4 G5 G6 G7 G8 G9 H0 H1 H2 H3 H4 H5 H6 H7 H8 H9 I0 I1 I2 I3 I4 I5 I6 I7 I8 I9 J0 J1 J2 J3 J4 J5 J6 J7 J8 J9 K0 K1 K2 K3 K4 K5 K6 K7 K8 K9 L0 L1 L2 L3 L4 L5 L6 L7 L8 L9 M0 M1 M2 M3 M4 M5 M6 M7 M8 M9 N0 N1 N2 N3 N4 N5 N6 N7 N8 N9 O0 O1 O2 O3 O4 O5 O6 O7 O8 O9 P0 P1 P2 P3 P4 P5 P6 P7 P8 P9 Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 S0 S1 S2 S3 S4 S5 S6 S7 S8 S9 T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 U0 U1 U2 U3 U4 U5 U6 U7 U8 U9 V0 V1 V2 V3 V4 V5 V6 V7 V8 V9 W0 W1 W2 W3 W4 W5 W6 W7 W8 W9 X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9 Z0 Z1 Z2 Z3 Z4 Z5 Z6 Z7 Z8 Z9</pre></td></tr></table></div>

<p>En pratique, l&#8217;expansion d&#8217;accolades est un mécanisme très agréable. On peut notamment l&#8217;utiliser pour faire une copie d&#8217;un fichier en évitant de retaper son nom :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code71'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19771"><td class="code" id="p197code71"><pre class="shell" style="font-family:monospace;">cp /home/rantanplan/medias/photos/mariage_de_loic/27/02/1998/originaux/photo1.jpg{,.bak}</pre></td></tr></table></div>

<p>Autre exemple concret : on souhaite récupérer plusieurs pages web qui ne diffèrent que par un numéro. Là encore, l&#8217;expansion d&#8217;accolades nous évite de recopier <em>n</em> fois le nom du fichier sur la ligne de commande ou bien d&#8217;utiliser explicitement une boucle :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code72'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19772"><td class="code" id="p197code72"><pre class="shell" style="font-family:monospace;">wget http://docs.example.com/documentation/slides_part{1..6}.html</pre></td></tr></table></div>

<p><a name="recherche_fichiers"><br />
<h3>14 &#8211; Recherche de fichiers</h3>
<p></a><br />
Parfois, il arrive que l&#8217;on souhaite effectuer une recherche d&#8217;un motif particulier à l&#8217;intérieur de fichiers situés dans plusieurs répertoires. Seulement, on aimerait limiter la recherche à quelques types de fichiers précis. </p>
<p>Par exemple, supposons que l&#8217;on veuille rechercher le motif &laquo;&nbsp;volume3D&nbsp;&raquo; à l&#8217;intérieur de fichiers C/C++. Cela est facilement réalisable en utilisant l&#8217;expansion d&#8217;accolades (cf. <a href="#expansion_accolades">section 13</a>) sur le paramètre <em>&#8211;include</em> de la commande <em>grep</em> :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code73'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19773"><td class="code" id="p197code73"><pre class="shell" style="font-family:monospace;">grep -R . -e &quot;volume3D&quot; --include=*.{c*,h*}</pre></td></tr></table></div>

<p><a name="remplacement_chaines_fichiers"><br />
<h3>15 &#8211; Remplacement de chaînes dans des fichiers</h3>
<p></a><br />
On veut parfois remplacer une chaîne de caractère dans plusieurs fichiers. Une manière simple de réaliser cela est d&#8217;utiliser l&#8217;interpréteur <em>Perl</em>. Supposons que l&#8217;on veuille remplacer la chaîne &laquo;&nbsp;tomate&nbsp;&raquo; par &laquo;&nbsp;salade&nbsp;&raquo; dans un ensemble de fichiers texte. Il suffit alors de taper la commande qui suit :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code74'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19774"><td class="code" id="p197code74"><pre class="shell" style="font-family:monospace;">perl -pi -e &quot;s/tomate/salade/g&quot; *.txt</pre></td></tr></table></div>

<p>Cela permet un gain de temps considérable surtout lorsque le nombre de fichiers est élevé <img src='http://www.coder-studio.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a name="creation_repertoires"><br />
<h3>16 &#8211; Création de répertoires</h3>
<p></a><br />
Lors de la création d&#8217;une nouvelle arborescence, beaucoup de gens ont l&#8217;habitude de créer un par un les répertoires via <em>mkdir</em> puis de les déplacer via <em>mv</em>. Un moyen plus simple est d&#8217;utiliser l&#8217;option <em>-p</em> de la commande <em>mkdir</em> qui crée automatiquement les répertoires parents. Supposons que l&#8217;on souhaite avoir une arborescence de photos de vacances classées par lieu puis par date :</p>
<pre>
photos_vacances/
|-- Antibes
|   |-- 2008
|   |   `-- 07
|   |       |-- 28
|   |       |-- 29
|   |       |-- 30
|   |       `-- 31
|   `-- 2009
|       `-- 07
|           |-- 12
|           |-- 13
|           |-- 14
|           |-- 15
|           |-- 16
|           |-- 17
|           |-- 18
|           |-- 19
|           `-- 20
`-- Lyon
    |-- 1999
    |   `-- 08
    |       |-- 01
    |       |-- 02
    |       |-- 03
    |       `-- 04
    `-- 2002
        |-- 07
        |   |-- 12
        |   |-- 13
        |   |-- 14
        |   |-- 15
        |   `-- 16
        `-- 12
            |-- 24
            |-- 25
            |-- 26
            |-- 27
            `-- 28
</pre>
<p>En combinant l&#8217;expansion d&#8217;accolades, on obtient alors les commandes suivantes :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code75'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19775"><td class="code" id="p197code75"><pre class="shell" style="font-family:monospace;">mkdir -p photos_vacances/Antibes/2008/07/{28..31}
mkdir -p photos_vacances/Antibes/2009/07/{12..20}
mkdir -p photos_vacances/Lyon/1999/08/0{1..4}
mkdir -p photos_vacances/Lyon/2002/07/{12..16}
mkdir -p photos_vacances/Lyon/2002/12/{24..28}</pre></td></tr></table></div>

<p><a name="recuperation_codes_retour"><br />
<h3>17 &#8211; Récupération de codes de retour</h3>
<p></a><br />
Parfois, on aimerait pouvoir récupérer un code de retour précis sur une commande composée de plusieurs pipes. Par exemple, imaginons que nous souhaitions savoir si l&#8217;utilisateur &laquo;&nbsp;daniel&nbsp;&raquo; est connecté sur une machine. Une commande possible serait alors la suivante (la commande sort n&#8217;est présente que pour illustrer l&#8217;exemple) :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code76'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19776"><td class="code" id="p197code76"><pre class="shell" style="font-family:monospace;">who | awk '{print $1}' | grep &quot;daniel&quot; | sort</pre></td></tr></table></div>

<p>Sous <em>Bash</em>, il est possible de récupérer les codes de retour de chacune des commandes dans un tableau appelé <em>PIPESTATUS</em>. Pour obtenir les codes de retour, il suffit alors de consulter ce tableau :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code77'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19777"><td class="code" id="p197code77"><pre class="shell" style="font-family:monospace;">echo ${PIPESTATUS[*]}</pre></td></tr></table></div>

<p>Dans l&#8217;exemple, si l&#8217;utilisateur &laquo;&nbsp;daniel&nbsp;&raquo; n&#8217;est pas connecté, la commande précédente afficherait ceci :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code78'); return false;">View Code</a> SHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19778"><td class="code" id="p197code78"><pre class="shell" style="font-family:monospace;">0 0 1 0</pre></td></tr></table></div>

<p><a name="raccourcis_clavier_sous_bash"><br />
<h3>18 &#8211; Raccourcis clavier sous <em>bash</em></h3>
<p></a><br />
Voici une sélection des raccourcis clavier utiles sous <em>bash</em> :</p>
<ul>
<li><b>Ctrl+U</b> : supprimer tout ce qui est présent à gauche</li>
<li><b>Ctrl+W</b> : supprimer uniquement le premier mot à gauche</li>
<li><b>Ctrl+Y</b> : coller le contenu du buffer</li>
<li><b>Ctrl+A</b> : se déplacer au début de la ligne</li>
<li><b>Ctrl+E</b> : se déplacer à la fin de la ligne</li>
</ul>
<p><a name="generation_chaine_aleatoire"><br />
<h3>19 &#8211; Génération de chaîne aléatoire</h3>
<p></a><br />
Une méthode rapide et simple pour générer une chaîne aléatoire est de remplacer les symboles issus du fichier <em>/dev/urandom</em> par des caractères alphanumériques et de couper à la longueur désirée :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code79'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19779"><td class="code" id="p197code79"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>urandom <span style="color: #c20cb9; font-weight: bold;">tr</span> <span style="color: #660033;">-dc</span> A-Za-z0-<span style="color: #000000;">9</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">head</span> <span style="color: #660033;">-c8</span></pre></td></tr></table></div>

<p><a name="reutilisation_commandes_arguments"><br />
<h3>20 &#8211; Réutilisation de commandes et d&#8217;arguments</h3>
<p></a><br />
Sur un terminal, on passe généralement beaucoup de temps à rappeler des commandes antérieures ou des commandes qui ne diffèrent seulement que par quelques arguments. Par exemple, supposons que nous ayons tapé la commande <em>cd foo</em> et qu&#8217;elle retourne un message d&#8217;erreur indiquant que le répertoire <em>foo</em> n&#8217;existe pas. Supposons maintenant que nous souhaitions créer ce répertoire. Cela implique donc de rappeler la commande précédente, de l&#8217;éditer et de la lancer. Dans bien des cas, ces étapes sont fastidieuses. Bash propose une liste d&#8217;alias, souvent méconnue, qui permet de gagner un temps précieux :</p>
<ul>
<li><b>!n</b> : rappelle la commande numéro n</li>
<li><b>!-n</b> : rappelle la commande exécutée il y a n commandes</li>
<li><b>!!</b> : rappelle la dernière commande</li>
<li><b>!chaine</b> : rappelle la commande la plus récente commençant par &laquo;&nbsp;chaine&nbsp;&raquo;</li>
<li><b>!?chaine</b> : rappelle la commande la plus récente finissant par &laquo;&nbsp;chaine&nbsp;&raquo;</li>
<li><b>!?chaine?</b> : rappelle la commande la plus récente contenant par &laquo;&nbsp;chaine&nbsp;&raquo;</li>
<li><b>^chaine1^chaine2^</b> : répète la dernière commande en remplaçant &laquo;&nbsp;chaine1&#8243; par &laquo;&nbsp;chaine2&#8243;</li>
<li><b>!#</b> : rappelle la plus ancienne commande</li>
<li><b>commande !^</b> : exécute &laquo;&nbsp;commande&nbsp;&raquo; avec le premier argument de la commande précédente</li>
<li><b>commande !:n</b> : exécute &laquo;&nbsp;commande&nbsp;&raquo; avec l&#8217;argument numéro n de la commande précédente</li>
<li><b>commande !:x-y</b> : exécute &laquo;&nbsp;commande&nbsp;&raquo; avec les arguments numéro &laquo;&nbsp;x&nbsp;&raquo; à &laquo;&nbsp;y&nbsp;&raquo; de la commande précédente</li>
<li><b>commande !$</b> : exécute &laquo;&nbsp;commande&nbsp;&raquo; avec le dernier argument de la commande précédente</li>
<li><b>commande !-2$</b> : exécute &laquo;&nbsp;commande&nbsp;&raquo; avec le dernier argument de l&#8217;avant dernière commande</li>
</ul>
<p>Un exemple d&#8217;utilisation est lorsque l&#8217;on oublie de préfixer une commande par &laquo;&nbsp;sudo&nbsp;&raquo;. Pour rappeler la commande précédente en rajoutant ce préfixe, il suffit alors de taper : <em>sudo !!</em>.</p>
<p><a name="recherche_rapide_fichier"><br />
<h3>21 &#8211; Recherche rapide dans un fichier</h3>
<p></a><br />
Un moyen rapide et concis de rechercher un motif dans un fichier <em>fichier.txt </em> (sans passer par la commande <em>cat</em>) est le suivant :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code80'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19780"><td class="code" id="p197code80"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;</span> fichier.txt <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;motif&quot;</span></pre></td></tr></table></div>

<p>La commande peut alors aisément être complétée pour compter par exemple le nombre de matchs :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code81'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19781"><td class="code" id="p197code81"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;</span> fichier.txt <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;motif&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">wc</span> <span style="color: #660033;">-l</span></pre></td></tr></table></div>

<p><a name="decompression_archives"><br />
<h3>22 &#8211; Décompression d&#8217;archives</h3>
<p></a><br />
Marre de se rappeler les arguments à passer pour décompresser une archive tar.gz, .zip, .rar, etc. ? Voici une commande générique pour décompresser n&#8217;importe quelle type d&#8217;archive :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code82'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19782"><td class="code" id="p197code82"><pre class="bash" style="font-family:monospace;">extract<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-f</span> <span style="color: #007800;">$1</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
        <span style="color: #000000; font-weight: bold;">case</span> <span style="color: #007800;">$1</span> <span style="color: #000000; font-weight: bold;">in</span>
         <span style="color: #000000; font-weight: bold;">*</span>.tar.bz2<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #c20cb9; font-weight: bold;">tar</span> xvjf <span style="color: #007800;">$1</span><span style="color: #000000; font-weight: bold;">;;</span>
         <span style="color: #000000; font-weight: bold;">*</span>.tar.gz<span style="color: #7a0874; font-weight: bold;">&#41;</span>  <span style="color: #c20cb9; font-weight: bold;">tar</span> xvzf <span style="color: #007800;">$1</span><span style="color: #000000; font-weight: bold;">;;</span>
         <span style="color: #000000; font-weight: bold;">*</span>.bz2<span style="color: #7a0874; font-weight: bold;">&#41;</span>     <span style="color: #c20cb9; font-weight: bold;">bunzip2</span> <span style="color: #007800;">$1</span><span style="color: #000000; font-weight: bold;">;;</span>
         <span style="color: #000000; font-weight: bold;">*</span>.rar<span style="color: #7a0874; font-weight: bold;">&#41;</span>     unrar x <span style="color: #007800;">$1</span><span style="color: #000000; font-weight: bold;">;;</span>
         <span style="color: #000000; font-weight: bold;">*</span>.gz<span style="color: #7a0874; font-weight: bold;">&#41;</span>      <span style="color: #c20cb9; font-weight: bold;">gunzip</span> <span style="color: #007800;">$1</span><span style="color: #000000; font-weight: bold;">;;</span>
         <span style="color: #000000; font-weight: bold;">*</span>.tar<span style="color: #7a0874; font-weight: bold;">&#41;</span>     <span style="color: #c20cb9; font-weight: bold;">tar</span> xvf <span style="color: #007800;">$1</span><span style="color: #000000; font-weight: bold;">;;</span>
         <span style="color: #000000; font-weight: bold;">*</span>.tbz2<span style="color: #7a0874; font-weight: bold;">&#41;</span>    <span style="color: #c20cb9; font-weight: bold;">tar</span> xvjf <span style="color: #007800;">$1</span><span style="color: #000000; font-weight: bold;">;;</span>
         <span style="color: #000000; font-weight: bold;">*</span>.tgz<span style="color: #7a0874; font-weight: bold;">&#41;</span>     <span style="color: #c20cb9; font-weight: bold;">tar</span> xvzf <span style="color: #007800;">$1</span><span style="color: #000000; font-weight: bold;">;;</span>
         <span style="color: #000000; font-weight: bold;">*</span>.zip<span style="color: #7a0874; font-weight: bold;">&#41;</span>     <span style="color: #c20cb9; font-weight: bold;">unzip</span> <span style="color: #007800;">$1</span><span style="color: #000000; font-weight: bold;">;;</span>
         <span style="color: #000000; font-weight: bold;">*</span>.Z<span style="color: #7a0874; font-weight: bold;">&#41;</span>       uncompress <span style="color: #007800;">$1</span><span style="color: #000000; font-weight: bold;">;;</span>
         <span style="color: #000000; font-weight: bold;">*</span>.7z<span style="color: #7a0874; font-weight: bold;">&#41;</span>      7z x <span style="color: #007800;">$1</span><span style="color: #000000; font-weight: bold;">;;</span>
         <span style="color: #000000; font-weight: bold;">*</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>         <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;'$1' cannot be extracted&quot;</span><span style="color: #000000; font-weight: bold;">;;</span>
        <span style="color: #000000; font-weight: bold;">esac</span>
    <span style="color: #000000; font-weight: bold;">else</span>
        <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;'$1' is not a valid file&quot;</span>
    <span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #7a0874; font-weight: bold;">&#125;</span></pre></td></tr></table></div>

<p>Une fois installé, on ne peut plus s&#8217;en passer <img src='http://www.coder-studio.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Source : <a href="http://www.shell-fu.org/lister.php?id=375">shell-fu.org</a>.</p>
<p><a name="comparaison_fichiers"><br />
<h3>24 &#8211; Comparaison de fichiers</h3>
<p></a><br />
Un moyen simple de pouvoir comparer le contenu de deux répertoires est d&#8217;utiliser la commande <em>diff</em> comme suit :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code83'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19783"><td class="code" id="p197code83"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">diff</span> <span style="color: #660033;">-u</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-c1</span> repertoire1<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #000000; font-weight: bold;">&lt;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-c1</span> repertoire2<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></td></tr></table></div>

<p><b>Note</b> : l&#8217;option <em>c1</em> passée à <em>ls</em> liste les fichiers en une seule colonne.</p>
<p><a name="comparaison_fichiers_ssh"><br />
<h3>24 &#8211; Comparaison de fichiers via <em>ssh</em></h3>
<p></a><br />
La commande ci-dessous permet de comparer deux fichiers à travers ssh :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p197code84'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p19784"><td class="code" id="p197code84"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ssh</span> <span style="color: #c20cb9; font-weight: bold;">login</span><span style="color: #000000; font-weight: bold;">@</span><span style="color: #c20cb9; font-weight: bold;">hostname</span> <span style="color: #ff0000;">&quot;cat /tmp/fichier_distant.txt&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">diff</span> - <span style="color: #000000; font-weight: bold;">/</span>tmp<span style="color: #000000; font-weight: bold;">/</span>fichier_local.txt</pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.coder-studio.com/blog/trucs-et-astuces-gnu-linux/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>
