Linux 04032024
Linux 04032024
Linux 04032024
1. Historique 1
Unix est l’un des systèmes d’exploitation le plus populaire au monde, en raison du
grand nombre d’architectures qu’il supporte. Il existe des versions d’Unix pour tous les types
d’ordinateurs, y compris les ordinateurs personnels.
- 1969, dans les Bell Laboratories (AT&T) sous l’impulsion de deux hommes,Ken
Thompson et Dennis Ritchie.
- 1973 une nouvelle version d’Unix est réécriteen grande partie en C Suite au
développement par Dennis Ritchie. Pour la première fois, un système d’exploitation est
écrit en langage non assembleur.
- 1974, la version 4 d’Unix est donnée à l’université de Berkeley en Californie, qui
commence alors son propre développement du système. C’est le début d’une
divergence entre les deux versions d’UnixAT&T et BSD(Berkeley Software
Distribution). Le succès d’Unix devient alors considérable dans les universités
américaines (seul système d’exploitation disponible en source, adopté par les
départements de computer science des universités)
- 1980 les premières licences de distribution d’Unix System V d’AT&T sont délivrées
aux constructeurs.
2. Vue générale d’Unix
Unix est un système multi-utilisateur, c’estàdire qu’il est possible de connecter sous
Unix plusieurs utilisateurs simultanément. Chacun a à sa disposition l’ensemble des
ressources du système, le partage étant effectué par découpage du temps et récupération des
temps morts d’entrée-sortie. Comme tout système multi-utilisateur, Unix comporte des
mécanismes d’identification et de protection permettant d’éviter toute interférence
(accidentelle ou malveillante) entre utilisateurs.
Unix est un système multi-tâche, c’estàdire qu’un utilisateur peut lancer plusieurs
tâches simultanément. Un processus (ou tâche) correspond à l’exécution d’un programme à un
instant donné, le programme étant en luimême quelque chose d’inerte rangé sur disque sous la
forme d’un fichier ordinaire exécutable.
Le système est écrit à 99 % en C, ce qui facilite l’appel au noyau par des applications
écrites en langage C. Le système de fichiers est un système hiérarchisé arborescent.
Le succès d’Unix tient à plusieurs facteurs :
- Son adoption par les universités américaines pour la formation des étudiants, ce qui a
sans aucun doute permis de former plus d’experts sur ce système que sur aucun autre.
- le besoin de standard exprimé par les utilisateurs, qu’ils soient sociétés de
développement de logiciel ou utilisateurs finals.les systèmes ouverts offrent des
perspectives d’évolution en douceur tout en maintenant une concurrence entre
fournisseurs.
- Unix est le seul système d’exploitation multi-utilisateur disponible à faible coût pour
une société développant un système à base de processeur standard.
3. Notion de système d’exploitation
Unix est un système d’exploitation, constitué du noyau Unix, d’un interpréteur de
commandes et d’un grand nombre d’utilitaires.
Le noyau assure la gestion des ressources physiques (processeur, mémoires,
périphériques) et logicielles (processus, fichiers…). L’interface entre les programmes des
utilisateurs et le noyau est définie par un ensemble de procédures et de fonctions, soit
directement au niveau du noyau, soit par l’intermédiaire de bibliothèques. Les éléments
caractéristiques sont les suivants :
- Le noyau est constitué d’un ensemble de procédures et de fonctions écritespour
l’essentiel en langage C
- La structure du noyau est monolithique et la notion de couche, contrairement à d’autres
systèmes.
Comme c’est le cas avec tout système d’exploitation, l’utilisateur d’Unix n’accède pas
directement au noyau mais à un interpréteur de commandes : le shell (le choix de ce terme
indique qu’Unix est caché à l’intérieur de cette coquille qui en est la seule partie visible par
l’utilisateur).
Une différence importante entre Unix et les autres systèmes d’exploitation est qu’il
existe plusieurs shells.L’interface utilisateur d’Unix est donc constituée :
- Un ensemble de programmes exécutables : les commandes.
- Shell, interpréteur de commandes mais aussi langage de commandes permettant
d’écrire des programmes d’une grande complexité. Ces programmes appelés scripts.
Parmi les utilitaires, on trouve :
- Différents langages de programmation : C++, Fortran , Java, Perl, TCL/TK, GTK;
- Des utilitaires de développement et maintenance de logiciels : make, assembleur,
éditeurs de lien.
- Des outils de bureautique : messagerie, traitement de textes.
- Des outils de mise au point de programmes.
- Des éditeurs de textes (sed, vi et vim, emacs, gnotepad).
- Un système de messagerie complet (courrier, conversation en temps réel…).
- Un analyseur syntaxique yacc, un générateur d’analyseur lexical lex.
- Un environnement graphique distribué : X11.
- Les outils pour le Web (Apache, Netscape...).
4. Linux
Linux, système Unix libre sur plate–forme PC, était au départ un projet de loisirs de
LinusTorvalds, étudiant finlandais. Le 5 octobre 1991, Linus Torvalds annonça la première
version officiellede Linux, la version 0.02.
Linux a continué à évoluer grâce à Linus Torvalds et aussi aux efforts de nombreux
volontaires répartis aux 4 coins du monde, reliés entre eux par le réseau Internet. Sous la
pression de ces co-développeurs, Linus Torvalds a accepté que tout le code soit sous licence
GPL (General Public Licence), créant ainsi un noyau Unix totalement libre. Grâce à ce réseau,
toute personne intéressée par le développement de ce système peut aider (porter des
programmes, écrire de la documentation, corriger des bogues). On compte actuellement plus
de 18 millions d’utilisateurs de Linux, et nombreux sont ceux qui contribuent d’une façon ou
d’une autre au développement de ce système et de son environnement.
À ce jour, Linux est un vrai système 32 bits, multitâches, multi-utilisateurs, réseau et
complet. Il s’installe sur la plupart des PC (avec ou sans autre système d’exploitation). Il
supporte une large gamme de programmes tels que X Window, TCP/IP, C/C ++GNU et
d’autres outils GNU, le courrier électronique, les news, ou des outils de bureautique. Une
machine sous Linux est modulaire et paramétrable à souhait. Elle peut donc servir de station
personnelle ou de serveur (Web, ftp…).
Linux est le plus souvent diffusé sous forme d’une distribution (noyau,sources des
utilitaires, commandes,applications)formant après installation un système complet. Par
conséquent, il est de plus en plus utilisé dans les sociétés commerciales comme station de
travail et serveur.Le succès de Linux tient à plusieurs facteurs :
- Le code source du système, ainsi que le noyau, les programmes utilisateurs, lesoutils de
développement sont librement distribuables (licence GPL, ou GNU),
- Linux est compatible avec un certain nombre de standards Unix au niveau ducode
source.
- Un très grand nombre d’applications Unix gratuites disponibles sur Internet
secompilent sous Linux sans aucune modification,
- Le système Linux a été développé pour les processeurs Intel et utilise toutes
lesfonctionnalités de ce processeur.
Chapitre 2 : Le processus de démarrage
Voici les différentes étapes de la mise en route d’un ordinateur :
1. Le BIOS (Basic Input/Output System): Le BIOS est un petit programme qui réside
en mémoire morte livré avec le PC et est spécifique au constructeur de la carte mère,
après la mise sous tension de l’ordinateur, effectue un inventaire et un test des
matériels présents. Il permet également, selon les versions, de les paramétrer
2. Le MBR (Master Boot Record) qui est situé en général sur le premier secteur du
disque.Ce MBR contient :
Un chargeur (loader) qui va à son tour charger un autre programme chargeur
(second stage loader) propre au système d’exploitation à charger ;
La description des tables de partitions du disque en cours ;
Une valeur numérique (magicnumber) parfois utilisée pour vérifier l’intégrité du
MBR lui-même.
Un disque dur est composé de plateaux reliés à un moteur central, avec des têtes de
lecture de part et d’autre de chacun des plateaux. Sur chaque plateau se trouvent des pistes
cylindriques découpées en secteurs. L’adressage d’un secteur est une référence au cylindre, à
la tête de lecture utilisée, à la piste, et enfin au secteur.
À l’installation, un disque dur n’est ni partitionné, ni formaté. Partitionner signifie définir sur
le disque un ou plusieurs espaces, ou partitions, et formater signifie préparer une partition à
recevoir des informations en utilisant un système de fichiers défini.
1. Les partitions : Une partition est définie par son type, son emplacement de début de
partition et enfin soit sa taille, soit son emplacement de fin de partition. Un
partitionnement est réversible (non physique).
Une seule partition est activée à la fois au niveau du BIOS : cette activation
indique où le BIOS doit aller chercher le noyau du système d’exploitation pour le
démarrage.Il existe trois sortes de partitions :
Les partitions principales : leur nombre est limité à quatre et elles supportent tous
types de systèmes de fichiers ;
La partition étendue : elle ne peut contenir que des partitions logiques et ne peut pas
recevoir de systèmes de fichiers. Elle ne peut exister que s’il existe une partition
principale ;
Les partitions logiques : elles sont contenues dans une partition étendue. Elles ne
sont pas limitées en nombre et acceptent tous types de systèmes de fichiers.
2. Organisation des partitions sous Linux : Les descripteurs de disques durs dans le
répertoire /dev commencent par hd pour les périphériques de type IDE ou par sd pour
les périphériques de type SCSI. Une lettre additionnelle est ajoutée au descripteur pour
désigner le périphérique.
Il y a généralement deux contrôleurs IDE en standard sur un PC, chaque
contrôleur supportant deux périphériques (disques, lecteur de cédérom/DVD, lecteur
ZIP...).
Primaire Secondaire
Maitre a c
Esclave b d
Le système de fichiers ext4 est une extension évolutive du système de fichiers ext3, il
peut prendre en charge des fichiers et des systèmes de fichiers jusqu'à 16 téraoctets. et un
nombre illimité de sous-répertoires (le système de fichiers ext3 n'en prend en charge que
jusqu'à 32 000)
Le système de fichiers ext3 est une simple extension du format standard ext2 de Linux :
il intègre un journal qui enregistre toutes les opérations effectuées sur le disque. Ceci permet
une récupération plus rapide et sûre du système en cas d'arrêt brutal de la machine.
L'instruction générale de création d’un système de fichiers est :
mkfs -t type de fichier partition
Il existe des commandes équivalentes pour chaque type de systèmes de fichiers, par exemple
mkfs.ext3, mkfs.vfat
Exemples de formatage de la partition hda1 avec création d'un système de fichiers de type
ext3 (les trois commandes sont équivalentes) :
mkfs.ext3 /dev/hda1
mkfs -t ext3 /dev/hda1
mke2fs -j /dev/hda1 # création du journal spécifique
Il est aussi très facile de transformer une partition ext2 en ext3 avec l'instruction tune2fs pour
créer le journal :
tune2fs -j /dev/hda1
Chapitre 4 : Système de fichiers
1. L’Arborescence
Le système de fichiers constitue un élément clé du système Linux. Le système de
fichiers est organisé en une structure arborescente dont les nœuds sont des répertoires et
les feuilles des fichiers ordinaires. On a trois types de fichiers :
Les fichiers ordinaires(regular files) : Ils servent à mémoriser les programmes et
les données des utilisateurs et du système.
Les fichiers répertoires ou répertoires (directories) : Chaque répertoire contient
la liste et la référence des fichiers placés sous son contrôle et la référence du
répertoire dont il dépend (répertoire père).
Les fichiers spéciaux : Ils désignent les périphériques, les tubes ou autres supports
de communication interprocessus. Les fichiers spéciaux associés aux périphériques
peuvent être caractères (terminaux) ou blocs (disque) ; les entrées/sorties (E/S) se
font soit caractère par caractère, soit bloc par bloc, un bloc étant composé de n
caractères (512, 1024 ou 2048).
2. La classification des fichiers
La syntaxe d’un nom de fichier n’est pas très stricte. Il est recommandé de limiter le
nom d’un fichier à 14 caractères au plus et de n’utiliser que les lettres majuscules ou
minuscules, les chiffres et quelques autres caractères (le point ., le tiret –, le souligné ). La
longueur minimum est de un caractère jusqu’à 255 caractères pour le nom du fichier.
Les caractères spéciaux suivants sont à proscrire absolument :
\ >< | $ ? & [ ] * ! " ‘ ( ) ` @ ~ <espace>
Les utilisateurs ayant des claviers français doivent éviter les caractères accentués.
Le point (.) joue un rôle particulier dans le nom d’un fichier. Les fichiers dont les noms
commencent par un point (.), comme .profile, sont des fichiers cachés Le point sert
également à suffixer les noms des fichiers. Le point sert également à suffixer les noms des
fichiers. Cette pratique est très recommandée, car elle facilite la gestion des fichiers:
1- Commandes générales
Les commandes Unix peuvent être exécutées depuis la ligne de commande. Les instructions
entrées sur la ligne de commande sont exécutées par un ‶interpréteur de commande
communément appelé ‶shell.
Un premier shell est lancé par le programme login après l'authentification sur le système.
L'interpréteur de commande possède un ‶prompt qui peut prendre plusieurs formes selon
les configurations du compte de l’utilisateur connecté. De façon générale, le prompt est de la
forme : utilisateur@nom_de_poste repertoire_courant$.
Par défaut, ce prompt se termine par le caractère $ pour un utilisateur normal et par un #
pour le super-utilisateur (root).
Les commandes sont à entrer à la suite de ce prompt qui indique qu'un interpréteur de
commande est prêt à les exécuter. Les commandes Unix sont de la forme générale:
nom-de-commande [ option(s) ] [ argument(s) ].
Le nom de la commande est toujours précisé. Une commande peut n’avoir ni option ni
argument : ls
Une commande peut être suivie par une ou plusieurs options : ls -a -l
Une commande peut posséder un ou plusieurs arguments : ls /dev/
Une commande peut être suivie d'une combinaison d’options et d’arguments : ls -al /dev/
une option est souvent représentée par une lettre précédée du caractère ‶-″. Plusieurs
options peuvent être séparées par des espaces mais peuvent être aussi rassemblées pour
former un mot précédé par le caractère ‶ - ″ : ls -l
ls -a -l
ls -al
un argument représente souvent le chemin dans l’arborescence du système de fichiers.
Les interpréteurs de commandes
De nombreux interpréteurs de commandes sont actuellement disponibles. Voici quelques
interpréteurs courants :
- /bin/sh : le ‶ bourne shell ″ ;
- /bin/bash : le ‶ bourne again shell ″ ;
- /bin/ksh : le ‶ korn shell ″ ;
- /bin/csh : le ‶ C shell ″ ;
- /bin/tcsh : le ‶ Tom's C shell ″.
Les interpréteurs disponibles sur un système donné sont listés dans le fichier /etc/shells.
2- Les commandes relatives aux répertoires et aux fichiers
pwd : pour afficher le chemin absolu du répertoire courant ;
cd : pour changer de répertoire, syntaxe : cd chemin
cd (sans option ni argument) permet de se déplacer vers le répertoire personnel de
l'utilisateur courant (home directory) ;
ls : pour lister le contenu d'un répertoire, syntaxe : ls chemin
- ls (sans option ni argument) affiche le contenu du répertoire courant,
- l'option -a affiche en plus les fichiers cachés dont les noms commencent par un point,
- l’option -l permet un affichage long (type de fichier, droit, propriété, date de
modification, taille du fichier, etc.),
- l'option -i affiche le numéro d'inode auquel est rattaché le fichier ;
mkdir : pour créer un nouveau répertoire, syntaxe : mkdir chemin
rmdir : pour supprimer un répertoire vide, syntaxe : rmdir chemin
touch : pour changer les informations de date et d'heure d'un fichier. Crée un fichier vide
lorsque le fichier passé en argument n’existe pas ;
cp : pour copier le contenu d’un fichier, syntaxe :
cp chemin_fichier_source chemin_fichier_destination
mv : pour déplacer ou renommer un fichier, syntaxe : mv ancien_chemin nouveau_chemin
rm : pour supprimer un fichier, syntaxe : rm chemin
- l’option -r permet de supprimer un répertoire,
- l’option -f permet de forcer la suppression sans demande de confirmation de la part de
l’utilisateur ;
ln : pour effectuer un lien sur un fichier. Un lien permet de faire référence à un fichier
donné par plusieurs noms différents. Il existe deux types de liens sous Unix :
- les liens matériels (hardlink) qui créent des noms différents pour désigner un même
espace sur le disque. Le fichier sera effectivement supprimé lorsque le dernier lien sera
détruit. Syntaxe : ln chemin fichier source chemin fichier destination
- les liens symboliques qui sont eux-mêmes de petits fichiers qui contiennent un chemin
d’accès vers un autre fichier : ils peuvent donc pointer vers un fichier qui n’existe pas.
La différence essentielle est qu’un lien symbolique peut pointer vers un fichier
appartenant à un autre système de fichiers. Syntaxe :
ln -s chemin_fichier_source chemin_fichier_destination
- le caractère ‶ ~ ″ représente le répertoire personnel de l'utilisateur courant : cd ~
cd ~/travail
3- Les pages de manuel
Pour chaque commande, une page de manuel explique à quoi elle sert, comment elle
fonctionne, et les différentes options disponibles. La commande man affiche ces pages de
manuel, syntaxe : man commande
man ls
La commande history affiche les commandes précédemment lancées par l'utilisateur
courant : history
Elle utilise le contenu du fichier .bash_history qui est mis à jour après chaque commande. Il
se trouve dans le répertoire personnel de l'utilisateur (~/.bash_history).
Le résultat de cette commande est la liste des précédentes commandes précédées d'un numéro.
Chaque commande peut être ré-exécutée en tapant !N, où N est le numéro de ligne dans le
résultat de la commande history. Pour ré-exécuter la dernière commande il suffit de taper !!
Chapitre 6 : Les fichiers et les répertoires
On peut utiliser la notation octale pour les droits avec la commande chmod, cela permet de
positionner plusieurs types de droits en une seule commande. Exemples :
- attribuer les droits rw------- à tous les fichiers : chmod 600 *
- attribuer les droits rw-r--r-- à tous les fichiers : chmod 644 *
- attribuer les droits rwxr-x--- à tous les fichiers : chmod 750 *
Lorsqu’on crée un nouveau fichier, par exemple avec la commande touch, ce fichier possède
certains droits par défaut. La commande umask permet de changer ces droits par défaut. Les
droits sont indiqués de façon ‶ inverse ″ en notation octale pour les droits de type r et w
seulement.
Pour créer des fichiers en mode rw-r--r-- : umask 022
Pour créer des fichiers en mode ------- : umask 666
Les droits spéciaux
Il existe trois droits spéciaux, SUID, SGID et Sticky Bit. Ils peuvent être positionnés par la
commande chmod (premier groupe de droits exprimés en octal) :
SUID (Set User ID) : lorsque le bit SUID est positionné, une commande se lancera avec
l'UID de son propriétaire, ce qui permet d'acquérir ses droits durant l'exécution de la
commande : par exemple la commande /usr/bin/passwd permet d’acquérir les droits de
root pour modifier le fichier /etc/shadow.
Le bit SUID est positionné par l’option s de la commande chmod, ou bien en
positionnant à ‶ 1 ″ le premier bit du groupe des droits spéciaux (d’où la valeur 4 de
l’exemple suivant) :
chmod 4755 /bin/cat
chmod u+s /bin/grep
SGID (Set Group Id) : ce droit fonctionne de la même façon que le droit SUID en ce qui
concerne les exécutables mais en donnant le droit du groupe. Le SGID peut aussi être
attribué à un répertoire : dans ce cas tout fichier créé dans un répertoire portant le SGID
aura comme groupe propriétaire le groupe du répertoire. Ce bit est positionné par l'option
s de la commande chmod, ou bien en positionnant à ‶ 1 ″ le deuxième bit du groupe des
droits spéciaux (d’où la valeur ‶ 2 ″ de l’exemple suivant) :
chmod 2755 //home/xstra
chmod g+s /home/xstra
Sticky Bit : si le Sticky Bit est positionné sur un répertoire, seul le propriétaire d'un
fichier contenu dans ce répertoire pourra le renommer ou le supprimer, mais tous les
utilisateurs pourront y avoir accès. Le Sticky Bit est par exemple toujours positionné sur
les répertoires /tmp ou /var/mail/.
Ce bit est positionné par l'option t de la commande chmod, ou bien en positionnant à 1
le troisième bit du groupe des droits spéciaux (d’où la valeur 1 de l’exemple) :
chmod 1666 /home/xstra
chmod o+t /home/xstra
Historiquement, le Sticky Bit positionné sur un fichier indiquait au système de le
maintenir en mémoire à la suite d’un premier chargement pour des questions
d’efficacité.
2- Modifier le propriétaire et le groupe sur les fichiers et les répertoires
Linux permet de spécifier le propriétaire d’un fichier ou d’un répertoire par la
commande: chown.
chown le_propriétaire /home/xstra
Linux permet de spécifier le groupe d’un fichier ou d’un répertoire par la commande : chgrp.
chgrp le_groupe /home/xstra
3- Recherche de fichiers
La recherche dans l'arborescence d’un système de fichiers peut se faire grâce à des utilitaires
tel que find, locate, which, whereis, whatis et apropos.
find : La commande find est la plus ancienne commande de recherche de Unix, elle
n'utilise pas de base indexée et son exécution peut donc parfois être longue car elle est
très complète par ses critères de recherche.
La syntaxe générale est la suivante : find <chemin> <critères>.
Les principales options de recherche sont les suivantes :
- -name : par nom de fichiers ;
- -type : par type du fichier (f : fichier, d : répertoire ...) ;
- -user : utilistateur auquel appartiennent les fichiers recherchés ;
- -atime : par date de dernier accès aux fichiers ;
- -mtime : par date de dernière modification du contenu des fichiers ;
- -ctime : par date de dernier changement des fichiers : contenu mais aussi droits
d’accès, propriétaire....
Pour rechercher le fichier Xinitrc dans tout le système (à partir de la racine):
find / -name Xinitrc
Pour rechercher les fichiers de l'utilisateur 666 dans tout le système (à partir de la racine) :
find / -user 666
locate et slocate: La commande locate cherche tous les types de fichiers dans
l'intégralité des systèmes de fichiers comme find, mais elle utilise une base de données.
La base de données est automatiquement mise à jour par une commande de type cron,
généralement la nuit, lorsque la machine est peu sollicitée. On peut mettre à jour
manuellement la base de données en utilisant la commande updatedb (on doit être root
pour lancer cette commande). Les options de fonctionnement de la commande updatedb
sont décrites dans le fichier /etc/updatedb.conf. On peut y décrire la racine de
l’arborescence à indexer, les fichiers à exclure, l’emplacement de la base de données…
La recherche est donc très rapide et peut se faire à partir de fragments du nom :
locate monfichier_perdu /home/xstra/monfichier_perdu
La commande slocate est la version sécurisée de locate. Elle fonctionne de la même
manière, mais stocke également les droits d’accès associés aux fichiers ainsi que les
informations de propriété (propriétaire et groupe) du fichier de façon à ne pas afficher
dans le résultat de la recherche les fichiers auxquels l’utilisateur n’aurait pas accès.
which: La commande which est utilisée pour trouver l'emplacement d'une commande :
elle effectue sa recherche par rapport au contenu de la variable PATH, et retourne le
chemin du premier fichier correspondant.
which bash /bin/bash
Elle est très commode pour vérifier quelle version de la commande s’exécute réellement
lorsqu’on l’appelle par son nom relatif.
whereis: La commande whereis fonctionne de façon similaire à which, mais elle peut
aussi chercher dans les pages de manuel (man) et les codes sources.
bash: /bin/bash /usr/share/man/man1/bash.1.bz2
whatis: La commande whatis cherche des commandes dans l'intégralité des systèmes
de fichiers comme which, mais elle utilise une base de données qui contient une courte
description ainsi que des mots clés.
La base de données est créée en utilisant la commande makewhatis (on doit être root
pour lancer cette commande).
La recherche est donc plus rapide et peut se faire à partir du nom ou d'un mot clé. La
réponse contient une description rapide de la commande whatis who
who – show who is logged on
f) apropos
La commande apropos utilise la même base de données que whatis, mais donne plus
d'informations :
apropos who
w – show who is logged on and what they are doing who – show who is logged on
whoami – print effective userid
B. Les filtres
Les filtres sont des commandes qui, à partir d'un flux d'entrées donné, effectuent des
traitements avant d'afficher un résultat en sortie. On les nomme également commandes de
traitement de flux.
La commande cat affiche seulement le contenu du fichier /etc/passwd sans altérer le fichier
original : cat /etc/passwd
La commande nl affiche en sortie les lignes du fichier /etc/passwd en les numérotant sans
altérer le fichier original : nl /etc/passwd
Voici une liste des filtres les plus courants :
- cat : pour concaténer le contenu d’un fichier et l’afficher ensuite sur la sortie standard,
qui est par défaut l’écran. La commande cat sans argument (nom de fichier) attend les
suites de caractères tapés sur l’entrée standard (le clavier) : cat /etc/passwd
- cut : pour n’afficher que certaines colonnes (champs) d’un fichier donné. Cette
commande utilise alors comme option le séparateur de champs et le numéro du champ à
afficher pour chaque ligne. S’il n'est pas spécifié, le séparateur de champs par défaut est
le caractère de tabulation.
La commande ci-dessous permet d’afficher les noms d’utilisateurs du système. On utilise
comme séparateur de colonnes le caractère « : » et on sélectionne la première colonne du
fichier /etc/password.
cut -d : -f1 /etc/passwd
- expand : pour convertir les tabulations d’un fichier en espaces. Le processus inverse,
conversion des espaces en tabulations, peut être effectué avec la commande unexpand ;
- fmt : pour formater les paragraphes dans un fichier ;
- grep : pour afficher les lignes contenant une occurrence de caractères donnée, syntaxe :
grep CHAINE chemin
Pour afficher toutes les lignes contenant la chaîne de caractères « false » :
grep false /etc/passwd
CHAINE peut être une expression régulière. Pour afficher toutes les lignes qui
commencent par la chaîne « root » : grep ^root /etc/passwd
L'option -v permet de n’afficher que les lignes NE contenant PAS l'expression régulière
mentionnée. Pour afficher les lignes ne commençant pas par la chaîne « root » :
grep -v ^root /etc/passwd
- head : pour afficher les premières lignes d'un fichier, syntaxe : head -N chemin
Sans option, head affiche les 10 premières lignes d'un fichier.
Pour afficher les quatre premières lignes du fichier /etc/passwd : head -4 /etc/passwd
- join : pour effectuer des jointures des lignes de deux fichiers différents dans un même
champ ;
- nl : affiche en sortie les lignes d'un fichier précédées de leurs numéros respectifs ;
- od : formate un fichier en octal et en autres formats ;
- paste : pour fusionner deux fichiers différents en prenant chaque ligne de chaque fichier
pour former une nouvelle ligne ;
- pr : pour formater de manière simple un fichier et le préparer pour une impression,
syntaxe : pr [option(s)] chemin
option –N : affiche le texte en plusieurs colonnes. N définit le nombre de lignes,
option –wN : le N derrière -w (width) indique le nombre de caractères par ligne(par
défaut 72)
option -lN : le N derrière -l (length) définit le nombre de lignes par page(par défaut 66)
option -hTexte : Texte doit remplacer le nom du fichier dans l'en-tête de chaque page,
option -oN : le N derrière -o (offset) définit le nombre de caractères de retrait à gauche
option -n : numérote les lignes.
- sed : utilitaire de traitement de données très puissant, capable d'utiliser les expressions
régulières. Pour substituer toute « chaîne1 » dans le fichier « chemin1 » avec «chaine2»
et envoyer le résultat dans le fichier « chemin2 » :
sed 's/chaine1/chaine2/g' chemin1 > chemin2
- regexp : permet de tester une expression régulière en lui fournissant une chaîne de test.
Cela permet de vérifier les expressions régulières employées avec les commandes
classiques ls, sed, awk, etc.
- sort : trie le contenu d'un fichier par ligne :
option -n pour effectuer un tri numérique,
option -r pour effectuer un tri décroissant ;
- split : pour découper un fichier en plusieurs. On peut spécifier une taille de fichiers en
option. Par exemple, la commande pour créer les fichiers petitfichieraa, petitfichierab…
d’une taille maximum de 1,4 Mo (taille d’une disquette) est :
split -b 1.4m /home/maitre/grosfichier petitfichier
- tac :inverse de la commande cat, affiche le contenu du fichier dans l’ordre inverse des
lignes.
- tail : pour afficher les dernières lignes d'un fichier, syntaxe : tail -N chemin Sans
option, tail affiche les 10 dernières lignes d'un fichier. Pour afficher les 4 dernières
lignes du fichier /etc/passwd : tail -4 /etc/passwd
- tr : pour effectuer des conversions de caractères, par exemple minuscule/majuscule,
retour chariot/passage à la ligne ...);
- uniq : affiche les lignes sans doublons ;
- wc : affichent des statistiques sur un fichier, nombre de caractères, nombre de mots et
nombre de lignes.
-b : affiche seulement le nombre de caractères ;
-w : affiche seulement le nombre de mots ;
-l : affiche seulement le nombre de lignes.
Utilisation de l’éditeur « vi »
L’éditeur vi se trouve systématiquement sur toutes les versions de Linux et est surtout utile
lorsque l’on intervient sur une machine à distance. Il fonctionne en deux modes différents, le
mode édition et le mode commande. On bascule de l’un à l’autre par la commande esc.
Pour ouvrir un fichier avec l’éditeur vi : vi mon_fichier
Pour se déplacer dans le texte :
- l : vers la droite ;
- h : vers la gauche ;
- j : vers le haut ;
- k : vers le bas ;
- L : se déplace sur la dernière ligne de la page courante ;
- H : se déplace sur la première ligne de la page courante ;
- nG : se déplace sur la ligne « n » du fichier courant.
Pour ajouter ou supprimer du texte :
- i : ajoute le texte à partir de la position du curseur ;
- A : ajoute le texte à partir de la fin de la ligne ;
- O : crée une nouvelle ligne ;
- R : remplace le texte ;
- r : remplace le caractère courant ;
- dd : supprime la ligne courante, 4dd supprime 4 lignes à partir de la ligne courante ;
- x : supprime le caractère courant, 5x supprime 5 caractères.
Pour rechercher du texte : /texte_cherché Pour substituer du texte :
- :ligne_début,ligne_fin/chaine1/chaine2/g: substitue la chaine2 à la chaine1 entre les
lignes ligne_début et ligne_fin sans demande de confirmation ;
- :ligne_début,ligne_fin/chaine1/chaine2/c: substitue la chaine2 à la chaine1 entre les
lignes ligne_début et ligne_fin avec demande de confirmation.
Pour annuler la dernière commande : u. Pour sauvegarder le fichier :
- :wq (ou ZZ) : sauvegarde le fichier et quitte ;
- :w son_fichier : sauvegarde dans le fichier son_fichier ;
- :q! : quitte sans sauvegarde ;
- :w! : force la sauvegarde lorsque le fichier est en lecture seule ;
- :e nouveau_fichier : sauvegarde le fichier courant et édite le fichier nouveau_fichier ;
- :e!nouveau_fichier : édite le fichier nouveau_fichier sans sauvegarder le fichier courant.
D. Tubes et les redirections
a) Redirection
Linux fonctionne avec trois types de flux de données :
- L’entrée standard identifiée par le descripteur 0, par exemple le clavier ;
- La sortie standard identifiée par le descripteur 1, par exemple l’écran ou l’interpréteur de
commande ;
- La sortie d’erreur standard identifiée par le descripteur 2, par exemple l’écran :
maitre@maestro maitre$echo 'ceci est un message de test'
ceci est un message de test
maitre@maestro maitre$
La commande echo permet d'effectuer un simple affichage sur la sortie standard.
Le mécanisme de redirection permet de changer la sortie, l’entrée ou la sortie d'erreur d'une
commande donnée. Le caractère « > » est utilisé pour changer la sortie standard.
Syntaxe : commande > chemin.
maitre@maestro maitre$echo 'message test' > /home/maitre/fichier
maitre@maestro maitre$cat /home/maitre/fichier
message test
maitre@maestro maitre$
Si le fichier de redirection n’existe pas encore, « > » permet de le créer. S’il existe, son
contenu sera écrasé par la sortie de la dernière commande.
Les caractères « >> » permettent soit de créer un fichier inexistant soit de rajouter la sortie
d'une commande au contenu d’un fichier existant (sans écrasement).
La redirection fonctionne dans les deux sens, le caractère « < » permet de spécifier une autre
entrée que l’entrée standard, syntaxe :
commande < chemin
Les caractères « << » permettent de lire le fichier en entrée jusqu’à ce que la commande
rencontre une certaine chaîne de caractères.
Dans l’exemple qui suit, les caractères saisis sur l’entrée standard seront pris en compte
jusqu’à ce que la commande cat rencontre la chaîne « FIN » : cat << FIN
Enfin, pour rediriger la sortie d’erreur vers un fichier, on utilise le descripteur 2 de la sortie
standard : cat /etc/passwd 2> fichier_erreur
Les caractères « >& » permettent de rediriger la sortie erreur et la sortie standard vers un
fichier : tail /etc/passwd > fichier_sortie 2>&1 Ou tail /etc/passwd >& fichier_sortie
Cette commande copie les 10 dernières lignes du fichier /etc/passwd dans le fichier
fichier_sortie et y redirige également les éventuels messages d’erreur.
b) Les tubes
Le mécanisme de tube (pipe) permet de faire en sorte que la sortie d’une commande devienne
l’entrée d’une autre. Les tubes utilisent le caractère « | », syntaxe : commande | commande.
sort /etc/passwd | head -6
Cette commande affiche les 6 premières lignes du fichier /etc/passwd une fois ce fichier trié
par ordre alphabétique croissant.
Tubes et redirections peuvent êtres enchaînés indéfiniment sur une ligne de commande selon
les résultats que l’on veut obtenir.
c) La commande tee: La commande tee duplique le flux de données en sortie : elle copie la
sortie dans un fichier (simple redirection) et, en même temps, affiche le résultat sur la sortie
standard, et permet donc de le renvoyer à une autre commande. La commande de l’exemple
ci-dessous affiche à l’écran les 6 premières lignes du fichier /etc/passwd et en même temps,
les redirige dans le fichier le_fichier : ls -l /etc | tee le_fichier | wc -l
d) La commande xargs: La commande xargs permet de passer en argument d’une commande
les flux reçus en entrée. La commande de l’exemple ci-dessous prend la sortie de la
commande cat le_fichier comme argument de la commande ls.
cat le_fichier | xargs ls
e) La commande exec : La commande exec redirige dans un fichier l’entrée et la sortie
standard (stdin et stdout). Elle est généralement utilisée dans un script shell et permet par
exemple de rediriger les sorties des commandes dans des fichiers différents au cours de
l’exécution d’un script : exec < le_fichier
E. Les caractères spéciaux
Certains caractères ont une signification particulière sur une ligne de commande :
- ; : permet d'enchaîner plusieurs commandes sur une même ligne. Les commandes séparées
par un « ; » sont exécutées séquentiellement, l'une après l'autre ;
- & : placé en fin de commande, permet de lancer cette commande en tâche de fond
(background) ;
- && : placé entre deux commandes, permet d'exécuter la deuxième commande si et
seulement si la première s’est exécutée sans erreur :
commande_1 && commande_2
- || : placé entre deux commandes, permet d’exécuter la deuxième commande si et seulement
si la première a renvoyé une erreur : commande_1 || commande_2
- &> : redirige dans un fichier la sortie d’une commande, ainsi que les erreurs éventuelles :
commande &> le_fichier
- $ : permet d’accéder au contenu d'une variable ;
- \ : placé avant un caractère spécial, permet que celui-ci soit interprété comme un simple
caractère.
- " (guillemets) : placé de part et d’autre d’une chaîne de caractères, permet que tous les
caractères spéciaux que celle-ci contient soient ignorés, à l’exception de « $ », « \ » et «`»:
Un='a trop de travail'
Deux="Nicolas $Un"
echo $Deux
-> Nicolas a trop de travail
- ' (apostrophe) : placée de part et d’autres d’une chaîne de caractères, permet que tous les
caractères spéciaux que celle-ci contient soient ignorés.
Un='a très faim'
Deux='Nicolas $Un'
echo $Deux
-> Nicolas $Un
- ` (apostrophe culbutée) placée de part et d’autre d’une commande, force l’exécution de
cette commande sur la ligne de commande elle même :
Un=`pwd`
echo $Un
/home/nicolas/travail/
- [[ ]] ou { } permettent d'effectuer une opération simple sur la ligne de commande
(addition, soustraction, multiplication, division entière). Les caractères suivants sont
utilisés pour remplacer un ou plusieurs caractères (wildcards) :
* : pour remplacer aucun, un ou plusieurs caractères ;
? : pour remplacer un et un seul caractère ;
[a-z] : pour remplacer un caractère ayant l’une des valeurs indiquées dans
l’intervalle « a-z » ;
[^a-z] : pour remplacer un caractère différent de toutes les valeurs indiquée dans
l’intervalle « a-z ».
Les variables et les variables d'environnement
Les interpréteurs de commande Linux distinguent deux types de variables : les variables
simples et les variables d'environnement. Les variables d'environnement ont la particularité
d'être connues de toutes les commandes lancées depuis l'interpréteur de commande courant.
L’affectation de variables se fait comme suit : variable="valeur".
variab="abcdef"
A noter qu’avec bash, il ne doit pas y avoir d’espace avant et après le signe « = ».
L’accès au contenu s’effectue en ajoutant le caractère $ au début du nom de la variable ou par
l'expression ${nom-de-la-variable} :
maitre@maestro maitre$echo $variab
abcdef
maitre@maestro maitre$echo ${variab}
abcdef
maitre@maestro maitre$
Pour la transformer une variable simple en variable d’environnement, on utilise la commande
export : export variab="abcdef"
La commande env seule, sans option ni argument, permet d'afficher toutes les variables
d'environnement définies.
La commande set affiche la liste complète des variables définies (variables simples ou
variables d'environnement).
La commande unset permet de détruire une variable : unset variable
Voici certaines variables spéciales de bash :
- $$ : le numéro de processus (PID) de l’interpréteur de commande ;
- $! : le numéro de processus (PID) de la dernière commande lancée en tâche de fond
(c'est-à-dire avec l’opérateur « & ») ;
- $? : la valeur retournée par la dernière commande ;
- $ : la liste des options avec lesquelles l’interpréteur de commande a été appelé.
Dans le cadre d’une commande lancée à partir d'un fichier script :
- $# : désigne le nombre de paramètres accompagnant l’appel du script ;
- $@ et $* : désignent l’ensemble des paramètres ;
- $1, ..., $9, ${10}, ${11}, ... : désignent la valeur de chaque paramètre ;
- $0 : désigne le nom (le chemin) du script.
Plusieurs variables sont définies au démarrage de l’interpréteur de commandes. La
définition de ces variables peut se trouver dans les fichiers lus par l’interpréteur au démarrage
comme le fichier /etc/profile pour tous les utilisateurs du système ou dans les fichiers
personnels de l'utilisateur ~/.profile, ~/.bash_profile, etc