Outils pour utilisateurs

Outils du site


cours:informatique:sysadmin:administrer_un_systeme_linux:220_visualiser_fichiers

Notes et transcriptions du cours “Administrez un système Linuxdisponible sur la plateforme Openclassrooms.

Visualisez des fichiers

Étant donné que Linux est un système d'exploitation dont la conception initiale est très orientée fichier, vous allez passer votre temps à consulter ces fichiers pour administrer votre serveur. Heureusement, Linux fournit une trousse à outils complète permettant de visualiser de manière efficace le contenu de ces fichiers.

Nous aborderons dans ce chapitre les commandes cat et le couple infernal more et less.

Nous verrons également les trois canaux permettant de manipuler les flux de données, mais aussi les commandes grep, sed et awk qui ajoutent des fonctionnalités de filtrage et de transformation de ces flux.

Enfin nous terminerons par la fonctionnalité favorite de tout administrateur : la possibilité de chaîner des commandes avec les pipes Linux !

Affichez le contenu des fichiers

Dans le chapitre précédent vous avez pu consulter le contenu du fichier /proc/cpuinfo grâce à la commande cat:

seb@thor:~$ type cat
cat est /bin/cat

Comme on peut le voir ci-dessus, cette commande est externe au shell. Elle est très connue des administrateurs Linux et Unix avant eux. En effet c'est une commande historique qui permet de prendre un ou plusieurs flux de données en paramètre d'entrée, et de les afficher à l'écran sur le terminal.

Le terme “cat” provient de l'abréviation de “catenate” en anglais, qui signifie “concaténer” (autrement dit : “mettre bout à bout”). Et effectivement, il est possible de concaténer plusieurs flux de données passés en paramètre d'entrée avec cette commande.

# concatène le contenu des 2 fichiers et affiche le résultat
cat /etc/os-release /etc/passwd
 
# L'option -n permet de numéroter les lignes sur la sortie
cat -n /var/log/kern.log

Vous avez pu remarquer que cat affiche tout le flux passé en entrée en une fois. Ainsi, la commande lancée sur le fichier /etc/passwd affiche toutes les lignes en un seul flux. Ce qui va probablement vous obliger à remonter dans l'affichage à l'écran pour consulter les premières lignes du fichier. Idéalement, il faudrait que l'affichage soit “paginé” en fonction du terminal.

C'est exactement ce que propose la commande less : elle va afficher les données passées en paramètre, paginées directement sur le terminal.

Dans la vidéo suivante, nous allons manipuler la commande less (et notamment les touches de commandes au clavier permettant de manipuler le flux de données paginé) et découvrir le rôle du fichier /etc/pam.d/login:

Historiquement, il existait une commande avant la création de less: more.

Même si le nom de cette commande pourrait faire penser qu'elle en fait plus, ce n'est pas le cas. En fait, less a été codée après more par Mark Nudelman qui souhaitait apporter plus de fonctionnalités.

Ce qui en fait un jeu de mots inversé réveillant seul l'humour des développeurs…

Je citerai pour finir, la documentation d'une excellente distribution Linux sur le sujet :

  “Less is more, but more more than more is, so more is less less, so use more less if you want less more. (...)” - Slackware Linux Essentials 

Quoi qu'il en soit, je vous conseille de vous familiariser avec less.

Utilisez les canaux de Linux

Dans le chapitre précédent, j'ai utilisé le mot-clé “sortie” pour évoquer les données transmises à l'écran sur le terminal par une commande. Sous Linux, cette notion est conceptualisée avec des canaux (streams en anglais).

Dans la majorité des cas, les programmes exécutés sous Linux disposent de 3 canaux de données :

  1. stdin(pour standard input) : c'est le canal de l'entrée standard, et par défaut, lorsque vous lancez une commande, c'est votre clavier. La commande sera éventuellement capable de lire les informations saisies avec le clavier via ce canal. Il porte le descripteur de fichier numéro 0 ;
  2. stdout(pour standard output) : c'est le canal de la sortie standard, et lorsque vous lancez une commande depuis un terminal, c'est l'écran par défaut. Le résultat et les données affichées par la commande sont diffusés sur l'écran. Il porte le descripteur de fichier numéro 1 ;
  3. stderr(pour standard error) : c'est le canal du flux concernant les erreurs, et par défaut, lorsque vous lancez une commande, c'est aussi l'écran. La commande va différencier les données “normales” des données “erreur” et peut changer de canal pour diffuser ces informations.

Pour manipuler ces canaux, il est nécessaire d'utiliser les caractères représentant des :

  • chevrons simples tels que > et < ;
  • mais aussi doublés tels que >> et <<.

Je vous propose d’utiliser les canaux standard de Linux pour :

  • effectuer des actions sur les flux (rediriger la sortie d’une commande dans un fichier ou différencier les sorties stdout et stderr) ;
  • découvrir le fichier /var/logs/messages.

:TODO_DOCUPDATE:

Filtrez le contenu des fichiers

Très souvent vous n'aurez besoin que d'une partie de l'information affichée à l'écran suite à l'exécution d'une commande. Par exemple sur la commande suivante :

seb@thor:~$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

Vous pourriez tout à fait souhaiter récupérer uniquement la ligne contenant le champ NAME pour simplement connaître la distribution que vous exploitez. Pour cela, vous allez utiliser la commande grep. Cette commande permet de filtrer le flux de données selon un motif (pattern en anglais) passé en paramètre.

Explorons maintenant les possibilités de la commande grep :

:TODO_DOCUPDATE:

Pour les deux commandes suivantes, il existe une petite bataille de geeks entre :

  1. les administrateurs préférant la commande sed ;
  2. et les administrateurs préférant la commande awk.

Souvent les utilisateurs de sed s'appliqueront à tout faire avec cette commande. Ce qui est vrai également pour les utilisateurs de awk. De mon côté, je suis plutôt fervent de sed, mais awk me rend service assez souvent également !

Ces deux commandes sont très appréciées des administrateurs car elles permettent de réaliser des opérations sur les flux de données, fichiers, entrée et sortie de manière non interactive. Les deux s'appuyant sur les expressions régulières, qu'il est intéressant de rappeler ici.

Une expression régulière est la modélisation d'un motif dans un flux de données à l'aide de méta-caractères, c'est-à-dire de caractères particuliers auxquels on ajoute une expression ou un opérateur.

Parmi les méta-caractères les plus couramment utilisés on peut retrouver :

Méta-caractères Fonctionnement
. Le point remplace n'importe quel caractère (hors retour chariot), par exemple l'expression régulière suivante : S.B, pourrait modéliser SEB ou SAB ou encore SSB, etc.
? Le point d'interrogation indique que l'expression modélisée peut être présente 0 ou 1 fois. Par exemple, S.?B, pourrait correspondre à SB ouSEB, mais pas SEEB
* L'étoile fonctionne comme le ?, mais autorise 0 ou n fois l'expression, par exemple S.* pourrait modéliser S.*B, mais aussi SEB, mais aussi SAEIOUYB
+ Petit dernier de la famille, il permet de modéliser au moins une fois (1 ou n).
^ Nous l'avons vu précédemment en exemple, il permet de modéliser la première position, le début.
$ À l'inverse, ici, permet de modéliser la dernière position, la fin.
[] Les crochets, accompagnés souvent de - , permettent de modéliser un jeu de caractères, par exemple [a-z] pour modéliser l'ensemble des caractères minuscules de l'alphabet. Il est possible également d'utiliser le caractère ^ avec les crochets, qui a alors une autre signification et permet d'omettre une expression. Par exemple [^abc], modélise tous les caractères sauf a, b et c.

La commande sed peut utiliser ces expressions régulières pour transformer un flux de données à la volée de manière non interactive (sed signifie Stream EDitor). Très pratique pour les traitements automatiques. On essaie ?

:TODO_DOCUPDATE:

La commande awk est en fait un interpréteur pour les instructions compatibles du langage awk. Le libellé de la commande et/ou langage provient de ses inventeurs Aho, Weinberger et Kernighan dont le manifeste pour awk est encore disponible.

Ce langage et la commande associée sont très puissants. Je vous propose ici simplement de donner l'équivalent des fonctions énoncées pour sed :

  • Search/Replace :
seb@thor:~$awk '{gsub(/.ebian/,"Ubuntu")}1' /etc/os-release
  • Delete :
seb@thor:~$ awk '!/.ebian/' /etc/os-release

* Sous-partie :

seb@thor:~$ awk 'NR==2,NR==4' /etc/os-release

grep, sed et awk sont des commandes installées de manière quasiment systématique sur toutes les distributions Linux. N'hésitez pas à vous en servir, elles peuvent vous faire gagner en temps et en efficacité !

Enchaînez les commandes

Maintenant que vous maîtrisez les différents canaux de données, entrée et sortie standard et erreur, ainsi que les différentes commandes permettant de filtrer un flux selon un motif, il est temps de passer à la vitesse supérieure et d'utiliser toutes ces notions en même temps.

Pour cela, Linux met à votre disposition une fonction permettant de lier entre eux les canaux de données des différentes commandes : le pipe (ou tube / tuyau).

Le principe est simple : il s'agit ici de rediriger un flux, en sortie d'une commande, vers le canal d'entrée de la commande suivante. Et ainsi de suite.

Pour lier ces commandes entres elles, on utilise le caractère | (prononcé pipe). Il correspond à la séquence de touches ALT GR+6 sur les claviers standards français.

Ainsi il est possible d'écrire quelque chose comme :

commande options arguments | commande options arguments | commande options arguments | ...

Le pipe situé entre la commande 1 et la commande 2 permet d'enchaîner les commandes 1 et 2 en liant leurs canaux de données.

Le pipe Linux pour enchaîner les commandes

Je vous propose d’utiliser le pipe de Linux pour enchaîner les commandes que nous avons rencontrées. Pour cela nous allons travailler avec le fichier /etc/passwd et découvrir deux nouvelles commandes : sort et cut !

En résumé

  • Vous pouvez utiliser les commandes cat et less pour visualiser le contenu des fichiers ;
  • Le fichier /etc/pam.d/login permet de gérer le processus d'authentification sous Linux ;
  • Les canaux Linux permettent de rediriger la sortie d'une commande vers un fichier ;
  • Le fichier /var/log/messages contient les traces du système Linux ;
  • Les commandes grep, sed et awk permettent de filtrer les flux de données ;
  • Le fichier /etc/os-release contient les informations sur la distribution Linux ;
  • Le pipe de Linux permet de chaîner les commandes Linux grâce à la redirection des canaux ;
  • Les commandes sort et cut permettent de manipuler des flux de données sous Linux

Dans le chapitre suivant, nous allons voir comment éditer et supprimer des fichiers, allez on y va !

◁ Précédent | ⌂ Retour au sommaire | Suivant ▷

cours/informatique/sysadmin/administrer_un_systeme_linux/220_visualiser_fichiers.txt · Dernière modification : 2024/01/22 13:57 de yoann