Se connecter / S'enregistrer
Votre question

Les principaux outils et logiciels en ligne de commande.

Tags :
  • Logiciels
  • Système d'exploitation
Dernière réponse : dans Systèmes d'exploitation
10 Juin 2008 13:01:42

Bonjour à tous !

Aujourd'hui, je vais essayer de vous parler de quelque chose que tous les néophytes détestent !
LA LIGNE DE COMMANDE !

Souvent les gens se disent.. "Mais ça veut rien dire, c'est du charabia, faut tout apprendre par coeur"... Et bien justement non, les commandes sont généralement constituées d'un logiciel à connaître au début, puis des arguments, options, etc. à lui faire passer.

Je vais aborder avec vous différents logiciels, et petits trucs qui m'ont permis de gagner un temps précieux ! :) 
Ce tutoriel n'a pas pour but premier d'être ultra complet, et ne décrit que les actions de bases, et parfois "un peu" plus avancées.
Ce tuto ne repose pas sur une distrib en particulier, tout ce qui est écrit là, est fonctionnel en général sur tous les Unices, GNU/Linux etc.

GREP et CAT


Tout d'abord, grep est LE logiciel indispensable.
Imaginons... Vous avez un fichier de 100.000 mots, et vous voulez en trouver un en particulier.
Pour cela, nous allons utiliser la commande cat qui sert à afficher un fichier en console, couplée à la commande grep.
Pour vous montrer ce que cat seul nous donnerais:
  1. cat fichier

Citation :

Ligne 1
Ligne 2
Ligne 3
Ligne 4
Ligne 5
[...]
Ligne 99.999
Ligne 100.000

Bien sûr, les [...] seront juste les 99.995 autres lignes qui défileront.
Maintenant, couplons cat à grep:
La commande grep doit être taper après cat avec la séparation qui se nomme "le pipe" en Français, "le tuyaux". (Je crois qu'on va garder pipe :) )
Ce "pipe" se fait avec la touche "AltGr+6".
Il sert à rediriger les résultats d'une commande, vers une autre commande.
Ce qui donne:
  1. cat fichier | grep Ligne 5

Nous donneras comme résultat:
Citation :

Ligne 5


Bon, c'est une utilisation très basique, mais grep et cat peuvent s'avérer très puissants.
Imaginez... vous avez un repertoire, dans lequel se trouve 20 sous répertoires, contenant tous des fichiers de code PHP, ou C.
Vous remarquez sur une de vos pages web/applications, que vous avez fait une faute d'orthographe, mais dans tous ces fichiers, vous ne savez plus où donner de la tête.

Très facile à régler, imaginons que vos fichiers se trouvent dans /var/www/php:
  1. grep -R "mon mot, ou ma phrase avec la faute" /var/www/php/

-R est l'option qui signifie "recursif", ce qui veut dire que grep ira aussi chercher dans tous les répertoires de /var/www/php/
Vous laissez grep faire son boulot, et il vous donnera le nom, ainsi que l'emplacement du fichier incriminé.

Grep marche aussi bien avec des fichiers, qu'avec une commande.

Il y'a aussi l'option grep -v "votre chaine" qui ne montrera PAS un mot voulu.
Par exemple, la commande dmesg me montre tout ce qui se passe dans mon système.
Je doit coller cette commande sur ce forum, et imaginons que ma clé Wep est stocké en clair avec cette commande (ce qui n'est bien sûr pas le cas), dans une ligne commençant par: Wifi key...

Mon dmesg sans grep, me donnerait d'abord ça:
Citation :

[ 73.056774] Bluetooth: RFCOMM TTY layer initialized
[ 73.056775] Bluetooth: RFCOMM ver 1.8
[ 75.200328] agpgart: Found an AGP 3.0 compliant device at 0000:00:00.0.
[ 75.200688] agpgart: Putting AGP V3 device at 0000:00:00.0 into 8x mode
[ 75.200950] agpgart: Putting AGP V3 device at 0000:01:00.0 into 8x mode
[ 75.713593] NET: Registered protocol family 10
[ 75.713771] lo: Disabled Privacy Extensions
[ 75.714075] ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 115.549651] NET: Registered protocol family 17
yanis@Roxor:~$ dmesg | grep wlan
[ 63.347221] wlan0: ethernet device 00:0b:6b:6c:c8:80 using NDIS driver: prisma02, version: 0x30319, NDIS version: 0x500, vendor: '802.11g USB 2.0 adapter', 1435:0427.F.conf
[ 63.347257] wlan0: encryption modes supported: WEP; TKIP with WPA, WPA2, WPA2PSK; AES/CCMP with WPA, WPA2, WPA2PSK
[ 68.321547]Wifi wep key: blablatrucmachin bidule
[ 86.318414] wlan0: no IPv6 routers present
[ 143.020694] wlan0: no IPv6 routers present

(Pour la petite précision, c'est un bout de MON dmesg)

Je veux maintenant faire disparaître la ligne en gras.
Il me suffira de faire:
  1. dmesg | grep -v wifi

Afin qu'il me donne le même dmesg, mais sans la clé, ce qui donnera:
Citation :
[ 73.056774] Bluetooth: RFCOMM TTY layer initialized
[ 73.056775] Bluetooth: RFCOMM ver 1.8
[ 75.200328] agpgart: Found an AGP 3.0 compliant device at 0000:00:00.0.
[ 75.200688] agpgart: Putting AGP V3 device at 0000:00:00.0 into 8x mode
[ 75.200950] agpgart: Putting AGP V3 device at 0000:01:00.0 into 8x mode
[ 75.713593] NET: Registered protocol family 10
[ 75.713771] lo: Disabled Privacy Extensions
[ 75.714075] ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 115.549651] NET: Registered protocol family 17
yanis@Roxor:~$ dmesg | grep wlan
[ 63.347221] wlan0: ethernet device 00:0b:6b:6c:c8:80 using NDIS driver: prisma02, version: 0x30319, NDIS version: 0x500, vendor: '802.11g USB 2.0 adapter', 1435:0427.F.conf
[ 63.347257] wlan0: encryption modes supported: WEP; TKIP with WPA, WPA2, WPA2PSK; AES/CCMP with WPA, WPA2, WPA2PSK
[ 86.318414] wlan0: no IPv6 routers present
[ 143.020694] wlan0: no IPv6 routers present


Nano

Cette fois ci, ça va aller vite. Je sais que beaucoup de gens préferent vim, vi ou Emacs, mais sans me lancer dans le troll, je les trouve un peu compliqués pour des néophytes, ils ont aussi beaucoup d'options inutiles seulement pour de petites actions.

Petit rappel, Nano est un editeur dérivé de Pico.
Comment ouvrir un fichier avec nano ?

Tout simplement, en tapant dans votre terminal:
  1. nano votre_fichier


Et comment faire pour ouvrir plusieurs fichiers ?
  1. nano votre_fichier1 votre_fichier2


Enregistrer votre fichier une fois dans nano: Ctrl+O
Rechercher du texte: Ctrl+W
Quitter nano: Ctrl+X
Activer correcteur orthographique: Ctrl+T

Voilà, je vous avait dit que le point Nano allait être court.

Sed

Sed est un logiciel que j'apprécie tout particulièrement. Il permet de remplacer des chaînes de caractères dans un fichier.
Je vais vous expliquer son fonctionnement le plus simple, car il faut avouer que j'en sais pas beaucoup sur ce petit soft.
Prenoms l'exemple d'un fichier .txt, dans lequel vous voulez changer tous les "IDN" en "TomsGuide".
Pour ça il suffira de faire:
  1. sed -i 's/IDN/TomsGuide/' fichier.txt


Et c'est fait ! :D  Pour info, la commande -i permet d'insérer le remplacement directement dans le fichier, sinon vous devrez jouer avec les pipe, etc. :) 

Trucs et astuces

Mise en situation ! :p  Imaginez vous... Vous revenez de vacances, vous avez pris de JOOOLLIIEESS photos, mais il y'en a d'autre que vous voulez effacer.
On va dire que votre appareil photo numérique les nomme ainsi:
Citation :
Photo0001.jpg
Photo0002.jpg
Photo0003.jpg
Photo0004.jpg
Photo0005.jpg

On va dire que les premières photos sont ratés dû au mauvais temps. :D  Vous ne voulez garder que celles à partir de "Photo00120.jpg".
Malheureusement, vous les avez importer sur votre ordinateur en rapidité, et vous les avez mises dans le premier répertoire qui venait, qui contient d'autres fichiers .run, .txt, .PNG etc.
En mode graphique, que feriez vous ? Vous vous déplacez dans votre repertoire, vous selectionnez toutes les photos prises, qui sont mélangées entre les autres fichiers, en ésperant ne pas choisir un fichier dont vous ne vouliez pas.
Alors qu'en terminal, c'est très simple:
  1. rm Photo[0001-00120].jpg

Et voilà, toutes les photos de 0001 à 00120 ont été effacées, et sans risque d'effacer un quelconque autre fichier.

Comment rediriger le résultat d'une commande, dans une autre commande ?

Houla, ça peut vous paraître compliquer ce que je raconte, mais en fait c'est très simple.
Comme toujours... prenons un exemple.
J'ai par exemple un repertoire, avec 100 fichiers, chacun nommés par le nom d'un paquet que je veux installer.
Comment tout installer d'un coup ?

Tout simplement, en faisant "ls" par exemple, vous allez avoir la liste des fichiers du répertoire, (donc la liste des paquets que vous voulez installer) par exemple, dans le répertoire tuto, j'ai 2 fichiers nommés par le nom de paquets. (oui je sais, avec 2 fichiers autant les installer à la main, mais avec 100 ça devient vite chiant ! :D ) Je veux les installer simplement, voici la commande pour Ubuntu/Debian par exemple:
  1. sudo apt-get install $(ls)

Il suffit juste de rajouter un $(votre_commande) après le nom de votre commande. Très simple non ? :) 

Voilà, c'est terminé pour l'instant, mais j'ai encore d'autres idées en tête, j'éditerais sûrement bientôt ce post.

Autres pages sur : principaux outils logiciels ligne commande

10 Juin 2008 15:49:23

je suis pas sur que tu attires les foules :p 

Moi123@IDN a dit :

Il y'a aussi l'option grep -v "votre chaine" qui ne montrera PAS un mot voulu.

plutot la ligne contenant ce mot
Moi123@IDN a dit :
Pour info, la commande -i permet d'insérer le remplacement directement dans le fichier, sinon vous devrez jouer avec les pipe, etc. :) 

avec des fichiers temporaires, parce que si tu touches le fichier pendant qu'il est parsé par sed, ca risque de faire du grabuge ;) 
Moi123@IDN a dit :

  1. sudo apt-get install $(ls)


ca marche pour ce cas la, car il est rare qu'un nom de paquet contienne un espace ou un caractère spécial, mais si c'est le cas, la commande échoue.
toujours préférer * à $(ls) ou `ls`, notamment dans les constructions genre:
  1. for i in $(ls) ...

lui préférer
  1. for i in * ...

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS