<h2>But de ce document</h2>
<p class="spip">Ce document donnera une description et des exemples d’utilisations des commandes avancées les plus courantes sous Linux.</p>

<h2>xargs [ -options ] [ commande ] </h2>
<p class="spip">Exécute commande aussi souvent que nécessaire, en recevant à chaque fois ses arguments sur l’entrée standard. Ceci permet à commande de traiter beaucoup d’arguments à partir d’une liste créée par une commande (ls ou find par exemple) ou contenue dans un fichier.</p>

<table class="spip">
<thead><tr class='row_first'><th scope='col'><strong class="spip">Option</strong></th><th scope='col'><strong class="spip">Commentaire</strong></th></tr></thead>
<tbody>
<tr class="row_even"><td><strong class="spip">-i </strong><i class="spip"> <strong class="spip">[cache]</strong> </i></td><td>Transforme toutes les <i class="spip"></i> ou toutes les chaînes par les chaînes envoyées par l’entrée standard. </td></tr>
<tr class="row_odd"><td><strong class="spip">-p</strong></td><td>Demande confirmation à l’utilisateur avant l’exécution de chaque ligne de commande. Implique l’option <strong class="spip">-t</strong>. </td></tr>
<tr class="row_even"><td><strong class="spip">-t</strong></td><td>Affiche la ligne de <i class="spip"> commande </i> sur la sortie d’erreur standard avant de l’exécuter. </td></tr>
<tr class="row_odd"><td><strong class="spip">-v</strong></td><td>Mode verbeux. </td></tr>
</tbody>
</table>
<p class="spip">Exemples :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>$ find / -type f | xargs grep "*motif*" > ma_liste<br />
$ ls rep1 | xargs -i -t mv rep1/{} rep2/{}</code></div>
<h2>sort [ -options ] [ fichiers ] </h2>
<p class="spip">La commande <strong class="spip">sort</strong> trie les lignes des fichiers passés en arguments.</p>

<table class="spip">
<thead><tr class='row_first'><th scope='col'><strong class="spip">Option</strong></th><th scope='col'><strong class="spip">Commentaire</strong></th></tr></thead>
<tbody>
<tr class="row_even"><td><strong class="spip">-n</strong></td><td>Tri arithmétique. </td></tr>
<tr class="row_odd"><td><strong class="spip">-o </strong><i class="spip"> <strong class="spip">fichier</strong> </i></td><td>Envoie la sortie dans <i class="spip"> fichier </i>. </td></tr>
<tr class="row_even"><td><strong class="spip">-r</strong></td><td>Tri inversé. </td></tr>
<tr class="row_odd"><td><strong class="spip">-tc</strong></td><td>Sépare les champs par le caractère c. </td></tr>
<tr class="row_even"><td><strong class="spip">+ n [</strong><i class="spip"> <strong class="spip">-m</strong> </i><strong class="spip">]</strong></td><td>Saute les <i class="spip"> n </i> permiers champs et trie jusqu’à la position <i class="spip"> m </i> du champ. Si <i class="spip"> m </i> n’existe pas, trie jusqu’à la fin de la ligne. </td></tr>
<tr class="row_odd"><td><strong class="spip">-k n [</strong><i class="spip"> <strong class="spip">,m</strong> </i><strong class="spip">]</strong></td><td>Semblable au précédent. Saute les <i class="spip"> n-1 </i> permiers champs et trie jusqu’à la position <i class="spip"> m-1 </i>. Ici les champs sont numérotés à partir de 1. </td></tr>
</tbody>
</table>
<p class="spip">Exemples :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>$ ls -l | sort -n -k5<br />
$ sort +2n -t: /etc/passwd</code></div>
<h2>bc [ -options ] [ fichiers ] </h2>
<p class="spip"><strong class="spip">bc</strong> est un language dont la syntaxe ressemble au C, permettant d’effectuer des calculs en précision infinie.</p>

<table class="spip">
<thead><tr class='row_first'><th scope='col'><strong class="spip">Option</strong></th><th scope='col'><strong class="spip">Commentaire</strong></th></tr></thead>
<tbody>
<tr class="row_even"><td><strong class="spip">-l</strong></td><td>Utilise la bibliothèque mathématique standard. Indispensable si vous souhaitez utiliser des fonctions telles que <i class="spip"> sin, cos, log, </i> ... </td></tr>
<tr class="row_odd"><td><strong class="spip">-q </strong><i class="spip"> <strong class="spip">fichier</strong> </i></td><td>N’affiche pas le message de bienvenue. </td></tr>
</tbody>
</table>
<p class="spip">Exemples :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>$ echo "5*12.35" | bc -l<br />
$ du -ks * | cut -f1 | bc -l</code></div>
<h2>wc [ -options ] [ fichiers ] </h2>
<p class="spip">Affiche le nombre de lignes, de mots ou de caractères de « fichier ». Si « <i class="spip"> fichier » </i> est omis, lit l’entrée standard.</p>

<table class="spip">
<thead><tr class='row_first'><th scope='col'><strong class="spip">Option</strong></th><th scope='col'><strong class="spip">Commentaire</strong></th></tr></thead>
<tbody>
<tr class="row_even"><td><strong class="spip">-c</strong></td><td>Affiche le nombre de caractères. </td></tr>
<tr class="row_odd"><td><strong class="spip">-l</strong></td><td>Affiche le nombre de lignes. </td></tr>
<tr class="row_even"><td><strong class="spip">-w</strong></td><td>Affiche le nombre de mots. </td></tr>
</tbody>
</table>
<p class="spip">Exemples :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>$ wc -w mon_super_livre.txt<br />
$ ls | wc -l</code></div>
<h2>cut -options [ fichiers ] </h2>
<p class="spip">Sélectionne une partie de chaque ligne d’un fichier. On utilise la virgule pour séparer les valeurs d’une liste, et le tiret pour préciser des plages.</p>

<table class="spip">
<thead><tr class='row_first'><th scope='col'><strong class="spip">Option</strong></th><th scope='col'><strong class="spip">Commentaire</strong></th></tr></thead>
<tbody>
<tr class="row_even"><td><strong class="spip">-c </strong><i class="spip"> <strong class="spip">list</strong> </i></td><td>Affiche uniquement les caractères situés aux positions précisées dans liste. </td></tr>
<tr class="row_odd"><td><strong class="spip">-d </strong><i class="spip"> <strong class="spip">c</strong> </i></td><td>Avec l’option <strong class="spip">-f</strong>, permet de spécifier le caractère <i class="spip"> c </i> comme séparateur de champs. </td></tr>
<tr class="row_even"><td><strong class="spip">-f </strong><i class="spip"> <strong class="spip">liste</strong> </i></td><td>Affiche les champs précisés dans liste. </td></tr>
</tbody>
</table>
<p class="spip">Exemples :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code># cut -d: -f1,5 /etc/passwd<br />
$ cut -c1-68 fichier.txt</code></div>
<h2>tr [ -options ][ Chaîne1 ][ Chaîne2 ] </h2>
<p class="spip">Copie l’entrée standard vers la sortie standard en remplaçant les caractères de <i class="spip"> chaîne1 </i> par <i class="spip"> chaîne2 </i>.</p>

<table class="spip">
<thead><tr class='row_first'><th scope='col'><strong class="spip">Option</strong></th><th scope='col'><strong class="spip">Commentaire</strong></th></tr></thead>
<tbody>
<tr class="row_even"><td><strong class="spip">-d</strong></td><td>Supprime certains caractères de chaîne1. </td></tr>
<tr class="row_odd"><td><strong class="spip">-s</strong></td><td>Exclut de « <i class="spip"> Chaîne2 » </i> les caractères en double dans « Chaîne1 ».</td></tr>
</tbody>
</table>
<p class="spip">Exemples :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>$ tr " " "_" fichier <br />
$ cat fichier | tr -d : > fichier2</code></div>
<h2>type [ -options ] commandes </h2>
<p class="spip">Affiche la référence absolue de <i class="spip"> commandes </i> et indique si elles sont ou non au registre hash.</p>

<table class="spip">
<thead><tr class='row_first'><th scope='col'><strong class="spip">Option</strong></th><th scope='col'><strong class="spip">Commentaire</strong></th></tr></thead>
<tbody>
<tr class="row_even"><td><strong class="spip">-a</strong></td><td>Affiche toutes les commandes portant le nom <i class="spip"> commande </i> et pas seulement celles lancées par défaut. </td></tr>
<tr class="row_odd"><td><strong class="spip">-t</strong></td><td>Indique si <i class="spip"> commande </i> est un alias, un mot-clé, une fonction, une fonction interne ou un fichier. </td></tr>
</tbody>
</table>
<p class="spip">Exemples :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>$ type -a kill<br />
$ type -t ls</code></div>
<h2>passwd [ -options ] [ utilisateur ] </h2>
<p class="spip">Change le mot de passe d’un <i class="spip"> utilisateur </i>. Seul le propriétaire ou le super utilisateur peut changer un mot de passe. Le propriétaire n’a pas à spécifier <i class="spip"> utilisateur </i>.</p>

<table class="spip">
<thead><tr class='row_first'><th scope='col'><strong class="spip">Option</strong></th><th scope='col'><strong class="spip">Commentaire</strong></th></tr></thead>
<tbody>
<tr class="row_even"><td><strong class="spip">-d</strong></td><td>C’est un moyen rapide de désactivation du mot de passe d’un compte. Il rendra inutile la saisie d’un mot de passe pour un compte donné. Disponible uniquement pour root. </td></tr>
</tbody>
</table>
<p class="spip">Exemples :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>$ passwd toto secret <br />
$ passwd</code></div>
<h2>awk [ -options ] [ fichier_programme ] [ fichier(s) ] </h2>
<p class="spip"><strong class="spip">awk</strong> est un langage d’examen et de traitement de motifs. Il permet :
<br /></p>
<li> Le traitement d’un fichier comme s’il constituait une base de données composées de d’enregistrements et de champs.
<br /><li> L’usage de variables pour modifier la base de données. 
<br /><li> L’exécution de commandes shell dans un script. 
<br /><li> L’exécution d’opérations sur les nombres et les chaînes. 
<br /><li> L’usage de structure de programmation (boucles, conditions...). 
<br /><li> La création de fonctions personnelles. 
<br /><li> Le traitement du résultat de commandes shell. 
<br /><li> La production de rapports formatés.
<p class="spip">Inutile de dire que le sujet est vaste. Je me contenterai donc de donner quelques exemples d’utilisation. Reportez-vous à la page de manuel de la fonction pour de plus amples explications.</p>

<table class="spip">
<thead><tr class='row_first'><th scope='col'><strong class="spip">Option</strong></th><th scope='col'><strong class="spip">Commentaire</strong></th></tr></thead>
<tbody>
<tr class="row_even"><td><strong class="spip">-f </strong><i class="spip"> <strong class="spip">fichier</strong> </i></td><td>Lit les commandes <strong class="spip">awk</strong> dans fichier plutôt que depuis l’entrée standard. </td></tr>
<tr class="row_odd"><td><strong class="spip">-Fc</strong></td><td>Utilise le caractère <strong class="spip">c</strong> comme séparateur de champs. </td></tr>
</tbody>
</table>
<p class="spip">Exemples :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>$ awk -F: '{print $1 "\t" $5}' /etc/passwd<br />
$ ls -l | grep ^- | awk '{somme+=$5}END{print "Total taille fichiers : ", somme}'</code></div>
<h2>sed [ -options ] [ commandes ] [ fichier(s) ] </h2>
<p class="spip"><strong class="spip">sed</strong> est un éditeur de flots. Il permet d’éditer des fichiers sans interaction avec l’utilisateur. Tout comme <strong class="spip">awk</strong>, il s’agit là d’une commande extrèmement vaste et complexe, faisant appel massivement aux expressions régulières et que je survolerai. Sachez que <strong class="spip">sed</strong> permet :
<br /></p>
<li> L’édition simultanée de plusieurs fichiers. 
<br /><li> La simplification des modifications répétitives apportées à un fichier. 
<br /><li> La rédaction de programmes de conversion.
<table class="spip">
<thead><tr class='row_first'><th scope='col'><strong class="spip">Option</strong></th><th scope='col'><strong class="spip">Commentaire</strong></th></tr></thead>
<tbody>
<tr class="row_even"><td><strong class="spip">-e </strong><i class="spip"> <strong class="spip">commande</strong> </i></td><td>Indique que l’argument suivant est une commande d’édition. Nécessaire dans le cas d’enchaînement de plusieurs commandes. </td></tr>
<tr class="row_odd"><td><strong class="spip">-f </strong><i class="spip"> <strong class="spip">fichier</strong> </i></td><td>Indique que <i class="spip"> fichier </i> est un script contenant les commandes d’édition. </td></tr>
<tr class="row_even"><td><strong class="spip">-g</strong></td><td>Toutes les substitutions sont globales. </td></tr>
</tbody>
</table>
<p class="spip">Exemples :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>$ sed 's/10.0.0.1/192.168.1.1/' fichier > fichier.tmp<br />
$ sed -g -e 's/\([^~]\){}>>/\1\~{}>>/' -e 's/{}<<\([^~]\)/{}<<\~\1/' fichier1 > fichier.new</code></div>
<h2>Historique des modifications</h2>
<table class="spip">
<thead><tr class='row_first'><th scope='col'><strong class="spip">Version</strong></th><th scope='col'><strong class="spip">Date</strong></th><th scope='col'><strong class="spip">Commentaire</strong></th></tr></thead>
<tbody>
<tr class="row_even"><td>0.1</td><td>2002</td><td><strong class="spip">Thierry COLAS</strong>, auteur original du document « Lignes de commandes - le pense bête de COAGUL »</td></tr>
<tr class="row_odd"><td>0.2</td><td>2004</td><td><strong class="spip">Marc P</strong><strong class="spip">OIROUD</strong> pour la conversion en LATEX , PDF et HTML. <strong class="spip">Gnunux</strong>, pour sa relecture</td></tr>
<tr class="row_even"><td>0.3</td><td>21/03/05</td><td><strong class="spip">Tony</strong> pour la conversion au format OOo / Spip et le découpage en 7 articles.</td></tr>
</tbody>
</table>