Table des matières
$LANG
»
$PATH
»
$HOME
»
Je pense qu’apprendre un système d’exploitation est comme apprendre une nouvelle langue étrangère. Bien que les livres de didacticiels et de documentation soient utiles, vous devrez pratiquer vous-même. Pour vous aider à vous lancer en douceur, je vais développer quelques points fondamentaux.
La puissance de la conception de Debian GNU/Linux vient du système d’exploitation UNIX, c’est-à-dire un système d’exploitation multi-utilisateurs, multi-tâches. Vous devrez apprendre à tirer parti de la puissance de ces fonctionnalités et des similitudes entre UNIX et GNU/Linux.
N’écartez pas des textes orientés UNIX en ne vous reposant que sur les textes GNU/Linux, cela vous priverait de beaucoup d’informations utiles.
Note | |
---|---|
Si vous avez utilisé pendant un certain temps des systèmes ressemblant à UNIX avec des outils en ligne de commande, vous connaissez sans doute tout ce que j’explique ici. Vous pourrez utiliser ce document pour actualiser vos connaissances. |
Au démarrage du système, si vous n’avez pas installé d’environnement
graphique (GUI) tel que avec un gestionnaire
d’affichage tel que les systèmes de bureau GNOME ou KDE, un écran
d’identification en mode caractères vous est présenté. Supposons que le nom
d’hôte de votre machine soit toto
, l’invite
d’identification ressemblera alors à ce qui suit.
Si vous avez installé un environnement graphique (GUI), vous pouvez toujours obtenir une telle invite d’identification avec Ctrl-Alt-F3 et vous pourrez ensuite revenir à l’environnement graphique avec Ctrl-Alt-F2 (consultez Section 1.1.6, « Consoles virtuelles » ci-dessous pour davantage d’informations).
foo login:
À l’invite d’identification, entrez votre nom d’utilisateur, par exemple
pingouin
, et pressez la touche Entrée, entrez ensuite
votre mot de passe et pressez de nouveau la touche Entrée.
Note | |
---|---|
Conformément à la tradition UNIX, l’identifiant de l’utilisateur et le mot
de passe sur un système Debian sont sensibles à la casse. L’identifiant de
l’utilisateur est habituellement choisi uniquement en minuscules. Le premier
compte d’utilisateur est normalement créé lors de l’installation. Des
comptes d’utilisateurs supplémentaires peuvent être créés avec la commande
|
Le système démarre avec le message de bienvenue qui se trouve dans
« /etc/motd
» (Message du jour :
« Message Of The Day ») et présente une invite de commande
comme :
Debian GNU/Linux 12 foo tty3 foo login: penguin Password: Linux foo 6.5.0-0.deb12.4-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.5.10-1~bpo12+1 (2023-11-23) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Wed Dec 20 09:39:00 JST 2023 on tty3 foo:~$
Vous êtes maintenant sous l’interpréteur de commandes (« shell »). Le shell interprète vos commandes.
Si, lors de l’installation, vous avez installé avec un environnement graphique (GUI), un écran d’identification graphique vous sera présenté au démarrage de votre système. Entrez votre nom d’utilisateur et votre mot de passe pour vous connecter à un compte d’utilisateur sans privilège. Utilisez la touche de tabulation pour passer du champ d’entrée de l’utilisateur à celui du mot de passe ou utilisez la souris et un clic-gauche.
Sous environnement graphique, vous pouvez obtenir une invite de
l’interpréteur de commandes en lançant un programme d’émulation de
terminal-x
comme gnome-terminal
(1),
rxvt
(1) ou xterm
(1). Sous
l’environnement de bureau GNOME, presser la touche SUPER (touche Windows) et
saisir « terminal » pour l’invite de recherche fait l’affaire.
Sous d’autres environnements de bureau (comme fluxbox
),
il peut ne pas y avoir de point d’accès évident au menu. Si cela se produit,
essayez simplement de faire un clic-droit sur le fond d’écran de
l’environnement de bureau en espérant voir apparaître un menu.
Le compte de l’administrateur (root) est encore appelé superutilisateur ou utilisateur privilégié. Depuis ce compte, vous pouvez effectuer les opérations d’administration du système suivantes :
lire, écrire et effacer n’importe quel fichier du système quelles que soient ses permissions ;
Défini l'appartenance et les permissions de n’importe quel fichier du système
définir le mot de passe de n’importe quel utilisateur non-privilégié du système ;
vous connecter à n’importe quel compte sans mot de passe.
La puissance illimitée du compte de l’administrateur fait que vous devez être attentif et responsable lorsque vous l’utilisez.
Avertissement | |
---|---|
Ne donnez jamais le mot de passe de l’administrateur à d’autres personnes. |
Note | |
---|---|
Les permissions d’un fichier (y compris les fichiers de périphériques tels que les CD-ROM ou autres, qui ne sont que des fichiers parmi d’autres pour le système Debian) peuvent le rendre inutilisable ou inaccessible à des utilisateurs autres que l’administrateur. Bien que l’utilisation du compte de l’administrateur soit un moyen rapide de test dans une telle situation, sa résolution devra être effectuée en définissant correctement les droits de fichiers et les membres des groupes d’utilisateurs (consultez Section 1.2.3, « Permissions du système de fichiers »). |
Voici quelques méthodes de base pour obtenir l’invite de l’interpréteur de commande de l’administrateur en utilisant le mot de passe de « root » .
entrez root
à l’invite de connexion en mode
caractère ;
entrez « su -l
» depuis une invite quelconque
de l’interpréteur de commandes ;
cela ne préserve pas l’environnement de l’utilisateur actuel ;
entrez « su
» depuis une invite quelconque de
l’interpréteur de commandes ;
cela préserve une partie de l’environnement de l’utilisateur actuel.
Lorsque le menu de votre environnement de bureau ne démarre pas
automatiquement, avec les droits appropriés, les outils graphiques
d’administration du système, vous pouvez les démarrer depuis l’invite de
l’interpréteur du compte administrateur dans un émulateur de terminal tel
que gnome-terminal
(1), rxvt
(1) ou
xterm
(1). Consultez Section 1.1.4, « Invite de l’interpréteur de commandes pour l’administrateur » et Section 7.9, « Connexion au serveur X ».
Avertissement | |
---|---|
Ne jamais lancer un affichage graphique ou un gestionnaire de session
graphique pour le compte administrateur en entrant Ne jamais faire tourner de programme distant non sûrs avec une interface graphique sous X Window lorsque des informations critiques sont affichées parce que votre écran X peut être espionné. |
Il y a, dans le système Debian par défaut, six consoles commutables en mode
caractères de type VT100 disponibles pour
lancer directement l’interpréteur de commandes sur la machine Linux. À moins
que vous ne disposiez d’un environnement graphique, vous pouvez basculer
entre les consoles virtuelles en pressant la touche Alt de
gauche
et, simultanément, l’une des touches F1
à F6
. Chaque console en mode caractères permet de se
connecter de manière indépendante à un compte et offre un environnement
multi-utilisateurs. Cet environnement multi-utilisateurs est une
fonctionnalité intéressante d’UNIX, très vite, on ne peut plus s’en passer.
Si vous vous trouvez dans l'environnement graphique, vous accédez à la
console caractères 3 en appuyant sur la touche
Ctrl-Alt-F3
, c'est-à-dire en appuyant simultanément sur
la touche Ctrl gauche
, sur la touche Alt
gauche
et sur la touche F3
. Vous pouvez revenir
à l'environnement graphique qui fonctionne normalement sur la console
virtuelle 2, en appuyant sur Alt-F2
.
Vous pouvez aussi changer de console virtuelle, par exemple pour la console 3, à partir de la ligne de commande.
# chvt 3
Pour arrêter l’activité de l’interpréteur de commandes, entrez
Ctrl-D
, c’est-à-dire la touche Ctrl de
gauche
et la touche d
pressées simultanément, à
l’invite de l’interpréteur. Si vous êtes sur une console en mode caractères,
cela vous fera retourner alors à l’invite d’identification. Même si on se
réfère à ces caractères de commande avec « control D » en
majuscule, il n’est pas nécessaire de presser la touche majuscule. Le
raccourci ^D
, est aussi utilisé pour
Ctrl-D
. Vous pouvez aussi entrer « exit ».
Si vous êtes sur un émulateur de x-terminal
(1), vous
pouvez fermer la fenêtre de l’émulateur de terminal-x
de
la même manière.
Comme tout autre système d’exploitation moderne où les opérations sur les fichiers mettent en œuvre un cache de données en mémoire afin d’améliorer les performances, le système Debian demande que l’on exécute une procédure d’arrêt adaptée avant que le système ne puisse être mis hors tension. Cela permet de maintenir l’intégrité des fichiers, en forçant l’écriture sur disque de toutes les informations conservées en mémoire. Si un logiciel de contrôle de l’alimentation est disponible, la procédure d’arrêt coupera automatiquement l’alimentation du système. (Sinon, vous devrez presser le bouton d’alimentation pendant quelques secondes une fois la procédure d’arrêt terminée).
Dans le mode normal multi-utilisateurs, vous pouvez arrêter le système depuis la ligne de commandes :
# shutdown -h now
Dans le mode normal mono-utilisateur, vous pouvez arrêter le système depuis la ligne de commandes :
# poweroff -i -f
Consultez Section 6.3.8, « Comment arrêter le système distant par SSH ».
Lorsque l’écran est corrompu après que vous ayez fait des choses amusantes
comme « cat
un-fichier-binaire
» entrez
« reset
» à l’invite de commande. Il est
possible que vous ne voyiez pas ce que vous entrez. Vous pouvez aussi entrer
« clear
» pour nettoyer l’écran.
Bien que même une installation minimale du système Debian sans aucune tâche
d’environnement de bureau fournisse les fonctionnalités UNIX de base, c’est
une bonne idée pour les débutants d’installer pour commencer quelques
paquets de ligne de commandes ou de terminal en mode caractères basé sur
« curses » comme mc
et vim
avec apt-get
(8) en utilisant les commandes
suivantes :
# apt-get update ... # apt-get install mc vim sudo aptitude ...
Si vous avez déjà installé ces paquets, aucun nouveau paquet ne sera installé.
Tableau 1.1. Liste de paquets de programmes intéressants en mode texte
paquet | popularité | taille | description |
---|---|---|---|
mc
|
V:50, I:209 | 1542 | gestionnaire de fichiers plein écran en mode texte |
sudo
|
V:688, I:841 | 6550 | programme donnant aux utilisateurs des privilèges d’administration limités |
vim
|
V:95, I:369 | 3743 | éditeur de texte UNIX Vi amélioré (Vi IMproved), éditeur de texte pour programmeurs (version standard) |
vim-tiny
|
V:58, I:975 | 1722 | éditeur de texte UNIX Vi amélioré (Vi IMproved), éditeur de texte pour programmeurs (version compacte) |
emacs-nox
|
V:4, I:16 | 39647 | GNU Emacs, éditeur de texte extensible basé sur Lisp |
w3m
|
V:15, I:187 | 2837 | navigateurs WWW en mode texte |
gpm
|
V:10, I:12 | 521 | couper-coller à la mode UNIX sur une console texte (démon) |
Ce peut être une bonne idée de lire quelques documentations.
Tableau 1.2. Liste de paquets de documentation
paquet | popularité | taille | description |
---|---|---|---|
doc-debian
|
I:867 | 187 | projet de documentation Debian, (FAQ Debian) et autres documents |
debian-policy
|
I:14 | 4659 | Charte Debian et documents associés |
developers-reference
|
V:0, I:5 | 2601 | Guides et informations pour les responsables Debian |
debmake-doc
|
I:0 | 11701 | Guide des nouveaux responsables Debian |
debian-history
|
I:0 | 4692 | Histoire du projet Debian |
debian-faq
|
I:865 | 790 | FAQ Debian |
Vous pouvez installer quelques-uns de ces paquets en passant les commandes suivantes :
# apt-get install package_name
Si vous ne souhaitez pas utiliser votre compte d’utilisateur principal pour
les activités de formation qui suivent, vous pouvez créer un compte de
formation, par exemple fish
en passant la commande qui
suit :
# adduser fish
Répondez à toutes les questions.
Cela va créer un nouveau compte appelé fish
. Après vos
exercices, vous pourrez supprimer ce compte d’utilisateur et son répertoire
personnel par :
# deluser --remove-home fish
Sur les systèmes non-Debian et les systèmes Debian spécialisés, les
activités ci-dessus ont besoin à la place d’utiliser les utilitaires
useradd
(8) et userdel
(8) de bas
niveau.
Pour une station de travail typique avec un seul utilisateur tel que le
système de bureau Debian sur un PC de bureau, il est habituel de mettre en
œuvre une configuration simple de sudo
(8) comme suit afin
que l’utilisateur non privilégié, par exemple pingouin
,
puisse obtenir les privilèges d’administration avec simplement son mot de
passe personnel et non avec le mot de passe de l’administrateur :
# echo "penguin ALL=(ALL) ALL" >> /etc/sudoers
Il est aussi habituel, en remplacement, de faire comme suit afin que
l’utilisateur non privilégié, par exemple pingouin
,
puisse obtenir les privilèges d’administration sans aucun mot de passe
personnel.
# echo "penguin ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
Cette astuce ne doit être utilisée qu’avec une station de travail mono-utilisateur que vous administrez et dont vous êtes le seul utilisateur.
Avertissement | |
---|---|
Ne configurez pas de cette manière les utilisateurs normaux d’une station de travail multi-utilisateurs parce que cela serait très grave pour la sécurité du système. |
Attention | |
---|---|
Le mot de passe et le compte du Le privilège d’administration, dans ce contexte, appartient à quelqu’un autorisé à effectuer les tâches d’administration du système sur la station de travail. Ne jamais donner un tel privilège à un responsable du département administratif de votre entreprise ni à votre patron, à moins qu’ils n’y soient autorisés et en soient capables. |
Note | |
---|---|
Pour donner un accès privilégié à certains périphériques et certains
fichiers, vous devriez envisager l’utilisation d’un groupe donnant un accès limité plutôt que
d’utiliser le privilège de Avec une configuration plus approfondie et prudente,
|
Vous êtres maintenant prêt à jouer avec le système Debian, sans risque aussi longtemps que vous utiliserez un compte d’utilisateur sans privilège.
Cela, parce que le système Debian, même après l’installation initiale, est configuré avec des permissions de fichiers adaptées qui évitent aux utilisateurs non privilégiés d’endommager le système. Bien entendu, il peut y avoir certaines failles qui peuvent être exploitées mais ceux qui s’inquiètent de ces problèmes ne devraient pas lire cette section mais plutôt le Manuel de sécurisation (« Securing Debian Manual »).
Nous allons apprendre le système Debian en tant que système semblable à UNIX (« UNIX-like ») avec :
Section 1.2, « Système de fichiers de type UNIX » (concept de base) ;
Section 1.3, « Midnight Commander (MC) » (méthode de survie) ;
Section 1.4, « L’environnement élémentaire de travail de type UNIX » (méthode de base) ;
Section 1.5, « La commande simple de l’interpréteur de commandes » (mécanisme de l’interpréteur de commandes) ;
Section 1.6, « Traitement des données textuelles à la UNIX » (méthode de traitement des données textuelles).
Avec GNU/Linux et d’autres systèmes d’exploitation semblables à UNIX, les fichiers sont organisés en répertoires. Tous les fichiers et les
répertoires sont disposés sous forme d’une grosse arborescence ancrée sur
« /
». On l’appelle un arbre parce que si vous
dessinez le système de fichiers, il ressemble à un arbre qui se trouverait
disposé la tête en bas.
Ces fichiers et répertoires peuvent être répartis sur plusieurs
périphériques. La commande mount
(8) sert à attacher les
systèmes de fichiers se trouvant sur certains périphériques à la grosse
arborescence des fichiers. À l’opposé, la commande
umount
(8) les détachera de nouveau. Avec les noyaux Linux
récents, mount
(8) avec certaines options peut lier une
partie d’une arborescence de fichiers à un autre emplacement ou peut monter
un système de fichiers de manière partagée, privée, esclave ou
« non-liable ». Vous trouverez les options de montage prises en
compte par chaque système de fichiers dans
« /usr/share/doc/linux-doc-*/Documentation/filesystems/
».
Les répertoires d’un système UNIX sont
appelés dossiers sur d’autres
systèmes. Vous remarquez aussi qu’il n’y a, sur aucun système UNIX, de
concept de lecteur tel que
« A:
». Il y a un système de fichiers qui
comprend tout. C’est un gros avantage comparé à Windows.
Voici les bases des fichiers UNIX :
les noms de fichiers sont sensibles à la
casse. Ce qui veut dire que
« MONFICHIER
» et
« MonFichier
» sont des fichiers
différents ;
on se réfère au répertoire racine
(« root directory »), qui est la racine du système de fichiers,
simplement par « /
». Ne pas le confondre avec
le répertoire personnel de l’utilisateur root :
« /root
» ;
un nom de répertoire peut être constitué de n’importe quelle lettre ou
symbole sauf
« /
». Le répertoire racine est une
exception, son nom est « /
» (prononcé
« slash » ou « le répertoire racine »), il ne peut pas
être renommé ;
chaque fichier ou répertoire est désigné par un nom de fichier entièrement qualifié, nom de fichier absolu ou chemin, indiquant la séquence de répertoires que l’on doit traverser pour l’atteindre. Les trois expressions sont synonymes ;
tous les noms de fichiers entièrement
qualifiés commencent par le répertoire
« /
» et il y a un /
»
entre chaque répertoire ou fichier dans le nom du fichier. Le premier
« /
» est le répertoire de plus haut niveau, et
les autres « /
» séparent les sous-répertoires
successifs jusqu’à ce que l’on atteigne la dernière entrée qui est le nom
fichier proprement dit. Les mots utilisés ici peuvent être source de
confusion. Prenez comme exemple le nom pleinement
qualifié suivant :
« /usr/share/keytables/us.map.gz
». Cependant,
les gens utiliseront souvent son nom de base
« us.map.gz
» seul comme nom de fichier ;
le répertoire racine comporte de nombreuses branches, telles que
« /etc/
» et
« /usr/
». Ces sous-répertoires se décomposent
eux-mêmes en d’autres sous-répertoires comme
« /etc/systemd/
» et
« /usr/local/
». L’ensemble de la chose, vu
globalement, s’appelle l’arborescence des
répertoires. Vous pouvez imaginer un nom de fichier absolu comme
une route partant de la base de l’arbre (« /
»)
jusqu’à l’extrémité de certaines branches (le fichier). Vous entendrez aussi
certains parler de l’arborescence des répertoires comme d’un arbre généalogique englobant tous les descendants directs
d’un seul personnage appelé le répertoire racine
(« /
») : les sous-répertoires ont alors des parents et un chemin montre l’ascendance complète
d’un fichier. Il y a aussi des chemins relatifs qui commencent quelque part
ailleurs qu’au niveau du répertoire racine. Il faut vous souvenir que le
répertoire « ../
» indique le répertoire
parent. Cette terminologie s’applique de la même manière aux autres
structures ressemblant aux répertoires comme les structures de données
hiérarchiques ;
il n’y a pas de chemin de répertoire spécial correspondant à un périphérique
physique tel que votre disque dur. C’est différent de RT-11, CP/M, OpenVMS, MS-DOS, AmigaOS et Microsoft
Windows, où le chemin comporte le nom du périphérique comme
« C:\
». (Il existe cependant des entrées de
répertoire qui font référence aux périphériques physiques en tant qu’élément
du système de fichiers normal. Consulter la Section 1.2.2, « Fonctionnement interne du système de fichiers »).
Note | |
---|---|
Bien que vous puissiez utiliser la
plupart des lettres ou symboles dans un nom de fichier, c’est en pratique un
mauvaise idée de le faire. Il est préférable d’éviter tous les caractères
qui ont une signification particulière sur la ligne de commandes, comme les
espaces, tabulations, sauts de ligne, et autres caractères spéciaux :
|
Note | |
---|---|
Le mot « root » signifie soit « utilisateur root », soit « répertoire root » Le contexte de son utilisation devrait permettre de les distinguer. |
Note | |
---|---|
Le mot chemin (« path ») n’est pas utilisé que pour les noms de fichiers entièrement qualifiés comme ci-dessus mais aussi pour le chemin de recherche des commandes. La signification voulue est habituellement claire selon le contexte. |
Les meilleures façons de faire en ce qui concerne la hiérarchie des fichiers
sont détaillées dans la « norme de hiérarchie du système de
fichiers » (« Filesystem Hierarchy Standard »)
(« /usr/share/doc/debian-policy/fhs/fhs-2.3.txt.gz
»
et hier
(7)). Vous devriez, pour commencer, mémoriser les
éléments suivants :
Tableau 1.3. Utilisation des répertoires-clés
répertoire | utilisation du répertoire |
---|---|
/ |
répertoire racine |
/etc/ |
fichiers de configuration valables pour l’ensemble du système |
/var/log/ |
fichiers journaux du système |
/home/ |
tous les répertoires personnels des utilisateurs non privilégiés |
En suivant la tradition UNIX, le système
Debian GNU/Linux fournit un système de
fichiers où les données physiques se trouvent sur des disques durs
et d’autres périphériques de stockage et où les interaction avec les
périphériques physiques tels que les écrans de console et les consoles
distantes connectées en séries sont représentées de manière unifiée dans
« /dev/
».
Chaque fichier, répertoire, tube nommé (une manière pour les programmes de partager des données) ou périphérique physique sur un système Debian GNU/Linux possède une structure de données appelée inœud (« inode ») qui décrit les attributs qui lui sont associés comme l’utilisateur qui le possède (propriétaire), le groupe auquel il appartient, l’heure de dernier accès, etc. L’idée de pouvoir presque tout représenter dans le système de fichiers était une innovation d’UNIX, et les noyaux modernes de Linux ont encore développé plus loin cette idée. À l’heure actuelle, même les informations concernant les processus qui tournent sur le système se trouvent sur le système de fichiers.
Cette représentation abstraite et unifiée des entités physiques et des processus internes est très puissante puisque cela nous permet d’utiliser la même commande pour le même type d’opération sur des périphériques complètement différents. Il est même possible de changer la manière dont fonctionne le noyau en écrivant des données dans des fichiers spéciaux liés aux processus en cours d’exécution.
Astuce | |
---|---|
Si vous avez besoin de connaître la correspondance entre une arborescence de
fichiers et un périphérique physique, lancez la commande
|
Les permissions du système de fichiers d’un système basé sur UNIX sont définies pour trois catégories d’utilisateurs :
l’utilisateur qui possède le fichier (u) ;
les autres utilisateurs du groupe à qui appartient le fichier (g) ;
tous les autres utilisateurs (o) dont on parle aussi en tant que « monde entier » ou « tout le monde ».
Pour les fichiers, chaque permission correspondante permet les actions suivantes :
la permission en lecture (r) permet à son propriétaire de voir le contenu du fichier ;
la permission en écriture (w) permet à son propriétaire de modifier le fichier ;
la permission d’exécution (x) permet à son propriétaire de lancer le fichier comme une commande.
Pour les répertoires, chaque permission correspondante permet les actions suivantes :
la permission en lecture (r) permet à son propriétaire d’afficher le contenu du répertoire ;
la permission en écriture (w) permet à son propriétaire d’ajouter ou supprimer des fichiers de ce répertoires ;
la permission d’exécution (x) permet à son propriétaire d’accéder aux fichiers du répertoire.
Ici, la permission en exécution sur un répertoire ne signifie pas uniquement l’autorisation de lire des fichiers dans ce répertoire mais aussi l’autorisation de voir leurs attributs, tels que leur taille et l’heure de modification.
ls
(1) est utilisé pour afficher les informations de
permissions (et davantage) des fichiers et répertoires. Lorsque cette
commande est passée avec l’option « -l
», elle
affiche les informations suivantes dans l’ordre donné :
type de fichier (premier caractère) ;
autorisation d’accès au fichier (neuf caractères, constitués de trois caractères pour l’utilisateur, le groupe et « les autres », dans cet ordre) ;
nombre de liens physiques vers le fichier ;
nom de l’utilisateur propriétaire du fichier ;
nom du groupe à qui appartient le fichier ;
taille du fichier en caractères (octets) ;
date et heure du fichier (mtime) ;
nom du fichier.
Tableau 1.4. Liste des premiers caractères de la sortie de « ls
-l
» :
caractère | signification |
---|---|
- |
fichier normal |
d |
répertoire |
l |
lien symbolique |
c |
nœud de périphérique en mode caractère |
b |
nœud de périphérique en mode bloc |
p |
tube nommé |
s |
socket |
chown
(1) est utilisé depuis le compte de l’administrateur
pour modifier le propriétaire d’un fichier. chgrp
(1) est
utilisé depuis le compte du propriétaire du fichier ou de l’administrateur
pour changer le groupe du fichier. chmod
(1) est utilisé
depuis le compte du propriétaire du fichier ou de l’administrateur pour
changer les droits d’accès à un fichier ou un répertoire. La syntaxe de base
pour manipuler le fichier toto
est la suivante :
# chown newowner foo # chgrp newgroup foo # chmod [ugoa][+-=][rwxXst][,...] foo
Vous pouvez, par exemple, faire qu’une arborescence de répertoires soit la
propriété de l’utilisateur toto
et partagée par le groupe
titi
en faisant ce qui suit :
# cd /some/location/
# chown -R foo:bar .
# chmod -R ug+rwX,o=rX .
Il existe trois bits qui donnent des permissions particulières :
le bit set user ID (s ou S situé à la place du x) de l’utilisateur ;
le bit set group ID (s ou S situé à la place du x) du groupe ;
le bit collant « sticky bit » (t ou T situé à la place du x) des « autres ».
Ici la sortie de « ls -l
» avec ces bits est
en majuscules si les bits d’exécution
cachés par ces sorties ne sont pas
positionnés.
Définir set user ID sur un fichier exécutable permet à un utilisateur d’exécuter les fichiers avec l’identifiant du propriétaire du fichier (par exemple root). De la même manière, définir set group ID sur un fichier exécutable permet d’exécuter le fichier avec l’identifiant de groupe du fichier (par exemple root). Parce que ces positionnements de bits peuvent créer des risques de sécurité, il ne faut les activer qu’avec des précautions extrêmes.
Définir set group ID sur un répertoire permet la création de fichiers à la BSD où tous les fichiers créés dans un répertoire appartiennent au groupe du répertoire.
Positionner le sticky bit d’un répertoire
empêche un fichier de ce répertoire d’être supprimé par un utilisateur qui
n’est pas le propriétaire du fichier. Pour sécuriser le contenu d’un fichier
dans des répertoires pouvant être écrits par tout le monde tels que
« /tmp
» ou dans des répertoires pouvant être
écrits par le groupe, il ne faut pas uniquement supprimer la permission du
fichier en écriture mais aussi
positionner le sticky bit sur le
répertoire. Sinon, le fichier pourra être supprimé et un nouveau fichier
créé avec le même nom par un utilisateur quelconque ayant accès en écriture
au répertoire.
Voici quelques exemples intéressants de permissions de fichiers.
$ ls -l /etc/passwd /etc/shadow /dev/ppp /usr/sbin/exim4 crw------T 1 root root 108, 0 Oct 16 20:57 /dev/ppp -rw-r--r-- 1 root root 2761 Aug 30 10:38 /etc/passwd -rw-r----- 1 root shadow 1695 Aug 30 10:38 /etc/shadow -rwsr-xr-x 1 root root 973824 Sep 23 20:04 /usr/sbin/exim4 $ ls -ld /tmp /var/tmp /usr/local /var/mail /usr/src drwxrwxrwt 14 root root 20480 Oct 16 21:25 /tmp drwxrwsr-x 10 root staff 4096 Sep 29 22:50 /usr/local drwxr-xr-x 10 root root 4096 Oct 11 00:28 /usr/src drwxrwsr-x 2 root mail 4096 Oct 15 21:40 /var/mail drwxrwxrwt 3 root root 4096 Oct 16 21:20 /var/tmp
Il existe aussi un mode numérique pour décrire les permissions des fichiers
avec chmod
(1). Ce mode numérique utilise des nombres en
base 8 (radix=8) codés sur 3 ou 4 chiffres.
Tableau 1.5. Mode numérique des permissions de fichiers dans les commandes
chmod
(1)
chiffre | signification |
---|---|
1er chiffre optionnel | somme de set user ID (=4), set group ID (=2), et sticky bit (=1) |
2ème chiffre | somme des permissions de lecture (=4), écriture (=2), et exécution (=1) pour l’utilisateur |
3ème chiffre | identique pour groupe |
4ème chiffre | identique pour autres |
Cela peut sembler compliqué mais c’est en fait assez simple. Si vous
regardez les quelques premières colonnes (2-10) de la sortie de la commande
« ls -l
» et que vous lisez en représentation
binaire (base 2) les permissions des fichiers (le « - »
représentant « 0 » et « rwx » représentant
« 1 »), les trois derniers chiffres de la valeur numérique du mode
devraient vous donner la représentation des permissions du fichier en octal
(base 8).
Essayez, par exemple, ce qui suit :
$ touch foo bar $ chmod u=rw,go=r foo $ chmod 644 bar $ ls -l foo bar -rw-r--r-- 1 penguin penguin 0 Oct 16 21:39 bar -rw-r--r-- 1 penguin penguin 0 Oct 16 21:35 foo
Astuce | |
---|---|
Si vous avez besoin d’accéder aux informations affichées par
« |
Les permissions appliquées à un fichier ou à un répertoire venant d’être
créé sont restreintes par la commande interne du shell
umask
. Consultez dash
(1),
bash
(1) etbuiltins
(7).
(file permissions) = (requested file permissions) & ~(umask value)
Tableau 1.6. Exemples de valeurs de umask
umask | permissions des fichiers créés | permissions des répertoires créés | utilisation |
---|---|---|---|
0022 |
-rw-r--r-- |
-rwxr-xr-x |
ne peut être écrit que par l’utilisateur |
0002 |
-rw-rw-r-- |
-rwxrwxr-x |
peut être écrit par le groupe |
Le système Debian utilise par défaut un schéma de groupe privé par
utilisateur (UPG). Un UPG est créé chaque fois qu’un utilisateur est ajouté
au système. Un UPG a le même nom que l’utilisateur pour lequel il a été créé
et cet utilisateur est le seul membre de l’UPG. Un principe d’UPG rend sûr
le positionnement de umask à 0002
car chaque utilisateur
a son propre groupe privé. (Sur certaines variantes d’UNIX, il est assez
courant de faire appartenir tous les utilisateurs au même groupe users
et, dans ce cas, c’est une
bonne idée de définir umask à 0022
pour des raisons de
sécurité.)
Astuce | |
---|---|
Activez UPG en plaçant « |
Avertissement | |
---|---|
Assurez-vous d'enregistrer les modifications non enregistrées avant de redémarrer ou d'effectuer des actions similaires. |
Vous pouvez ajouter un utilisateur penguin
à un groupe
bird
en deux étapes :
modifier la configuration de groupe en utilisant une des choses suivantes :
exécuter « sudo usermod -aG bird penguin
»,
exécuter « sudo adduser penguin bird
» (seulement sur les
systèmes classiques),
exécuter « sudo vigr
» pour /etc/group
et "sudo vigr -s
" pour /etc/gshadow
pour ajouter penguin
dans la ligne pour
bird
;
appliquer la configuration en utilisant une des choses suivantes :
redémarrage complet et connexion (meilleure option),
exécuter « kill -TERM -1
» et faire quelques actions de
réglage telles que « systemctl restart
NetworkManager.service
»,
Se déconnecter à l’aide du menu graphique et se connecter.
Vous pouvez retirer un utilisateur penguin
d’un groupe
bird
en deux étapes :
modifier la configuration de groupe en utilisant une des choses suivantes :
exécuter « sudo usermod -rG bird penguin
»,
exécuter « sudo deluser penguin bird
» (seulement sur les
systèmes Debian classiques),
exécuter « sudo vigr
» pour /etc/group
et « sudo vigr -s
» pour /etc/gshadow
pour retirer penguin
dans la ligne pour
bird
;
appliquer la configuration en utilisant une des choses suivantes :
redémarrage complet et connexion (meilleure option),
exécuter « kill -TERM -1
» et faire quelques actions de
réglage telles que « systemctl restart
NetworkManager.service
»,
la déconnexion à l’aide du menu graphique n’est pas une option pour le bureau Gnome.
Tout essai de redémarrage à chaud est un remplacement fragile d’un redémarrage complet dans les systèmes de bureau moderne.
Note | |
---|---|
Vous pouvez aussi ajouter dynamiquement des utilisateurs aux groupes durant
le processus d’authentification en ajoutant la ligne « |
Sous le système Debian, les périphériques ne sont qu’un autre type de fichier. Si vous avez des problèmes pour accéder à des périphériques tel qu’un CD-ROM ou une clé USB depuis le compte d’un utilisateur, il faudra rendre cet utilisateur membre du groupe concerné.
Certains groupes importants fournis par le système permettent à leurs
membres l’accès à des fichiers et des périphériques particuliers sans avoir
les privilèges de l’administrateur
.
Tableau 1.7. Liste des groupes importants fournis par le système pour l’accès aux fichiers
groupe | description des fichiers et périphériques accessibles |
---|---|
dialout |
accès complet et direct aux ports série
(« /dev/ttyS[0-3] ») |
dip |
accès limité aux ports série pour une connexion « Dialup IP (réseau commuté) vers des pairs de confiance |
cdrom |
lecteurs et graveurs de CD-ROM, DVD+/-RW |
audio |
périphérique audio |
video |
périphérique vidéo |
scanner |
dispositifs de numérisation (scanners) |
adm |
journaux de surveillance du système |
staff |
quelques répertoires où effectuer du travail d’administration de
début : « /usr/local »,
« /home » |
Astuce | |
---|---|
Vous devez être membre du groupe |
Certains groupes faisant partie du système, permettent à leurs membres
d’exécuter des commandes particulières sans les privilèges de
l’administrateur (root
).
Tableau 1.8. Liste des groupes importants fournis par le système pour l’exécution de commandes particulières
groupe | commandes accessibles |
---|---|
sudo |
exécuter sudo sans son mot de passe |
lpadmin |
exécuter des commandes pour ajouter, modifier et supprimer des imprimantes de la base de données des imprimantes |
Pour une liste complète des groupes et des utilisateurs fournis par le
système, veuillez consulter une version récente du document
« Utilisateurs et groupes » (« Users and Groups » se
trouvant dans
/usr/share/doc/base-passwd/users-and-groups.html
»
qui est fourni par le paquet base-passwd
.
Consultez passwd
(5), group
(5),
shadow
(5), newgrp
(1),
vipw
(8), vigr
(8) et
pam_group
(8) pour les commande de gestion des
utilisateurs et des groupes du système.
Il existe trois types d’horodatage pour un fichier GNU/Linux.
Tableau 1.9. Liste des types d’horodatage
type | signification (définition historique d'Unix) |
---|---|
mtime | date de modification du fichier (ls -l ) |
ctime | date de changement d’état du fichier (ls -lc ) |
atime | date de dernier accès au fichier (ls -lu ) |
Note | |
---|---|
ctime n’est pas la date de création du fichier. |
Note | |
---|---|
La valeur d'atime réelle sur GNU/Linux peut être en fait différente de celle donnée par la définition Unix historique. |
Écraser un fichier va modifier tous les attributs mtime, ctime et atime du fichier.
Modifier le propriétaire ou les droits d’un fichier va changer les attributs ctime et atime du fichier.
La lecture d’un fichier va modifier l’attribut atime du fichier sur le système Unix d'historique.
La lecture d’un fichier va modifier l’attribut atime du fichier que un système GNU/Linux si son
système de fichier est monté avec "strictatime
".
Lire un fichier pour la première fois ou après un jour modifie son attribut
atime sur un système GNU/Linux avec un
système de fichiers monté en « relatime
» (par défaut
depuis Linux 2.6.30).
Lire un fichier ne modifie pas son attribut atime sous GNU/Linux si le système de fichiers est
monté avec « noatime
».
Note | |
---|---|
Les options de montage « |
Utilisez la commande touch
(1) pour modifier l’horodatage
des fichiers existants.
En ce qui concerne l’horodatage, la commande ls
affiche
des chaînes avec les paramètres linguistiques non anglais
(« fr_FR.UTF-8
»).
$ LANG=C ls -l foo -rw-rw-r-- 1 penguin penguin 0 Oct 16 21:35 foo $ LANG=en_US.UTF-8 ls -l foo -rw-rw-r-- 1 penguin penguin 0 Oct 16 21:35 foo $ LANG=fr_FR.UTF-8 ls -l foo -rw-rw-r-- 1 penguin penguin 0 oct. 16 21:35 foo
Astuce | |
---|---|
Consultez Section 9.3.4, « Affichage personnalisé de la date et de l’heure » pour
personnaliser la sortie de « |
Il existe deux méthodes pour associer le fichier
« toto
» avec un nom de fichier différent
« titi
» :
Nom dupliqué d’un fichier existant
« ln toto titi
»
Fichier spécial pointant vers un autre fichier par son nom
« ln -s toto titi
»
Consultez l’exemple suivant pour des modifications du nombre de liens et les
subtiles différences dans le résultat de la commande rm
.
$ umask 002 $ echo "Original Content" > foo $ ls -li foo 1449840 -rw-rw-r-- 1 penguin penguin 17 Oct 16 21:42 foo $ ln foo bar # hard link $ ln -s foo baz # symlink $ ls -li foo bar baz 1449840 -rw-rw-r-- 2 penguin penguin 17 Oct 16 21:42 bar 1450180 lrwxrwxrwx 1 penguin penguin 3 Oct 16 21:47 baz -> foo 1449840 -rw-rw-r-- 2 penguin penguin 17 Oct 16 21:42 foo $ rm foo $ echo "New Content" > foo $ ls -li foo bar baz 1449840 -rw-rw-r-- 1 penguin penguin 17 Oct 16 21:42 bar 1450180 lrwxrwxrwx 1 penguin penguin 3 Oct 16 21:47 baz -> foo 1450183 -rw-rw-r-- 1 penguin penguin 12 Oct 16 21:48 foo $ cat bar Original Content $ cat baz New Content
Le lien physique peut être mis en place à l’intérieur du même système de
fichiers et partage le même numéro d’inœud, ce que montre l’option
« -i
» de ls
(1).
Le lien symbolique a les permissions d’accès nominales au fichier de
« rwxrwxrwx
» comme il apparaît dans l’exemple
ci-dessus, alors que les permissions d’accès effectives sont celles du
fichier vers lequel il pointe.
Attention | |
---|---|
En règle générale — à moins d’avoir une très bonne raison pour cela — il faudrait s’abstenir de créer des liens physiques ou des liens symboliques compliqués. Cela peut provoquer des cauchemars lorsque la combinaison logique des liens symboliques crée une boucle dans le système de fichiers. |
Note | |
---|---|
Il est généralement préférable d’utiliser des liens symboliques plutôt que des liens physiques à moins que vous n’ayez une bonne raison d’utiliser un lien physique. |
Le répertoire « .
» est lié au répertoire dans
lequel il apparaît, le nombre de liens de n’importe quel nouveau répertoire
commence donc à 2. Le répertoire « ..
» est lié
au répertoire parent, le nombre de liens du répertoire augmente donc lors de
l’ajout de nouveaux sous-répertoires.
Si vous venez de passer à Linux depuis Windows, la bonne conception d’un système de fichiers UNIX comparé à l’équivalent le plus proche que sont les « raccourcis Windows » deviendra vite claire. Parce qu’il est implémenté dans le système de fichiers, les applications ne voient pas de différence entre un fichier lié et son original. Dans le cas de liens physiques, il n’y a vraiment aucune différence.
Un tube nommé est un fichier qui se comporte comme un tuyau. Vous mettez quelque chose dans le tuyau et il ressort à l’autre bout. C’est donc appelé une FIFO, ou « premier entré-premier sorti » (First-In-First-Out) : la première chose que vous mettez dans le tuyau est la première chose qui ressortira à l’autre bout.
Si vous écrivez vers un tube nommé, le processus qui écrit dans le tube ne
se termine pas avant que l’information ne soit lue depuis le tube. Si vous
effectuez une lecture depuis un tube nommé, le processus de lecture attendra
jusqu’à ce qu’il n’y ait plus rien à lire avant de se terminer. La taille
d’un tube est toujours nulle — il ne stocke pas de données, ce n’est qu’un
lien entre deux processus, comparable à la fonction fournie par l’opérateur
« |
» dans l’interpréteur de
commandes. Cependant, comme ce tube a un nom, il n’est pas nécessaire que
les deux processus se trouvent sur la même ligne de commandes ni même qu’ils
soient lancés par le même utilisateur. Les tubes sont une innovation
déterminante d’UNIX.
Essayez, par exemple, ce qui suit :
$ cd; mkfifo mypipe $ echo "hello" >mypipe & # put into background [1] 8022 $ ls -l mypipe prw-rw-r-- 1 penguin penguin 0 Oct 16 21:49 mypipe $ cat mypipe hello [1]+ Done echo "hello" >mypipe $ ls mypipe mypipe $ rm mypipe
Les sockets sont utilisées de manière intensives dans les communications par Internet, les bases de données et le système d’exploitation lui-même. Elles sont semblables aux tubes nommés (FIFO) et permettent aux processus d’échanger des informations même s’ils tournent sur des ordinateurs différents. Pour la socket, ces processus n’ont pas besoin de tourner en même temps ni de tourner en tant que fils du même processus père. C’est le point d’aboutissement du processus d’intercommunication (IPC). (« interprocess communication »). L’échange d’informations peut avoir lieu entre deux machines au travers du réseau. Les deux plus courantes sont la socket Internet (« Internet socket ») et la socket du domaine UNIX (« UNIX domain socket »).
Astuce | |
---|---|
« |
Fichiers de périphériques fait référence
aux périphériques virtuels ou physiques de votre système, tels que vos
disques durs, carte vidéo, écran ou clavier. Un exemple de périphérique
virtuel est la console, représentée par
« /dev/console
».
Il y a 2 types de fichiers de périphériques :
périphérique en mode caractère (« character device ») :
permettent l’accès à un caractère à la fois
1 caractère = 1 octet
par exemple, les claviers, les ports série, …
Périphériques en mode bloc (« block device ») :
accèdent aux données par éléments plus importants appelés blocs
1 bloc > 1 octet
par exemple, les disques durs, …
Vous pouvez lire et écrire sur les fichiers de périphériques, cependant, le
fichier peut fort bien contenir des données binaires qui peuvent être du
charabia incompréhensible pour les êtres humains. Écrire des données
directement dans ces fichiers est parfois utile pour déboguer des connexions
matérielles. Vous pouvez, par exemple, vider un fichier texte vers le
périphérique d’impression « /dev/lp0
» ou
envoyer des commandes de modem vers le port série approprié
« /dev/ttyS0
». Mais, à moins que ce ne soit
fait avec précautions, cela peut provoquer un désastre majeur. Soyez donc
prudent.
Note | |
---|---|
Pour l’accès normal à une imprimante, utilisez |
On affiche le numéro de nœud du périphérique en utilisant la commande
ls
(1) comme suit :
$ ls -l /dev/sda /dev/sr0 /dev/ttyS0 /dev/zero brw-rw---T 1 root disk 8, 0 Oct 16 20:57 /dev/sda brw-rw---T+ 1 root cdrom 11, 0 Oct 16 21:53 /dev/sr0 crw-rw---T 1 root dialout 4, 64 Oct 16 20:57 /dev/ttyS0 crw-rw-rw- 1 root root 1, 5 Oct 16 20:57 /dev/zero
« /dev/sda
» a le numéro majeur de périphérique
8 et le numéro mineur de périphérique 0. Il est accessible en lecture et
écriture aux utilisateurs qui appartiennent au groupe
disk
.
« /dev/sr0
» a le numéro majeur de périphérique
11 et le numéro mineur de périphérique 0. Il est accessible en lecture et
écriture aux utilisateurs qui appartiennent au groupe
cdrom
.
« /dev/ttyS0
» a le numéro majeur de
périphérique 4 et le numéro mineur de périphérique 64. Il est accessible en
lecture et écriture aux utilisateurs qui appartiennent au groupe
dialout
.
« /dev/zero
» a le numéro majeur de
périphérique 1 et le numéro mineur de périphérique 5. Il est accessible en
lecture et écriture à tout le monde.
Sur les systèmes Linux modernes, le système de fichiers sous
« /dev/
» est automatiquement rempli par
udev
(7).
Il y a aussi certains fichiers spéciaux de périphériques.
Tableau 1.10. Liste des fichiers spéciaux de périphériques
fichier de périphérique | action | description de la réponse |
---|---|---|
/dev/null |
lire | retourne le « caractère fin de fichier (EOF) » |
/dev/null |
écrire | ne retourne rien (un puits de données sans fond) |
/dev/zero |
lire | retourne le « caractère \0 (NULL) » (qui n’est
pas identique au chiffre zéro ASCII) |
/dev/random |
lire | retourne des caractères aléatoires depuis un générateur de nombres aléatoires réel, en donnant une vraie entropie (lent) |
/dev/urandom |
lire | retourne des caractères aléatoires depuis un générateur de nombres pseudo-aléatoires, sécurisé par chiffrement |
/dev/full |
écrire | retourne une erreur disque plein (ENOSPC) |
Ils sont fréquemment utilisés en conjonction avec une redirection du shell (consultez Section 1.5.8, « Séquences de commandes typiques et redirection de l’interpréteur de commandes »).
procfs et sysfs
montés sur « /proc
» et
« /sys
sont des pseudo-systèmes de fichiers, ils
présentent dans l’espace utilisateur des structures de données internes du
noyau. En d’autres termes, ces entrées sont virtuelles, ce qui signifie
qu’elles présentent une fenêtre sur le fonctionnement du système
d’exploitation.
Le répertoire « /proc
» contient (entre autres
choses), pour chacun des processus tournant sur le système, un
sous-répertoire dont le nom est l’identifiant du processus (PID). Les
utilitaires du système qui accèdent aux information des processus, tels que
ps
(1), obtiennent leurs informations depuis cette
structure de répertoires.
Les répertoires qui se trouvent sous
« /proc/sys/
» contiennent des interfaces
permettant de modifier certains paramètres du système alors qu’il est en
fonctionnement. (Vous pouvez faire la même chose au travers de la commande
spécialisée sysctl
(8) ou de son fichier de configuration
« /etc/sysctl.conf
.)
Certaines personnes paniquent lorsqu’elles remarquent un fichier particulier
- « /proc/kcore
» — qui est particulièrement
énorme. C’est (plus ou moins) le contenu de la mémoire de votre
ordinateur. Il est utilisé pour déboguer le noyau. C’est un fichier virtuel
qui pointe vers la mémoire de l’ordinateur, ne vous inquiétez donc pas de sa
taille.
Les répertoires sous « /sys
» contiennent des
structures de données exportées depuis le noyau, leurs attributs et les
liens entre elles. Ils contiennent aussi des interfaces pour modifier
certains paramètres du noyau pendant son fonctionnement.
Consultez « proc.txt(.gz)
»,
« sysfs.txt(.gz)
» et d’autres documents en
rapport dans la documentation du noyau de Linux
(« /usr/share/doc/linux-doc-*/Documentation/filesystems/*
»)
fournie par le paquet linux-doc-*
.
Le tmpfs est un système de fichiers temporaire qui garde tous les fichiers en mémoire virtuelle. Les données du tmpfs dans le page cache en mémoire peuvent être déplacées dans l’espace d’échange sur disque en cas de besoin.
Le répertoire « /run
» est monté en tmpfs au tout début
du processus de démarrage. Cela permet d’écrire dessus même quand le
répertoire racine « /
» est monté en lecture seule. C’est
le nouvel emplacement pour le stockage de fichiers en état transitoire qui
remplace plusieurs emplacements décrits dans la norme de hiérarchie du système de
fichiers (« Filesystem Hierarchy Standard ») version 2.3 :
« /var/run
» → « /run
»
« /var/lock
» → « /run/lock
»
« /dev/shm
» → « /run/shm
»
Consultez « tmpfs.txt(.gz)
» dans la
documentation du noyau de Linux
(« /usr/share/doc/linux-doc-*/Documentation/filesystems/*
»)
fournie par le paquet linux-doc-*
.
Midnight Commander (MC) est un « couteau Suisse » GNU pour la console Linux et d’autres environnements de terminaux. Il permet au débutant d’acquérir une expérience de la console pilotée par des menus, ce qui est bien plus facile à apprendre que les commandes UNIX standard.
Il vous faudra peut-être installer le paquet Midnight Commander dont le nom
est « mc
» en effectuant ce qui suit :
$ sudo apt-get install mc
Utilisez la commande mc
(1) pour parcourir le système
Debian. C’est la meilleure manière d’apprendre. Vous pouvez explorer
certains emplacements intéressants en utilisant simplement les touches de
curseur et la touche Entrée :
« /etc
» et ses sous-répertoires
« /var/log
» et ses sous-répertoires
« /usr/share/doc
» et ses sous-répertoires
« /usr/sbin
» et
« /usr/bin
»
Pour que MC modifie le répertoire de travail en quittant, et
cd
vers le répertoire, je vous suggère de modifier
« ~/.bashrc
» afin d’inclure un script fourni
par le paquet mc
:
. /usr/lib/mc/mc.sh
Vous trouverez une explication dans mc
(1) (option
« -P
»). (Si vous ne comprenez pas exactement
ce dont je parle ici, vous pourrez le faire plus tard.)
MC peut être lancé par :
$ mc
MC prend en charge toutes les opérations sur les fichiers par l’intermédiaire de son menu, ce qui ne demande que peu d’effort de la part de l’utilisateur. Pressez simplement F1 pour obtenir l’écran d’aide. Vous pouvez jouer avec MC simplement en pressant les touches de curseur et les touches de fonctions.
Note | |
---|---|
Sur certaines consoles telles que |
Si vous rencontrez un problème de codage de caractères qui entraîne une
corruption de l’affichage, ajouter « -a
» à la
ligne de commandes de MC peut aider à éviter les problèmes.
Si cela ne résout pas vos problèmes d’affichage avec MC, consultez Section 9.5.6, « Configuration du terminal ».
Il y a par défaut, deux panneaux de répertoires affichant les listes de
fichiers. Un autre mode utile est de définir la fenêtre de droite à
« information » afin de voir les informations de privilèges
d’accès aux répertoires. Vous trouverez ci-après quelques raccourcis clavier
essentiels. Si le démon gpm
(8) tourne, une souris est
utilisable avec les consoles Linux en mode caractères. (Assurez-vous de
presser la touche majuscules pour obtenir le comportement normal de
couper-coller avec MC.)
Tableau 1.11. Touches de raccourcis de MC
touche | affectation |
---|---|
F1 |
menu d’aide |
F3 |
visualisateur interne de fichiers |
F4 |
éditeur interne |
F9 |
activer le menu déroulant |
F10 |
quitter Midnight Commander |
Tabulation |
passer d’une fenêtre à l’autre |
Ins ou Ctrl-T |
marquer le fichier pour des opérations sur plusieurs fichiers telles que copier |
Suppr |
effacer le fichier (attention, configurez MC dans le mode d’effacement sécurisé) |
Touches de curseur | autoexplicatif |
la commande cd
changera le répertoire affiché sur l’écran
sélectionné ;
Ctrl-Entrée
ou Alt-Entrée
copiera un
nom de fichier sur la ligne de commandes. Utilisez cela avec les commandes
cp
(1) et mv
(1) en association avec
l’édition de la ligne de commandes ;
Alt-Tab
affichera les choix de l’interpréteur de
commandes pour l’expansion du nom de fichier ;
on peut indiquer le répertoire de départ pour les deux fenêtres en paramètre
de MC. Par exemple « mc /etc /root
» ;
Échap
+ touche n
→
Fn
(par exemple Échap
+
1
→ F1
, etc. ;
Échap
+ 0
→
F10
) ;
Presser la touche Échap
avant une touche a le même effet
que presser simultanément Alt
et la touche. Par exemple,
entrez Échap
+ c
pour
Alt-C
. Échap
est appelée métatouche et
parfois notée « M-
».
L’éditeur interne possède une manière intéressante d’effectuer un
copier-coller. Presser F3
marque le début de la
sélection, F3
pressé une seconde fois marque la fin de la
sélection et la met en surbrillance. Vous pouvez ensuite déplacer votre
curseur. Si vous appuyez sur F6, la zone sélectionnée sera déplacée jusqu’à
l’emplacement du curseur. Si vous pressez sur F5, la zone sélectionnée sera
copiée et insérée à l’emplacement du curseur. F2
enregistrera le fichier. F10
vous permettra de quitter
l’éditeur. La plupart des touches de déplacement du curseur fonctionnent de
manière intuitive.
Cet éditeur peut être directement lancé avec un fichier en utilisant l’une des commandes suivantes :
$ mc -e filename_to_edit
$ mcedit filename_to_edit
Il ne s’agit pas d’un éditeur multi-fenêtres mais on peut faire usage de plusieurs consoles Linux pour obtenir le même effet. Pour copier d’une fenêtre sur l’autre, utilisez les touches Alt-Fn pour basculer d’une console virtuelle à l’autre et utilisez « File→Insert file » ou «File→Copy to file» pour déplacer une portion de fichier dans un autre fichier.
Cet éditeur interne peut être remplacé par n’importe quel autre éditeur externe de votre choix.
De nombreux programmes utilisent aussi les variables d’environnement
« $EDITOR
» ou
« $VISUAL
» afin de décider quel éditeur
utiliser. Si, au départ, vous n’êtes à l’aise ni avec
vim
(1) ni avec nano
(1), vous pouvez
définir ces variable à « mcedit
» en ajoutant
les lignes suivantes au fichier « ~/.bashrc
» :
export EDITOR=mcedit export VISUAL=mcedit
Je recommande de les définir à « vim
» si
possible.
Si vous n’êtes pas à l’aise avec vim
(1), vous pouvez
continuer à utiliser mcedit
(1) pour la plupart des tâches
de maintenance du système.
MC possède un visualisateur intelligent. C’est un très bon outil pour
rechercher des mots dans des documents. Je l’utilise toujours pour lire les
fichiers qui sont dans le répertoire
« /usr/share/doc
». C’est la manière la plus
rapide de naviguer dans les masses d’informations sur Linux. Ce
visualisateur peut être chargé directement utilisant l’une des commandes
suivantes :
$ mc -v path/to/filename_to_view
$ mcview path/to/filename_to_view
Pressez Entrée sur un fichier, et le programme approprié prendra en charge le contenu du fichier (consultez Section 9.4.11, « Personnaliser le programme à lancer »). Il s’agit là d’une fonctionnalité très pratique de MC.
Tableau 1.12. Réaction à la touche Entrée dans MC
type de fichier | réaction à la touche Entrée |
---|---|
fichier exécutable | exécuter la commande |
fichier de page de manuel | envoyer (« pipe ») le contenu au logiciel de visualisation |
fichier html | envoyer (« pipe ») le contenu au navigateur web |
fichiers « *.tar.gz » et
« *.deb » |
parcourir le contenu comme si c’était un sous-répertoire |
Afin de permettre le fonctionnement de ces visualisateurs et de ces
fonctionnalités de fichiers virtuels, les fichiers pouvant être visualisés
ne doivent pas être définis comme étant exécutables. Modifiez leur état avec
la commande chmod
(1) ou par l’intermédiaire du menu
fichiers de MC.
MC peut être utilisé pour accéder à des fichiers au travers
d’Internet. Allez au menu en pressant « F9
»,
« Entrée
» et « h
» pour
activer le système de fichiers Shell. Entrez un URL sous la forme
« sh://[utilisateur@]machine[:options]/[répertoire_distant]
»,
qui récupère un répertoire distant qui apparait alors comme local en
utilisant ssh
.
Bien que MC vous permette de faire à peu près n’importe quoi, il est très important que vous appreniez à utiliser les outils en ligne de commande appelés depuis l’invite de l’interpréteur de commandes, et que vous vous familiarisiez avec un environnement de travail de type UNIX.
Étant donné que l’interpréteur de connexion peut être utilisé par certains
programmes d’initialisation du système, il est prudent de le conserver en
tant que bash
(1) et d’éviter de basculer l’interpréteur
de connexion en tant que chsh
(1).
Si vous souhaitez utiliser une autre invite interactive d’interpréteur,
définissez-la à partir de la configuration de l’émulateur de terminal
graphique ou démarrez-la à partir de ~/.bashrc
, par
exemple, en y plaçant « exec /usr/bin/zsh -i -l
» ou
« exec /usr/bin/fish -i -l
».
Tableau 1.13. Liste d’interpréteurs de commandes (« shells »)
paquet | popularité | taille | Interpréteur POSIX | description |
---|---|---|---|---|
bash
|
V:838, I:999 | 7175 | Oui | Bash : Shell GNU Bourne Again. (standard de fait) |
bash-completion
|
V:32, I:933 | 1454 | N/A | autocomplétion programmable pour l’interpréteur bash |
dash
|
V:884, I:997 | 191 | Oui | Le Shell Almquist de Debian. Bon pour les scripts en shell |
zsh
|
V:40, I:73 | 2463 | Oui | Z shell : interpréteur standard avec de nombreuses améliorations |
tcsh
|
V:6, I:20 | 1355 | Non | Shell TENEX C : version améliorée de csh de Berkeley |
mksh
|
V:6, I:11 | 1579 | Oui | Une version de Korn shell |
csh
|
V:1, I:6 | 339 | Non | C Shell OpenBSD, une version de csh de Berkeley |
sash
|
V:0, I:5 | 1157 | Oui | Interpréteur de commandes autonome
avec des commandes intégrées. (Ne convient pas en tant que
« /usr/bin/sh » standard) |
ksh
|
V:1, I:10 | 61 | Oui | la vraie version de AT&T du shell Korn |
rc
|
V:0, I:1 | 178 | Non | implémentation du shell rc Plan 9 de AT&T |
posh
|
V:0, I:0 | 190 | Oui | Policy-compliant Ordinary SHell (dérivé de pdksh ) |
Astuce | |
---|---|
Les interpréteurs de commandes POSIX partagent une syntaxe commune, mais leur comportement peut diverger, même pour des choses aussi élémentaires que les variables de l’interpréteur ou les expansions de motifs. Veuillez consulter leur documentation pour une description détaillée. |
Dans ce chapitre du didacticiel, l’interpréteur interactif sera toujours
bash
.
Vous pouvez personnaliser le comportement de bash
(1) à
l’aide de « ~/.bashrc
».
Essayez, par exemple, ce qui suit :
# enable bash-completion if ! shopt -oq posix; then if [ -f /usr/share/bash-completion/bash_completion ]; then . /usr/share/bash-completion/bash_completion elif [ -f /etc/bash_completion ]; then . /etc/bash_completion fi fi # CD upon exiting MC . /usr/lib/mc/mc.sh # set CDPATH to a good one CDPATH=.:/usr/share/doc:~:~/Desktop:~ export CDPATH PATH="${PATH+$PATH:}/usr/sbin:/sbin" # set PATH so it includes user's private bin if it exists if [ -d ~/bin ] ; then PATH="~/bin${PATH+:$PATH}" fi export PATH EDITOR=vim export EDITOR
Astuce | |
---|---|
Vous pourrez trouver davantage d’informations concernant les astuces de
personnalisation de |
Astuce | |
---|---|
Le paquet |
Dans un environnement « de type
UNIX », certaines séquences de touches ont une signification
particulière. Vous remarquerez que sur une console Linux normale en mode
caractères, seules les touches Ctrl
et
Alt
situées à gauche fonctionnent de la manière
voulue. Voici quelques séquences de touches dont il est intéressant de se
souvenir :
Tableau 1.14. Liste des raccourcis clavier de bash
touche | description des raccourcis clavier |
---|---|
Ctrl-U |
effacer la ligne avant le curseur |
Ctrl-H |
effacer le caractère précédant le curseur |
Ctrl-D |
terminer l’entrée (quitter l’interpréteur si vous en utilisez un) |
Ctrl-C |
terminer un programme en cours d’exécution |
Ctrl-Z |
arrêter temporairement un programme en le mettant en tâche de fond |
Ctrl-S |
arrêter le défilement de l’affichage à l’écran |
Ctrl-Q |
reprendre le défilement de l’affichage |
Ctrl-Alt-Suppr |
redémarrer ou arrêter le système, consultez inittab (5) |
Touche Alt de gauche (optionnellement, touche
Windows ) |
touche « meta » pour les interfaces utilisateurs Emacs et similaires |
Flèche haute |
lancer la recherche dans l’historique des commandes sous
bash |
Ctrl-R |
lancer la recherche incrémentale dans l’historique des commandes sous
bash |
Tabulation |
complèter l’entrée du nom de fichier de la ligne de commandes sous
bash |
Ctrl-V Tab |
entrer une Tabulation sans expansion de la ligne de
commande sous bash |
Astuce | |
---|---|
La fonctionnalité |
Les opérations de souris pour le texte sur le système Debian mélangent 2 styles avec quelques acrobaties :
Opérations de souris de style Unix traditionnel :
utilisation de 3 boutons (clic) ;
utilisation de PRIMAIRE ;
utilisation par des applications X telles que xterm
et
des applications textuelles dans la console Linux.
Opérations de souris pour le style graphique moderne :
utilisation de 2 boutons (glisser + cliquer) ;
utilisation de PRIMAIRE et PRESSE-PAPIER ;
utilisation dans les applications graphiques modernes telles que
gnome-terminal
.
Tableau 1.15. Liste des opérations de la souris et des actions associées sur les touches pour Debian
action | réponse |
---|---|
Clic-gauche et glisser de la souris | sélectionner la plage comme sélection PRIMAIRE |
Clic-gauche | sélectionner le début de plage pour la sélection PRIMAIRE |
clic droit (traditionnel) | sélectionner la fin de plage pour la sélection PRIMAIRE |
clic droit (moderne) | action dépendant du contexte (couper/copier/coller) |
clic central ou Maj-Inser |
insérer la sélection PRIMAIRE à la position du curseur |
Ctrl-X |
couper la sélection PRIMAIRE vers le PRESSE-PAPIER |
Ctrl-C (Shift-Ctrl-C dans un terminal) |
copier la sélection PRIMAIRE dans le PRESSE-PAPIER |
Ctrl-V |
coller le contenu de PRESSEPAPIERS à l’emplacement du curseur |
Ici, la sélection PRIMAIRE est la plage de texte surlignée. Dans un
programme de terminal, Shift-Ctrl-C
est utilisé pour
éviter de mettre fin à un programme en cours.
La molette centrale des souris à molette modernes est considérée comme le bouton du milieu et peut être utilisée pour les clics-milieu. Cliquer simultanément le bouton de gauche et le bouton de droite sert à émuler le bouton du milieu sur les systèmes ayant une souris à deux boutons.
Pour pouvoir utiliser une souris avec les consoles Linux en mode caractère,
il faut que gpm
(8) tourne en tant que démon.
La commande less
(1) invoque le visualisateur moderne
(afficheur de contenu de fichier). Il affiche le contenu du fichier passé en
argument ou de l’entrée standard. Pressez « h
»
si vous avez besoin d’une aide lors du parcours avec la commande
less
. Il peut faire beaucoup plus de choses que
more
(1) et peut être surchargé en exécutant
« eval $(lesspipe)
» ou « eval
$(lessfile)
» dans le script de démarrage de l’interpréteur
de commandes. Vous trouverez davantage d’informations dans
« /usr/share/doc/less/LESSOPEN
». L’option
« -R
» permet la sortie en mode caractères
bruts et permet les séquences d’échappement de couleurs ANSI. Consultez
less
(1).
Astuce | |
---|---|
Dans la commande |
Il faudrait que vous soyez compétant avec l’une des variantes des programmes Vim ou Emacs qui sont très populaires sur les systèmes semblables à UNIX.
Je pense que s’habituer aux commandes de Vim est une bonne chose, car
l’éditeur Vi est toujours présent dans le monde Linux et UNIX. (En pratique,
le vi
d’origine ou le nouveau nvi
sont
des programmes que vous trouvez partout. Pour les débutants, j’ai plutôt
choisi Vim parce qu’il propose de l’aide par l’intermédiaire de la touche
F1
tout en restant assez semblable et plus puissant.)
Si vous choisissez plutôt Emacs ou XEmacs comme éditeur, c’est aussi un bon choix évidemment, particulièrement pour la programmation. Emacs possède une pléthore d’autres fonctionnalités, y compris un lecteur de nouvelles, un éditeur de répertoires, un programme de courriel, etc. Lorsqu’il est utilisé pour programmer ou éditer des scripts en shell, il reconnaît de manière intelligente le format de ce sur quoi vous être en train de travailler et il essaie de vous aider. Certaines personnes affirment que le seul programme dont ils ont besoin sous Linux est Emacs. Dix minutes d’apprentissage d’Emacs maintenant vous économiseront des heures plus tard. Il est grandement recommandé d’avoir le manuel de GNU Emacs comme référence lors de son apprentissage.
Tous ces programmes sont habituellement accompagnés d’un programme
d’apprentissage pour vous aider à les utiliser par la pratique. Lancez Vim
en entrant « vim
» et en pressant la touche
F1. Vous devriez au moins en lire les 35 premières lignes. Suivez ensuite le
cours en ligne en déplaçant le curseur sur
« |tutor|
» et en pressant
Ctrl-]
.
Note | |
---|---|
De bons éditeurs, tels que Vim et Emacs, traitent correctement les textes codés en UTF-8 et autres codages exotiques. Il est préconisé d’utiliser l’environnement graphique en utilisant les paramètres linguistiques UTF-8 locaux et d’installer les programmes requis ainsi que les fontes assorties. Les éditeurs permettent de régler le codage des fichiers indépendamment de celui de l’environnement graphique. Veuillez vous référer à leur documentation relative au texte multi-octets. |
Debian est fourni avec de nombreux éditeurs différents. Nous recommandons
d’installer le paquet vim
, comme indiqué ci-dessus.
Debian offre un accès unifié à l’éditeur par défaut du système par
l’intermédiaire de la commande
« /usr/bin/editor
». Cela permet à d’autres
programmes (par exemple reportbug
(1)) de pourvoir
l’appeler. Vous pouvez le modifier par la commande qui suit :
$ sudo update-alternatives --config editor
Pour les débutants, je recommande de choisir
« /usr/bin/vim.basic
» plutôt que
« /usr/bin/vim.tiny
» car il prend en charge la
mise en évidence de la syntaxe.
Astuce | |
---|---|
De nombreux programmes utilisent les variables d’environnement
« |
Le vim
(1) récent démarre de lui-même avec l’option
raisonnable « nocompatible
» et entre dans le mode
NORMAL
.[1]
Tableau 1.16. Liste des saisies de clavier basiques pour vim
mode | saisies de clavier | action |
---|---|---|
NORMAL |
:help|only |
affichage de l’aide |
NORMAL |
:e fichier.ext |
ouverture d’un nouveau tampon pour éditer fichier.ext |
NORMAL |
:w |
écraser le fichier originel avec le tampon actuel |
NORMAL |
:w fichier.ext |
enregistrer le tampon actuel dans fichier.ext |
NORMAL |
:q |
quitter vim |
NORMAL |
:q! |
forcer l’abandon de vim |
NORMAL |
:only |
clore toutes les autres fenêtres ouvertes |
NORMAL |
:set nocompatible? |
vérifier si vim est dans le mode raisonnable
nocompatible |
NORMAL |
:set nocompatible |
utiliser vim avec le mode raisonnable
nocompatible |
NORMAL |
i |
entrer dans le mode INSERTION |
NORMAL |
R |
entrer dans le mode REMPLACEMENT |
NORMAL |
v |
entrer dans le mode VISUEL |
NORMAL |
V |
entrer dans le mode VISUEL LIGNE |
NORMAL |
Ctrl-V |
entrer dans le mode VISUEL BLOC |
sauf TERMINAL-JOB |
ESC -key |
entrer dans le mode NORMAL |
NORMAL |
:term |
entrer dans le mode TERMINAL-JOB |
TERMINAL-NORMAL |
i |
entrer dans le mode TERMINAL-JOB |
TERMINAL-JOB |
Ctrl-W N (ou Ctrl-\
Ctrl-N ) |
entrer dans le mode TERMINAL-NORMAL |
TERMINAL-JOB |
Ctrl-W : |
entrer dans le mode Ex dans le mode
TERMINAL-NORMAL |
Veuillez utiliser le programme « vimtutor
» pour
apprendre à utiliser vim
à l’aide d’un tutoriel
interactif.
Le programme vim
modifie son comportement lors de frappes
de clavier selon le mode. La saisie de
clavier dans un tampon se fait principalement dans les modes
INSERTION
et REMPLACEMENT
. Le
déplacement de curseur se fait principalement dans le mode
NORMAL
. La sélection interactive est faite dans le mode
VISUEL
. Saisir « :
» dans le mode
NORMAL
change son mode
au mode Ex
. Le mode Ex
accepte des
commandes.
Astuce | |
---|---|
Vim est fourni avec le paquet Netrw. Netrw gère la lecture et l’écriture de
fichier, le parcours de répertoires à travers un réseau, et la navigation
locale ! Essayez Netrw avec « |
Pour une configuration plus poussée de vim
, consultez
Section 9.2, « Personnaliser vim ».
La sortie d’une commande de l’interpréteur peut défiler, quitter votre écran et être définitivement perdue. C’est une bonne habitude d’enregistrer l’activité de l’interpréteur de commandes dans un fichier afin de la consulter plus tard. Ce type d’enregistrement est essentiel lorsque vous effectuez des tâches d’administration quelconques.
Astuce | |
---|---|
Le nouveau Vim (version>=8.2) peut être utilisé pour enregistrer
l’activité de l’interpréteur proprement en utilisant le mode
|
La méthode de base pour enregistrer l’activité de l’interpréteur de
commandes est de la lancer sous script
(1).
Essayez, par exemple, ce qui suit :
$ script Script started, file is typescript
Lancez une commande quelconque sous script
.
Pressez Ctrl-D
pour quitter le script
.
$ vim typescript
Consultez Section 9.1.1, « Enregistrer proprement l’activité de la console » .
Apprenons les commandes UNIX de base. J’utilise ici « UNIX » dans
son sens générique. Tous les clones d’UNIX proposent habituellement des
commandes équivalentes. Le système Debian ne fait pas exception. Ne vous
inquiétez pas si certaines commandes ne fonctionnent pas comme vous le
voudriez maintenant. Si un alias
est utilisé dans le
shell, la sortie correspondante sera différente. Ces exemples ne sont pas
destinés à être exécutés dans cet ordre.
Essayez toutes les commandes qui suivent en utilisant un compte non privilégié :
Tableau 1.17. Liste des commandes UNIX de base
commande | description |
---|---|
pwd |
afficher le nom du répertoire actuel ou de travail |
whoami |
afficher le nom de l’utilisateur actuel |
id |
afficher l’identité de l’utilisateur actuel (nom, uid, gid, et groupes associés) |
file toto |
afficher le type de fichier du fichier
« toto » |
type -p nom-de-commande |
afficher l’emplacement du fichier de la commande
« nom-de-commande » |
which nom-de-commande |
, , |
type nom-de-commande |
afficher des informations sur la commande
« nom-de-commande » |
apropos mot-clé |
rechercher les commandes ayant un rapport avec
« mot-clé » |
man -k mot-clé |
, , |
whatis nom-de-commande |
afficher une ligne d’explication sur la commande
« nom-de-commande » |
man -a nom-de-commande |
afficher une explication sur la commande
« nom-de-commande » (style
UNIX) |
info nom-de-commande |
afficher une explication assez longue de la commande
« nom-de-commande » (style
GNU) |
ls |
afficher le contenu du répertoire (tous les fichiers et répertoires non cachés) |
ls -a |
afficher le contenu du répertoire (tous les fichiers et répertoires) |
ls -A |
afficher le contenu du répertoire (presque tous les fichiers et répertoires,
par exemple sauter « .. » et
« . ») |
ls -la |
afficher tout le contenu du répertoire de façon détaillée |
ls -lai |
afficher tout le contenu du répertoire avec les numéros d’inœuds et les informations détaillées |
ls -d |
afficher tous les sous-répertoires du répertoire actuel |
tree |
afficher le contenu de l’arborescence des fichiers |
lsof toto |
afficher l’état d’ouverture du fichier
« toto » |
lsof -p pid |
afficher les fichiers ouverts par le processus de numéro :
« pid » |
mkdir toto |
créer le nouveau répertoire
« toto » dans le
répertoire en cours |
rmdir toto |
supprimer le répertoire
« toto » du répertoire
actuel |
cd toto |
allez au répertoire
« toto » se trouvant dans
le répertoire actuel ou dans le répertoire figurant dans la variable
« $CDPATH » |
cd / |
aller au répertoire racine |
cd |
aller au répertoire personnel de l’utilisateur actuel |
cd /toto |
aller au répertoire de chemin absolu
« /toto » |
cd .. |
aller au répertoire parent |
cd ~toto |
aller au répertoire
« foo » se trouvant dans
le répertoire personnel de l’utilisateur |
cd - |
aller au répertoire précédent |
</etc/motd visualisateur |
afficher le contenu de « /etc/motd » en
utilisant le visualisateur (« pager ») par défaut |
touch fichier-poubelle |
créer un fichier vide
« fichier-poubelle » |
cp toto titi |
copier le fichier « toto »
existant dans le nouveau fichier
« titi » |
rm fichier-poubelle |
supprimer le fichier
« fichier-poubelle » |
mv toto titi |
renommer le fichier existant
« toto » avec le nouveau
nom « titi »
(« titi » ne doit pas
exister) |
mv toto titi |
déplacer le fichier existant
« toto » vers le nouvel
emplacement
« titi/toto »
(le répertoire « titi »
doit exister) |
mv toto
titi/tutu |
déplacer le fichier existant
« toto » vers un nouvel
emplacement avec le nouveau nom
« titi/tutu »
(le répertoire « titi »
doit exister mais le répertoire
« titi/tutu »
ne doit pas exister) |
chmod 600 toto |
rendre le fichier « toto »
non lisible et non modifiable par les autres personnes (non exécutable pour
tous) |
chmod 644 toto |
rendre un fichier existant
« toto » accessible en
lecture mais non modifiable par les autres personnes (non exécutable pour
tous) |
chmod 755 toto |
rendre un fichier existant
« toto » accessible en
lecture mais non modifiable par les autres utilisateurs (exécutable pour
tous) |
find . -name motif |
rechercher les noms de fichier contenant le
« motif » de
l’interpréteur de commandes (plus lent) |
locate -d . motif |
rechercher les noms de fichiers contenant en utilisant un
« motif » de
l’interpréteur de commandes (plus rapide si on utilise une base de données
régulièrement générée) |
grep -e "motif" *.html |
rechercher un « motif »
dans tous les fichiers se terminant par
« .html » dans le répertoire actuel et tous les
afficher |
top |
afficher en plein écran les informations sur les processus, pressez
« q » pour quitter |
ps aux | visualisateur |
afficher les informations concernant tous les processus actifs en utilisant un affichage de type BSD |
ps -ef | visualisateur |
afficher les informations concernant tous les processus actifs en utilisant un affichage de type UNIX System-V |
ps aux | grep -e "[e]xim4*" |
afficher tous les processus faisant appel à
« exim » et
« exim4 » |
ps axf | visualisateur |
afficher les informations concernant tous les processus en cours en utilisant une sortie ASCII pseudo-graphique |
kill 1234 |
tuer le processus identifié par l’identifiant de processus : « 1234 » |
gzip toto |
compresser « toto » afin
de créer « toto.gz » en
utilisant le codage Lempel-Ziv (LZ77) |
gunzip toto.gz |
décompresser « toto.gz »
afin de créer « toto ». |
bzip2 toto |
compresser « toto » pour
créer « toto.bz2 » en
utilisant l’algorithme de compression de tri de texte Burrows-Wheeler et le
codage de Huffman (meilleure compression que gzip ) |
bunzip2 toto.bz2 |
décompresser « toto.bz2 »
afin de créer « toto » |
xz toto |
compresser « toto » pour
créer « toto.xz » en
utilisant l’algorithme de compression de Lempel-Ziv-Markov chain (meilleure
compression que bzip2 ) |
unxz toto.xz |
décompresser « toto.xz »
afin de créer « toto ». |
tar -xvf toto.tar |
extraire les fichiers de l’archive
« toto.tar » |
tar -xvzf toto.tar.gz |
extraire les fichiers d’une archive
« gzippée » « toto.tar.gz » |
tar -xvjf toto.tar.bz2 |
extraire les fichiers de l’archive
« toto.tar.bz2 » |
tar -xvJf toto.tar.xz |
extraire les fichiers de l’archive
« toto.tar.xz » |
tar -cvf toto.tar
titi/ |
archiver le contenu du répertoire
« titi/ » dans l’archive
« toto.tar » |
tar -cvzf toto.tar.gz
titi/ |
archiver le contenu du répertoire
« titi/ » dans l’archive
compressée « toto.tar.gz » |
tar -cvjf toto.tar.bz2
titi/ |
archiver le contenu du répertoire
« titi/ » sans l’archive
« toto.tar.bz2 » |
tar -cvJf toto.tar.xz
titi/ |
archiver le contenu du répertoire
« titi/ » sans l’archive
« toto.tar.xz » |
zcat README.gz | visualisateur |
afficher le contenu du fichier compressé
« README.gz » en utilisant le visualisateur
(« pager ») par défaut |
zcat README.gz > toto |
créer le fichier « toto » avec le contenu
décompressé de « README.gz » |
zcat README.gz >> toto |
ajouter le contenu décompressé de « README.gz »
à la fin du fichier "foo ". (S’il n’existe pas, créez-le
d’abord.) |
Note | |
---|---|
UNIX a pour tradition de cacher les fichiers dont le nom commence par un
« Pour la commande Le visualisateur (« pager ») par défaut d’un système Debian non
personnalisé est « |
À titre d’exercice, parcourez les répertoires et jetez un coup d’œil au système en vous servant des commandes ci-dessus. Si vous avez des questions sur ces commandes de la console, veuillez consulter la page de manuel.
Essayez, par exemple, ce qui suit :
$ man man $ man bash $ man builtins $ man grep $ man ls
Il peut être un peu difficile de s’habituer au style des pages de manuel parce qu’elles sont plutôt succinctes, particulièrement les plus anciennes, celles qui sont vraiment traditionnelles. Mais une fois que vous y serez familiarisé, vous apprécierez leur concision.
Remarquez que beaucoup de commandes UNIX, y compris celles de GNU et BSD, affichent une information d’aide courte si vous les exécutez de l’une des façons suivantes (ou parfois sans paramètre) :
$ commandname --help $ commandname -h
Vous avez maintenant une certaine sensation sur la manière d’utiliser un
système Debian. Nous allons regarder plus profondément le mécanisme
d’exécution des commandes sous le système Debian. J’ai ici, pour les
débutants, simplifié la réalité. Consultez bash
(1) pour
l’explication exacte.
Une simple commande est une séquence de :
assignations de variables (optionnelles) ;
nom de la commande ;
paramètres (optionnels) ;
redirections (optionnelles : >
,
>>
, <
,
<<
, etc.) ;
opérateurs de contrôle (optionnels : &&
,
||
, nouvelle ligne ,
;
, &
, (
,
)
).
Les valeurs de certaines variables d’environnement modifient le comportement de certaines commandes UNIX.
Les valeurs par défaut des variables d’environnement sont définies initialement par le système PAM, certaines d’entre-elles peuvent donc être réinitialisées par certains programmes d’application :
le système PAM tel que pam_env
peut définir des variables
d’environnement à l’aide de « /etc/pam.conf
»,
« /etc/environment
» et
« /etc/default/locale
» ;
le gestionnaire d’affichage tel que gdm3
peut
réinitialiser les variables d’environnement pour une session graphique à
l’aide de « ~/.profile
» ;
l’initialisation de programme spécifique à l’utilisateur peut réinitialiser
les variables d’environnement à l’aide de « ~/.profile
»,
« ~/.bash_profile
» et ~/.bashrc
».
Les paramètres régionaux par défaut sont définis dans la variable
d’environnement « $LANG
» et sont configurés comme
« LANG=xx_YY. UTF-8
» par l’installateur ou par la
configuration ultérieure de l’interface graphique, par exemple,
« Paramètres » → « Région & Langue » → « Langue » / « Formats » pour
GNOME.
Note | |
---|---|
Je vous recommande de configurer l’environnement du système en ne touchant
qu’à la variable « |
La valeur complète des paramètres linguistiques indiqués par la variable
« $LANG
est constituée de trois parties
« xx_YY.ZZZZ
».
Tableau 1.18. Les trois parties des paramètres linguistiques
valeur des paramètres linguistiques | signification |
---|---|
xx |
codes de langue ISO 639 (en minuscules) tel que « fr » |
YY |
codes de pays ISO 3166 (en majuscules), par exemple « FR » |
ZZZZ |
le jeu de caractères, toujours défini à « UTF-8 » |
Tableau 1.19. Liste des recommandations de paramètres linguistiques
recommandation de paramètres linguistiques | Langue (zone) |
---|---|
en_US.UTF-8 |
anglais (USA) |
en_GB.UTF-8 |
anglais (Grande-Bretagne) |
fr_FR.UTF-8 |
français (France) |
de_DE.UTF-8 |
allemand (Allemagne) |
it_IT.UTF-8 |
italien (Italie) |
es_ES.UTF-8 |
espagnol (Espagne) |
ca_ES.UTF-8 |
catalan (Espagne) |
sv_SE.UTF-8 |
suédois (Suède) |
pt_BR.UTF-8 |
portugais (Brésil) |
ru_RU.UTF-8 |
russe (Russie) |
zh_CN.UTF-8 |
chinois (RP de Chine) |
zh_TW.UTF-8 |
chinois (Taiwan) |
ja_JP.UTF-8 |
japonais (Japon) |
ko_KR.UTF-8 |
coréen (République de Corée) |
vi_VN.UTF-8 |
vietnamien (Vietnam) |
L’exécution typique d’une commande utilise une séquence de lignes telle que la suivante :
$ echo $LANG en_US.UTF-8 $ date -u Wed 19 May 2021 03:18:43 PM UTC $ LANG=fr_FR.UTF-8 date -u mer. 19 mai 2021 15:19:02 UTC
Ici, le programme date
(1) est exécuté avec différentes
valeurs de paramètres régionaux :
Avec la première commande, « $LANG
» est
définie à la valeur des paramètres
linguistiques par défaut du système
« fr_FR.UTF-8
».
Avec la deuxième commande, « $LANG
» est
définie à la valeur des paramètres
linguistiques UTF-8 anglais des États-Unis
« en_US.UTF-8
».
Habituellement, la plupart des exécutions de commandes ne sont pas précédées de la définition de variables d’environnement. Pour les exemples ci-dessus, vous pouvez aussi exécuter :
$ LANG=fr_FR.UTF-8 $ date -u mer. 19 mai 2021 15:19:24 UTC
Astuce | |
---|---|
En remplissant un rapport de bogue, c’est une bonne idée de lancer et de
vérifier la commande avec les paramètres régionaux
« |
Pour des informations détaillées sur la configuration des paramètres linguistiques, consultez Section 8.1, « Les paramètres linguistiques (« locale ») ».
Lorsque vous entrez une commande dans l’interpréteur, il recherche la
commande dans la liste des répertoires contenus dans la variable
d’environnement « $PATH
». La valeur de la
variable d’environnement « $PATH
» est aussi
appelée « chemin de recherche de l’interpréteur de commandes ».
Dans une installation Debian par défaut, la variable d’environnement
« $PATH
» des comptes d’utilisateurs peut ne
pas inclure « /usr/sbin
» ni
« /usr/sbin
». Par exemple, la commande
ifconfig
doit être lancée avec son chemin complet
« /usr/sbin/ifconfig
». (La commande similaire
ip
est située dans
« /usr/bin
».)
Vous pouvez modifier la variable d’environnement
« $PATH
» de l’interpréteur de commandes Bash
par l’intermédiaire des
fichiers« ~/.bash_profile
» ou
« ~/.bashrc
».
De nombreuses commandes enregistrent la configuration spécifique à un
utilisateur dans son répertoire personnel et modifient leur comportement en
fonction de son contenu. Le répertoire personnel est identifié par la
variable d’environnement « $HOME
».
Tableau 1.20. Afficher les valeurs de la variable « $HOME
»
valeur de « $HOME » |
situation d’exécution d’un programme |
---|---|
/ |
programme lancé par le processus init (démon) |
/root |
programme lancé depuis l’interpréteur de commandes normal de l’administrateur (« root ») |
/home/utilisateur_normal |
programme lancé depuis l’interpréteur de commandes d’un utilisateur normal |
/home/utilisateur_normal |
programme lancé depuis le menu du bureau de l’interface graphique de l’utilisateur |
/home/utilisateur_normal |
programme lancé en tant qu’administrateur avec « sudo
programme » |
/root |
programme lancé en tant qu’administrateur avec « sudo -H
programme » |
Astuce | |
---|---|
L’interpréteur de commandes étend « |
Consultez Section 12.1.5, « Variables d’environnement de l’interpréteur de commandes » si
$HOME
n’est pas disponible pour votre programme.
Certaines commandes prennent des paramètres. Les paramètres qui commencent
par « -
» ou
« --
» sont appelés options et contrôlent le
comportement de la commande.
$ date Thu 20 May 2021 01:08:08 AM JST $ date -R Thu, 20 May 2021 01:08:12 +0900
Ici, le paramètre de la ligne de commandes
« -R
» modifie le comportement de la commande
date
(1) afin qu’elle donne en sortie une chaîne de date
conforme à la RFC2822.
Souvent, vous voudrez utiliser une commande sur un groupe de fichiers sans avoir à tous les entrer. C’est facilité par l’utilisation des motifs génériques d’expansion du nom de fichier de l’interpréteur de commandes (glob), (on les appelle parfois jokers).
Tableau 1.21. Motifs génériques d’expansion du nom de fichier de l’interpréteur de commandes
motif générique de l’interpréteur | description de la règle de correspondance |
---|---|
* |
nom de fichier (segment) ne commençant pas par
« . » |
.* |
nom de fichier (segment) commençant par « . » |
? |
exactement un caractère |
[…] |
exactement un caractère, chaque caractère étant l’un de ceux entre crochets |
[a-z] |
exactement un caractère, chaque caractère étant compris entre
« a » et « z » |
[^…] |
exactement un caractère devant être différent de tous les caractères entre
crochets (sauf « ^ ») |
Essayez, par exemple, ce qui suit :
$ mkdir junk; cd junk; touch 1.txt 2.txt 3.c 4.h .5.txt ..6.txt $ echo *.txt 1.txt 2.txt $ echo * 1.txt 2.txt 3.c 4.h $ echo *.[hc] 3.c 4.h $ echo .* . .. .5.txt ..6.txt $ echo .*[^.]* .5.txt ..6.txt $ echo [^1-3]* 4.h $ cd ..; rm -rf junk
Consultez glob
(7).
Note | |
---|---|
Contrairement à l’expansion normale du nom de fichier par l’interpréteur de
commandes, le motif « |
Note | |
---|---|
On peut modifier le comportement d’expansion de fichiers selon des motifs
génériques de BASH (« glob ») avec ses options « shopt »
incluses telles que « |
Toutes les commandes retournent comme valeur de retour leur état de fin
d’exécution (variable : « $?
»).
Tableau 1.22. Codes de retour de la commande
état de sortie de la commande | valeur numérique de retour | valeur logique de retour |
---|---|---|
succès | zéro, 0 | VRAI |
erreur | non-nulle, -1 | FAUX |
Essayez, par exemple, ce qui suit :
$ [ 1 = 1 ] ; echo $? 0 $ [ 1 = 2 ] ; echo $? 1
Note | |
---|---|
Vous remarquerez que, dans le contexte logique de l’interpréteur de commandes, un succès est traité comme la valeur logique VRAIE qui possède la valeur 0 (zéro). C’est parfois un peu contre-intuitif et il fallait le rappeler ici. |
Essayez de retenir les idiomes suivants de l’interpréteur de commandes entrés sur une seule ligne en tant qu’extrait d’une commande de l’interpréteur.
Tableau 1.23. Idiomes des commandes de l’interpréteur
idiome de commande | description |
---|---|
commande & |
exécuter la commande en arrière-plan dans le sous-shell |
commande1 | commande2 |
la sortie standard de commande1 est passée
(« pipe ») à l’entrée standard
de commande2 . Les deux commandes peuvent tourner
simultanément |
commande1 2>&1 | commande2 |
La sortie standard et la sortie d’erreur standard de
commande1 sont toutes les deux passées à l’entrée
standard de commande2 . Les deux commandes peuvent tourner
simultanément |
commande1 ; commande2 |
exécuter commande1 et commande2
séquentiellement |
commande1 && commande2 |
exécuter commande1 , en cas de succès, exécuter
commande2 séquentiellement (retourne un succès si à la fois
commande1 et
commande2 ont été réussies) |
commande1 || commande2 |
exécuter commande1 , en cas d’échec, exécuter
commande2 séquentiellement (retourne un succès si
commande1 ou
commande2 a été réussie) |
commande > toto |
rediriger la sortir standard de commande vers le fichier
toto (l’écraser) |
commande 2> toto |
rediriger la sortie d’erreur standard de la commande vers
le fichier toto (et l’écraser) |
commande >> toto |
rediriger la sortie standard de la commande vers le
fichier toto (ajouter à la fin du fichier) |
commande 2>> toto |
rediriger la sortie d’erreur standard de la commande vers
le fichier toto (ajouter à la fin du fichier) |
commande > toto 2>&1 |
rediriger à la fois la sortie standard et l’erreur standard de la
commande vers le fichier
« toto » |
commande < toto |
rediriger l’entrée standard de la commande vers le
fichier toto |
commande << délimiteur |
rediriger l’entrée standard de la commande vers les
lignes suivantes jusqu’à ce que le
« délimiteur » soit rencontré (ce document) |
command <<- délimiteur |
rediriger l’entrée standard de commande vers les lignes
qui suivent jusqu’à ce que le « délimiteur »
soit rencontré, les caractères de tabulation de tête sont supprimés des
lignes d’entrée) |
Le système Debian est un système multi-tâches. Les travaux s’exécutant en
arrière-plan permettent aux utilisateurs de faire tourner plusieurs
programmes depuis un seul interpréteur de commandes. La gestion des
processus en arrière-plan fait appel aux commandes internes de
l’interpréteur : jobs
, fg
,
bg
et kill
. Veuillez lire les sections
de bash(1) se trouvant sous « SIGNAUX » et « CONTRÔLE DES
TÂCHES » ainsi que builtins
(1).
Essayez, par exemple, ce qui suit :
$ </etc/motd pager
$ pager </etc/motd
$ pager /etc/motd
$ cat /etc/motd | pager
Bien que ces 4 exemples de redirections d’interpréteur de commande affichent
la même chose, le dernier exemple utilise la commande supplémentaire
cat
et gaspille des ressources sans raison.
L’interpréteur de commande vous permet d’ouvrir des fichiers en utilisant la
commande interne exec
avec un descripteur de fichier
arbitraire.
$ echo Hello >foo $ exec 3<foo 4>bar # open files $ cat <&3 >&4 # redirect stdin to 3, stdout to 4 $ exec 3<&- 4>&- # close files $ cat bar Hello
Les descripteurs de fichiers 0-2 sont prédéfinis.
Tableau 1.24. Descripteurs de fichier prédéfinis
périphérique | description | descripteur de fichier |
---|---|---|
stdin |
entrée standard | 0 |
stdout |
sortie standard | 1 |
stderr |
erreur standard | 2 |
Vous pouvez définir des alias pour les commandes fréquemment utilisées.
Essayez, par exemple, ce qui suit :
$ alias la='ls -la'
Maintenant, « la
» fonctionnera comme un
raccourci pour « ls -la
» qui donne la liste de
tous les fichier dans le format de liste long.
Vous pouvez afficher la liste de tous les alias existants par la commande
alias
(consultez bash
(1) sous
« COMMANDES INTERNES DU SHELL »).
$ alias ... alias la='ls -la'
Vous pouvez identifier le chemin exact ou identifier la commande par
type
(consultez bash
(1) sous
« COMMANDES INTERNES DU SHELL »).
Essayez, par exemple, ce qui suit :
$ type ls ls is hashed (/bin/ls) $ type la la is aliased to ls -la $ type echo echo is a shell builtin $ type file file is /usr/bin/file
Ici, ls
a été récemment recherché alors que
« file
» ne l’a pas été, donc
« ls
» est « hachée », c’est-à-dire
que l’interpréteur de commandes possède un enregistrement interne permettant
un accès rapide à l’emplacement de la commande
« ls
».
Astuce | |
---|---|
Consultez Section 9.3.6, « Commandes colorisées ». |
Dans un environnement de travail à la UNIX, le traitement du texte est effectué en passant le texte par des tubes au travers d’une chaîne d’outils standards de traitement de texte. C’est une autre innovation cruciale d’UNIX.
Il existe quelques outils standard de traitement de texte qui sont très souvent utilisés sur les systèmes « UNIX-like ».
Aucune expression rationnelle n’est utilisée :
cat
(1) concatène des fichiers et en affiche le contenu
complet ;
tac
(1) concatène des fichiers et les affiche en ordre
inverse ;
cut
(1) sélectionne des parties de lignes et les affiche
;
head
(1) affiche le début d’un fichier ;
tail
(1) affiche la fin d’un fichier ;
sort
(1) trie des lignes de texte ;
uniq
(1) supprime les lignes dupliquées d’un fichier trié
;
tr
(1) traduit ou supprime des caractères ;
diff
(1) compare des fichiers ligne par ligne.
Une expression rationnelle basique (BRE) est utilisée par défaut :
ed
(1) est un éditeur par ligne primitif ;
sed
(1) est un éditeur de flux ;
grep
(1) analyse la correspondance d’un texte avec des
motifs ;
vim
(1) est un éditeur en mode écran ;
emacs
(1) est un éditeur en mode écran (un peu étendu
BRE).
Une expression rationnelle étendue (ERE) est utilisée :
awk
(1) effectue un traitement simple du texte ;
egrep
(1) fait correspondre du texte avec des
motifs ;
tcl
(3tcl) peut effectuer tous les traitements possibles
du texte : consulter re_syntax
(3). Souvent utilisé
avec tk
(3tk) ;
perl
(1) peut effectuer tous les traitements imaginables
sur du texte. Consulter perlre
(1) ;
pcregrep
(1) du paquet pcregrep
fait la
correspondance de texte avec des motifs d’expressions rationnelles
compatibles avec Perl (PCRE) (« Perl Compatible Regular
Expressions ») ;
python
(1) avec le module re
peut faire
tous les traitements imaginables sur du texte. Consultez
« /usr/share/doc/python/html/index.html
».
Si vous n’êtes pas certain de ce que font exactement ces commandes veuillez
utiliser la commande « man
» pour vous en faire
une idée par vous-même.
Note | |
---|---|
L'ordre de tri et l’étendue de l'expression dépendent de la locale. Si vous souhaitez obtenir un comportement traditionnel pour une commande, utilisez la locale C ou C.UTF-8 au lieu des locales normales UTF-8 (voir Section 8.1, « Les paramètres linguistiques (« locale ») »). |
Note | |
---|---|
Les expressions rationnelles de Perl
( |
Les expressions rationnelles sont utilisées avec de nombreux outils de traitement du texte. Elles sont analogues aux motifs génériques « globs » du shell mais elles sont plus compliquées et plus puissantes.
L’expression rationnelle décrit le motif de correspondance, elle est constituée de caractères de texte et de métacaractères.
Un métacaractère est simplement un caractère ayant une signification particulière. Il en existe deux styles principaux, BRE et ERE suivant les outils de texte décrits ci-dessus.
Tableau 1.25. Métacaractères pour BRE et ERE
BRE | ERE | description de l’expression rationnelle |
---|---|---|
\ . [ ] ^ $ * |
\ . [ ] ^ $ * |
métacaractères courants |
\+ \? \( \) \{ \} \| |
métacaractères uniquement BRE,
déspécifiés par « \ » |
|
+ ? ( ) { } | |
métacaractères uniquement ERE, non
déspécifiés par « \ » |
|
c |
c |
correspond au non métacaractère
« c » |
\c |
\c |
correspond au caractère littéral « c » même si
« c » est un métacaractère en lui-même |
. |
. |
correspond à n’importe quel caractère y compris le saut de ligne |
^ |
^ |
position au début d’une chaîne de caractères |
$ |
$ |
position à la fin d’une chaîne de caractères |
\< |
\< |
position au début d’un mot |
\> |
\> |
position à la fin d’un mot |
[abc…] |
[abc…] |
correspond à n’importe quel caractère dans
« abc… » |
[^abc…] |
[^abc…] |
correspond à n’importe quel caractère sauf ceux se trouvant dans
« abc… » |
r* |
r* |
correspond à aucune ou plusieurs instances de l’expression rationnelle
identifiée par « r » |
r\+ |
r+ |
correspond à une ou plusieurs instances de l’expression rationnelle
identifiée par « r » |
r\? |
r? |
correspond à aucune ou une instance de l’expression rationnelle identifiée
par « r » |
r1\|r2 |
r1|r2 |
correspond à une instance de l’expression rationnelle identifiée par
« r1 » ou« r2 » |
\(r1\|r2\) |
(r1|r2) |
correspond à une des expressions rationnelles identifiées par
« r1 » ou « r2 »
et la traite comme une expression rationnelle entre
crochets |
Une expression rationnelle d’emacs
est BRE de base mais elle a été étendue afin de traiter
« +
» et « ?
»
comme des métacaractères comme dans les
ERE. Il n’est dont pas nécessaire de les
échapper avec « \
» dans les expressions
rationnelles d’emacs
.
grep
(1) peut être utilisé pour effectuer de la recherche
de texte en utilisant une expression rationnelle.
Essayez, par exemple, ce qui suit :
$ egrep 'GNU.*LICENSE|Yoyodyne' /usr/share/common-licenses/GPL GNU GENERAL PUBLIC LICENSE GNU GENERAL PUBLIC LICENSE Yoyodyne, Inc., hereby disclaims all copyright interest in the program
Astuce | |
---|---|
Consultez Section 9.3.6, « Commandes colorisées ». |
Pour l’expression de remplacement, certains caractères ont une signification particulière.
Tableau 1.26. Expressions de remplacement
expressions de remplacement | description du texte destiné à remplacer l’expression de replacement |
---|---|
& |
ce à quoi correspond l’expression rationnelle (utilisez
\& avec emacs ) |
\n |
ce à quoi la nième expression rationnelle entre crochets correspond (« n » étant un nombre) |
Pour chaîne de caractères Perl de remplacement, "$&" est utilisé au lieu de "&" et "$n" est utilisé au lieu de "\n".
Essayez, par exemple, ce qui suit :
$ echo zzz1abc2efg3hij4 | \ sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/=&=/' zzz=1abc2efg3hij4= $ echo zzz1abc2efg3hij4 | \ sed -E -e 's/(1[a-z]*)[0-9]*(.*)$/=&=/' zzz=1abc2efg3hij4= $ echo zzz1abc2efg3hij4 | \ perl -pe 's/(1[a-z]*)[0-9]*(.*)$/=$&=/' zzz=1abc2efg3hij4= $ echo zzz1abc2efg3hij4 | \ sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/\2===\1/' zzzefg3hij4===1abc $ echo zzz1abc2efg3hij4 | \ sed -E -e 's/(1[a-z]*)[0-9]*(.*)$/\2===\1/' zzzefg3hij4===1abc $ echo zzz1abc2efg3hij4 | \ perl -pe 's/(1[a-z]*)[0-9]*(.*)$/$2===$1/' zzzefg3hij4===1abc
Vous prêterez ici une attention particulière au style de l’expression rationnelle entre crochets et à la manière dont les chaînes qui correspondent sont utilisées dans le processus de remplacement du texte avec les différents outils.
Ces expressions rationnelles peuvent aussi être utilisées pour les déplacements du curseur et des actions de remplacement de texte dans certains éditeurs.
Un « back slash » (« \
») en fin de
ligne sur la ligne de commandes du shell déspécifie le saut de ligne en un
caractère d’espacement et permet de poursuivre la ligne de commandes de
l’interpréteur sur la ligne suivante.
Pour apprendre ces commandes, veuillez lire les pages de manuel correspondantes.
La commande ed
(1) peut remplacer toutes les instances de
« REGEX_SOURCE
» par
« TEXTE_DESTINATION
dans
« fichier
» :
$ ed file <<EOF ,s/FROM_REGEX/TO_TEXT/g w q EOF
La commande sed
(1) peut remplacer toutes les instances de
« REGEX_SOURCE
» par
« TEXTE_DESTINATION
dans
« fichier
» :
$ sed -i -e 's/FROM_REGEX/TO_TEXT/g' file
La commande vim
(1) peut remplacer toutes les instances de
« REGEX_SOURCE
» avec
« TEXTE_DESTINATION
» dans
« file
» en utilisant les commandes
« ex
(1) :
$ vim '+%s/FROM_REGEX/TO_TEXT/gc' '+update' '+q' file
Astuce | |
---|---|
L’indicateur « |
Plusieurs fichiers ( fichier1
»,
« fichier2
» et
« fichier3
») peuvent être traités de manière
similaire par une expression rationnelle avec vim
(1) ou
perl
(1) :
$ vim '+argdo %s/FROM_REGEX/TO_TEXT/gce|update' '+q' file1 file2 file3
Astuce | |
---|---|
L’indicateur « |
$ perl -i -p -e 's/FROM_REGEX/TO_TEXT/g;' file1 file2 file3
Dans l’exemple en perl(1) ci-dessus, le « -i
»
force l’édition directe de chaque fichier cible, et le
« -p
» induit une boucle implicite sur tous les
fichiers.
Astuce | |
---|---|
L’utilisation du paramètre « |
Note | |
---|---|
|
Considérons un fichier texte « DPL
» dans
lequel les noms de certains des responsables du projet Debian d’avant 2004
et leur date d’investiture sont présentés dans un format séparés par des
espaces :
Ian Murdock August 1993 Bruce Perens April 1996 Ian Jackson January 1998 Wichert Akkerman January 1999 Ben Collins April 2001 Bdale Garbee April 2002 Martin Michlmayr March 2003
Astuce | |
---|---|
Consultez « Bref historique de Debian » pour la dernière Debian leadership history. |
Awk est fréquemment utilisé pour extraire des données de ce type de fichiers.
Essayez, par exemple, ce qui suit :
$ awk '{ print $3 }' <DPL # month started August April January January April April March $ awk '($1=="Ian") { print }' <DPL # DPL called Ian Ian Murdock August 1993 Ian Jackson January 1998 $ awk '($2=="Perens") { print $3,$4 }' <DPL # When Perens started April 1996
Des interpréteurs de commandes comme Bash peuvent aussi être utilisés pour analyser ce genre de fichiers.
Essayez, par exemple, ce qui suit :
$ while read first last month year; do echo $month done <DPL ... same output as the first Awk example
Ici, la commande interne read
utilise les caractères de
« $IFS
» (séparateurs de champs internes) pour
scinder les lignes en mots.
Si vous changez « $IFS
» en
« :
», vous pouvez analyser facilement le
fichier « /etc/passwd
» :
$ oldIFS="$IFS" # save old value $ IFS=':' $ while read user password uid gid rest_of_line; do if [ "$user" = "bozo" ]; then echo "$user's ID is $uid" fi done < /etc/passwd bozo's ID is 1000 $ IFS="$oldIFS" # restore old value
(Si Awk est utilisé pour faire la même chose, utilisez
« FS=':'
» pour définir le séparateur de
champs.)
IFS est aussi utilisé par l’interpréteur de commandes pour scinder le résultat de l’expansion des paramètres, de la substitution de commande et de l’expansion arithmétique. Cela ne se produit pas pour les mots entre double ou simple apostrophes. La valeur de IFS par défaut est space, tab et newline combinés.
Faites attention en utilisant cette astuce IFS dans un shell. Des choses étranges peuvent survenir lorsque le shell interprète certaines parties du script comme son entrée.
$ IFS=":," # use ":" and "," as IFS $ echo IFS=$IFS, IFS="$IFS" # echo is a Bash builtin IFS= , IFS=:, $ date -R # just a command output Sat, 23 Aug 2003 08:30:15 +0200 $ echo $(date -R) # sub shell --> input to main shell Sat 23 Aug 2003 08 30 36 +0200 $ unset IFS # reset IFS to the default $ echo $(date -R) Sat, 23 Aug 2003 08:30:50 +0200
Les scripts suivants font des choses sympas avec les tubes.
Tableau 1.27. Liste de parties de scripts pour enchaîner (piping) les commandes
fragment de script (à entrer sur une seule ligne) | effet de la commande |
---|---|
find /usr -print |
rechercher tous les fichiers se trouvant sous
« /usr » |
seq 1 100 |
imprimer 1 à 100 |
| xargs -n 1 commande |
lancer la commande de manière répétitive en utilisant chaque élément provenant du tube (pipe) comme paramètre |
| xargs -n 1 echo |
scinder les éléments séparés par des espaces provenant du tube (pipe) en différentes lignes |
| xargs echo |
concaténer les lignes provenant du tube en une seule ligne |
| grep -e
motif_expression_rationnelle |
extraire du tube les lignes contenant motif_expression_rationnelle |
| grep -v -e
motif_expression_rationnelle |
extraire du tube les lignes ne contenant pas motif_expression_rationnelle |
| cut -d: -f3 - |
extraire du tube le troisième champ, séparé par
« : » (fichier passwd, etc.) |
| awk '{ print $3 }' |
extraire du tube le troisième champ séparé par des caractères d’espacement |
| awk -F'\t' '{ print $3 }' |
extraire du tube le troisième champ séparé par une tabulation |
| col -bx |
supprimer le retour arrière (backspace) et convertir les tabulations en espaces |
| expand - |
convertir les tabulations en espaces |
| sort| uniq |
trier et supprimer les doublons |
| tr 'A-Z' 'a-z' |
convertir de majuscules en minuscules |
| tr -d '\n' |
concaténer les lignes en une seule ligne |
| tr -d '\r' |
supprimer le retour à la ligne (CR) |
| sed 's/^/# /' |
ajouter « # » au début de chaque ligne |
| sed 's/\.ext//g' |
supprimer « .ext » |
| sed -n -e 2p |
afficher la seconde ligne |
| head -n 2 - |
afficher les deux premières lignes |
| tail -n 2 - |
afficher les deux dernières lignes |
Un script de l’interpréteur d’une seule ligne peut reboucler sur de nombreux
fichiers en utilisant find
(1) et
xargs
(1) afin d’effectuer des tâches assez
complexes. Consultez Section 10.1.5, « Idiomes pour la sélection de fichiers » et
Section 9.4.9, « Répéter une commande en bouclant entre des fichiers ».
Lorsque l’utilisation de l’interpréteur de commandes en mode interactif devient trop compliquée, pensez à écrire un script en shell (consultez Section 12.1, « Les scripts de l’interpréteur de commande »).
[1] Même l’ancien vim
peut démarrer dans le mode sécurisé
« nocompatible
» en démarrant avec l’option
« -N
».