[3] Lignes de commandes – Prérequis.

À découvrir dans cette partie …..
(au passage, merci car vous êtes de plus en plus nombreux à me lire et donc, je l’espère pour certains, à se lancer enfin dans le monde du logiciel libre et de Linux).

Toutes les commandes de base pour manipuler ses fichiers.
Lorsque l’on s’initie à la ligne de commandes, il est nécessaire de commencer par les commandes incontournables, à savoir celles qui sont liées à des tâches courantes comme la création de fichiers ou de répertoires, la copie ou la suppression de fichiers, l’accès au contenu d’un fichier, mais aussi toutes les commandes qui permettent de se déplacer rapidement dans l’arborescence de votre système. Vous trouverez donc ici le récapitulatif des principales commandes à connaître pour bien débuter.

Pour se familiariser avec la ligne de commandes, rien de tel que d’effectuer quelques opérations simples sur les fichiers et répertoires, histoire de bien maitriser son environnement, de pouvoir se balader dans son système de fichiers et d’organiser ses documents en toute facilité.

01 ► NAVIGUER PARMI SES FICHIERS :

1

1.1 ) Chemin absolu ou relatif ?

Pour indiquer un fichier au shell, sachez que son nom seul ne suffit pas… À moins de se trouver dans le même répertoire que le fichier en question.

La référence exacte à un fichier est appelée « chemin » (c’est en quelque sorte son adresse, son emplacement dans le système) ; il indique précisément dans quel répertoire se trouve le fichier. Sous Linux, les noms des répertoires et des fichiers au sein d’un chemin sont séparés par un slash / (contrairement aux systèmes Windows, où le séparateur est un anti-slash \).

Notez que plusieurs fichiers peuvent porter le même nom, du moment qu’ils ne se situent pas à la même adresse (même répertoire donc) .

On distingue ainsi deux types de chemins :

=> un chemin absolu prend pour référence le début de l’arborescence de fichiers, à savoir la racine ; il commence donc toujours par le symbole / .

=> un chemin relatif dépend du répertoire courant où se trouve l’utilisateur au moment où il fait référence au fichier.

1-1

Considérons par exemple le schéma du dessus avec quelques rajouts logique. Si l’on souhaite faire référence au fichier de chemin absolu /home/marc/Musique/rock/track1.mp3 alors que l’on se situe dans le répertoire /home/marc/Images/ ,on fera appel au chemin relatif suivant : …/Musique/rock/track1.mp3 .

Si, alors qu’il se situe dans le répertoire Images/, Marc saisit la commande suivante :

~/Images$ rythmbox track1.mp3

Le système répondra que le fichier n’existe pas (car aucun fichier du nom track1.mp3 ne se trouve dans le répertoire courant qui est Images/ ).

En revanche, si Marc se trouve dans le répertoire rock/ et qu’il souhaite écouter le fichier track1.mp3, il peut tout à fait saisir son nom seul ici, puisque relativement, il n’y a que cette possibilité.

~/rock$ rythmbox track1.mp3

1.2 ) Mais …où suis-je ?

Pour connaître à tout moment le chemin absolu du répertoire où l’on se situ, il suffit de saisir la commande pwd (print working directory).

À savoir que par défaut, le terminal que vous utilisez s’ouvre toujours sur votre répertoire personnel à son lancement.

Pour se déplacer d’un répertoire à un autre on utilise la commande cd (change directory) suivie du nom (ou du chemin) du répertoire de destination :

~$ cd /home/linuxfrench/

2

Pour vous rendre dans votre répertoire personnel, quel que soit l’endroit où vous vous situez, vous pouvez saisir simplement :

~$ cd ~
(ou créer un alias comme vu dans la deuxième partie de cette série d’article « lignes de commandes« . => alias cdd=’cd ~’ *wink*)

Le symbole ~ remplace en effet le chemin absolu vers votre répertoire personnel. Mais on pourra saisir simplement :

~$ cd

Et pour revenir au répertoire précédent, on utilise le tiret, comme ceci :

~$ cd
ou alors :
~$ cd ..

3

02 ► CRÉER ET SUPPRIMER UN RÉPERTOIRE :

Ce n’est pas plus compliqué que d’effectuer un clic droit dans votre navigateur de fichiers graphique ! La création d’un répertoire se fait avec la commande mkdir (make directory), suivie du nom du répertoire à créer. Le répertoire est alors crée dans le répertoire courant :

~$ mkdir Dossier

Pour créer un répertoire et se sous-répertoires simultanément, on ajoute l’option -p :

~$ mkdir -p Dossier/SousDossier1/sousdossier2

4

La suppression d’un répertoire vide s’effectue avec la commande rmdir (remove directory). Si le répertoire n’est pas vide, le système refuse de vous obéir :

~$ rmdir tests/

5

L’option -p permet de supprimer le répertoire ciblé, ainsi que son (ou ses) répertoire(s) parent(s). Ainsi, la commande :

~$ rmdir -p Dossier/tests

6

va supprimer non seulement le répertoire tests/ mais aussi le répertoire Dossier/ par la même occasion.

À savoir que la commande rm, qui permet de supprimer des fichiers (comme nous allons le voir ci-après), utilisée avec l’option -r permet également de supprimer un répertoire et son contenu de façon récursive, autrement dit la suppression concerne également les sous-répertoires :

~$ rm -r tmp/

Et si vous ajoutez l’option -f, les fichiers protégés en écriture seront également supprimés, sans vous demander la moindre confirmation :

~$ rm -rf tmp/

7.jpg
(ne tapé cette commande sous aucun prétexte !!! À utiliser avec précautions !)

03 ► JONGLER AVEC SES FICHIERS :

03.1 ) Créer, déplacer et supprimer des fichiers.

La copie des fichiers s’effectue via la commande cp (copy). On l’utilise en respectant la syntaxe suivante :

~$ cp <fichier(s)_à_copier> <répertoire_de_destination>

Par exemple :

~$ cp photo1.jpg photo2.jpg photo3.jpg mes_images/

8

Remarquez au passage que nous pourrions ici simplifier la commande en utilisant un métacaractères comme évoqués dans l’article précédent. En effet, si nous souhaitons copier l’ensemble des fichiers d’extension .jpg, nous pourrions écrire :

~$ cp *.jpg mes_images/

9

Rappelons que le caractère * remplace zéro, un ou plusieurs caractère(s).

Par ailleurs, il est possible de copier tout un répertoire de façon récursive en ajoutant l’option -r :

~$ cp -r <répertoire(s)_à_copier> <répertoire_de_destination>

Le déplacement de fichiers et de répertoires s’effectue avec la commande mv (move) :

~$ mv <fichier/répertoire_à_déplacer> <répertoire_de_destination>

mv peut également être utilisé pour renommer un fichier ; dans ce cas, elle prend en paramètre le nom du fichier en question, suivi de son nouveau nom :

~$ mv document.txt contrat.txt

10

Enfin, pour supprimer un fichier, on utilise la commande rm (remove) suivie du nom du fichier concerné :

~$ rm <fichier_à_supprimer>

Comme on l’a vu plus haut dans le cas des répertoires, l’option -f permet de supprimer les fichiers protégés en écriture sans pour autant avoir à confirmer cette action.

Et pour supprimer tout le contenu d’un répertoire (fichiers et sous-répertoires y compris), on se positionne dans ledit répertoire et on exécute :

~$ rm -rf *

03.2 ) Une alternative à la copie : le lien symbolique.

Pour simplifier la gestion des fichiers, il peut parfois s’avérer utile de créer ce que l’on appelle un lien symbolique. Un lien symbolique contient le nom d’un fichier, ou plus exactement, le chemin vers ce fichier. Il joue ainsi le rôle de pointeur vers ce dernier.

Vous l’aurez compris, la création d’un lien permet d’éviter la copie physique d’un fichier si l’on souhaite en disposer à plusieurs endroit de l’arborescence .

symlink_concept

Pour créer un lien, on utilise la commande ln ; l’option -s permet d’indiquer qu’il s’agit d’un lien symbolique. La syntaxe est la suivante :

~$ ln -s

Notez que lors de la création d’un lien symbolique, l’existence du fichier lié n’est pas vérifiée, c’est donc à vous d’être vigilant sur ce point ; s’il n’existe pas, le lien ne fonctionnera pas, tout simplement.

Considérons un exemple concret : après avoir téléchargé, puis lancé le fichier binaire (l’exécutable) d’un quelconque logiciel, vous constatez que le processus d’installation automatiquement a positionné l’exécutable exec dans le répertoire /opt/Editeur/Nom/bin/exec .Ce qui n’est guère pratique pour l’utiliser, car ce chemin n’étant pas défini dans la variable $PATH, il faudra systématiquement spécifier tout son chemin d’accès pour l’utiliser …

Nous allons donc créer un lien symbolique vers le fichier exécutable qui nous intéresse (il s’agit d’un script Bash nommé « auto-pass-generate.sh« , qui génère des mots de passe aléatoire de la taille et difficulté que vous voulez) que « j’ai crée ». Au passage, je pense d’ailleurs que la création de script Bash (.sh) ça sera la prochaine aventure que je vous ferais suivre après avoir fini avec le sujet « la ligne de commande ») … Oula ! Ça fait un peu-beaucoup de parenthèse tout ça. Je reprend :

Nous allons donc créer un lien symbolique vers le fichier exécutable qui nous intéresse dans un répertoire qui lui, est défini dans $PATH :

~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin/:/usr/bin/:/bin/sbin/:/sbin/bin/
~$ ln -s /opt/Editeur/Nom/bin/exec /usr/local/bin/exec
~$ ls -l /usr/local/bin/*.sh

11

À présent, il est possible maintenant de lancer la commande exec (auto-pass-generate.sh) depuis n’importe quel endroit de l’arborescence de fichiers ; le système saura retrouver le fichier exécutable correspondant grâce à la création du lien symbolique précédent.

(bon, après c’est vrai qu’il est possible de faire ça de manière plus simple en copiant n’importe quel exécutable pris en charge par votre terminal dans le répertoire /bin . Mais il reste important de connaître et de maitriser la création de lien symbolique).

04 ► LIRE OU ÉTUDIER LE CONTENU D’UN FICHIER :

Pour simplement visualiser le contenu d’un fichier (sans possibilité d’édition, trois commandes sont à retenir : cat, more et less .Il suffit de les faire suivre du nom (ou du chemin) du fichier qui vous intéresse .

-> cat affiche tout le contenu du fichier dans le terminal et vous rend la main immédiatement ;

-> more permet de visualiser le contenu du fichier page-par-page ; on passe d’une page à l’autre à l’aide de la touche [Espace] ;

-> less, à la différence de more, ne charge pas le fichier dans son intégralité avant de commencer à l’afficher ; c’est pourquoi il est préférable d’utiliser less plutôt que more dans le cas de gros fichiers.

Si seul le début ou la fin d’un fichier vous intéresse, vous pouvez utiliser les commandes suivantes :

~# head /var/log/messages

(affiche les 10 premières lignes du fichier /var/log/messages )

~# tail /var/log/messages

(affiche les 10 dernières lignes du fichier /var/log/messages)

Dans les deux cas, on peut utiliser l’option -n pour définir un nombre de ligne différent de 10 :

~# tail -n 30 /var/log/messages

Très utile également, l’option -f (follow) qui permet de passer en mode « attente » :

~# tail -f /var/log/messages

Les 10 dernières lignes du fichiers sont affichées, puis dès qu’une nouvelle donnée est inscrite dans le fichier, elle est retranscrite immédiatement à l’écran. Le raccourci [Crtl]+[C] permet de quitter ce mode et de reprendre la main.

La commande nl permet d’afficher le contenu du fichier passé en argument en ajoutant la numérotation des lignes. Pour spécifier un séparateur d’affichage entre le numéro de la ligne et la ligne elle-même, il est possible d’utiliser l’option -s, suivie du caractère séparateur entre guillemets, comme suit :

~# nl -s « : » /var/log/messages | tail
6584:Feb     5 ….
[…]
…………..
……………………..
[…]

La commande file permet de lire le début d’un fichier pour en déterminer le type de contenu ; elle nécessite bien entendu d’avoir le droit de lecture sur le fichier concerné. Exemples :

~$ file fichiers_video.avi
fichiers_video.avi : RIFF …….
[….]

~$ file un_document
un_document :  ASCII text, with very long lines

Pour la comparaison de fichiers, on retiendra les commandes cmp, et diff. La commande cmp permet de comparer le contenu de deux fichiers en précisant la position de la première différence relevée :

~$ cmp fichier.txt fichier2.txt
fichiers1.txt fichier2.txt sont différents :  octet 14, ligne 3

Comme vous vous en doutez, si la commande ne retourne rien, c’est que les deux fichiers sont rigoureusement identiques.

La commande diff, de son coté, permet de comparer le contenu de deux fichiers ou répertoires et dresse la liste de toutes les différences relevées.

Dans un autre registre, la commande touch permet de modifier la date d’accès et la date de modification de chaque fichier passé en argument.

Par défaut, ces horodatages sont remplacés par la date et l’heure courantes, mais l’option -t suivie d’une date au format MMJJhhmm (mois, jour, heures, minutes) permet d’utiliser cette dernière à la place de la date courante :

~$ ls -l
-rw-r–r–   1   user  user    1038819     5 nov.   16:36  mycapture

~$ touch -t 02162340 mycapture && ls -l
-rw-r–r–   1   user  user    1038819     16 feb.    23:40  mycapture

Toutes ces commandes constituent déjà un bel éventail de base pour vous entrainer à la ligne de commandes. Créez, déplacez, renommez, supprimez !
N’hésitez pas à faire un maximum de tests jusqu’à ce que vous vous sentiez aussi à l’aise qu’en utilisant votre interfac graphique. Bientôt, celle-ci ne sera plus qu’un souvenir lointain tellement vous trouverez votre terminal bien plus rapide.
Et là, vous vous direz, « mais pourquoi ai-je tant attendu ?! » 🙂

Screenshot-bin-bash1.png

► Préparez vous bien en tout cas car dans le 4ème article, nous parlerons,créerons et exécuterons des « scripts shell« .

Je vous dit à très vite alors ….

logo_gnu_linux_pratique.jpg

2 commentaires

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s