103.1 Leçon 1
Certification : |
LPIC-1 |
---|---|
Version : |
5.0 |
Thème : |
103 Commandes GNU et Unix |
Objectif : |
103.1 Travailler en ligne de commande |
Leçon : |
1 sur 2 |
Introduction
Les débutants dans le monde de l’administration Linux et de l’interpréteur de commandes (shell) Bash se sentent souvent un peu perdus sans le confort rassurant d’une interface graphique. Ils ont l’habitude de pouvoir accéder par un clic droit aux repères visuels et aux informations contextuelles que les gestionnaires de fichiers graphiques mettent à leur disposition. Il est donc important d’apprendre et de maîtriser l’ensemble relativement restreint d’outils en ligne de commande qui vous permettent d’accéder rapidement à toutes les données disponibles dans votre ancienne interface graphique - et bien plus encore.
Obtenir des informations sur le système
Lorsque vous contemplez le rectangle clignotant d’une invite de commande, votre première question sera probablement "Où suis-je ?". Ou, plus précisément, "Où suis-je en ce moment dans le système de fichiers Linux et si, admettons, je créais un nouveau fichier, où se trouverait-il ?". Ce que vous recherchez ici, c’est votre répertoire de travail actuel (present work directory), et la commande pwd
vous dira ce que vous voulez savoir :
$ pwd /home/frank
Imaginons que Frank est actuellement connecté au système et qu’il se trouve dans son répertoire personnel : /home/frank/
. Si Frank crée un fichier vide en utilisant la commande touch
sans spécifier d’autre emplacement dans le système de fichiers, le fichier sera créé dans /home/frank/
. En affichant le contenu du répertoire avec ls
, on peut voir ce nouveau fichier :
$ touch newfile $ ls newfile
En dehors de votre position dans le système de fichiers, vous voudrez souvent obtenir des informations sur le système Linux que vous utilisez. Il peut s’agir du numéro de version exact de votre distribution ou de la version du noyau Linux qui est actuellement chargée. L’outil uname
est ce que vous recherchez ici. Et, plus exactement, uname
en utilisant l’option -a
(“all”).
$ uname -a Linux base 4.18.0-18-generic #19~18.04.1-Ubuntu SMP Fri Apr 5 10:22:13 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
Ici, uname
indique que la machine de Frank a le noyau Linux version 4.18.0 installé et qu’elle utilise Ubuntu 18.04 sur un processeur 64 bits (x86_64
).
Obtenir des informations sur les commandes
Vous trouverez souvent de la documentation qui traite des commandes Linux avec lesquelles vous n’êtes pas encore familiarisé. La ligne de commande elle-même offre toutes sortes d’informations utiles sur ce que font les commandes et comment les utiliser efficacement. Les informations les plus utiles se trouvent sans doute dans les nombreux fichiers du système man
.
En règle générale, les développeurs de Linux rédigent des fichiers man
et les distribuent avec les utilitaires qu’ils créent. Les fichiers man
sont des documents bien structurés dont le contenu est subdivisé de manière intuitive par des titres de section types. En tapant man
suivi du nom d’une commande, vous obtiendrez des informations comprenant le nom de la commande, un bref résumé de son utilisation, une description plus détaillée ainsi que des informations importantes sur l’historique et les licences. Voici un exemple :
$ man uname UNAME(1) User Commands UNAME(1) NAME uname - print system information SYNOPSIS uname [OPTION]... DESCRIPTION Print certain system information. With no OPTION, same as -s. -a, --all print all information, in the following order, except omit -p and -i if unknown: -s, --kernel-name print the kernel name -n, --nodename print the network node hostname -r, --kernel-release print the kernel release -v, --kernel-version print the kernel version -m, --machine print the machine hardware name -p, --processor print the processor type (non-portable) -i, --hardware-platform print the hardware platform (non-portable) -o, --operating-system print the operating system --help display this help and exit --version output version information and exit AUTHOR Written by David MacKenzie. REPORTING BUGS GNU coreutils online help: <http://www.gnu.org/software/coreutils/> Report uname translation bugs to <http://translationproject.org/team/> COPYRIGHT Copyright©2017 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. SEE ALSO arch(1), uname(2) Full documentation at: <http://www.gnu.org/software/coreutils/uname> or available locally via: info '(coreutils) uname invocation' GNU coreutils 8.28 January 2018 UNAME(1)
man
ne fonctionne que si vous lui fournissez un nom de commande précis. En revanche, si vous n’êtes pas sûr du nom de la commande que vous recherchez, vous pouvez utiliser la commande apropos
pour effectuer une recherche dans les noms et les descriptions des pages man
. En supposant, par exemple, que vous ne vous souvenez pas que c’est uname
qui vous renseigne sur la version actuelle de votre noyau Linux, vous pouvez fournir le terme de recherche kernel
à apropos
. Vous obtiendrez probablement de nombreux résultats, mais ils devraient inclure ceux-ci :
$ apropos kernel systemd-udevd-kernel.socket (8) - Device event managing daemon uname (2) - get name and information about current kernel urandom (4) - kernel random number source devices
Si vous n’avez pas besoin de la documentation complète d’une commande, vous pouvez obtenir rapidement des informations de base sur une commande en utilisant type
. L’exemple qui suit utilise type
pour interroger quatre commandes distinctes à la fois. Le résultat nous montre que cp
(“copy”) est un programme qui réside dans /bin/cp
et que kill
(changer l’état d’un processus en cours) est une primitive du shell — ce qui veut dire qu’il fait partie du shell Bash lui-même :
$ type uname cp kill which uname is hashed (/bin/uname) cp is /bin/cp kill is a shell builtin which is /usr/bin/which
Vous remarquerez que, en plus d’être une commande binaire normale comme cp
, uname
est également "haché" (“hashed”). C’est parce que Frank a récemment utilisé uname
et, pour augmenter l’efficacité du système, il a été ajouté à une table de hachage pour le rendre plus accessible la prochaine fois que vous l’exécutez. S’il lançait type uname
après le démarrage du système, Frank constaterait que type
décrit à nouveau uname
comme un binaire ordinaire.
Note
|
Une façon plus rapide de vider la table de hachage est de lancer la commande |
Parfois — en particulier lorsque vous travaillez avec des scripts automatisés — vous aurez besoin d’une source d’information plus simple pour une commande. La commande which
que notre précédente commande type
a repérée pour nous ne retournera rien d’autre que le chemin absolu vers une commande. Cet exemple localise à la fois les commandes uname
et which
.
$ which uname which /bin/uname /usr/bin/which
Note
|
Si vous voulez afficher des informations sur les primitives du shell, vous pouvez utiliser la commande |
Utiliser l’historique des commandes
Il vous arrivera souvent de rechercher soigneusement l’usage approprié d’une commande et de l’exécuter avec succès, accompagnée d’une série passablement complexe d’options et d’arguments. Mais que se passe-t-il quelques semaines plus tard lorsque vous devez exécuter la même commande avec les mêmes options et les mêmes arguments mais que vous ne vous souvenez plus des détails ? Plutôt que de devoir recommencer vos recherches depuis le début, vous pourrez souvent retrouver la commande originale en utilisant history
.
En tapant history
, vous obtiendrez les commandes les plus récentes que vous avez exécutées, avec la plus récente qui apparaîtra en dernier. Vous pouvez facilement effectuer une recherche dans ces commandes en passant une chaîne donnée à la commande grep
. Cet exemple recherchera n’importe quelle commande qui inclut le texte bash_history
:
$ history | grep bash_history 1605 sudo find /home -name ".bash_history" | xargs grep sudo
Ici, une seule commande est renvoyée avec le numéro de séquence correspondant 1605.
Quant à bash_history
, c’est en fait le nom d’un fichier caché que vous devriez trouver dans votre répertoire d’utilisateur. Puisque c’est un fichier caché (désigné comme tel par le point qui précède son nom de fichier), il ne sera visible qu’en affichant le contenu du répertoire en utilisant ls
avec l’option -a
:
$ ls /home/frank newfile $ ls -a /home/frank . .. .bash_history .bash_logout .bashrc .profile .ssh newfile
Que contient le fichier .bash_history
? Regardez par vous-même : vous y verrez des centaines et des centaines de vos commandes les plus récentes. Vous pourriez cependant être surpris de constater que certaines de vos commandes les plus récentes sont absentes dans cette liste. En effet, bien que celles-ci soient instantanément ajoutées à la base de données dynamique history
, les tout derniers ajouts à votre historique de commandes ne sont pas écrits dans le fichier .bash_history
avant la fin de votre session.
Vous pouvez exploiter le contenu de history
pour rendre votre expérience de la ligne de commande beaucoup plus rapide et efficace en utilisant les flèches haut et bas de votre clavier. En appuyant plusieurs fois sur la touche haut, la ligne de commande sera renseignée avec les commandes récentes. Lorsque vous arrivez à celle que vous souhaitez lancer une seconde fois, vous pouvez l’exécuter en appuyant sur Entrée. Il est ainsi facile de se rappeler et, le cas échéant, de modifier les commandes plusieurs fois de suite au cours d’une session dans le shell.
Exercices guidés
-
Utilisez le système
man
pour déterminer comment indiquer àapropos
de fournir une commande brève afin qu’il affiche seulement un bref message d’utilisation et qu’il quitte ensuite. -
Utilisez le système
man
pour déterminer quelle licence est attribuée à la commandegrep
.
Exercices d’approfondissement
-
Identifiez l’architecture matérielle et la version du noyau Linux utilisées sur votre ordinateur dans un format d’affichage facile à lire.
-
Affichez les vingt dernières lignes de la base de données dynamique
history
et du fichier.bash_history
et comparez les deux résultats. -
Utilisez l’outil
apropos
pour identifier la pageman
où vous trouverez la commande dont vous aurez besoin pour afficher la taille d’un périphérique bloc matériel connecté en octets plutôt qu’en mégaoctets ou en gigaoctets.
Résumé
Dans cette leçon, vous avez appris à :
-
Comment obtenir des informations sur votre emplacement dans le système de fichiers et la pile logicielle de votre système d’exploitation.
-
Comment trouver de l’aide pour l’utilisation des commandes.
-
Comment identifier l’emplacement dans le système de fichiers et le type de commandes binaires.
-
Comment trouver et réutiliser des commandes précédemment invoquées.
Les commandes suivantes ont été abordées dans cette leçon :
pwd
-
Afficher le chemin d’accès au répertoire de travail actuel.
uname
-
Afficher l’architecture matérielle de votre système, la version du noyau Linux, la distribution et la version de la distribution.
man
-
Accéder aux fichiers d’aide qui documentent l’utilisation des commandes.
type
-
Afficher l’emplacement dans le système de fichiers et le type pour une ou plusieurs commandes.
which
-
Afficher l’emplacement dans le système de fichiers pour une commande.
history
-
Afficher ou réutiliser les commandes que vous avez invoquées précédemment.
Réponses aux exercices guidés
-
Utilisez le système
man
pour déterminer comment indiquer àapropos
de fournir une commande brève afin qu’il affiche seulement un bref message d’utilisation et qu’il quitte ensuite.Lancez
man apropos
et faites défiler la section “Options” jusqu’au paragraphe--usage
. -
Utilisez le système
man
pour déterminer quelle licence est attribuée à la commandegrep
.Lancez
man grep
et descendez jusqu’à la section “Copyright” du document. Notez que le programme utilise un copyright de la Free Software Foundation.
Réponses aux exercices d’approfondissement
-
Identifiez l’architecture matérielle et la version du noyau Linux utilisées sur votre ordinateur dans un format d’affichage facile à lire.
Lancez
man uname
, lisez la section “Description”, et identifiez les options de commande qui vous permettront d’obtenir les résultats précis que vous souhaitez. Notez que-v
vous fournira la version du noyau et-i
la plateforme matérielle.$ man uname $ uname -v $ uname -i
-
Affichez les vingt dernières lignes de la base de données dynamique
history
et du fichier.bash_history
et comparez les deux résultats.$ history 20 $ tail -n 20 .bash_history
-
Utilisez l’outil
apropos
pour identifier la pageman
où vous trouverez la commande dont vous aurez besoin pour afficher la taille d’un périphérique bloc matériel connecté en octets plutôt qu’en mégaoctets ou en gigaoctets.Une façon de procéder consiste à lancer
apropos
avec la chaîneblock
, lire le résultat, noter quelsblk
affiche les périphériques de type bloc (et constitue donc l’outil le plus adapté à nos besoins), lancerman lsblk
, faire défiler la section “Description” et noter que-b
affiche la taille du périphérique en octets. Il ne reste qu’à lancerlsblk -b
pour voir ce qui en ressort.$ apropos block $ man lsblk $ lsblk -b