Travailler moins pour taper plus

TerminalCet article fait partie de mes cours d’introduction à l’administration des systèmes Linux. Il vous prend par la main et vous apprend à utiliser la complétion automatique et l’historique des commandes.

Travailler moins pour taper plus

Si vous avez patiemment suivi les exemples et les exercices jusqu’ici, il y a des chances pour que vous soyez quelque peu dépité par un certain manque de confort de la console.

  1. L’interface en ligne de commande requiert de saisir des commandes interminables, leurs options, les noms de fichiers, les chemins d’accès complets, etc.
  2. Saisir tout ce texte représente une certaine quantité de travail.
  3. Personne n’aime travailler.

Il en résulte que personne n’aime travailler en ligne de commande. Le moment est donc venu de se soucier du confort de l’utilisateur. La notion de confort d’utilisation peut également s’appliquer à la ligne de commande, car nous allons aborder une fonctionnalité extrêmement puissante du shell.

La complétion automatique

Commençons par une commande simple.

$ /usr/sbin/getenforce

L’invocation de la commande getenforce avec son chemin complet représente un certain travail. En tout et pour tout, il faut saisir vingt caractères et confirmer par Entrée. Pfouh.

Essayons donc de faire plus court. Tapez ceci, sans confirmer par Entrée.

$ /u

Appuyez sur la touche Tab. Pour ceux qui ne savent pas ce que c’est : la touche Tabulation (Tab pour les intimes) se situe au-dessus de la touche de verrouillage des majuscules, en haut à gauche du clavier. Elle est ornée de deux flèches pointant en sens inverse, une vers la droite, une vers la gauche.

Vous constatez que le shell a complété ce que vous avez tapé.

$ /usr/

Continuez. Ajoutez un s et un b.

$ /usr/sb

Appuyez à nouveau sur Tab.

$ /usr/sbin/

Ensuite, saisissez g, e, t, e.

$ /usr/sbin/gete

Et pour finir, appuyez une dernière fois sur Tab.

$ /usr/sbin/getenforce

Prenons un autre exemple. Imaginons que vous souhaitiez vous rendre dans le répertoire /boot. Vous devriez donc taper la commande suivante.

$ cd /boot

Essayons de faire comme tout à l’heure.

$ cd /b

Nous appuyons sur Tab et… il ne se passe rien. Tout au plus, le terminal a émis un bip et c’est tout. Appuyons une seconde fois sur Tab.

$ cd /b
bin/  boot/ 

Ici, le shell est confronté à une ambiguïté. Il ne sait pas s’il doit se rendre dans /bin ou dans /boot. Lorsque vous avez appuyé une seconde fois sur Tab, il vous a montré toutes les possibilités qui s’offrent à lui. Pour lever l’ambiguïté, il suffit de fournir un caractère supplémentaire…

$ cd /bo

… suivi de Tab.

$ cd /boot/

Voyons un autre exemple pour illustrer ce fonctionnement. Je souhaite afficher le contenu du répertoire /sbin. J’invoque donc la commande suivante.

$ ls /sbin

Si je me contente de saisir ls /s suivi de Tab, j’entends un simple bip et rien ne se passe. Une seconde pression sur la touche Tab me montre alors toutes les possibilités qui s’offrent à moi.

$ ls /s
sbin/ srv/  sys/  

Il suffit donc de saisir le b de /sbin pour lever l’ambiguïté et permettre au shell de compléter le nom du répertoire.

Continuons avec un peu de pratique. Dans votre répertoire d’utilisateur, créez une série de cinq fichiers vides.

$ touch fichier1.txt fichier2.txt fichier3.txt
$ touch fichier3.png fichier3.avi

Admettons que vous souhaitiez afficher les propriétés détaillées de chacun d’entre eux, un par un. Commencez par le premier.

$ ls -l f

Tab :

$ ls -l fichier

1, puis Tab :

$ ls -l fichier1.txt

Procédez de même avec fichier2.txt et fichier3.txt. Vous constaterez qu’avec fichier3.txt, vous aurez deux ambiguïtés à lever.

$ ls -l f

Tab :

$ ls -l fichier

3, Tab :

$ ls -l fichier3.

Tab, Tab :

$ ls -l fichier3.
fichier3.avi  fichier3.png  fichier3.txt

t, Tab :

$ ls -l fichier3.txt

Résultat des courses :

  • moins de touches à actionner ;
  • autant d’heures de loisirs de gagnées, que l’on pourra mettre à contribution pour aller à la plage ou faire de l’escalade ;
  • plus aucune raison pour détester le travail en ligne de commande.

Reculer pour mieux sauter

Comme tous les outils puissants, la complétion automatique requiert un certain entraînement avant d’être efficace. Il se peut même qu’au début, cette façon de procéder vous ralentisse. Faites fi de cette frustration initiale et accrochez-vous, car cela en vaut vraiment la peine. L’utilisation systématique de la complétion automatique vous fera gagner un temps considérable.

J’en profite pour prodiguer un autre conseil : apprenez à dactylographier, c’est-à-dire utiliser vos dix doigts sans regarder le clavier. Là aussi, les bénéfices que vous en tirerez dépasseront de loin l’investissement que cela nécessite au départ. Pensez en termes de productivité accrue et surtout de migraines évitées. Vos yeux n’auront plus à effectuer des va-et-vient incessants entre les touches.

La flemme devient un gage de qualité

La complétion automatique ne sert pas seulement à satisfaire le paresseux qui sommeille en nous tous. Elle joue un autre rôle pour le moins aussi important que celui de vous faire gagner du temps. Voyons un autre exemple pratique.

Le répertoire /etc/X11/xorg.conf.dest censé contenir la configuration du serveur graphique. Ne vous inquiétez pas si vous ne savez pas ce que c’est. Pour l’instant, nous aimerions seulement afficher le contenu de ce répertoire, sans trop nous soucier des détails techniques. Nous invoquons donc la commande suivante, sans utiliser la complétion automatique.

$ ls /etc/x11/xorg.conf.d

Et nous nous retrouvons face au message d’erreur suivant.

ls: impossible d'accéder à /etc/x11/xorg.conf.d: 
    Aucun fichier ou dossier de ce type

Là, nous restons quelque peu perplexes. La documentation du serveur graphique a pourtant insisté sur l’utilisation de ce répertoire, et voilà qu’il n’existe pas. Que se passe-t-il donc ?

Regardez bien : le sous-répertoire de /etc s’appelle X11 (avec un X majuscule) et non x11, ce qui n’est pas la même chose. Maintenant, invoquez cette même commande, mais en utilisant la complétion automatique, c’est-à-dire en tapant…

$ ls /e

Tab :

$ ls /etc/

X, Tab :

$ ls /etc/X11/

x, Tab :

$ ls /etc/X11/xorg.conf.d/

Ici, le shell a complété le nom du répertoire correctement. Si nous avions essayé de taper x au lieu de X pour le répertoire X11, nous nous serions tout de suite aperçu de notre erreur, suite à l’absence pour le moins suspecte de X11 dans la liste des répertoires proposés.

Cette petite expérience nous permet de tirer la conclusion suivante. Outre l’avantage d’accélérer la saisie de façon considérable, la complétion automatique offre également un contrôle de qualité, en jouant un rôle non négligeable de correcteur.

Répéter une commande

Dans certains cas, le passage par la case départ est inévitable. Une fois que nous avons invoqué notre commande erronée et qu’elle nous a gratifié d’un message d’erreur, il va bien falloir se résoudre à la ressasir, en prenant soin de ne pas commettre de faute de frappe. Est-il donc vraiment nécessaire de tout recommencer depuis le début, juste à cause d’une petite coquille ? Non, comme vous le montre cet autre exemple.

$ ls /etc/X11/xorg.donf.d
ls: impossible d'accéder à /etc/X11/xorg.donf.d: 
    Aucun fichier ou dossier de ce type

Après la petite surprise initiale, vous vous apercevez tout de suite de l’erreur. Vous avez tapé xorg.donf.d au lieu de xorg.conf.d. Pour corriger votre erreur, il vous suffirait de ressaisir la commande en prenant soin, cette fois-ci, d’écrire correctement le nom du répertoire. Avant de faire cela, appuyez simplement sur la touche FlècheHaut et voyez ce qui se passe.

$ ls /etc/X11/xorg.donf.d

En effet, votre shell a gardé la dernière commande en mémoire. Dans ce cas, il sera plus simple de remplacer le d par un c que de retaper l’intégralité de la commande.

Ce n’est pas tout. Actionnez plusieurs fois de suite la touche FlècheHaut et observez ce qui se passe. Apparemment, le shell n’a pas mémorisé seulement la dernière commande, mais toutes celles que vous avez pu invoquer depuis belle lurette. Ajoutez à cela la touche FlècheBas et vous voilà capable de naviguer dans l’historique de toutes les commandes saisies jusque-là. Enfin, pas toutes, il y a une limite quand-même.

Utiliser l’historique des commandes

Il existe un moyen très simple d’afficher la liste de toutes les commandes que vous avez pu saisir.

$ history
...
558  alias rm='rm -i'
559  mkdir repertoirebidon
560  touch repertoirebidon/fichierbidon
561  rm -rf repertoirebidon/
562  vimtutor
...

Pour répéter l’une des commandes dans la liste, remontez dans l’historique en appuyant autant de fois que nécessaire sur la touche FlècheHaut. Dans certains cas, ce sera un exercice fastidieux et il vaut mieux afficher l’historique complet, puis sélectionner la commande directement. Pour ce faire, il suffit de taper un point d’exclamation ! suivi du numéro de la commande. Admettons que je veuille réinvoquer la commande mkdir repertoirebidon de l’exemple précédent, il me suffirait de faire ceci.

$ !559
mkdir repertoirebidon

Soyez tout de même vigilant en utilisant cette fonctionnalité du shell. La commande est exécutée directement, sans attendre une quelconque confirmation avec la touche Entrée. Ne l’utilisez donc pas avec des commandes destructives comme rm.

Invoquer une commande en utilisant la recherche inversée

Dans le rayon “historique du shell”, je vous montre une dernière fonctionnalité très utile au quotidien : la recherche inversée ou reverse search. Admettons que la dernière fois que vous ayez invoqué la commande mkdir, c’était pour créer repertoirebidon. Admettons encore que vous ayez effacé repertoirebidon par la suite et que vous souhaitiez le recréer maintenant. Pour ce faire, vous avez plusieurs possibilités.

  • invoquer mkdir repertoirebidon tout simplement, en saisissant tous les caractères de la commande ;
  • actionner la touche FlècheHaut plusieurs fois de suite, jusqu’à ce que vous finissiez par tomber sur la commande souhaitée ;
  • afficher l’historique (history), chercher la commande que vous souhaitez, puis l’exécuter par le biais du point d’exclamation ! suivi du numéro dans l’historique.

Il existe une autre solution, beaucoup plus simple. Tapez simplement Ctrl+R et vous verrez que votre invite de commande change.

(reverse-i-search)`': 

À présent, dès que vous tapez les premiers caractères de la commande, le shell complète instantanément avec ce qu’il trouve dans l’historique. En l’occurrence, il me suffit ici de saisir m et k pour obtenir ce que je veux.

(reverse-i-search)`mk': mkdir repertoirebidon

Il ne me reste qu’à confirmer par Entrée pour exécuter la commande. Alternativement, je peux appuyez une deuxième fois sur Ctrl+R pour afficher la prochaine commande dans l’historique qui commence par mk.

Lire la suite…

Publié dans Documentation Microlinux | Marqué avec , | Laisser un commentaire

Éditer des fichiers texte : Vi

VimCet article fait partie de mes cours d’introduction à l’administration des systèmes Linux. Il vous prend par la main et vous apprend à utiliser l’éditeur de texte Vi.

Une réputation problématique

L’éditeur Vi (prononcé “vie aïe”) est une partie intégrante de tout système Unix, de la même manière qu’un château médiéval qui se respecte ne serait rien sans un solide chevalet de torture dans son sous-sol. Gare à l’imprudent qui s’aventure dans l’édition d’un texte avec Vi sans avoir respecté l’avertissement : “Vous qui éditez un texte avec cet utilitaire, abandonnez tout espoir d’arriver à vos fins !” Jetez un oeil sur ce qui se dit dans les forums d’utilisateurs Linux novices au sujet de Vi et vous verrez que, si l’on considère la moyenne arithmétique des opinions, il s’agit de toute évidence d’un logiciel conçu par un vénusien halluciné à la suite d’un abus conséquent de substances illicites diverses, synthétiques et puissantes. Bref, de quoi s’inquiéter.

L’éditeur de texte installé sur tous les systèmes Linux

Laissons donc de côté les chimères mythiques qui font la grimace à Vi et essayons de voir la chose plus sobrement. Vi, ce n’est pas simplement un éditeur de texte, c’est tout d’abord le programme d’édition de texte standard présent sur tous les systèmes unixoïdes. En d’autres termes, que vous installiez la dernière Red Hat ou l’avant-dernière SUSE, que vous travailliez avec un Live CD comme Knoppix, Slax ou Slitaz, ou que vous essayiez de récupérer des données après un crash avec SystemRescueCd, vous aurez à votre disposition la panoplie d’éditeurs sélectionnée par le distributeur, mais Vi s’y trouvera toujours, dans tous les cas, invariablement. Il est réellement incontournable.On le trouve même sur un Mac, installé par défaut sur Mac OS X.

Vi amélioré : Vim

Vi existe en plusieurs versions ou incarnations, les plus répandues étant l’ancêtre vi, la version améliorée vim (ou Vi Improved) et GVim, une version graphique qui s’installe sur les postes de travail. CentOS fournit Vi dans trois moutures différentes.

  • l’ancêtre Vi sous forme du paquet vim-minimal ;
  • Vim : vim-enhanced ;
  • GVim pour les environnements graphiques : vim-X11.

Notre système minimal ne comprend pour l’instant que le paquet vim-minimal. Nous allons installer la version améliorée comme ceci.

# yum install vim

Cette opération récupère et installe automatiquement l’éditeur Vim et toutes ses dépendances. Le téléchargement ne pèse pas très lourd, un peu moins de 20 Mo au total. Dorénavant, lorsque je mentionnerai “Vi”, je parlerai en fait de la version améliorée invoquée par la commande vim. Une fois que vous l’aurez maîtrisée, vous ne serez pas dépaysé en utilisant une version plus rudimentaire.

L’apprentissage de Vi se déroule généralement en deux temps. Tout d’abord, il s’agit d’apprendre à survivre, c’est-à-dire réaliser des opérations simples d’édition de texte. Ensuite, une fois que les manipulations de base sont à peu près maîtrisées, on découvre peu à peu le potentiel de cet éditeur. Il se révèle alors être un outil de travail extrêmement puissant au quotidien, qui peut servir aussi bien à administrer des serveurs distants et confectionner des sites web qu’à élaborer des scripts ou des programmes.

Parmi les nombreuses fonctionnalités que présente Vim, on trouve la coloration syntaxique, le formatage automatique, des fonctions de recherche et de remplacement, l’utilisation de macros, l’intégration du shell et beaucoup d’autres choses encore. Autant d’atouts qui en font l’outil de prédilection des programmeurs, des webmasters ou des administrateurs système.

Commençons par les fonctions simples.

Vimtutor

Il existe un grand nombre de méthodes, de livres (imprimés ou en ligne) et de tutoriels pour apprendre Vi. Tous ont un point en commun. Ils vous dressent tôt ou tard une liste impressionnante de raccourcis clavier plus rébarbatifs les uns que les autres, de façon à ce que seuls les utilisateurs très têtus ou les compulsifs obsessionnels puissent espérer arriver au bout du tutoriel. Sachez donc que le meilleur pédagogue pour enseigner Vi, c’est… Vi lui-même !

Il existe en effet un petit logiciel incorporé, nommé vimtutor, qui vous permet de vous entraîner à souhait sur cet outil. C’est aussi ce que je vous conseille de faire, en faisant fi de toutes les méthodes imprimées ou autres, car Vi est un outil de travail qui doit avant tout vous rentrer dans les doigts. Ne cherchez pas à mémoriser directement ses fonctions, mais apprenez-les en les utilisant, par l’entraînement et par la répétition.

$ vimtutor

Vimtutor

À partir de maintenant, il suffit de lire attentivement les instructions qui vous sont données et de les mettre en pratique. Vimtutor estime qu’il faut “entre 20 et 30 minutes” pour apprendre les bases. Comptez plutôt entre trois quarts d’heure et une bonne heure si vous débutez. Si vous prévoyez d’effectuer un passage complet par jour, il y a fort à parier qu’au bout de trois ou quatre jours, vous soyez raisonnablement à l’aise dans l’édition de fichiers de configuration avec Vi.

Les raccourcis clavier peuvent vous paraître pour le moins biscornus, notamment les déplacements du curseur, mais cela s’explique très simplement. Vim a été conçu spécialement pour les utilisateurs qui ont l’habitude de dactylographier. Si vous faites partie des gens qui utilisent leurs dix doigts pour taper sans regarder le clavier, vous serez très vite agréablement surpris par la redoutable efficacité de cet outil de travail.

Lire la suite…

Publié dans Documentation Microlinux | Marqué avec , | Laisser un commentaire

Supprimer : rm et rmdir

TerminalCet article fait partie de mes cours d’introduction à l’administration des systèmes Linux. Il vous prend par la main et vous apprend à supprimer des fichiers et des répertoires.

Gare aux armes de destruction massive

La commande rm (comme remove) sert à supprimer des fichiers et des arborescences de répertoires. Accessoirement, elle vous permet de vous tirer dans le pied, car elle est capable d’anéantir des dizaines de sites web, des années de courriels archivés, voire un serveur entier en un tournemain. Dans la panoplie des outils Unix, rm fait partie des instruments affûtés et tranchants qu’il convient de manier avec précaution.

Pour supprimer un fichier, il suffit de spécifier son nom en argument.

$ rm bonjour.txt

Vous n’obtiendrez pas de demande de confirmation du genre Êtes-vous sûr de… ou autres Voulez-vous vraiment… Votre système Linux n’a rien d’une nounou qui vous prend par la main. Vous lui avez ordonné de supprimer le fichier bonjour.txt et c’est sans broncher qu’il s’est exécuté pour l’envoyer au paradis des octets. Ici, vous ne trouvez pas de Corbeille non plus, où vous auriez pu repêcher vos données malencontreusement supprimées.

Notez au passage que sur un poste de travail Linux, les environnements de bureau comme KDE, GNOME, Xfce ou MATE disposent bien d’une Corbeille qui permet de repêcher des fichiers supprimés en mode graphique par le biais du navigateur de fichiers. En revanche, un fichier supprimé en ligne de commande sera perdu à jamais.

Travailler avec ou sans filet ?

Si ces manières expéditives vous mettent mal à l’aise, vous pouvez toujours invoquer rm avec l’option -i (comme interactive), ce qui produira une demande de confirmation avant chaque destruction de fichier. Tapez O pour répondre “oui”.

$ rm -i bonjour2.txt 
rm : supprimer fichier « bonjour2.txt » ? o

Ce fonctionnement peut être implémenté par défaut par ce qu’on appelle les alias de commande.

Les alias de commande

Invoquez la commande suivante.

$ alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias which='alias | /usr/bin/which --tty-only --read-alias 
             --show-dot --show-tilde'

Ici, chaque entrée commençant par alias correspond à la définition d’un raccourci de commandes, le but du jeu étant visiblement d’ajouter un peu de couleur ou de vous simplifier l’utilisation de ces quelques commandes. Vous vous apercevez que le simple ls que vous avez pu invoquer jusqu’ici est enrichi par défaut avec --color=auto.

Pour la plupart, les distributions Linux grand public prédéfinissent plusieurs alias de commandes, afin de rendre l’utilisation du shell un peu plus agréable. Essayons d’en définir un nous-même.

$ alias rm='rm -i'
$ touch fichierbidon
$ rm fichierbidon 
rm : supprimer fichier vide « fichierbidon » ? o

Il se peut que vous soyez confronté au cas de figure inverse, c’est-à-dire un alias de commande rm -i qui serait défini pour rm dans votre environnement de travail, alors que vous souhaitiez supprimer des fichiers directement, sans avoir à passer par la confirmation de suppression. Dans ce cas, utilisez rm avec l’option -f comme force.

$ alias rm
alias rm='rm -i'
$ touch fichierbidon
$ rm -f fichierbidon

Notons que notre définition d’alias n’est pas persistante. Autrement dit, lorsque vous démarrerez une nouvelle session, en vous déconnectant et en vous reconnectant par exemple, votre alias individualisé aura disparu. La personnalisation persistante du shell sera abordée un peu plus loin.

Supprimer des répertoires avec rmdir

De façon analogue à la commande rm, rmdir (remove directory) sert à supprimer des répertoires du système de fichiers.

$ mkdir repertoirebidon
$ ls -ld repertoirebidon/
drwxrwxr-x. 2 kikinovak kikinovak 6  9 juin  09:58 repertoirebidon/
$ rmdir repertoirebidon/

Le répertoire que vous souhaitez supprimer doit impérativement être vide. Dans le cas contraire, rmdir refuse de s’exécuter et vous obtenez un message d’erreur.

$ mkdir repertoirebidon
$ touch repertoirebidon/fichierbidon
$ rmdir repertoirebidon/
rmdir: échec de suppression de « repertoirebidon/ »: Le dossier 
       n'est pas vide

Dans ce cas, c’est-à-dire si l’on souhaite supprimer un répertoire ainsi que tout son contenu, on peut avoir recours à la commande rm suivie de l’option -r (comme recursive). Dans l’exemple suivant, j’ajoute l’option -i pour bien expliciter chaque opération de suppression.

$ mkdir repertoirebidon
$ touch repertoirebidon/fichierbidon
$ rm -ri repertoirebidon/
rm : descendre dans le répertoire « repertoirebidon/ » ? o
rm : supprimer fichier vide « repertoirebidon/fichierbidon » ? o
rm : supprimer répertoire « repertoirebidon/ » ? o

Dans la pratique quotidienne, c’est plutôt l’inverse que l’on souhaite faire. Il est souvent fastidieux de confirmer chaque suppression dans une arborescence de répertoires. Dans certains cas de figure, c’est même impossible. Lorsque vous décidez par exemple de nettoyer vos anciens répertoires de sources du noyau, il vous faudrait confirmer quelques dizaines de milliers d’opérations de suppression. C’est là que l’option -f (force) intervient.

$ alias rm='rm -i'
$ mkdir repertoirebidon
$ touch repertoirebidon/fichierbidon
$ rm -rf repertoirebidon/

Comme l’exemple précédent vous le montre, rm -rf ne vous demande pas votre avis et anéantit joyeusement tout ce que vous spécifiez, à condition que vous en ayez le droit, bien sûr. Invoquée en tant que root, la commande rm -rf peut même vous faire commettre l’équivalent numérique d’un Seppuku.

Un peu de ménage

Pour vous exercer avec rm et rmdir, faites un peu de nettoyage dans votre répertoire d’utilisateur. Effacez tous les résidus des exercices que nous avons pu faire jusqu’ici.

Un coup d’essuie-glace avec clear

J’en profite pour vous montrer l’équivalent d’un coup d’essuie-glace dans votre terminal. Remplissez ce dernier avec n’importe quelle commande susceptible de bien l’encombrer (par exemple ls /etc), puis essayez ceci.

$ clear

Pour aller plus vite, utilisez simplement le raccourci clavier Ctrl+D, ce qui revient au même.

Lire la suite…

Publié dans Documentation Microlinux | Marqué avec , | Laisser un commentaire

Copier, déplacer et renommer : cp et mv

TerminalCet article fait partie de mes cours d’introduction à l’administration des systèmes Linux. Il vous prend par la main et vous apprend à copier, déplacer et renommer des fichiers et des répertoires.

Copier des fichiers et répertoires avec cp

La commande cp (copy) sert à copier des fichiers. Dans son utilisation la plus basique, cp duplique un fichier d’un endroit à un endroit. Prenons par exemple un fichier de notre répertoire d’utilisateur et copions-le dans le répertoire /tmp.

$ ls -l bonjour.txt 
-rw-rw-r--. 1 kikinovak kikinovak 19  7 juin  13:13 bonjour.txt
$ cp bonjour.txt /tmp/
$ ls -l /tmp/bonjour.txt 
-rw-rw-r--. 1 kikinovak kikinovak 19  8 juin  09:19 /tmp/bonjour.txt

Pour copier des répertoires entiers avec leur contenu, il faudra invoquer cp avec l’option -R (comme recursive, “récursif”). Dans l’exemple, j’utilise en plus l’option -v qui explicite bien chaque détail de l’opération.

$ tree Fichiers
Fichiers
├── Documents
│   └── texte.txt
├── Films
│   └── film.avi
└── Images
    └── photo.jpg

3 directories, 3 files
$ cp -Rv Fichiers /tmp/
« Fichiers » -> « /tmp/Fichiers »
« Fichiers/Documents » -> « /tmp/Fichiers/Documents »
« Fichiers/Documents/texte.txt » -> « /tmp/Fichiers/.../texte.txt »
« Fichiers/Images » -> « /tmp/Fichiers/Images »
« Fichiers/Images/photo.jpg » -> « /tmp/Fichiers/Images/photo.jpg »
« Fichiers/Films » -> « /tmp/Fichiers/Films »
« Fichiers/Films/film.avi » -> « /tmp/Fichiers/Films/film.avi »
$ tree /tmp/Fichiers
/tmp/Fichiers
├── Documents
│   └── texte.txt
├── Films
│   └── film.avi
└── Images
    └── photo.jpg

3 directories, 3 files

Voici maintenant une utilisation de cp qui peut ressembler (de loin) au quotidien réel d’un administrateur système. Créez un fichier de configuration config dans votre répertoire d’utilisateur. Effectuez-en ensuite une copie de sauvegarde config.orig, qui représentera en quelque sorte l’état initial de votre fichier de configuration. Maintenant, modifiez config en ajoutant une ligne, par exemple. Vos fichiers ne sont désormais plus les mêmes.

$ cat > config << EOF
> Option 1
> Option 2
> Option 3
> EOF
$ cp -v config config.orig
« config » -> « config.orig »
$ ls -l config*
-rw-rw-r--. 1 kikinovak kikinovak 27  8 juin  09:27 config
-rw-rw-r--. 1 kikinovak kikinovak 27  8 juin  09:27 config.orig
$ echo Option 4 >> config
$ ls -l config*
-rw-rw-r--. 1 kikinovak kikinovak 36  8 juin  09:27 config
-rw-rw-r--. 1 kikinovak kikinovak 27  8 juin  09:27 config.orig

Utiliser le joker *

Dans ce dernier exemple, j’ai introduit une petite nouveauté qui semblera familière aux utilisateurs de MS-DOS, même si son fonctionnement diffère quelque peu : le joker *. J’évite d’utiliser les traductions françaises comme “caractère générique” ou “métacaractère”, tout juste aptes à séduire les penseurs postmodernes. L’astérisque signifie “n’importe quelle chaîne de caractères”. Si cela ne vous paraît pas très parlant, pensez aux jeux de cartes, où le joker signifie “n’importe quelle carte”, ou encore aux petites lettrines immaculées du Scrabble, celles qui endossent le rôle de n’importe quelle lettre salvatrice au milieu de votre “WGTHRX”. Là encore, prenons un exemple.

Depuis que nous avons entrepris notre initiation à la ligne de commande, les fichiers et les répertoires s’entassent dans notre répertoire d’utilisateur. La prochaine leçon sera d’ailleurs consacrée aux commandes de suppression, ce qui nous permettra d’envisager un brin de ménage. Pour l’instant, vous devez faire avec tout ce fatras. Admettons que vous ne vouliez afficher des renseignements précis que sur vos seuls fichiers dont le nom commence par bonjour. Vous pourriez très bien expliciter à la suite les quatre fichiers en argument.

$ ls -l bonjour.txt bonjour2.txt bonjour3.txt bonjourtous.txt 
-rw-rw-r--. 1 kikinovak kikinovak 17 26 mai   10:50 bonjour2.txt
-rw-rw-r--. 1 kikinovak kikinovak 22 26 mai   10:50 bonjour3.txt
-rw-rw-r--. 1 kikinovak kikinovak 58 26 mai   10:54 bonjourtous.txt
-rw-rw-r--. 1 kikinovak kikinovak 19  7 juin  13:13 bonjour.txt

Toutefois, il y a moyen de faire plus court.

$ ls -l bonjour*
-rw-rw-r--. 1 kikinovak kikinovak 17 26 mai   10:50 bonjour2.txt
-rw-rw-r--. 1 kikinovak kikinovak 22 26 mai   10:50 bonjour3.txt
-rw-rw-r--. 1 kikinovak kikinovak 58 26 mai   10:54 bonjourtous.txt
-rw-rw-r--. 1 kikinovak kikinovak 19  7 juin  13:13 bonjour.txt

Les habitués de MS-DOS verront tout de suite la différence. Sous Windows, le joker aurait dû être invoqué sous la forme BONJOUR*.*, voire BONJOUR*.TXT.

Sauvegarder un répertoire

Pour en revenir à cp, je peux également copier l’intégralité d’un répertoire vers un répertoire d’un autre nom.

$ cp -Rv Fichiers CopieFichiers
« Fichiers » -> « CopieFichiers »
« Fichiers/Documents » -> « CopieFichiers/Documents »
« Fichiers/Documents/texte.txt » -> « CopieFichiers/.../texte.txt »
« Fichiers/Images » -> « CopieFichiers/Images »
« Fichiers/Images/photo.jpg » -> « CopieFichiers/Images/photo.jpg »
« Fichiers/Films » -> « CopieFichiers/Films »
« Fichiers/Films/film.avi » -> « CopieFichiers/Films/film.avi »

Admettons maintenant que je souhaite effectuer une copie complète du répertoire Fichiers et de tout son contenu vers un autre endroit du système, tout en donnant un autre nom au répertoire copié, par exemple Sauvegarde20170608. Dans ce cas, voici ce qu’il faut faire.

$ cp -Rv Fichiers/ /tmp/Sauvegarde20170608
« Fichiers/ » -> « /tmp/Sauvegarde20170608 »
« Fichiers/Documents » -> « /tmp/Sauvegarde20170608/Documents »
« Fichiers/Documents/texte.txt » ->
« /tmp/Sauvegarde20170608/Documents/texte.txt »
« Fichiers/Images » -> « /tmp/Sauvegarde20170608/Images »
« Fichiers/Images/photo.jpg » -> « /tmp/.../Images/photo.jpg »
« Fichiers/Films » -> « /tmp/Sauvegarde20170608/Films »
« Fichiers/Films/film.avi » -> « /tmp/.../Films/film.avi »

Le seul aspect peu réaliste de ce dernier exemple, c’est que /tmp n’est pas un endroit approprié pour ranger des sauvegardes. De meilleurs endroits seront à découvrir un peu plus loin.

Certains parmi vous auront probablement remarqué une certaine inconsistance dans l’utilisation de / à la fin des noms de répertoires. Concrètement, lorsque je copie un répertoire Fichiers, je peux écrire cp Fichiers/ CopieFichiers ou bien cp Fichiers CopieFichiers. La barre oblique s’ajoute automatiquement à la fin d’un nom de répertoire lorsque j’utilise la complétion automatique, comme nous le verrons un peu plus loin.

Déplacer des fichiers et des répertoires avec mv

La commande mv (move comme “bouger”) sert à déplacer des fichiers.

$ mv bonjour.txt /tmp/

Cette dernière commande a déplacé le fichier ~/bonjour.txt vers le répertoire /tmp.

mv ne s’applique pas seulement sur des fichiers, mais également sur des répertoires entiers. Pour essayer, créez une autre copie du répertoire Fichiers et déplacez-la vers /tmp en utilisant mv.

$ cp -R Fichiers/ AutreCopieFichiers
$ mv AutreCopieFichiers/ /tmp/

Question épineuse : comment déplacer à nouveau le fichier /tmp/bonjour.txt vers mon répertoire d’utilisateur lorsque je me trouve dans ce dernier ? Voici la réponse.

$ mv /tmp/bonjour.txt ./

Et je pourrais faire de même avec /tmp/AutreCopieFichiers.

$ mv /tmp/AutreCopieFichiers/ ./

Vous rappelez-vous ce que nous avons dit concernant le point . qui signifie “ici” ? Dans ce cas, la première des deux commandes précédentes peut se lire littéralement comme ceci : “déplace (mv) le fichier bonjour.txt qui se situe dans le répertoire /tmp vers ici (./)”.

Renommer des fichiers et des répertoires avec mv

La commande mv ne sert pas seulement à déplacer, mais aussi à renommer des fichiers et des répertoires. Cette double utilisation tourmente habituellement les novices de la ligne de commande sous Linux, mais ce n’est qu’une simple habitude à prendre.

$ mv bonjour.txt hello.txt

Là, nous venons tout simplement de renommer le fichier bonjour.txt en hello.txt. Pour déplacer ce fichier hello.txt vers /tmp tout en le renommant en bonjour.txt, c’est très simple.

$ mv hello.txt /tmp/bonjour.txt

Lire la suite…

Publié dans Documentation Microlinux | Marqué avec , | Laisser un commentaire

Créer : touch et mkdir

TerminalCet article fait partie de mes cours d’introduction à l’administration des systèmes Linux. Il vous prend par la main et vous initie à l’utilisation des commandes de création de fichiers et de répertoires.

L’affichage détaillé de ls avec l’option -l nous montre que chaque fichier est horodaté. Prenons par exemple le fichier bonjour.txt que nous avons créé précédemment.

$ ls -l bonjour.txt 
-rw-rw-r--. 1 kikinovak kikinovak 19 26 mai   10:46 bonjour.txt

Modifier l’horodatage d’un fichier avec touch

En l’occurrence, ce fichier a été créé (ou modifié pour la dernière fois) le 26 mai à 10h46. Attention à ne pas confondre les indications. 19 indique ici la taille du fichier, c’est-à-dire dix-neuf octets. Maintenant, essayons ceci :

$ touch bonjour.txt 
$ ls -l bonjour.txt 
-rw-rw-r--. 1 kikinovak kikinovak 19  7 juin  13:13 bonjour.txt

Nous constatons que l’horodatage du fichier indique maintenant le 7 juin à 13h13. En effet, cela correspond à la date et à l’heure à laquelle j’écris ces lignes.

Créer un fichier vide avec touch

Si le fichier spécifié n’existe pas, touch prendra soin de le créer. Essayons avec un nom de fichier qui n’existe pas dans le répertoire courant.

$ touch yatahongaga.txt
$ ls -l yatahongaga.txt 
-rw-rw-r--. 1 kikinovak kikinovak 0  7 juin  13:16 yatahongaga.txt

Créer des fichiers texte sans éditeur de texte

Tant que nous y sommes, je vous montre une méthode pour créer des fichiers texte simples, à l’aide de la seule commande cat.

$ cat > ~/livres.txt << EOF
> Alice au pays des merveilles
> La montagne magique
> Faust
> EOF
$ ls -l livres.txt 
-rw-rw-r--. 1 kikinovak kikinovak 55  7 juin  13:19 livres.txt
$ cat livres.txt 
Alice au pays des merveilles
La montagne magique
Faust

Nous avons écrit trois lignes de texte dans un fichier ~/livres.txt. N’oubliez pas que le symbole tilde ~ représente ici le répertoire d’utilisateur, dans mon cas /home/kikinovak. La suite de caractères EOF (comme End Of File) définit la fin du fichier.

Aurions-nous pu obtenir quelque chose de comparable avec la commande echo ? Essayons.

$ echo Beethoven > compositeurs.txt
$ cat compositeurs.txt 
Beethoven

La commande echo a créé ici un nouveau fichier compositeurs.txt en y écrivant une ligne Beethoven. Jusqu’ici, cela ressemble beaucoup à ce que nous avons fait plus haut avec bonjour.txt. Maintenant, essayons ceci.

$ echo Bach > compositeurs.txt 
$ cat compositeurs.txt 
Bach

Ce n’était donc pas la bonne méthode pour ajouter une ligne à notre fichier. Le dernier contenu en date a tout simplement écrasé l’ancien contenu. Nous allons donc nous y prendre autrement.

$ echo Bartok >> compositeurs.txt 
$ cat compositeurs.txt 
Bach
Bartok

Voilà qui est mieux. L’utilisation du double chevron >> au lieu du simple > a provoqué l’ajout de la chaîne de caractères à la fin du fichier, en évitant la substitution du contenu précédent. Si nous souhaitons ajouter un troisième nom à la liste, il devrait donc suffire de répéter la dernière commande en insérant un autre nom. Essayons.

$ echo Schubert >> compositeurs.txt 
$ cat compositeurs.txt 
Bach
Bartok
Schubert

Effectivement, c’est bien cela. Soit dit en passant, nous en avons profité pour avoir un autre petit aperçu de la redirection sous Linux. Passons maintenant à la création de répertoires.

Créer des répertoires avec mkdir

La commande mkdir (comme make directory, vous aurez remarqué que les informaticiens ont un problème avec les voyelles) sert à créer un nouveau répertoire. Il suffit de spécifier le nom de ce dernier lorsqu’on invoque mkdir. Créons un répertoire Documents dans notre répertoire d’utilisateur.

$ mkdir Documents
$ ls -ld Documents
drwxrwxr-x. 2 kikinovak kikinovak 6  7 juin  13:54 Documents

Il est également possible de spécifier le chemin complet du répertoire à créer. Pour créer un répertoire Images à l’intérieur de mon répertoire d’utilisateur /home/kikinovak, je pourrais le faire comme ceci.

$ mkdir /home/kikinovak/Images
$ ls -ld /home/kikinovak/Images
drwxrwxr-x. 2 kikinovak kikinovak 6  ... /home/kikinovak/Images

Bien évidemment, dans cet exemple, il vous faudra remplacer kikinovak dans le chemin par votre nom d’utilisateur. D’ailleurs, pour être sûr que c’est bien dans notre répertoire d’utilisateur que l’on crée le dossier, nous aurions pu écrire notre dernière commande comme ceci.

$ mkdir ~/Images
$ ls -ld ~/Images
drwxrwxr-x. 2 kikinovak kikinovak 6  ... /home/kikinovak/Images

Créer une série de répertoires

Admettons qu’à l’intérieur du répertoire ~/Images, nous souhaitions créer trois sous-répertoires Photos, Graphismes et Captures. Nous pourrions le faire de la façon suivante.

$ cd ~/Images
$ mkdir Photos Graphismes Captures
$ ls -l
total 0
drwxrwxr-x. 2 kikinovak kikinovak 6  7 juin  14:08 Captures
drwxrwxr-x. 2 kikinovak kikinovak 6  7 juin  14:08 Graphismes
drwxrwxr-x. 2 kikinovak kikinovak 6  7 juin  14:08 Photos

Ce dernier exemple appelle deux remarques. D’une part, il est tout à fait possible de créer une série de répertoires à la louche. Il suffit de spécifier leurs noms respectifs en argument, en les séparant d’un espace. D’autre part, notez bien le d comme directory en tête des attributs complets (drwxrwxr-x), qui signifie que nous avons affaire à des répertoires.

Gare aux espaces !

N’oublions pas de dire deux mots sur un détail important qui constitue une source d’erreur fréquente : les espaces dans les noms de fichiers et de répertoires. Dans certains cas de figure (sur les serveurs, par exemple, ou dans les réseaux hétérogènes, c’est-à-dire composés de machines dotées de systèmes d’exploitation différents), il vaut mieux tout faire pour les éviter. Dans d’autres cas, il est tout à fait possible de les utiliser, à condition d’être sûr de ce que l’on fait. Je vous donne un exemple pour vous sensibiliser à la problématique.

Retournez dans votre répertoire d’utilisateur (cd sans argument), créez un répertoire Test et, à l’intérieur de ce dernier, créez un répertoire Mes Documents, dont le nom vous semblera vaguement familier si vous venez d’un autre système d’exploitation, du genre auquel on échappe difficilement.

$ cd
$ mkdir Test
$ cd Test
$ mkdir Mes Documents
$ ls -l
total 0
drwxrwxr-x. 2 kikinovak kikinovak 6  7 juin  14:54 Documents
drwxrwxr-x. 2 kikinovak kikinovak 6  7 juin  14:54 Mes

Vous voyez le problème. La commande mkdir nous a créé deux répertoires distincts, Mes et Documents. Ce n’est pas ce que nous voulions faire.

Prenons un autre exemple pour voir comment nous aurions pu nous y prendre. Revenons dans notre répertoire d’utilisateur, créons un répertoire Test2 et, à l’intérieur de ce dernier, essayons de créer trois répertoires distincts Mes Documents, Mes Images et Mes Films.

$ cd
$ mkdir Test2
$ cd Test2
$ mkdir "Mes Documents"
$ mkdir 'Mes Images'
$ mkdir Mes\ Films
$ ls -l
total 0
drwxrwxr-x. 2 kikinovak kikinovak 6  7 juin  14:57 Mes Documents
drwxrwxr-x. 2 kikinovak kikinovak 6  7 juin  14:58 Mes Films
drwxrwxr-x. 2 kikinovak kikinovak 6  7 juin  14:57 Mes Images

Cette fois-ci, nous avons bien obtenu le résultat escompté. Vous aurez certainement remarqué que pour chacun des trois répertoires, je me suis servi d’une syntaxe différente, en utilisant respectivement des guillemets doubles, des guillemets simples et un caractère d’échappement devant l’espace.

Exercice de révision

Je vous propose de souffler un peu en faisant un petit exercice de révision.

  1. Dans votre répertoire d’utilisateur, créez un dossier Fichiers.
  2. À l’intérieur de ce dernier, créez trois sous-répertoires Documents, Images et Films.
  3. Créez-y trois fichiers vides nommés respectivement texte.txt, photo.jpg et film.avi.

Les arborescences en un coup d’oeil avec tree

Puisque nous sommes en plein dans les arborescences de répertoires, le moment est venu de vous présenter un cousin lointain de ls, la commande tree. Curieusement, on ne la rencontre pas souvent dans les manuels d’initiation à la ligne de commande sous Linux. D’ailleurs, elle ne fait pas partie de notre système minimal, mais nous pouvons l’installer facilement, en anticipant quelque peu sur le chapitre concernant la gestion des logiciels.

Déconnectez-vous (exit) et reconnectez-vous en tant que root. Vérifiez si vous êtes bien connectés à Internet.

# ping -c 4 www.centos.org
PING www.centos.org (85.12.30.226) 56(84) bytes of data.
64 bytes from 85.12.30.226: icmp_seq=1 ttl=53 time=48.5 ms
64 bytes from 85.12.30.226: icmp_seq=2 ttl=53 time=48.3 ms
64 bytes from 85.12.30.226: icmp_seq=3 ttl=53 time=48.5 ms
64 bytes from 85.12.30.226: icmp_seq=4 ttl=53 time=48.7 ms

--- www.centos.org ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/max/mdev = 48.359/48.556/48.749/0.138 ms

Ensuite, installez l’application tree comme ceci.

# yum install tree

Répondez deux fois par l’affirmative pour l’installation du paquet et l’importation de la clé GPG, et le tour est joué. Quittez la console (exit) et reconnectez-vous en tant qu’utilisateur normal.

La commande tree offre des fonctionnalités fort pratiques. Dans le cas de notre petit exercice de révision, elle nous permettra d’apprécier le résultat en un simple coup d’oeil. Essayez.

$ cd
$ tree Fichiers
Fichiers
├── Documents
│   └── texte.txt
├── Films
│   └── film.avi
└── Images
    └── photo.jpg

3 directories, 3 files

Les anglophones parmi vous auront peut-être deviné que la commande tree (qui signifie “arbre” en anglais) sert à représenter des arborescences.

Notre système contient une série de fichiers et de répertoires cachés, que nous pouvons afficher avec l’option -a comme pour la commande ls.

$ tree /etc/skel
/etc/skel

0 directories, 0 files
$ tree -a /etc/skel
/etc/skel
├── .bash_logout
├── .bash_profile
└── .bashrc

0 directories, 3 files

Puisque nous avons parlé d’arbre, vous pouvez très bien imaginer les suites de répertoires et de sous-répertoires comme autant de branches qui se ramifient.

$ tree /usr/share/icons/hicolor
/usr/share/icons/hicolor
├── 16x16
│   └── apps
│       ├── fedora-logo-icon.png
│       └── system-logo-icon.png
├── 22x22
│   └── apps
│       ├── fedora-logo-icon.png
│       └── system-logo-icon.png
...

Les fichiers (comme fedora-logo-icon.png ou system-logo-icon.png dans le listing ci-dessus) correspondent alors aux feuilles de cet arbre. Pour filer la métaphore, tout se rejoint à la racine. Et les pinailleurs noteront que notre arbre est à l’envers. La racine est en haut, et il faut descendre vers les feuilles.

L’option -d de tree montre les différents embranchements, mais sans les feuilles. En d’autres termes, tree -d (comme directory) affichera seulement les répertoires d’une arborescence.

$ tree -d /usr/share/icons/hicolor
/usr/share/icons/hicolor
├── 16x16
│   └── apps
├── 22x22
│   └── apps
├── 24x24
│   └── apps
├── 256x256
│   └── apps
├── 32x32
│   └── apps
├── 36x36
│   └── apps
├── 48x48
│   └── apps
├── 96x96
│   └── apps
└── scalable
    └── apps

18 directories

Créer une arborescence de répertoires

Admettons maintenant que nous voulions créer une série de sous-répertoires imbriqués les uns dans les autres, à la manière des poupées gigognes. Le résultat ressemble à peu près à l’arborescence suivante.

$ tree branche1
branche1
└── branche2
    └── branche3
        └── branche4

3 directories, 0 files

La première idée sera sans doute d’invoquer mkdir avec le chemin complet des sous-répertoires.

$ mkdir branche1/branche2/branche3/branche4

Malheureusement, voici ce qui se passe si nous faisons cela.

$ mkdir branche1/branche2/branche3/branche4
mkdir: impossible de créer le répertoire « branche1/branche2/
       branche3/branche4 »: Aucun fichier ou dossier de ce type

Réprimons un instant une éventuelle pulsion de traverser de notre poing l’écran de l’ordinateur. Au lieu de cela, regardons de plus près le message d’erreur et prenons-le au pied de la lettre. Ce que notre shell (interpréteur de commande) essaie de nous faire comprendre (de façon un peu laconique, certes), c’est qu’il n’arrive pas à créer le répertoire branche4 parce que les répertoires parents branche1, branche2 et branche3 n’existent pas. Nous devons donc invoquer mkdir avec l’option -p (comme parent).

$ mkdir -p branche1/branche2/branche3/branche4
$ tree branche1
branche1
└── branche2
    └── branche3
        └── branche4

3 directories, 0 files

Je disais que notre shell se montrait un peu laconique à notre égard. Sachez que, dans bien des cas, il ne tient qu’à nous de le rendre plus bavard. Créons une autre série de répertoires imbriqués, mais cette fois-ci, utilisons l’option supplémentaire -v comme --verbose, c’est-à-dire “bavard”.

$ mkdir -pv poupee1/poupee2/poupee3
mkdir: création du répertoire « poupee1 »
mkdir: création du répertoire « poupee1/poupee2 »
mkdir: création du répertoire « poupee1/poupee2/poupee3 »

Cette option -v est applicable pour un grand nombre de commandes.

Lire la suite…

Publié dans Non classé | Laisser un commentaire

Visualiser : more et less

TerminalCet article fait partie de mes cours d’introduction à l’administration des systèmes Linux. Il vous prend par la main et vous initie à l’utilisation des commandes de visualisation more et less.

Gérer l’affichage de fichiers longs

L’utilitaire cat convient parfaitement pour visualiser des fichiers courts. À titre d’exemple, utilisez-le pour visualiser le contenu de fichiers de configuration comme /etc/hostname, /etc/hosts, /etc/resolv.conf ou /etc/fstab. Ne tenez pour l’instant pas compte du fait que vous ne comprenez pas grand-chose au contenu quelque peu énigmatique de ces fichiers, nous en éluciderons la signification en temps et en heure.

Pour des fichiers dont l’affichage dépasse la taille d’un écran, comme dans l’exemple avec /proc/cpuinfo, on peut très bien revenir en arrière avec la combinaison de touches Maj+PageHaut ou Maj+PageBas. Si l’on s’est connecté à distance depuis un terminal graphique, on peut éventuellement utiliser la barre de défilement ou la molette de la souris.

Dans votre terminal, affichez le fichier /etc/DIR_COLORS à l’aide de cat. L’affichage dépassera la taille de votre fenêtre. Revenez en arrière en utilisant la combinaison de touches indiquée.

Pour un fichier comme /etc/DIR_COLORS, cette manière de procéder est tout à fait valable. Dans d’autres cas, il faudra procéder différemment. Voyez vous-même pourquoi.

$ cat /etc/services
...
isnetserv       48128/tcp      # Image Systems Network Services
isnetserv       48128/udp      # Image Systems Network Services
blp5            48129/tcp      # Bloomberg locator
blp5            48129/udp      # Bloomberg locator
com-bardac-dw   48556/tcp      # com-bardac-dw
com-bardac-dw   48556/udp      # com-bardac-dw
iqobject        48619/tcp      # iqobject
iqobject        48619/udp      # iqobject
matahari        49000/tcp      # Matahari Broker

Essayez de remonter au début du fichier, jusqu’à ce que vous aperceviez la ligne contenant l’invite de commande. Vous n’en voyez pas la fin (ou plutôt : le début) ? C’est normal : le fichier en question compte plus de 11.000 lignes. Sa longueur pose un problème dans le sens où nous arrivons aux limites de :

  • la patience de l’utilisateur qui n’en peut plus d’appuyer sur Maj+PageHaut ;
  • la mémoire d’affichage de la console, qui ne conserve qu’un nombre limité de caractères : au-delà, il n’est plus possible de remonter davantage pour voir le début du fichier.

Visualiser avec more

Bien sûr, nous pourrions décider d’ouvrir tous ces fichiers dont l’affichage dépasse la taille d’un écran avec un éditeur de texte simple. Avec un système Linux, si nous souhaitons seulement voir le contenu d’un certain fichier de configuration sans toutefois l’éditer, nous aurons d’abord le réflexe d’utiliser un pager. Le terme anglais a été francisé en “logiciel de pagination”, “logiciel de visualisation” ou “pageur” pour faire plus court. En voici un.

$ more /etc/DIR_COLORS

Le visualiseur more affiche le fichier spécifié en argument en remplissant exactement un écran, puis il s’arrête. Pour voir le reste du fichier, vous avez le choix entre :

  • appuyer sur Entrée pour avancer ligne par ligne ;
  • utiliser la touche Espace pour progresser page par page ;
  • ou appuyer sur Q (comme quit ou “quitter”) pour sortir du mode de visualisation.

Dès que more est arrivé à la fin du fichier, il considère qu’il a terminé son travail. L’invite de commande réapparaît et le clignotement du curseur vous indique que vous pouvez continuer de travailler normalement dans la console.

Essayez more sur un fichier plus long :

$ more /etc/services

Les anciennes versions de more ne permettaient pas de revenir en arrière, ce qui ne facilitait pas la recherche dans un fichier un peu plus volumineux. Les versions plus récentes (comme celle incluse dans notre installation de CentOS) ont ajouté cette fonctionnalité sous forme de la touche B (comme back), qui permet de “feuilleter” le fichier page par page en sens inverse. Toutefois, il faudra bien se résoudre à admettre que more fait partie de la poignée d’utilitaires un peu obtus du monde Linux et qu’il n’est pas vraiment confortable à utiliser.

Less is more : moins, c’est plus !

C’est là que less entre en jeu. C’est un autre logiciel de pagination, dont le but déclaré est de fournir un remplaçant confortable à more. Son nom est un clin d’oeil ironique à la devise less is more, la version anglaise de la tournure “ce n’est pas la peine d’en rajouter”. Prenez cette boutade au pied de la lettre et vous devinerez qu’effectivement, less = more.

$ less /etc/services

Vous constatez que less vous laisse naviguer exactement comme more. La touche Entrée sert à avancer d’une ligne, les touches Espace et B permettent de feuilleter le fichier dans un sens et dans l’autre, Q interrompt la pagination et fait réapparaître l’invite de commande. Cependant ce n’est pas tout.

  • À la différence de more, less ne quitte pas le mode de pagination lorsqu’il arrive à la fin du fichier, ce qui évite les manipulations énervantes du style “retour à la case départ”.
  • Les touches directionnelles du clavier FlècheHaut et FlècheBas permettent également de naviguer dans le fichier. Non content de cela, FlècheGauche et FlècheDroite vous déplacent latéralement dans un fichier dont la largeur dépasse celle de l’écran. Essayez.
  • Il arrive très souvent que l’on ouvre un fichier de configuration à la recherche d’une certaine chaîne de caractères. Lorsque le fichier compte plusieurs milliers de lignes, cela revient à chercher une aiguille dans une botte de foin. Pour remédier à cela, less inclut une fonction de recherche simple. Pour exemple, ouvrez le fichier /etc/passwd avec less, appuyez sur la barre oblique / et faites-la suivre de la chaîne de caractères que vous cherchez, par exemple nologin ou votre nom d’utilisateur. Vous remarquez que less vous affiche toutes les occurrences trouvées en surbrillance. Utilisez la touche N (next = prochain) pour sauter d’occurrence en occurrence et Maj+N pour faire la même chose en sens inverse.

Enfin, précisons que less et more sont deux logiciels de visualisation non destructifs, c’est-à-dire qu’ils ne modifient en aucune manière le contenu des fichiers sur lesquels vous les appliquez. Leur utilisation se limite au seul format texte simple. Étant donné que dans un système Linux, toute la configuration est contenue dans des fichiers de ce format, nous constaterons bientôt qu’il s’agit d’outils fort pratiques pour l’administration de notre machine.

Lire la suite…

Publié dans Documentation Microlinux | Marqué avec , | Laisser un commentaire

La structure des répertoires sous Linux

TerminalCet article fait partie de mes cours d’introduction à l’administration des systèmes Linux. Il vous prend par la main et vous explique pas à pas la structure des répertoires sous Linux.

Où suis-je ?

Parmi les questions que peuvent se poser les utilisateurs de Windows qui viennent de passer à Linux, voici les plus fréquentes.

  • “Lorsque je viens de me connecter au système, où est-ce que je me retrouve ?”
  • “Où sont mes fichiers et mes documents ?”
  • “Où est mon lecteur C: ?”

Une structure en arborescence

Comme la plupart des systèmes d’exploitation modernes, Linux enregistre tous ses fichiers dans une structure organisée de façon hiérarchique, en arborescence.

Imaginez votre système Linux comme un de ces grands classeurs de dossiers qu’on voit dans les bureaux. Ce genre de meuble se subdivise en tiroirs, chaque tiroir pouvant contenir une série de classeurs qui renferment des documents ou d’autres classeurs à leur tour. La métaphore est rudimentaire, mais elle vous permettra de vous faire une première idée.

Une métaphore autrement parlante pourra venir compléter votre vision du système de fichiers, celle des poupées russes. Vous connaissez certainement le principe des poupées gigognes qui s’emboîtent les unes dans les autres. Dans un système Linux comme dans d’autres systèmes, chaque répertoire peut ainsi contenir d’autres répertoires, contenant eux-mêmes des sous-répertoires, jusqu’à ce qu’on arrive au bout de la hiérarchie.

Visite guidée du système en dix minutes

Vous avez peut-être déjà vu ces cars de touristes japonais, ornés du sigle publicitaire “Visit Europe in six days“, “Visitez l’Europe en six jours”. Le but du jeu de cette formule touristique consiste apparemment à parcourir une moyenne de mille kilomètres par jour pour avoir tout juste le temps de prendre en photo le sourire exténué des compatriotes devant Big Ben, la Tour Eiffel, le Vésuve et la maison natale de Mozart.

C’est un peu dans le même esprit que nous allons entreprendre une première visite sommaire du système, maintenant que nous savons nous déplacer dans les répertoires. Un système Linux comme celui que nous venons d’installer est composé de milliers de répertoires et de sous-répertoires, contenant des dizaines, voire une centaine de milliers de fichiers. Si cette idée vous est insupportable, songez à la découverte d’une grande ville. Mettez-vous dans la peau d’un touriste qui vient passer une semaine à Marseille. La ville est constituée de centaines de rues avec des milliers d’immeubles et des centaines de milliers de gens. Est-ce que cela vous empêchera d’aller vous balader sur la Canebière ou de boire un café au Vieux Port ? Non ? Bon.

Home sweet home

En partant de votre répertoire utilisateur, montez d’un cran (cd ..) dans le répertoire /home. Vous y verrez le répertoire correspondant à l’utilisateur créé lors de l’installation. Si nous avions créé les comptes des trois utilisateurs kikinovak, glagaffe et jktartempion sur le même système, chacun de ces trois utilisateurs disposerait ici de son propre répertoire d’utilisateur. Kiki Novak rangerait sa documentation technique et ses articles dans /home/kikinovak, Gaston Lagaffe organiserait ses blagues et vidéos marrantes dans /home/glagaffe et Jean-Kevin pourrait stocker ses albums et ses films piratés dans les sous-répertoires de /home/jktartempion.

Nous verrons la gestion des utilisateurs un peu plus loin.

Remonter à la racine : /

Partant du répertoire /home, si vous montez encore d’un cran (cd ..), vous vous retrouvez à la racine du système de fichiers, symbolisée par une barre oblique /. Pour notre première visite, faites comme les touristes tout juste sortis du car. Regardez tout, prenez des photos, mais ne touchez à rien. Nous reviendrons bientôt pour revoir tout cela en détail.

Les répertoires /bin et /boot

Historiquement, le répertoire /bin (pour binaries ou “binaires”) contient des commandes simples pour tous les utilisateurs, et plus précisément, toutes les commandes dont le système a besoin pour démarrer correctement. Sur notre système CentOS, /bin est un lien symbolique pointant vers /usr/bin. Nous verrons plus loin pourquoi.

/boot est l’endroit où un système Linux range tout ce qu’il lui faut pour démarrer (to boot, “démarrer”). Le fichier vmlinuz-3.10.0-514.el7.x86_64, c’est le noyau de votre machine. Vous pouvez en avoir un seul ou toute une collection dans ce répertoire (ce que nous verrons plus loin). En revanche, vous n’en utiliserez jamais qu’un seul à la fois.

Le noyau (ou kernel), c’est la partie du système d’exploitation qui est la plus près de votre matériel. C’est précisément ce fichier qui est chargé, dès que GRUB (GRand Unified Bootloader, le chargeur de démarrage) passe la main au système. GRUB est en quelque sorte un logiciel ayant pour seule tâche de démarrer le noyau. Les fichiers utilisés par GRUB se trouvent respectivement dans /boot/grub et /boot/grub2. Si cela ne vous évoque pas grand-chose pour l’instant, ne vous tracassez pas. Et oui, c’est normal que vous n’ayez pas accès à /boot/grub2 en tant que simple utilisateur. Le chargeur de démarrage fait partie des composants vitaux de votre système, et les utilisateurs “communs mortels” n’ont rien à y faire. Pour l’instant, contentez-vous de savoir que ces fichiers existent et qu’ils sont rangés par ici.

Les répertoires /dev et /etc

Le répertoire /dev (comme device, qui signifie “périphérique”) est peuplé d’une multitude de fichiers qui symbolisent chacun un périphérique de votre machine. Repérez, par exemple, /dev/cdrom qui représente votre lecteur CD ou DVD (s’il existe), /dev/input/mouse0 qui désigne votre souris, ou encore /dev/sda qui symbolise votre premier disque dur. Et si jamais vous vous demandez ce que peut bien être /dev/null,  c’est le nirvana numérique.

L’étymologie de /etc est controversée. C’est un de ces cas de figure assez fréquents dans la vie quotidienne où l’acceptation erronée a pris le dessus pour devenir monnaie courante (un peu comme ces jardins “privatifs” qui les agents immobiliers cherchent à vous vendre dans l’espoir d’être “rénumérés”). La tradition veut que ETC signifie Editable Text Configuration, c’est-à-dire “configuration éditable en mode texte”. Voyons ce que cela veut signifie concrètement. Dans le répertoire /etc, repérez le fichier passwd et affichez son contenu.

[kikinovak@centosbox ~]$ cd /etc
[kikinovak@centosbox etc]$ ls passwd
passwd
[kikinovak@centosbox etc]$ cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
...
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
kikinovak:x:1000:1000:Kiki Novak:/home/kikinovak:/bin/bash

La fin du fichier contient manifestement la configuration du ou des utilisateurs “communs mortels” du système. Et avant que vous n’émettiez des réserves, ne vous inquiétez pas : les mots de passe des utilisateurs sont stockés dans un endroit inaccessible pour lesdits utilisateurs. Quoi qu’il en soit, il n’y a là rien de bien spectaculaire, objecterez-vous en réprimant un baîllement d’ennui. Eh bien, si !

La configuration d’un système Linux – qu’il s’agisse d’un serveur comme le nôtre, d’un poste de travail ou d’une machine intégrée dans une ferme de calcul de trois mille machines de la NASA – est stockée dans de simples fichiers texte humainement lisibles. Il est donc possible de configurer le système en modifiant ces fichiers avec un éditeur de texte comme seul outil. En comparaison, un système Windows n’offre pas cette transparence. Sur ce dernier, les opérations du système sont retranscrites sous forme de graffitis écrits dnas une obscure base de registre, illisible pour un humain.

Si vous êtes curieux, jetez un oeil distrait à quelques autres fichiers de ce répertoire, sans vous laisser intimider par leurs noms quelque peu barbares : DIR_COLORS, hostname, hosts, group, fstab ou profile. Ne vous inquiétez pas si vous n’y comprenez rien du tout. Retenez simplement que ce sont des fichiers au format texte simple.

Et pour l’histoire : “etc[etera] ( = all the other stuff: doesn’t go into bin, dev, tmp, usr, var).” Traduction : “etc[etera] ( = tous les autres trucs : ne vont pas dans bin, dev, tmp, usr, var).” C’est un extrait de la description de l’arborescence d’Unix fournie par Dennis Ritchie, le fondateur en personne. Lui devrait savoir.

Le répertoire /lib

Les bibliothèques partagées par les programmes de /bin et /sbin se trouvent dans /lib (libraries, “bibliothèques”).

Un programme n’est pas forcément un bloc monolithique. Il se sert souvent d’un ensemble de fonctions qui se situent dans une bibliothèque partagée. Cette dernière ne peut pas s’exécuter directement, mais contient du code que l’on veut éviter de réécrire chaque fois qu’un programme doit exécuter une fonction similaire (par exemple ouvrir une fenêtre, Enregistrer sous ou calculer un cosinus). Sous Windows, ce sont tous les fichiers .DLL (Dynamic Linked Library ou “bibliothèque de liens dynamiques” que vous trouverez dans le répertoire C:\WINDOWS\SYSTEM. Sur votre système Linux, ce sont tous les fichiers .so (comme shared object ou “objet partagé”.

Si vous vous rendez dans le répertoire /lib/modules, vous y trouverez un répertoire 3.10.0-514.el7.x86_64. Les lecteurs attentifs noteront un air de parenté avec le nom du noyau vmlinuz-3.10.0-514.el7.x86_64 que nous avons vu un peu plus haut. Effectivement, tous les fichiers contenus dans ce répertoire appartiennent au noyau. Ce sont là les “modules”, l’équivalent de ce que les utilisateurs de Windows ou Mac OS X connaissent sous la désignation de pilote (driver ou “gestionnaire de périphérique”) : des petits bouts de code que l’on charge dans le noyau pour lui permettre de gérer tel ou tel périphérique. Avec Linux, contrairement à Windows, on peut effectuer cette opération sur un système en état de marche, sans que cela ne nécessite un redémarrage. De façon analogue, on peut enlever un module, ce qui permet donc d’activer ou de désactiver la prise en charge d’un certain matériel sur un système “à chaud”.

Pour vous faire une idée un petit peu moins vague, entrez dans le répertoire 3.10.0-514.el7.x86_64, puis continuez dans kernel/drivers/net/ethernet. Dans la liste de répertoires qui s’affiche, vous reconnaîtrez peut-être vaguement des noms de fabricants : atheros, broadcom, intel, qlogic, realtek, etc. Jetez un oeil distrait dans quelques-uns de ces répertoires et observez les différents fichiers .ko qu’ils contiennent. Chaque nom de fichier correspond en effet à un certain type de matériel, plus précisément à une série de cartes réseau (net signifie “réseau”). Ainsi, 8139cp.ko et 8139too.ko dans le répertoire realtek correspondent à une carte réseau équipée d’une puce (chip) Realtek 8139. De manière similaire, les fichiers commençant par al et atl dans le répertoire atheros correspondent à des cartes réseau Atheros, e1000.ko et e1000e.ko dans l’arborescence intel gèrent les cartes réseau Intel, et ainsi de suite. Dans la plupart des cas, le nom du module permet de deviner quel matériel lui correspond. Dans d’autres cas, la relation n’est pas évidente, et il faut se renseigner. Nous verrons plus loin où et comment faire.

Les répertoires /mnt, /media et /run

Les répertoires /media et /mnt constituent par convention les points de montage de votre système. Le répertoire /run est un ajout récent à la hiérarchie des répertoires sous Linux, dont un des rôles est de prendre la relève de /media. C’est ici que se trouvent vos disques C:, D:, E:, F:, etc.

Dans un système Linux, lorsque vous insérez un périphérique amovible comme un CD-Rom, un DVD, un disque dur externe ou une clé USB, il doit être “monté”. Cela signifie que le système de fichiers du périphérique doit être intégré à l’arborescence du système. Les données sont ensuite accessibles en dessous du répertoire qui constitue ce qu’on appelle le “point de montage”. Avant d’enlever le périphérique, celui-ci doit être “démonté”, c’est-à-dire que l’on indique au système de fichiers que les données du périphérique amovible ne doivent plus être englobées.

Sur un serveur Linux dépourvu d’environnement graphique, les opérations de montage et de démontage s’effectuent de manière traditionnelle, à la main. Pas avec un tournevis et une clé de douze, non, mais en tapant une série de commandes. Les distributions “poste de travail” modernes gèrent les périphériques amovibles de manière complètement transparente, c’est-à-dire que le montage s’effectue automatiquement.

Le montage et le démontage constituent un des concepts qui peuvent paraître étrangers à un habitué des systèmes Windows. Pour l’instant, retenez simplement que /media et /run vous permettent d’accéder aux données des périphériques amovibles que le système gère automatiquement, par exemple sur un poste de travail. Quant à /mnt, c’est le point de montage “historique” que l’on conserve pour les systèmes de fichiers montés manuellement, comme c’est le cas sur les serveurs. Nous éluciderons tout cela par la pratique, le moment venu.

Les répertoires /proc et /sys

Les répertoires /proc et /sys contiennent un système de fichiers virtuel qui documente à la volée le noyau et les différents processus du système. Avant que vous ne partiez en courant, retenez juste que certains fichier contenus dans ces répertoires nous fourniront des informations précieuses sur le système : le modèle et la fréquence du processeur (/proc/cpuinfo que nous avons eu l’occasion de voir), la mémoire vive et la quantité de mémoire vive utilisée (/proc/meminfo), la synchronisation d’une grappe de disques (/proc/mdstat) et beaucoup d’autres choses encore. Quant au “système de fichiers virtuel”, on peut le considérer comme un système de fichiers volatile, dont il ne reste pas la moindre trace dès que vous éteignez la machine.

Les répertoires /root et /sbin

/root, c’est le répertoire d’utilisateur de… l’utilisateur root ! Il n’est donc pas étonnant que vous n’y ayez pas accès en tant qu’utilisateur normal. “Et pourquoi pas /home/root ?” penserez-vous peut-être. L’administrateur serait-il réticent de se retrouver ainsi à pied d’égalité avec les basses castes des utilisateurs communs ? Oui, en quelque sorte, mais pour une simple raison de sécurité.

Dans les installations de grande envergure, il arrive assez souvent qu’un système Linux soit réparti sur plusieurs partitions d’un disque, voire sur plusieurs disques et, dans certains cas, le système sur lequel vous travaillez peut être “distribué” sur plusieurs machines, qui ne sont d’ailleurs pas forcément dans la même pièce, ni dans le même bâtiment. Au démarrage, le système se charge d’assembler les pièces pour vous présenter un tout cohérent. Imaginez maintenant qu’il y ait un problème avec le disque ou la machine contenant le répertoire /home. Si le répertoire d’utilisateur de root était en dessous de /home, il serait inaccessible. root ne pourrait plus s’identifier et, par conséquent, ne pourrait plus rien faire sur la machine.

Une remarque en passant. La langue anglaise désigne la racine / du système de fichiers par root directory. Gare à la confusion issue de l’homophonie avec /root directory !

Le répertoire /sbin (system binaries, autrement dit “binaires système”) renferme une série d’exécutables pour l’administrateur. Ces outils servent à partitionner et formater des disques, configurer des interfaces réseau et bien d’autres choses encore. Une partie de ces commandes peut être invoquée par les utilisateurs du “commun des mortels”. À titre d’exemple, la commande suivante vous permet d’afficher la configuration réseau de votre machine.

[kikinovak@centosbox ~]$ /sbin/ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue ...
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc ...
    link/ether 52:54:00:ab:cd:ef brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.20/24 brd 192.168.2.255 scope global dynamic eth0
       valid_lft 85369sec preferred_lft 85369sec
    inet6 fe80::a9aa:7f83:429:ff1e/64 scope link 
       valid_lft forever preferred_lft forever

Cependant, pour la plupart, ces utilitaires représentent l’équivalent numérique d’une tronçonneuse. Dans les mains d’un expert, cela permet d’abattre de la besogne en un tour de main. Mettez un utilisateur lambda aux commandes et attendez-vous à un massacre.

Tout comme /bin, /sbin est un lien symbolique qui pointe vers l’arborescence /usr. Nous y venons, justement.

Le répertoire /usr

L’arborescence sous /usr (Unix System Resources ou Unix Specific Resources, aucun lien avec us(e)r), renferme précisément tout ce qui n’est pas nécessaire au fonctionnement minimal du système. Vous serez d’ailleurs peut-être surpris d’apprendre que cela représente la part du lion. Sur notre installation serveur minimale, /usr contient près de 90 % de la totalité du système. Vous constaterez que certains répertoires ou liens symboliques rencontrés à la racine du système sont également présents ici : /usr/bin, /usr/lib ou encore /usr/sbin.

Même sur notre installation minimale, l’arborescence /usr compte déjà plus de 20.000 fichiers. Avec un système d’une telle complexité, il est important que chaque chose ait une place bien définie pour que l’on s’y retrouve.

  • /usr/sbin comporte d’autres commandes pour l’administrateur.
  • /usr/bin renferme la majorité des exécutables pour les utilisateurs.
  • /usr/lib et /usr/lib64 contiennent les bibliothèques partagées de ces derniers.

Le moment est venu pour dire deux mots des liens symboliques (ou raccourcis) /bin, /lib, /lib64 et /sbin à la racine du système. Traditionnellement, les systèmes Linux opéraient la distinction et rangeaient dans ces répertoires le nombre relativement limité d’applications et de bibliothèques qui étaient nécessaires au démarrage ou au dépannage du système. Tout ce qui n’était pas vital stricto sensu pour le démarrage avait sa place dans /usr. Or, depuis quelques années, on observe une tendance croissante à faire fi de cette distinction et à fusionner /bin et /usr/bin, /lib et /usr/lib, et ainsi de suite. D’où la série de liens symboliques.

Notez que sous Linux, /usr/bin représente à peu de choses près l’équivalent du répertoire C:\Program Files de Windows.

Étant donné que la question revient souvent, je me permets d’anticiper un peu pour vous montrer comment je m’y suis pris pour compter le nombre de fichiers en dessous de /usr, ou pour afficher l’espace disque occupé par les arborescences respectives. Invoquez les deux commandes suivantes sans vous préoccuper des détails pour l’instant.

[kikinovak@centosbox /]$ find /usr -type f 2> /dev/null | wc -l
20058
[kikinovak@centosbox /]$ du -sh /* 2> /dev/null
0       /bin
81M     /boot
0       /dev
17M     /etc
36K     /home
0       /lib
0       /lib64
0       /media
0       /mnt
0       /opt
0       /proc
0       /root
8,4M    /run
0       /sbin
0       /srv
0       /sys
0       /tmp
836M    /usr
41M     /var

En langage tam-tam, le résultat des deux dernières commandes m’affiche que le système compte un total de 20.058 fichiers en dessous de /usr, et que cette arborescence occupe 836 Mo sur mon disque dur.

Les répertoires /tmp et /var

/tmp, c’est le répertoire temporaire du système, comme son nom le suggère. C’est l’endroit destiné à recevoir les données que vous considérez d’une certaine manière comme volatiles, c’est-à-dire celles dont vous n’avez plus besoin après un redémarrage de la machine.

L’arborescence en dessous de /var/ contient toute une série de fichiers variables : des journaux, des boîtes aux lettres de messagerie, des sites web, etc. Les journaux se situent dans /var/log, mais ne vous attendez pas à y trouver Le Monde Diplomatique, Libé ou L’Équipe. Ces journaux ou logfiles sont des fichiers texte “crachés” à la volée par différents composants d’un système en marche. Un serveur de courrier électronique déposera les messages pour les utilisateurs dans /var/spool/mail. Et lorsque vous installerez un serveur web sur votre machine, les pages de vos sites seront stockées en dessous de /var/www/html.

Lire la suite…

Publié dans Documentation Microlinux | Marqué avec , | Laisser un commentaire

Deux commandes de sortie simples : echo et cat

TerminalCet article fait partie de mes cours d’introduction à l’administration des systèmes Linux. Il vous prend par la main et vous initie à l’utilisation des commandes de sortie simples.

echo : afficher une ligne de texte

La commande echo affiche sur l’écran le texte spécifié en argument.

[kikinovak@centosbox ~]$ echo Bonjour Monsieur !
Bonjour Monsieur !

Voilà un grand pas pour nous, un petit pas pour l’humanité. Continuons.

[kikinovak@centosbox ~]$ echo Bonjour Monsieur ! > bonjour.txt

Cette fois-ci, il n’y a aucun résultat immédiat. Regardons le contenu du répertoire courant.

[kikinovak@centosbox ~]$ ls
bonjour.txt

Explication : la flèche > a redirigé la sortie standard vers un fichier, comme le formulerait quelqu’un du métier. En d’autres termes, la chaîne de caractères Bonjour Monsieur ! a été écrite dans un fichier bonjour.txt au lieu de s’afficher sur l’écran.

cat : afficher et concaténer

Affichons le contenu de ce fichier avec la commande cat.

[kikinovak@centosbox ~]$ cat bonjour.txt 
Bonjour Monsieur !

Maintenant, créez deux nouveaux fichiers bonjour2.txt et bonjour3.txt, comme ceci.

[kikinovak@centosbox ~]$ echo Bonjour Madame ! > bonjour2.txt
[kikinovak@centosbox ~]$ echo Bonjour les enfants ! > bonjour3.txt

Affichez leur contenu en utilisant cat :

[kikinovak@centosbox ~]$ cat bonjour2.txt 
Bonjour Madame !
[kikinovak@centosbox ~]$ cat bonjour3.txt 
Bonjour les enfants !

Si nous mettons nos trois nouveaux fichiers en argument, cat affiche leurs contenus respectifs l’un après l’autre.

$ cat bonjour.txt bonjour2.txt bonjour3.txt 
Bonjour Monsieur !
Bonjour Madame !
Bonjour les enfants !

Vous remarquerez que dorénavant, je réduis l’invite de commande à un simple $, ce qui est une manière habituelle de procéder et permet de faire figurer ma commande sur une seule ligne.

Là aussi, nous pouvons rediriger la sortie standard. Le résultat s’écrira dans un fichier au lieu de s’afficher à l’écran.

$ cat bonjour.txt bonjour2.txt bonjour3.txt > bonjourtous.txt
$ cat bonjourtous.txt 
Bonjour Monsieur !
Bonjour Madame !
Bonjour les enfants !

Ici, j’ai mis la charrue de la pratique avant les boeufs de la théorie pour vous faire comprendre le fonctionnement de cat, qui remplit essentiellement deux fonctions. D’une part, cette commande sert à la concaténation de fichiers, d’où son nom. C’est le fait de rassembler le contenu de ces fichiers en un seul gros.

$ cat fichier1 fichier2 fichier3 > grosfichier

D’autre part, l’autre rôle de cat est tout simplement d’afficher le contenu de fichiers texte simples.

Exemple pratique : tout savoir sur son processeur

Voici un cas d’utilisation de cat qu’on peut rencontrer dans le quotidien d’un administrateur système. Il affiche des renseignements sur la machine : le nombre de processeurs (processeur simple, biprocesseur, quad-core, etc.), leur type (Intel, AMD, Celeron) et leur fréquence de travail (ou vitesse) exprimée en MHz (mégahertz).

$ cat /proc/cpuinfo
...
processor       : 1
vendor_id       : AuthenticAMD
cpu family      : 16
model           : 6
model name      : AMD Athlon(tm) II Neo N36L Dual-Core Processor
stepping        : 3
microcode       : 0x10000c8
cpu MHz         : 800.000
cache size      : 1024 KB
...

Cette simple utilisation de cat me montre donc que le serveur HP Proliant Microserver sur lequel j’ai invoqué la commande dispose d’un biprocesseur (processeur 0 et processeur 1) AMD tournant à une fréquence de 800 MHz.

Lire la suite…

Publié dans Documentation Microlinux | Marqué avec , | Laisser un commentaire

Petit aperçu de la philosophie Unix

TerminalVous venez d’apprendre en tout et pour tout trois commandes et une poignée d’options. Peut-être sentez-vous monter en vous un vague sentiment de déception. C’est donc ça, Linux ? Des commandes qu’il faut taper fastidieusement dans une interface archaïque ?

Pour vous rassurer – et nous conforter dans notre démarche – je me permettrai de vous donner un exemple qui semblera familier à beaucoup d’entre vous. Imaginez que votre voiture tombe en panne un jour. Vous avez en gros deux possibilités pour la faire réparer.

  1. Vous la faites remorquer au garage Lapeau & Desfesses en ville. Un endroit très high tech avec beaucoup de chrome et de carrelage blanc, sans la moindre trace de cambouis ni de poussière. Les mécaniciens ressemblent à des ingénieurs en blouse blanche. Ils sont armés jusqu’aux dents d’ordinateurs portables et ne répondent à personne. Votre voiture est le seul objet sale dans cet endroit étincelant de propreté. L’ingénieur en chef dissimule à peine son dégoût, ouvre le capot et branche un câble dans une prise dont vous ignoriez l’existence jusque-là. Il retourne devant l’écran de son portable, clique sur une série de boutons dans son logiciel de diagnostic et vous annonce qu’il ne peut pas vous fixer un rendez-vous avant le début du mois prochain, mais qu’on peut déjà établir un devis.
  2. Vous décidez d’aller voir Tony, le mécanicien du village. En guise de bonjour, Tony vous présente son avant-bras à peine moins maculé de cambouis que ses mains. Il propose de s’occuper tout de suite de votre voiture, l’objet le plus propre dans tout le garage. Il ouvre le capot et contemple le moteur en sifflotant le refrain qui vient de passer à la radio. Puis il fouille dans sa boîte à outils et en extrait une clé tubulaire, un tournevis et une pince. À peine deux minutes plus tard, il vous annonce qu’il fallait juste nettoyer les bougies et refixer une durite qui s’était défaite. Il refuse de se faire payer malgré vos protestations réitérées.

Les commandes que nous venons d’apprendre sont certes aussi peu spectaculaires qu’une clé tubulaire, un tournevis ou une clé de douze. Vous serez d’ailleurs probablement surpris d’apprendre que ce sont des commandes Unix, le système d’exploitation dont Linux est un clone libre. Les principes de base d’Unix sont restés les mêmes pendant près de quarante ans. Douglas McIlroy, l’un des fondateurs d’Unix, a résumé la philosophie Unix en une série de trois impératifs catégoriques :

  1. Écrivez des programmes qui font une seule chose, et qui la font bien.
  2. Écrivez des programmes qui se combinent les uns avec les autres.
  3. Écrivez des programmes pour gérer des flux de texte, car c’est une interface universelle.

Même si vous n’avez pas l’intention d’écrire des programmes Unix (ou Linux), ces trois règles sont d’une importance capitale pour tout utilisateur de systèmes de cette famille. À partir du moment où vous maîtrisez ne serait-ce qu’une poignée de commandes Unix, vous apprendrez à les combiner pour résoudre les problèmes de manière efficace. Gardez ce principe à l’esprit lors de votre apprentissage, car nous verrons bientôt comment les tâches les plus complexes peuvent être décomposées en une série d’opérations simples.

Lire la suite…

Publié dans Documentation Microlinux | Marqué avec , , | Laisser un commentaire

Naviguer : ls, pwd et cd

TerminalCet article fait partie de mes cours d’introduction à l’administration des systèmes Linux. Il vous prend par la main et vous initie à la navigation en ligne de commande sous forme d’atelier pratique.

Afficher le contenu d’un répertoire avec ls

La commande ls (comme list) affiche la liste des fichiers d’un répertoire. Invoquée sans arguments, elle montre le contenu du répertoire courant.

[root@centosbox ~]# ls
anaconda-ks.cfg

Comment lire ce résultat ? La commande ls nous a retourné un élément situé dans notre répertoire d’utilisateur. Notez que je me suis connecté en tant que root pour avoir quelque chose à me mettre sous la dent, étant donné que le répertoire d’utilisateur de kikinovak est encore vide. Pour le reste des opérations, nous allons travailler en tant qu’utilisateur “commun mortel”. Je vérifie, mon répertoire d’utilisateur est encore vide, effectivement.

[kikinovak@centosbox ~]$ ls

Le répertoire courant est celui dans lequel vous vous trouvez au moment où vous saisissez la commande. Pour afficher le contenu de la racine du système de fichiers, saisissez ceci.

[kikinovak@centosbox ~]$ ls /

Résultat :

bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr

Et pour voir ce qu’il y a dans /usr, il suffit d’invoquer la commande suivante.

[kikinovak@centosbox ~]$ ls /usr
bin  games    lib    libexec  sbin   src  
etc  include  lib64  local    share  tmp

Les habitués de Windows et de DOS l’auront deviné : ls sous Linux équivaut à la commande dir.

Décrypter les résultats de votre ordinateur

Les différentes couleurs de l’affichage nous suggèrent qu’il ne s’agit peut-être pas d’éléments du même type. Essayez.

[kikinovak@centosbox ~]$ ls /etc

Le résultat de cette commande dépassera probablement la taille d’un écran. Pour revenir en arrière, maintenez la touche Maj enfoncée et utilisez les touches PageHaut et PageBas pour faire défiler l’affichage en arrière et en avant.

Certains éléments apparaissent en bleu, d’autres en turquoise, d’autres en noir et blanc, et il y a même un peu de rouge. Pour en avoir le coeur net, il va falloir utiliser ls avec l’option -F, qui donne des détails.

[kikinovak@centosbox ~]$ ls -F /etc
adjtime                  hosts                     rc0.d@
aliases                  hosts.allow               rc1.d@
aliases.db               hosts.deny                rc2.d@
alternatives/            init.d@                   rc3.d@
anacrontab               inittab                   rc4.d@
asound.conf              inputrc                   rc5.d@
audisp/                  iproute2/                 rc6.d@
...

Réinvoquez ls -F pour afficher le contenu de /etc/ppp.

[kikinovak@centosbox ~]$ ls -F /etc/ppp
chap-secrets   ip-down*          ip-up.ipv6to4*  options
eaptls-client  ip-down.ipv6to4*  ipv6-down*      pap-secrets
eaptls-server  ip-up*            ipv6-up*        peers/

Vous constatez que certains éléments sont suivis d’une barre oblique /, d’autres d’une arobase @ ou d’une astérisque *; le reste des éléments ne contient aucun suffixe.

  • La barre oblique / (couleur par défaut : bleu) désigne un répertoire.
  • L’absence de suffixe (couleur par défaut : noir, blanc ou gris, selon votre terminal) indique qu’il s’agit d’un fichier régulier non exécutable.
  • L’arobase @ (couleur par défaut : turquoise) nous montre qu’il s’agit d’un lien symbolique, ce qui constitue l’équivalent d’un raccourci sous Windows. Nous verrons les liens symboliques un peu plus loin.
  • L’astérisque * (couleur par défaut : vert) nous indique qu’il s’agit d’un fichier régulier exécutable.

Il nous en manque encore quelques-uns, mais nous nous contenterons des éléments que nous avons pour l’instant.

Mais encore ?

Ces informations peuvent nous paraître un peu maigres. Nous pouvons en afficher davantage en utilisant l’option -l (comme long).

[kikinovak@centosbox ~]$ ls -l /etc/sysconfig
total 80
-rw-r--r--. 1 root root  429 23 mai   20:30 authconfig
drwxr-xr-x. 2 root root   43 23 mai   20:20 cbq
drwxr-xr-x. 2 root root    6  6 nov.   2016 console
-rw-r--r--. 1 root root  150 22 nov.   2016 cpupower
-rw-------. 1 root root  110 31 mars   2016 crond
-rw-------. 1 root root 1390  5 nov.   2016 ebtables-config
-rw-r--r--. 1 root root   73 11 nov.   2016 firewalld
...

L’utilisateur non averti trouvera cet affichage quelque peu énigmatique. En fait, il est facile à lire une fois que l’on sait à quoi correspond chaque terme.

Tout à fait à gauche, vous avez une série de dix caractères. Le tout premier vous indique s’il s’agit d’un fichier (tiret -) ou d’un répertoire (d comme directory). Ensuite, la série de neuf caractères (en fait, trois fois trois) indique les droits d’accès au fichier ou au répertoire. Nous traiterons la question des droits d’accès un peu plus loin. Les caractères r, w, x et - décrivent ce que l’on a le droit de faire avec le fichier ou le répertoire…

  • lire : r comme read ;
  • écrire (modifier) : w comme write ;
  • exécuter : x pour e[x]ecute ;
  • rien du tout : -.

Je disais : ce que l’on a le droit de faire. Ce on est en fait assez bien spécifié : les trois premiers caractères de la série concernent le propriétaire du fichier, les trois suivants le groupe et les trois derniers le reste du monde. Nous y reviendrons bientôt en détail.

Le chiffre qui suit (ici : la série de 1 et de 2 dans la deuxième colonne) n’est pas d’une grande importance pour nous. Précisons tout de même qu’il indique le nombre de liens pointant vers le fichier ou le répertoire.

Les deux indications immédiatement après nous montrent le propriétaire du fichier, ainsi que le groupe auquel il appartient. Dans l’exemple, fichiers et répertoires appartiennent à l’utilisateur root et au groupe root.

Humain, pas trop humain ?

La prochaine indication correspond à la taille du fichier. Ici, l’astuce est d’invoquer ls avec l’option supplémentaire -h ou --human-readable. Essayez.

[kikinovak@centosbox ~]$ ls -lh /etc/sysconfig
total 80K
-rw-r--r--. 1 root root  429 23 mai   20:30 authconfig
drwxr-xr-x. 2 root root   43 23 mai   20:20 cbq
drwxr-xr-x. 2 root root    6  6 nov.   2016 console
-rw-r--r--. 1 root root  150 22 nov.   2016 cpupower
-rw-------. 1 root root  110 31 mars   2016 crond
-rw-------. 1 root root 1,4K  5 nov.   2016 ebtables-config
-rw-r--r--. 1 root root   73 11 nov.   2016 firewalld
...

La taille des fichiers est tout de suite beaucoup plus lisible, car le système l’indique en kilo-octets (K), mégaoctets (M) ou gigaoctets (G).

En passant, nous faisons également deux autres constats. D’une part, les options des commandes peuvent se combiner. Nous aurions donc très bien pu invoquer la commande comme ceci :

[kikinovak@centosbox ~]$ ls -l -h /etc/sysconfig

D’autre part, bon nombre d’options de commande ont une version courte et une version longue. L’option -h (qui signifie “lisible par un humain”, comme si les informaticiens ne faisaient pas vraiment partie de l’espèce) peut donc très bien s’écrire comme dans l’exemple qui suit. Je vous conseille cette option uniquement si vous avez un penchant prononcé pour la dactylographie.

[kikinovak@centosbox ~]$ ls -l --human-readable /etc/sysconfig

Quant aux deux dernières colonnes, elles nous indiquent respectivement la date de la création ou de la dernière modification et, pour finir, le nom du fichier ou du répertoire.

Splendeur et misère des fichiers cachés

Une autre option fréquemment utilisée est -a (ou --all, tout). Appliquez-la sur votre répertoire utilisateur, et vous serez probablement surpris.

[kikinovak@centosbox ~]$ ls -a
.  ..  .bash_history .bash_logout .bash_profile .bashrc .lesshst

Cette option sert à afficher les fichiers et répertoires cachés. Dans un système Linux, les fichiers et répertoires dont le nom commence par un point ne s’affichent pas lorsque ls est invoqué normalement. Vous ne les verrez donc qu’en utilisant l’option -a.

Cachez cette configuration que je ne saurais voir

À quoi peuvent bien servir ces fichiers, et quel intérêt de les dissimuler ? Les fichiers cachés ou dotfiles (de l’anglais dot : point) contiennent la configuration personnalisée de vos applications. Concrètement, les fichiers ~/.bash_profile, ~/.bashrc et ~/.bash_logout contiennent la configuration de votre shell Bash (qui est une application). Quant au fichier ~/.bash_history, il renferme l’historique des commandes précédemment invoquées.

À la différence des fichiers situés dans /etc, qui définissent une configuration globale, c’est-à-dire valable pour tous les utilisateurs, les fichiers et répertoires cachés que nous rencontrons ici ne sont valables que pour vous seul. Nous aborderons le rôle du répertoire /etc un peu plus loin.

Vous vous demandez certainement ce que signifie le tilde ~ que j’ai utilisé à plusieurs reprises. Sur les systèmes Linux (tout comme dans Unix), ce symbole désigne votre répertoire utilisateur. Le fichier ~/.bashrc de l’utilisateur kikinovak sera donc /home/kikinovak/.bashrc dans sa notation explicite, tandis que le fichier ~/.bashrc de glagaffe correspondra à /home/glagaffe/.bashrc. Étant donné que chaque utilisateur est libre de configurer le shell Bash à sa guise (ce que nous verrons également plus loin), tout le monde aura donc son propre fichier .bashrc.

Notons que certains d’entre vous auront probablement déjà remarqué le tilde ~ dans l’invite de commande :

[kikinovak@centosbox ~]$

Comprendre l’invite de commande

Jetons un oeil sur l’invite de commande dans sa configuration par défaut. Elle est très simple à décrypter.

  • La première indication, c’est le nom de l’utilisateur (ex : kikinovak).
  • Il est séparé du nom de la machine (ex : centosbox) par une arobase @.
  • La troisième indication, c’est le répertoire courant (ex : ~ à savoir /home/kikinovak, puisque c’est l’utilisateur kikinovak)
  • Et enfin, le $ signifie par convention qu’il s’agit d’un utilisateur du “commun des mortels”. S’il s’agissait de l’utilisateur root, nous verrions ici un dièse # à la place du $.

Et ne partez pas en courant si je vous dis que l’aspect même de l’invite peut être paramétré à souhait.

Afficher les informations détaillées d’un répertoire

Il nous reste à voir une dernière option importante pour ls. Admettons que vous souhaitiez afficher les informations détaillées pour le répertoire /etc : les droits d’accès, le propriétaire, le groupe, etc. Vous invoquez donc hardiment ls suivi de l’option -l et de l’argument /etc ; et vous voyez… les informations détaillées de tout le contenu du répertoire, mais pas du répertoire lui-même.

Comment faire ? Tout simplement en invoquant l’option supplémentaire -d (comme directory, c’est-à-dire “répertoire”), qui affiche les répertoires avec la même présentation que les fichiers, sans lister leur contenu :

[kikinovak@centosbox ~]$ ls -ld /etc
drwxr-xr-x. 76 root root 8192 25 mai   07:09 /etc

pwd : “Vous êtes ici !”

La commande pwd (print working directory) s’acquitte d’une seule tâche. Elle vous affiche (print) le nom du répertoire courant (working directory), c’est-à-dire le répertoire dans lequel vous vous situez actuellement.

[kikinovak@centosbox ~]$ pwd
/home/kikinovak

Lorsque vous vous promenez dans une grande ville, il vous arrive de vous perdre. Avec un peu de chance, vous tombez sur un de ces grands plans de la ville, avec une flèche et un petit rond bien visibles, qui vous indique : “VOUS ÊTES ICI”. C’est exactement ce que fait pwd. Et maintenant que nous savons nous repérer, apprenons à nous déplacer.

On bouge avec cd !

La commande cd (change directory) est utilisée pour changer de répertoire courant. Il suffit de la faire suivre du chemin du répertoire dans lequel on veut se placer. Dans l’exemple ci-après, l’invocation de la commande pwd après cd montre que nous sommes bien dans le répertoire demandé.

[kikinovak@centosbox ~]$ cd /
[kikinovak@centosbox /]$ pwd
/
[kikinovak@centosbox /]$ cd bin
[kikinovak@centosbox bin]$ pwd
/bin
[kikinovak@centosbox bin]$ cd /etc
[kikinovak@centosbox etc]$ pwd
/etc
[kikinovak@centosbox etc]$ cd /usr/bin
[kikinovak@centosbox bin]$ pwd
/usr/bin

Chemin relatif ou absolu ?

Lorsque je me trouve dans le répertoire racine / et que je souhaite me déplacer vers le répertoire /bin, je peux écrire cd bin. Cela correspond au chemin relatif, c’est-à-dire le chemin indiqué à partir du répertoire dans lequel je me situe, soit /. Quant à cd /bin, c’est le chemin absolu, autrement dit l’emplacement à partir du répertoire racine.

En revanche, lorsque je me trouve dans le répertoire /etc et que je veux me rendre dans /bin, je suis obligé – pour l’instant – d’utiliser un chemin absolu. Pour saisir la distinction, je vous donne un exemple de ce qu’il ne faut pas faire…

[kikinovak@centosbox bin]$ cd /etc
[kikinovak@centosbox etc]$ pwd
/etc
[kikinovak@centosbox etc]$ cd bin
-bash: cd: bin: Aucun fichier ou dossier de ce type

Ces deux exemples de la vie courante vous permettront peut-être de saisir la nuance :

  • “Remontez la rue devant vous, tournez à gauche, continuez deux cents mètres, puis tournez à droite et encore à droite” (chemin relatif) ;
  • “Partez du Vieux Port, remontez la Canebière, puis prenez le boulevard Longchamp et arrêtez-vous au Palais Longchamp” (chemin absolu).

Dans l’exemple précédent, nous nous situons dans le répertoire /etc. Si nous écrivons cd bin sans la barre oblique / qui précède, l’interpréteur de commandes cherchera un répertoire inexistant /etc/bin et affichera une erreur.

À court d’arguments

Pour revenir dans votre répertoire d’utilisateur, il suffit d’invoquer cd tout court, sans arguments :

[kikinovak@centosbox etc]$ cd /etc
[kikinovak@centosbox etc]$ pwd
/etc
[kikinovak@centosbox etc]$ cd sysconfig
[kikinovak@centosbox sysconfig]$ pwd
/etc/sysconfig
[kikinovak@centosbox sysconfig]$ cd
[kikinovak@centosbox ~]$ pwd
/home/kikinovak

“Ici” et “à l’étage”

Voyons maintenant deux répertoires un peu particuliers. Affichez la totalité du contenu de votre répertoire d’utilisateur.

[kikinovak@centosbox ~]$ ls -aF
./  ../  .bash_history .bash_logout .bash_profile .bashrc .lesshst

Vous remarquez qu’en début de liste, vous avez un répertoire nommé . et un autre nommé ... Affichez maintenant le contenu d’un autre répertoire, avec la même option -a combinée avec l’option -F.

[kikinovak@centosbox ~]$ ls -aF /usr
./   bin/  games/    lib/    libexec/  sbin/   src/
../  etc/  include/  lib64/  local/    share/  tmp@

Si vous répétez l’opération sur d’autres répertoires au hasard, vous constaterez que chaque liste débute invariablement par ces mêmes répertoires . et ..

  • . est le répertoire courant.
  • .. est le répertoire parent.

Là encore, la mise en pratique vous aidera à saisir le concept. Essayez ceci.

[kikinovak@centosbox ~]$ cd /etc/sysconfig/network-scripts
[kikinovak@centosbox network-scripts]$ pwd
/etc/sysconfig/network-scripts
[kikinovak@centosbox network-scripts]$ cd ..
[kikinovak@centosbox sysconfig]$ pwd
/etc/sysconfig
[kikinovak@centosbox sysconfig]$ cd ..
[kikinovak@centosbox etc]$ pwd
/etc
[kikinovak@centosbox etc]$ cd ..
[kikinovak@centosbox /]$ pwd
/

Chaque appel à cd .. nous fait ainsi remonter d’un cran dans l’arborescence, jusqu’à ce que nous nous retrouvions à la racine.

Quant au point ., il faut se le représenter comme le fameux “VOUS ÊTES ICI” sur le plan de la ville. Admettons que je me situe dans le répertoire /etc et que je veuille me rendre dans le sous-répertoire sysconfig. Je pourrais utiliser indépendamment ces deux notations, qui reviendraient au même…

[kikinovak@centosbox /]$ cd /etc
[kikinovak@centosbox etc]$ cd sysconfig
[kikinovak@centosbox sysconfig]$ pwd
/etc/sysconfig

Ou alors :

[kikinovak@centosbox ~]$ cd /etc
[kikinovak@centosbox etc]$ cd ./sysconfig
[kikinovak@centosbox sysconfig]$ pwd
/etc/sysconfig

L’utilité de cette notation vous apparaîtra un peu plus loin. Pour l’instant, retenez simplement que . signifie “ici”.

Notez aussi que .. peut très bien faire partie d’un chemin. Admettons que vous soyez dans le répertoire /etc/sysconfig et que vous souhaitiez vous rendre dans /etc/ssh. Vous pourriez vous y prendre comme ceci :

[kikinovak@centosbox ~]$ cd /etc/sysconfig
[kikinovak@centosbox sysconfig]$ pwd
/etc/sysconfig
[kikinovak@centosbox sysconfig]$ cd ..
[kikinovak@centosbox etc]$ cd ssh
[kikinovak@centosbox ssh]$ pwd
/etc/ssh

Il y a moyen de faire plus court et plus élégant.

[kikinovak@centosbox ~]$ cd /etc/sysconfig
[kikinovak@centosbox sysconfig]$ pwd
/etc/sysconfig
[kikinovak@centosbox sysconfig]$ cd ../ssh
[kikinovak@centosbox ssh]$ pwd
/etc/ssh

Si vous vous demandez pourquoi j’invoque pwd à chaque changement de répertoire, c’est uniquement à des fins de démonstration, pour bien expliciter le répertoire courant.

Vous pouvez également monter de plusieurs crans, si cela est nécessaire. Si votre répertoire courant est /etc/sysconfig/network-scripts et si vous souhaitez vous rendre dans /etc/ssh, il va falloir que vous montiez de deux crans, pour ensuite entrer dans le répertoire ssh. En pratique, cela ressemblerait à l’exemple suivant.

[kikinovak@centosbox ~]$ cd /etc/sysconfig/network-scripts
[kikinovak@centosbox network-scripts]$ pwd
/etc/sysconfig/network-scripts
[kikinovak@centosbox network-scripts]$ cd ../../ssh
[kikinovak@centosbox ssh]$ pwd
/etc/ssh

Lire la suite…

Publié dans Documentation Microlinux | Marqué avec , | Laisser un commentaire