samedi, octobre 06, 2012

Utiliser Linux avec la ligne de commande

 

 

 

Utiliser la ligne de commande sous Linux

Se connecter en tant que root

Des exemples pratiques de la ligne de commande sous Linux

S'orienter avec la commande pwd
Lister les fichiers avec la commande ls
Se déplacer en ligne de commande avec la commande cd
Afficher avec la commande echo et cat
Copier et déplacer les fichiers avec les commandes cp et mv
Changer d'utilisateur avec les commandes su et exit
Changer les permissions des fichiers avec la commande chmod
Supprimer des fichiers avec la commande rm

Introduction au Shell de Linux

L'auto-suggestion des commandes Linux par la touche Tabulation
L'historique des commandes sous Linux

Programmer le Shell Linux

La variable d'environnement PATH dans Linux

J'ai délaissé un peu le dossier sur l'installation de Linux et de l'installation d'un serveur web avec Linux. Dans notre dernier article, nous avons parlé d'utiliser Linux au quotidien avec des tâches basiques. Cette fois, nous abordons l'un des aspects les plus puissants de Linux avec la ligne de commande. Contrairement à Windows ou à Mac, l'interface graphique est facultative dans Linux. Si vous êtes un utilisateur expérimenté ou que vous avez un certain besoin (par exemple, des anciens ordinateurs), alors vous pouvez utiliser toutes les fonctionnalités de Linux avec la ligne de commande. En fait, les commandes de la ligne de commande Linux sont plus rapides que les étapes avec un environnement tel que Gnome ou KDE. Mais Linux a suivi l'évolution de l'informatique et de nos jours, de nombreux environnements graphiques sont disponibles, mais la ligne de commande reste le meilleur ami de l'administrateur de Linux.

Comme dans nos précédents articles, nous utilisons la distribution Fedora et l'environnement Gnome. Pour accéder au terminal dans Gnome, allez dans Applications/Outils Système/Terminal.

 

utiliser-ligne-commande-linux_1

 

Note : Notez que comme toutes choses dans Linux, le terminal de Gnome peut être entièrement personnalisé. Ainsi, vous pouvez changer son arrière-plan (couleur ou image), jouer sur l'opacité, utiliser différents tailles et polices de caractères. Vous pouvez changer ces réglages dans allant dans Edition/Profil Actuel.

 

utiliser-ligne-commande-linux_2

 

Pour comprendre la puissance de la ligne de commande sous Linux, prenons un exemple concret sur les étapes en mode console et leur équivalent en mode graphique. Ainsi, la commande suivante :

[kermit@swinetrek ~]$ find /var/backup/* -ctime +5 -exec rm {} \;

Cette commande Linux permet de supprimer les sauvegardes du système qui datent de plus de 5 jours. Cette commande utilise find pour chercher les fichiers dans le répertoire /var/backup qui datent de moins de 5 jours. Pour chaque fichier trouvé, il enchaine avec la commande rm qui le supprime. Mais de nos jours, la capacité des disques durs permet d'éviter d'utiliser trop fréquemment cette commande. Par ailleurs, cette commande Linux serait plus efficace si on la combinait avec un processus automatisé qui pourrait supprimer automatiquement les fichiers datant de plus de 5 jours.

Maintenant, comparons la même tâche en mode graphique :

  • Utiliser la souris
  • Double-cliquer sur l'icône Poste de Travail sur le bureau
  • Double-cliquer sur le système de fichier pour revenir au dossier racine
  • Double-cliquer sur le répertoire var pour ouvrir ce dossier
  • Double-cliquer sur le répertoire backup
  • Sélectionner la vue sur liste pour voir les dates de création des fichiers
  • Utiliser la touche Ctrl pour sélectionner les fichiers à supprimer
  • Faire un clic-droit et sélectionner Supprimer dans le menu contextuel
  • Pour supprimer définitivement les fichiers, retourner sur le bureau, faire un clic-droit sur la Corbeille et sélectionner Vider la corbeille.

On n'a pas besoin d'être un génie pour comprendre l'avantage de la ligne de commande. Le mode graphique parait plus convivial, mais cela prend bien plus de temps. En ligne de commande Linux, vous pouvez effectuer toutes ces tâches en une seule étape plutôt que de diviser le processus en plusieurs parties.

Cependant, ce n'est pas le seul avantage de la ligne de commande Linux. En fait, le processus deviendrait barbant si on devait le répéter manuellement à chaque fois. Imaginez qu'on doive se rappeler de cette commande complexe trois fois par mois ! Mais la puissance de la ligne de commande de Linux montre tout son potentiel avec les scripts automatisés. Ainsi, si vous configurez cette commande avec l'utilitaire cron, alors le processus se fait automatiquement sans aucune intervention de votre part et ce, dans un délai précisé à l'avance. C'est comme les tâches planifiées sous Windows, mais c'est bien plus sophistiqué. Que vous soyez un utilisateur débutant ou avancé, vous devez connaitre la ligne de commande de Linux.

Utiliser la ligne de commande sous Linux

Quand vous utilisez la ligne de commande de Linux, vous ouvrez ce qu'on peut penser à une fenêtre alternative à celle du mode graphique, mais qui serait bien plus puissante. Le mode console vous donne accès à des fonctionnalités de bas niveau qui sont impossibles dans le mode graphique. En fait, le mode graphique est juste une couche qu'on a superposé sur le mode console pour qu'il soit plus convivial. Tous les menus et les icônes que vous voyez dans Gnome ou KDE ne représentent pas les fonctions, mais des équivalent des vraies fonctions en ligne de commande. Etant donné que tous nos articles se basent sur l'installation et l'administration d'un serveur web Linux, on doit maitriser la ligne de commande pour le maximum d'efficacité.

Astuce : Quand on parle de fonctionnalités de haut et de bas niveau, cela implique une hiérarchie de ces fonctionnalités. Les fonctions de bas niveau communiquent directement avec le kernel et donc, elles sont plus puissantes et plus souples. Comparons la commande rm avec son équivalent dans Nautilus. La commande rm supprime simplement le fichier; c'est rapide et efficace. Nautilus insiste pour que vous déplaciez le fichier dans la Corbeille. La suppression proprement dite ne se produit que lorsque vous videz cette corbeille.

Se connecter en tant que root

Nous avons déjà parlé du fait de se connecter en tant que root dans Linux. Pour le faire à partir du terminal, vous utilisez la commande su :
[kermit@swinetrek ~]$ su
Password:

On vous demandera votre mot de passe root. Et une fois que vous l'avez entré, vous avez un accès complet à votre système. Utilisez-le avec prudence. Bien que certaines tâches nécessitent toujours un accès root, il est important de suivre les bonnes pratiques d'une utilisation de Linux. Et la principale est d'utiliser root tant que c'est nécessaire. Ne soyez pas tenté de vous connecter en permanence avec root, car vous risquerez de détruire des fichiers système et ensuite, on parcourt les forums de Linux comme une âme en peine pour chercher la solution. Pour quitter le compte root, utilisez la commande exit.

Des exemples pratiques de la ligne de commande sous Linux

Regardons quelques exemples concrets de la ligne de commande sous Linux.

S'orienter avec la commande pwd

Dans Nautilus, nous pouvions ouvrir plusieurs dossiers, mais dans la ligne de commande, on ne peut travailler que sur un seul dossier à la fois. Le répertoire actuel est appelé le répertoire de travail. Pour connaitre votre répertoire actuel, tapez simplement la commande pwd (print working directory) :

[kermit@swinetrek ~]$ pwd
/home/kermit

Astuce : Votre répertoire home, /home/votrenom, est souvent référé avec le symbole ~. Avez-vous remarqué ce symbole dans l'invite de commande et cela indique que vous vous trouvez actuellement dans votre répertoire home. Quand nous commencerons à naviguer dans le système, l'invite reflétera le nom du répertoire dans lequel vous travaillez. Ainsi, vous n'aurez pas toujours besoin de la commande pwd pour déterminer où vous êtes.

Lister les fichiers avec la commande ls

La commande ls (list) affiche simplement les fichiers du répertoire de travail.

[kermit@swinetrek ~]$ ls
Desktop  Hello World.txt

Vous pouvez afficher les fichiers d'un autre répertoire en ajoutant le nom de ce répertoire à la ligne de commande Linux. Par exemple, ls / affichera tout dans le répertoire racine.

[kermit@swinetrek ~]$ ls /
bin   dev  home  lost+found misc  net  proc  sbin    srv  tmp  var
boot  etc  lib   media      mnt   opt  root  selinux sys  usr

Utiliser uniquement la commande ls affichera les noms des fichiers, mais avec l'attribut -l, on peut afficher les détails de ces fichiers.

[kermit@swinetrek ~]$ ls -l
total 16
drwxr-xr-x  2 kermit kermit 4096 Sep  5 14:21 Desktop
-rw-rw-r--  1 kermit kermit   13 Sep  8 07:30 Hello World.txt

On peut trouver de nombreuses informations sur le fichier avec cet attribut. La première colonne représente les permissions des fichiers (que nous abordons un peu plus tard). Mais en bref, le premier caractère d indique que c'est un répertoire: les 9 caractères qui suivent montrent les permissions de lecture, d'écriture et d'exécution pour le propriétaire, le groupe et les autres.

  • La colonne suivante est uniquement utile pour les répertoires, elle reflète le nombre de fichiers dans le répertoire. Pour un fichier, le nombre sera 1.
  • Les 2 prochaines colonnes identifient le propriétaire et le groupe assigné au fichier. Dans ce cas, les deux sont à kermit.
  • La taille du fichier est affiché en bits. Le fichier Hello world.txt pèse 13 bits.
  • Ensuite, nous avons la date et l'heure de la dernière modification sur le fichier. Dans notre exemple, il s'agit du 5 septembre à 2:21 pm. Et finalement, nous avons le nom du fichier.

La commande ls -l est tellement pratique que Fedora possède un raccourci intégré avec la commande ll.

Votre répertoire home contiendra un certain nombre de fichiers cachés. Dans Linux, nous pouvons cacher un fichier en ajoutant un point (.) au début du fichier. Si nous renommions Hello world.txt en .Hello world.txt, celui-ci deviendrait un fichier caché. Les fichiers cachés contiennent souvent des informations de configuration pour l'utilisateur et nous pouvons utiliser l'attribut -a pour afficher les fichiers cachés dans Linux. Et si nous voulions les détails des fichiers, nous utiliserions la commande :

[kermit@swinetrek ~]$ ll -a
total 212
drwx------  13 kermit kermit 4096 Sep  8 09:16 .
drwxr-xr-x   5 root   root   4096 Sep  6 13:48 ..
-rw-------   1 kermit kermit    5 Sep  8 06:21 .bash_history
-rw-r--r--   1 kermit kermit   24 May 10 10:15 .bash_logout
-rw-r--r--   1 kermit kermit  191 May 10 10:15 .bash_profile
-rw-r--r--   1 kermit kermit  124 May 10 10:15 .bashrc
drwxr-xr-x   2 kermit kermit 4096 Sep  5 14:21 Desktop
-rw-------   1 kermit kermit   26 Sep  6 14:20 .dmrc
drwxr-x---   2 kermit kermit 4096 Sep  6 14:21 .eggcups
-rw-r--r--   1 kermit kermit  438 May 18 01:23 .emacs
-rw-------   1 kermit kermit   16 Sep  6 14:28 .esd_auth
drwx------   4 kermit kermit 4096 Sep  6 14:31 .gconf
drwx------   2 kermit kermit 4096 Sep  6 14:31 .gconfd
drwxrwxr-x   3 kermit kermit 4096 Sep  6 14:21 .gnome
drwx------   7 kermit kermit 4096 Sep  6 14:31 .gnome2
drwx------   2 kermit kermit 4096 Sep  6 14:20 .gnome2_private
drwxr-xr-x   2 kermit kermit 4096 Sep  6 14:21 .gstreamer-0.8
-rw-r--r--   1 kermit kermit  120 May 22 15:18 .gtkrc
-rw-rw-r--   1 kermit kermit  134 Sep  6 14:20 .gtkrc-1.2-gnome2
-rw-rw-r--   1 kermit kermit   13 Sep  8 07:30 Hello World.txt
-rw-------   1 kermit kermit    0 Sep  6 14:31 .ICEauthority
drwx------   3 kermit kermit 4096 Sep  6 14:21 .metacity
drwx------   2 kermit kermit 4096 Sep  6 14:22 .mozilla
drwxr-xr-x   3 kermit kermit 4096 Sep  6 14:21 .nautilus
-rw-------   1 kermit kermit   50 Sep  6 14:26 .recently-used
-rw-------   1 kermit kermit  497 Sep  6 14:21 .rhn-applet.conf
-rw-------   1 kermit kermit   66 Sep  8 09:16 .xauth3R8EvP
-rw-r--r--   1 kermit kermit  658 Jan 16  2005 .zshrc

Au début du listing, nous voyons deux répertoire nommés . et .. Ce sont des raccourcis pour le répertoire actuel et le répertoire parent.

Se déplacer en ligne de commande avec la commande cd

La commande cd est pour change directory. Il permet de se déplacer dans un répertoire donné.

[kermit@swinetrek ~]$ cd /etc/httpd/
[kermit@swinetrek httpd]$

Utilisé sans aucun répertoire, la commande cd vous ramène à votre répertoire home.

[kermit@swinetrek httpd]$ cd
[kermit@swinetrek ~]$

La commande cd /home/kermit et cd ~ font la même chose. Vous pouvez vous déplacer dans le dossier parent avec la commande cd..

[kermit@swinetrek ~]$ cd ..
[kermit@swinetrek home]$

 

Afficher avec la commande echo et cat

 

La commande echo affiche simplement la sortie vers l'écran.

[kermit@swinetrek ~]$ echo "Hello, World\!"
Hello, World!

Astuce : Certains caractères sont réservés pour une utilisation spéciale dans la ligne de commande Linux tel que le point d'exclamation !. Cependant, vous utiliserez ces caractères dans les options des commandes ou dans les noms de fichiers. Pour utiliser ces caractères, vous pouvez les ignorer en les préfixant avec le caractère \. Si vous utilisez des espaces dans vos noms de fichier, vous avez besoin d'ignorer les espaces dans la ligne de commande. Ainsi, notre fichier Hello world.txt doit être accédé en le transformant en Hello\ World.txt.

La commande cat ouvre un fichier et affiche son contenu sur l'écran.

[kermit@swinetrek ~]$ cat Hello\ World.txt
Hello, World!

 

Copier et déplacer les fichiers avec les commandes cp et mv

 

La commande cp crée une copie du fichier et on peut spécifier le nom du second fichier.

[kermit@swinetrek ~]$ cp Hello\ World.txt Copy.txt
[kermit@swinetrek ~]$ ls
Desktop  Hello World.txt  Copy.txt

Ici, nous avons dupliqué le fichier Hello World.txt, mais en le nommant Copy.txt. Nous pouvons créer une copie du fichier dans un autre répertoire tel que :

[kermit@swinetrek ~]$ cp Hello\ World.txt \
>/var/backup/Hello\ World.txt
[kermit@swinetrek ~]$

Notez que dans cet article, je sépare la commande en plusieurs lignes à cause de la largeur nécessaire. Si vous voulez faire la même chose dans votre ligne de commande Linux, vous avez besoin de terminer chaque ligne avec un espace suivi d'un backslash (\). Quand vous appuyez sur Entrée après cette terminaison, vous obtiendrez le symbole > qui vous invite à entrer le reste de la commande. Mais en général, vous pouvez entrer les commandes Linux en une seule ligne et le terminal retournera automatiquement à la ligne si c'est nécessaire.

Vous pouvez utiliser cp pour copier toute la hiérarchie d'un répertoire. La commande suivante crée un répertoire /var/backup/kermit qui contiendra une copie de tous les fichiers de kermit.

[kermit@swinetrek ~]$ cp -r /home/kermit/ /var/backup/
[kermit@swinetrek ~]$

La commande mv permet de déplacer un fichier d'un répertoire à l'autre.

[kermit@swinetrek ~]$ mv Hello\ World.txt Moved.txt
[kermit@swinetrek ~]$

Dans l'exemple ci-dessous, le fichier Hello World.txt a été déplacé vers un nouveau fichier Moved.txt dans le répertoire;en fait, nous avons juste renommé le fichier. Contrairement à la commande cp, la commande mv ne garde pas le fichier dans son emplacement d'origine. Pour déplacer le fichier dans un répertoire, on peut utiliser la commande :

[kermit@swinetrek ~]$ mv Hello\ World.txt /var/backup/
[kermit@swinetrek ~]$

 

Changer d'utilisateur avec les commandes su et exit

 

Nous avons déjà vu que la commande su permet de se connecter en root et vous demande le mot de passe.

[kermit@swinetrek ~]$ su
Password:
[root@swinetrek kermit]#

Note : Remarquez le changement de l'invite quand vous basculez en root: le caractère à la fin de l'invite change du symbole $ vers le dièse # indiquant que vous êtes connectés comme root. Si vous étiez dans votre répertoire home, le répertoire actuel changera de ~ vers votre ancien nom d'utilisateur. Cela indique que vous n'utilisez pas votre propre compte pour accéder à votre répertoire home, mais plutôt le compte root dans le répertoire home d'un autre utilisateur. Le répertoire home de root est dans /root.

Pour quitter le compte root et revenir à votre ancien compte, utilisez la commande exit :

[root@swinetrek kermit]# exit
exit
[kermit@swinetrek ~]$

Vous pouvez utiliser la commande su pour vous connecter avec un autre nom d'utilisateur du moment que vous connaissez son mot de passe.

[kermit@swinetrek ~]$ su gonzo
Password:
[gonzo@swinetrek kermit]$

 

Changer les permissions des fichiers avec la commande chmod

 

Nous avons déjà vu les permissions et comment les changer en mode graphique. Vous pouvez faire la même chose dans la ligne de commande Linux avec la commande chmod.

[kermit@swinetrek ~]$ chmod o+w Hello\ World.txt
[kermit@swinetrek ~]$ ll
total 16
drwxr-xr-x  2 kermit kermit 4096 Sep  5 14:21 Desktop
-rw-rw-rw-  1 kermit kermit   13 Sep  8 07:30 Hello World.txt

Ici, nous avons donné la permission d'écriture à tous les autres utilisateurs sur le fichier Hello World.txt. Nous disons à chmod de le faire avec les attributs o+w.

  • Le caractère o dit à chmod de gérer les permissions des autres utilisateurs. Cela peut être remplacé par le caractère u pour l'utilisateur, le caractère g pour le groupe ou le caractère a pour les trois types d'utilisateurs.
  • Le caractère + dit à chmod de donner la permission. Il peut être changé en - qui dit à chmod de révoquer la permission.
  • Le caractère w dit à chmod de gérer les permissions d'écriture. Cela peut être changé en r pour la permission de lecture ou en x pour la permission d'exécution.

Vous pouvez aussi combiner ces trois lettres. Par exemple, vous pouvez utiliser ug-w pour révoquer les permissions d'écriture pour l'utilisateur et le groupe.

[kermit@swinetrek ~]$ chmod ug-w Hello\ World.txt
[kermit@swinetrek ~]$

 

Supprimer des fichiers avec la commande rm

 

Comme mentionné précédemment, la commande rm supprime fichier. La commande suivante supprimera le fichier MyCopy.txt

[kermit@swinetrek ~]$ rm MyCopy.txt
[kermit@swinetrek ~]$

Pour supprimer un répertoire et tout ce qu'il contient, nous devons ajouter l'option -r (pour récursive) à la commande tel que :

[kermit@swinetrek ~]$ rm -r untitled\ folder
[kermit@swinetrek ~]$

En général, vous avez besoin de la permission d'écriture sur un fichier pour pouvoir le supprimer;cependant, si vous avez la permission d'écriture sur le dossier, vous pouvez supprimer les fichiers si vous confirmez l'action. Si vous supprimez des fichiers pour lesquels, vous avez seulement la permission d'écriture, on vous demandera si vous voulez supprimer le fichier.

[kermit@swinetrek ~]$ rm Read\ Only.txt
rm: Remove write-protected regular file 'Read Only.txt'? y
[kermit@swinetrek ~]$

Pour forcer la suppression sans la confirmation, ajoutez l'option -f à la commande. Cela peut être combiné avec l'option -r pour supprimer directement un répertoire protégé contre l'écriture.

[kermit@swinetrek ~]$ rm -rf Read\ Only\ Folder
[kermit@swinetrek ~]$

Avertissement : L'utilisation de l'option -f avec la commande rm peut être dangereux. Quand vous êtes connecté comme root, supprimer des répertoires et des fichiers sans confirmation peut provoquer de sérieux dégâts à votre système. La confirmation offre une bonne protection contre les mauvaises manipulations.

Astuce : Nous n'avons vu que quelques commandes de Linux, mais la plus utile est sans doute la commande man. Cette dernière affiche la page d'aide de la commande en question. Pour en connaitre plus sur une commande, précédez simplement man de la commande tel que man ls, man cat, etc. Quand l'aide s'affiche, utilisez les touches de direction haut et bas pour défiler le texte. La barre d'espace défile une page à la fois et la touche Q quitte l'aide et retourne à l'invite de commande.

 

Introduction au Shell de Linux

 

De la même manière que nous utilisons Gnome ou KDE pour interagir avec l'environnement graphique de Linux, nous faisons la même chose avec la ligne de commande Linux par l'intermédiaire du Shell. Nous utilisons le Shell pour toutes nos commandes, donc regardons un peu les options avancées du Shell.

Le Shell par défaut de Fedora (comme pour la plupart des distribution) est bash ou le Bourne Again Shell. bash est une version moderne du Bourne Shell d'origine appelé sh qui a été écrit en 1977. Même si d'autres environnements Shell sont disponibles tel que tcsh, ksh et csh, bash est devenu plus populaire grâce à ses options pratiques. Nous abordons quelques une de ces options ici.

L'auto-suggestion par la touche Tabulation

L'une des options les plus pratiques des Shell moderne est l'auto-suggestion avec la touche de tabulation. Quand vous entrez partiellement une commande ou un nom de fichier dans la ligne de commande Linux et que vous appuyez sur la touche de tabulation, la commande ou le nom de fichier sera complété pour vous. Par exemple, tapez Hello suivi de la touche tabulation affichera cat Hello\ World.txt.

Cependant, tapez cd /etc/ht suivi de la touche tabulation ne retournera rien. C'est parce que deux répertoires commencent avec /etc/ht, à savoir, /etc/httpd et /etc/htdig. Appuyez une seconde fois sur la touche Tabulation affichera les options possibles.

[kermit@swinetrek ~]$ cd /etc/ht
httpd/  htdig/
[kermit@swinetrek ~]$ cd /etc/ht

Nous pouvons utiliser cette ligne pour continuer à taper des caractères supplémentaires jusqu'à ce qu'on identifie le répertoire qu'on recherche;et nous pouvons utiliser la touche tabulation pour l'auto-suggestion pendant le processus.

L'historique des commandes sous Linux

Le Shell bash enregistre un historique limité des commandes précédentes et le défaut est 1000. Vous pouvez utiliser la touche direction Haut pour défiler l'historique de commande et la touche Bas pour l'inverse. Quand vous trouvez la commande recherchée, vous utilisez la touche Entrée pour l'exécuter.

Pour afficher l'historique des commandes Linux, tapez simplement la commande history. Et toutes vos commandes précédents seront affichées dans un ordre chronologique avec la plus ancienne en première position.

[kermit@swinetrek ~]$ history
    1  pwd
    2  ls
    3  ls /
    4  ls -l
    5  ll -a
    6  cd /etc/httpd/
    7  cd
    8  cd ..
    9  echo "Hello, World\!"
   10  cat Hello\ World.txt
   11  cp Hello\ World.txt Copy.txt
   12  cp Hello\ World.txt /var/backup/Hello\ World.txt
   13  cp -r /home/kermit/ /var/backup/
   14  mv Hello\ World.txt Moved.txt
   15  mv Moved.txt /var/backup/
   16  su
   17  su gonzo
   18  chmod o+w Hello\ World.txt
   19  ll
   20  chmod ug-w Hello\ World.txt
   21  rm Copy.txt
   22  rm -r untitled\ folder
   23  rm Read\ Only.txt
   24  rm -rf Read\ Only\ Folder

On peut aussi rechercher dans cet historique de commande. Appuyez sur Ctrl+R changera l'invite en (reverse-i-search`':). Maintenant, tapez l'une des commandes dans votre historique. Le Shell trouvera dans l'historique votre chaine de caractère et l'affichera et utilisez la touche Entrée pour l'exécuter. La touche Echap permet de retourner à l'invite normale. Dans l'exemple ci-dessous, j'ai tapé Hello et trouvé la dernière commande qui implique le fichier Hello World.txt.

(reverse-i-search)`Hello': chmod ug-w Hello\ World.txt

Certains raccourcis intégrés permettent d'être plus efficaces avec l'historique des commandes Linux. Ainsi, la commande !! exécutera la dernière commande dans l'historique. Par exemple, si la dernière commande utilisé était ll, aussi !! relancera cette commande.

[kermit@swinetrek ~]$ !!
ll
total 16
drwxr-xr-x  2 kermit kermit 4096 Sep  5 14:21 Desktop
-rw-rw-r--  1 kermit kermit   13 Sep  8 07:30 Hello World.txt

Une commande partiellement tapée précédée d'un point d'exclamation (!) relancera la dernière commande incluant la chaine de caractère spécifiée. Par exemple, !ech relancera la commande echo.

[kermit@swinetrek ~]$ !ech
echo "Hello, World\!"
Hello, World!

 

Programmer le Shell Linux

 

Le Shell peut être utilisé comme un véritable langage de programmation. Il inclut la boucle, la condition, la variable et tout ce qui fait un environnement de programmation à part entière. Ces programmes Shell appelés des scripts Shell sont juste des fichiers textes avec la permission d'exécution. Les fichiers textes contiennent des commandes comme celles que vous entrez dans la ligne de commande Linux.

hello_world.sh
#!/bin/sh
echo "Hello, World!"

La sortie de ce script est exactement ce que nous espérions :

Hello, World!

Regardons quelques caractéristiques de la programmation Shell sous Linux. Premièrement, nous créons une variable dans le Shell et affichons sa valeur.

[kermit@swinetrek ~]$ COUNTER=0
[kermit@swinetrek ~]$ echo $COUNTER
0

Une fois que la variable COUNTER est crée, elle reste active jusqu'à la fermeture du terminal. La valeur de la variable peut changer, comme vous pouvez le voir, mais la variable elle-même reste inchangée jusqu'à la fermeture du terminal. C'est valable pour n'importe quelle variable Shell.

Si nous utilisons l'opérateur d'incrémentation (++) pour incrémenter la valeur de COUNTER et l'affichons une nouvelle fois, vous verrez que le Shell trace en réalité la valeur de ces variables.

[kermit@swinetrek ~]$ let COUNTER++
[kermit@swinetrek ~]$ echo $COUNTER
1

Construisons un simple script Shell appelé counter_test.sh qui va continuer à compter jusqu'à ce que nous lui demandons d'arrêter avec la combinaison de touches Ctrl+C.

Astuce : Vous pouvez annuler n'importe quel processus de la ligne de commande avec Ctrl+C. Cela revient à envoyer un signal d'interruption au programme. Ce même raccourci va annuler la commande et afficher une nouvelle invite.

La première ligne de n'importe quel script Shell est appelé le shebang qui est un signe dièse (#), suivi d'un point d'exclamation (!), suivi du chemin d'accès au Shell.

/bin/sh est un raccourci standard vers le programme shell dans les systèmes Linux. Généralement, ce fichier est juste un lien vers le vrai programme Shell situé, par exemple, dans /bin/bash. Mais il faut toujours utiliser /bin/sh pour s'assurer que le script fonctionnera sous un autre Shell.

#!/bin/sh

Chaque script commence avec la ligne ci-dessus. La prochaine ligne contiendra la valeur de la variable COUNTER.

COUNTER=0

En d'autres termes, nous commençons le compteur à zéro. Ensuite, nous ajoutons une boucle au programme. Nous le transformons en une boucle infinie pour inciter l'utilisateur à lancer le signal d'interruption pour quitter le programme.

while true;
do
  # contenu de la boucle
done

Maintenant, tout ce dont nous avons besoin de faire est d'indiquer au Shell ce qu'il doit faire tant que la condition de la boucle est vraie, à savoir, afficher la valeur de COUNTER et attendre une seconde.

while true;
do
  echo $COUNTER
  let COUNTER++
  sleep 1;
done

Voici le script en en entier et nous savons déjà son résultat sur l'écran.

counter_test.sh
#!/bin/sh

COUNTER=0
while true;
do
    echo $COUNTER
    let COUNTER++
  sleep 1;
done

Nous avons crée un bon script Shell, mais nous devons spécifier la permission d'exécution à ce script pour qu'on puisse le lancer.

[kermit@swinetrek ~]$ chmod u+x counter_test.sh
[kermit@swinetrek ~]$

Maintenant, on peut lancer le script.

[kermit@swinetrek ~]$ ./counter_test.sh
0
1
2
3
4

Cela dit au Shell d'exécuter un fichier nommé counter_test.sh dans le répertoire actuel. Vous devriez voir l'écran qui commence à compter à partir de zéro, ensuite il attend une seconde et continue l'incrémentation. La combinaison de touche Ctrl+C arrêtera le compteur.

C'est juste un petit aperçu de la puissance des scripts Shell. Gardez à l'esprit que les scripts Shell ne sont que la combinaison des commandes Linux que vous utilisez tous les jours et donc, créer des scripts Shell vous facilitera la vie parce que vous pouvez lancer des dizaines de tâches en lançant un seul fichier exécutable.

Si vous avez de l'expérience en programmation, vous trouverez peut-être que le shell est un peu trop léger pour la programmation pure. Le fait est que le Shell n'est pas un environnement puissant de programmation. Et s'il ne vous convient pas, vous pouvez utiliser d'autres langages de scripts tels que Perl. Cependant, les scripts Shell ont l'avantage d'offrir de bons outils de Hacking (au sens bidouillage du terme). Ils peuvent automatiser la plupart des tâches de l'administration système et on peut les tester dans le Shell au préalable avant de les transformer en vrais scripts.

 

La variable d'environnement PATH dans Linux

 

Maintenant, gardez à l’esprit que toutes les commandes de la ligne de commande Linux sont des fichiers binaires situés quelque part dans le système. Par exemple, la commande ls se trouve dans le répertoire /bin, mais comment le Shell trouve le répertoire /bin/ls quand vous tapez la commande ls ?

Le Shell regarde dans tous les répertoires listés dans sa variable intégrée PATH en cherchant un fichier qui a le même nom que votre commande. La variable d'environnement PATH pour une installation par défaut de Fedora ressemblera à quelque chose du genre :

[kermit@swinetrek ~]$ echo $PATH
/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin

Ainsi, quand vous tapez la commande ls, le Shell regardera d'abord pour le fichier exécutable /usr/kerberos/bin/ls et il ne trouvera rien. Est-ce qu'il y a un fichier /usr/local/bin/ls, non plus. Et est-ce qu'on trouve le fichier dans /usr/bin/ls ? Circulez, il n'y a rien à voir ! Et pour /bin/ls ? Oui ? super !

Vous vous souvenez que lorsque nous avons crée notre script Shell counter_test.sh, nous avions besoin de préfixer le nom du fichier avec un ./ pour dire au Shell que le fichier exécutable se trouvait dans le répertoire actuel. Si nous ajoutions ce répertoire à la variable d'environnement PATH, nous pourrions simplement taper counter_test.sh dans n'importe quel répertoire pour que le script fonctionne.

Les variables intégrées telles que PATH sont connues comme des variables d'environnements. Ce sont ces variables qui décrivent l'environnement dans lequel un processus est lancé. D'autres exemples de variables d'environnement sont HOME qui contient le chemin vers le répertoire home de l'utilisateur et MAIL qui est le nom du fichier qui stocke le mail de l'utilisateur. Les variables d'environnement fonctionnent comme les variables Shell, excepté qu'elles peuvent être accédées par des programmes qui sont aussi lancés du Shell.

Pour créer ou modifier une variable d'environnement, vous devez utiliser la commande export.

[kermit@swinetrek ~]$ export PATH=$PATH:/home/kermit
[kermit@swinetrek ~]$ echo $PATH
/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin
:/home/kermit/bin:/home/kermit

Notez que nous avons utilisé la variable d'environnement existante PATH pour spécifier sa nouvelle valeur. Cette technique nous permet d'ajouter un répertoire supplémentaire au PATH existant. Vous pouvez voir que le répertoire /home/kermit a été ajouté à la variable PATH. Vous devez maintenant être capable de lancer counter_test.sh aussi facilement que vous lanceriez la commande ls.

[kermit@swinetrek ~]$ counter_test.sh
0
1
2
3
4

Configurer l'environnement de variable PATH de cette manière vous permettra de lancer un script de n'importe quel répertoire. Mais c'est valable uniquement pour la durée de votre session avec le terminal. Car le PATH modifié perdra ses changements dès qu'on quitte le terminal. Dans notre prochain article sur l'administration système de Linux, nous verrons comment modifier la variable PATH de manière permanente.

C'est tout pour le moment sur cette initiation à la ligne de commande sous Linux et je vous recommande d'acheter le livre Entrainez-vous sur les commandes de base de Linux écrit par Nicolas Pons qui est intéressant sur le sujet. Et il couvre les variations mineurs selon les distributions telles que Fedora, Debian, Suse, etc. Notez que ce n'est pas un livre d'apprentissage, mais de travaux pratiques pour aller à l'essentiel. Il peut servir aux étudiants comme aux programmeurs ainsi qu'à ceux qui veulent maitriser la ligne de commande Linux.

ligne-commande-linux

Acheter ce livre sur Amazon

 

Les commentaires sont là si vous avez des suggestions ou des commentaires sur cet article.