La Console

Transcription

La Console
La Console
Mémoire sur la pratique du shell Bash sous Gnu Linux
1. La Console
2. Les Services
3. Le Networking
Par Patrick Hautrive 2010
http://hautrive.free.fr
La Console !© par Patrick Hautrive !;~) 2010
1
Table des matières
UNIX......................3
LINUX....................6
SOURCE................8
LICENCE...............9
SYSTEM..............13
DESKTOP............23
INFORMATION. .25
SOCIETY.............31
GNUGPL..............37
STRATEGY.........40
INSTALL.............43
PARTITION.........47
LOADER..............55
BOOT...................57
LILO.....................61
GRUB...................64
INITRD................69
INITTAB..............70
SERVICES...........74
WRAPPERTCP....77
LOGIN..................83
SHELL..................87
VARIABLE..........98
COMMAND.......102
LANGUAGE......109
PROCESS...........114
TERMINAL.......125
HIERARCHY.....132
PERMISSION....143
PASSWORD......149
La Console !© par Patrick Hautrive !;~) 2010
2
ROOT.................159
PACKAGE.........168
SCRIPTS............170
EXEMPLES.......180
TOOLS...............205
FILES.................206
CARACTERS....207
DEFINITIONS...208
FORMULES.......209
UNIX
La chronologie des systèmes
1968 MULTIX
Projet d'un système d'exploitation multitâche (AT&T, MIT, General Electrics)
Développement sur DEC PDP7 par Brian Kernighan et Ken Thomsom
Programme d'un jeu “Space Travel”
1970 UNICS
1972 Unix™
Time Sharing (Bell Laboratory chez AT&T)
1977 BSD4.4
Berkeley university sous licence libre BSD (Berkeley Software Development)
1981 UNICES
Conception du langage C et réécriture du code par Denis Ritchie
TCP­IP (Réseau Arpanet du DARPA)
FreeBSD (Multiplateforme)
NetBSD (Optimisation)
OpenBSD (Sécurisation)
Fermeture et hétérogénéisation du code par l'industrie informatique
SYSTEM V
1984 Gnu GPL
(AT&T)
SOLARIS (Sun Microsystems)
AIX (IBM)
ULTRIX (Digital Equipment Corporation)
HP­UX (Hewlet Packard)
TRUE 64 (Compaq)
IRIX (Silicon Graphic Inc.)
VENIX (Venture)
XENIX (Microsoft et Santa Cruz Operation)
Protection du code sous licence libre par Richard M. Stallman du MIT
Création de la FSF (Free Software Foundation) et du projet Gnu Hurd
1987 MINIX
1989 Internet
Mini système monolithique pour l'apprentissage par Andrew Tannenbaum
Développement de l'hypertexte (HTML) par Tim Berners­Lee du CERN
Ouverture du réseau et du protocole d'échange de données (World Wide Web)
1991 Linux
1999 Mac OS X
Lancement du projet communautaire sur Internet par Linux Torwalds
Réappropriation du code (Noyau BSD Mach patché) par Apple
http://en.wikipedia.org/wiki/Linux
La Console !© par Patrick Hautrive !;~) 2010
3
Le contexte historique
La société AT&T distribua “gracieusement” son système UNIX™ (sans royalties exorbitantes, ni contraintes pénalisantes) auprès des universités américaines afin d'en favoriser la mise au point, d'encourager les développements et de susciter les vocations, mais aussi pour se prémunir contre la loi Anti Trust (monopole des télécommunications et de l'informatique).
Les universités américaines furent dès le départ associées au développement d'un système d'exploitation multitâches, et contribuèrent à développer de nombreux outils et fonctionnalités. L'université de Berkeley en Californie intégra la pile TCP­IP au noyau, et l'université du MIT développa le serveur graphique X.
La société SUN Microsystem finança le développement de la suite bureautique Open Office. Le CERN (Centre Européen de Recherche Nucléaire) développa l'internet pour l'échange de données. De nombreux étudiants, chercheurs universitaires et professionnels poursuivent toujours leurs contributions pour un monde numérique libre.
La société AT&T et l'université de Berkeley furent longtemps en procès pour la propriété du code BSD. La société AT&T est propriétaire du sigle “UNIX™” et le SYSTEM V (SVR4) est standardisé. Les systèmes “unices” propriétaires proviennent de la même souche commune et libre (BSD 4.4). Chaque système divergea ensuite jusqu'à l'incompatibilité, devenant de plus en plus dépendant du matériel pour lequel il était conçu et des utilitaires propriétaires qui permettaient de s'en servir. L'harmonisation des “unices” est orchestrée par le Consortium OSF (Open Software Foundation).
Richard M. Stallman est en 1971 ingénieur système au laboratoire d'intelligence artificielle du MIT, et il a besoin du code source du pilote d'une imprimante laser Xerox installée dans une autre pièce afin de programmer une alerte en cas de panne. Pour des raisons de licence restreinte, ce code source lui est refusé, et il n'accepte pas cette situation...
Le système de fichier des “unix like” est une arborescence hiérarchique en forme d'arbre inversé avec une seule et unique racine (root), mais où peuvent se greffer d'autres arborescences, d'autres systèmes de fichiers, locaux ou distants, et correspondant à de nombreux types de support de stockage.
Le super utilisateur ou l'administrateur du système (l'utilisateur “root”) possède tous les droits et tous les privilèges sur tout le système. L'utilisateur “root” est responsable du système, de la maintenance, de la disponibilité, de la performance et de son évolution.
La Console !© par Patrick Hautrive !;~) 2010
4
Le multi tâche
Gnu Linux est un système multi tâches (multi threading), c'est­à­dire qu'il est conçu pour faire tourner indépendamment plusieurs programmes en même temps. C'est également un système multi utilisateurs, c'est­à­dire qu'il peut être utilisé simultanément par plusieurs personnes en même temps. L'utilisation du processeur ou CPU (Central Processing Unit) est gérée par un ordonnanceur (sheduler). Le temps processeur, est divisé en petites unités réparties équitablement entre chaque programme (time sharing). La rapidité de calcul donne l'illusion de la simultanéité à l'échelle humaine.
Un système mono tâche n'exécute qu'un seul programme à la fois. Un système multi tâche collaboratif peut exécuter plusieurs programmes en même temps, mais c'est chaque programme qui décide quand il “rend la main” aux autres. Un système multi tâche préemptif répartie égalitairement le temps processeur alloué à chaque programme.
La topologie des systèmes d'exploitation
mono tâches
multi tâches collaboratifs
multi tâches préemptifs
MSDOS
Windows™ 3.x, Macintosh™ OS 7 (multifinder)
Unix™
*BSD
Windows™ 95 (couche 32 bits)
Windows™ NT (mémoire non protégée)
Macintosh™ OSX
Gnu Linux
La Console !© par Patrick Hautrive !;~) 2010
5
LINUX
La philosophie Unix ™
Le système Gnu Linux est un “unix like” et sa conception est conforme aux critères retenus par les fondateurs d'Unix™ et il répond au principe de séparation des traitements et des données de Von Neumann.
Dans un système “unice”, tout est fichier (stock or flow), tous les processus sont traités de façon égalitaire par le multi tâche (sheduler), tous les processus sont indépendants les uns des autres, mais ils peuvent communiquer entre eux (I/O), toutes les applications sont conçues dans le mode clients et serveurs, tous les programmes sont écrits dans un langage portable et toutes les spécifications des protocoles sont claires, disponibles et universelles (tcp­ip). Tous les utilitaires remplissent une seule fonction, mais sont compatibles entre eux, ce qui permet l'enchainement complexe des commandes, avec la circulation et la redirection des netrées et des sorties (pipeline). Les systèmes “unices” sont des systèmes d'exploitation multi tâches et multi utilisateurs, et sont conçus pour distinguer nettement les espaces mémoires du noyau (kernel zone) et les espaces des utilisateurs (user zone). Les systèmes «unices» intégrent au niveau des fichiers la gestion des droits d'accès.
Les principes et les valeurs prônés par les acteurs de la communauté des Logiciels Libres sont la liberté et la responsabilité, la simplicité et l'efficacité. Issu du courant de la cybernétique après la seconde guerre mondiale, le traitement automatique de l'information repose sur la numérisation (codage en unité binaire, un ou zéro) et sur la systématisation des procédures (à la vitesse de la lumière). La conception des systèmes “unices” était au départ imprégnée de cette philosophie, avant que les appétits commerciaux n'altèrent la stratégie d'ouverture.
Le monde numérique est une nouvelle “Terra Incognita” et les acteurs de “la scène du libre” ont conscience de ces enjeux, et affirment leur volonté d'y participer et d'y défendre la liberté numérique.
“All is file”
“Just for fun”
“Free as freedom”
“You can do it yourself”
“One function, one program”
“Small, simple and beautiful”
“Do it here, do it everywhere”
La Console !© par Patrick Hautrive !;~) 2010
6
La communauté du “libre”
Gnu Linux est le fruit d'une collaboration de plusieurs milliers de volontaires à travers le monde, allant de l'expert à aficionados, du passionné au néophyte. Cette communauté internationale multi culturelle communique par Internet. Chacun met en commun gratuitement sa production pour le bien du plus grand nombre. Gnu Linux est un Logiciel Libre.
Les Logiciels Libres représentent un modèle de croissance économique alternatif qui se caractérise par une très forte indépendance, un gout prononcé pour l'élégance du code et le raffinement des algorithmes, et une diversité prolifique, voire chaotique. Par essence démocratique et pratique, un bon programme est rapidement adopté et amélioré par la communauté. L'accès à l'information est à la base de la liberté et de la responsabilité individuelle.
Les hackers sont considérés comme des virtuoses par leurs pairs (évaluation des compétences techniques) et comme des pirates anarchiques (projection d'intentions malveillantes) par les masses média avides de sensationnel et de messages caricaturaux. Pourtant, s'il existe réellement une “communauté internationale” dans le monde d'aujourd'hui, c'est celle des acteurs du libre.
La communauté des Logiciels Libres a fait l'objet d'étude sociologique, voire anthropologique. Des similitudes et des points de comparaison se retrouvent dans les “sociétés tribales” au sens ethnologique. Par exemple, l'influence extérieure est faible, il est nécessaire de faire partie du groupe pour avoir son mot à dire. C'est en participant qu'un individu fait parti du groupe et devient reconnu par ses pairs. Il y aurait peut­être comme une “chevalerie” des Logiciels Libres, et l'effervescence des activités sur le résau Internet n'est peut­être que le reflet de notre “humanité”...
La morphologie sociologique de la communauté des Logiciels Libres
Un royaume :
Des territoires :
Des héros
:
Des acteurs :
Un langage :
Des valeurs :
Une culture :
Un folklore :
Un mythe
:
Des règles
:
Des fléaux
:
Internet, le virtuel, la bande passante, le temps processeur, le cryptage
Les sites communautaires, les News, les canaux Irc, les Mailing Listes
Richard M. Stallman, Linus Torvalds, Les hackers, crackers, gurus, geeks, script kiddies, newbies, avatars
Le jargon, les codes, les communications asynchrones, les scripts
La liberté, le partage, la transparence, l'élégance du code, l'anonymat
La science fiction, les voyages interstellaires, les jeux de rôle, les sushis
Les blogs, les CMS, les abréviations (IMHO, RTFM), les smileys ;­)
La société égalitaire et futuriste de l'information, le pouvoir des masses
La licence Gnu GPL, “L'éthique des Hackers”, l'autorité de la FSF
Les spam, virus, logical bomb, popup, hoax, exploits, flames, trolls
La Console !© par Patrick Hautrive !;~) 2010
7
SOURCE
Le code source
Le code source est la “matière” d'un programmeur et le résultat de son travail. Le code source est un texte ordonné qui rassemble les instructions écrites par l'informaticien programmeur. Ce texte est écrit dans un langage de programmation compréhensible par un être humain. Ce texte sera transformé pour devenir utilisable par un ordinateur.
Le code source est la transcription lisible et opérationnel d'un algorithme (une suite séquentielle d'instructions logiques permettant d'obtenir un résultat certain à partir d'hypothèses connues). L'accès au code source permet de contrôler la qualité d'un programme, et la capacité de le transformer conduit à son amélioration. L'élaboration de l'algorithme et sa transcription en code source sont régies par l'imagination, la conception et la réflexion humaine, toutes les autres phases, dont la compilation du code source, sont accomplies par des traitements automatiques programmés pour la machine.
Le langage machine
Le code source est traduit en langage machine par un outil qui s'appèle un compilateur afin être exécuté par un ordinateur. Le compilateur utilisé (gnu GCC) dépend du langage de programmation utilisé (langage C) et de l'architecture du processeur pour lequel il est destiné (processeur Intel 32 bits par exemple). Cette opération de transformation du langage de programmation en langage machine s'appèle la compilation.
Ainsi, l'algorithme (l'idée) se transforme petit à petit, tout d'abord en programme source (le texte écrit dans un langage de programmation), puis en programme compilé (une suite d'instructions écrites dans un langage machine), puis en exécutable (avec le droit d'exécution “x” attribué au fichier), et en commande (quand l'utilisateur lance le programme, en double cliquant sur une icône, ou en validant la ligne de commande saisie dans un interpréteur de commande), ensuite en processus (qui rassemblent les instructions de code, et qui sont gérées, en mémoire, par l'ordonnanceur du système d'exploitation), et enfin en binaire (une suite de bits, abréviation de l'anglais “binary digit”, représentés par des zéros, et des uns et qui traverseront les circuits d'un processeur).
Le cycle de vie d'un programme (from mind to paper to digit)
Algorithme Code Source Compilation Exécutable Binaire Commande Processus
La Console !© par Patrick Hautrive !;~) 2010
8
Résultat
LICENCE
La licence ouverte
La licence Gnu GPL est une licence dite ouverte parce qu'elle octroie à l'utilisateur l'accès et la transformation du code source d'un programme. A contrario, les licences dîtes fermées n'autorisent que l'utilisation du programme compilé (traduit et compacté en langage machine et illisible pour un être humain).
Les licences dites fermées ne permettent pas de savoir ce que fait réellement un programme, et ne permettent aucune modification. Ces licences dites fermées imposent un secret obscur, tandis que les licences dites ouvertes proposent une claire franchise. Les licences dites fermées ne protègent que les intérêts des éditeurs, et celles­ci instaurent une dépendance de l'utilisateur vis à vis de son fournisseur. L'éditeur contrôle ainsi indirectement l'utilisation de son produit et les besoins de sa clientèle. Il dispose de plus d'un moyen de pression financier par la mécanisme de facturation lié à la vente des licences. Enfin, les formats de fichiers propriétaires dont les spécifications sont abusivement cachées et souvent arbitrairement modifiés (pour contraindre à l'achat des nouvelles licences) entravent la circulation et la durée de vie de l'information.
La liberté numérique
Le système Gnu Linux est un logiciel qui peut­être librement et gratuitement téléchargé depuis Internet, soit sous la forme d'une archive source, soit sous la forme d'une archive compilée. Le système Gnu Linux est livré sous la protection juridique internationale d'une licence d'utilisation, la licence Gnu GPL de la FSF (Free Software Foundation).
Richard M. Stallman affirme que les Logiciels Libres défendent les principes de liberté, d'égalité et de fraternité. Les Droits de l'Homme Numériques (homo digitalus) pour tous sans distinction, sans condition et sans limitation.
Les quatre libertés
La licence Gnu GPL (General Public Licence) est une licence dîtes “libre” qui protège et garantie les droits légitimes des utilisateurs. Ces droits sont formalisés dans l'expression de quatre libertés numériques fondamentales. Ces quatre libertés sont indissociables et permettent d'identifier, de qualifier et de pérenniser un programme dît “libre”.
Il existe de nombreuses licences dîtes “libres” qui diffèrent les unes des autres, mais toutes satisfont à ces quatre libertés, ce qui permet en autres de rendre compatible les lignes de code, d'intégrer les projets les uns aux autres, et de mutualiser ainsi le travail de chacun dans la durée.
La Console !© par Patrick Hautrive !;~) 2010
9
Les quatre libertés de la licence Gnu GPL
La liberté d'explorer le code source
La liberté d'adapter le code source
La liberté d'exécuter le code source
La liberté de conserver ces libertés
(read)
(write)
(execute)
(sticky)
La position stratégique
Tout d'abord, une certitude, sans Logiciels Libres, il n'y aurait pas d'Internet. Statistiquement, le noyau Gnu Linux représentait en l'an 2000 une position stratégique dans le monde de l'industrie informatique.
La position stratégique de Gnu Linux dans le monde
30 Millions de ligne de code
30 années de recherche et développement
Plus de 8000 heures de travail pour une valeur estimée à 1 milliard de dollars
10 millions d'utilisateurs et des milliers de contributeurs officiels dans le monde
2% du marché mondial des ordinateurs et 70% des serveurs Internet
L'acronyme récursif Gnu
Gnu est un acronyme récursif signifiant “Gnu is Not Unix™” en opposition aux pratiques propriétaires et mercantilistes des systèmes Unix™. Le système d'exploitation Gnu Linux est constitué du noyau Linux et des outils Gnu.
Une distribution Gnu Linux est une distribution entièrement compatible avec la licence Gnu GPL, c'est­à­dire que tous les outils, tous les programmes et tous les pilotes sont “libres”. Par exemple, la distribution Debian défend une position “pure”, et a la réputation d'être à 100% Gnu et 100% libre.
Les distributions Linux
Une distribution est un ensemble regroupant un noyau (qui peut être patché, c'est­à­dire modifié pour les besoins de la distribution), les outils Gnu (Gnu tools) et les outils propres à la distribution, l'installeur et une sélection de Logiciels Libres.
Une distribution est une sélection de programmes (packages) dont le but est de présenter un ensemble cohérent et directement opérationnel. Ces packages peuvent faire l'objet d'une commercialisation en magasin ou par l'intermédiaire de société qui vendent leur personnalisation, leur savoir faire, et les services de maintenance.
La Console !© par Patrick Hautrive !;~) 2010
10
Les distributions Linux ne sont pas toutes intégralement compatibles avec la licence Gnu GPL. Souvent, les grandes distributions intègrent également des outils de configuration ou des pilotes binaires propriétaires.
Les distributions Gnu Linux
Gnu Linux
=
Kernel + Modules + Pilotes + Tools + Shell + X Server + Softwares
Les outils Gnu Les outils, les utilitaires et les commandes Gnu sont nombreux parce qu'ils sont développés individuellement pour remplir une seule fonction. Grâce au mécanisme de redirection des entrées (STDIN) et des sorties (STDOUT & STDERR) d'un processus, les commandes peuvent être enchainées les une après les autres, l'une reprenant les résultats de la précédente. Ces “trains” de commandes constituent dès lors des traitements complexes.
Par exemple, l'interpréteur de commande Bash (commandes builtin et scripts exécutables), le compilateur GCC ou l'éditeur EMACS sont des outils Gnu distribués sous licence Gnu GPL. Les outils sont classés en deux catégories. Il y a les outils utilisables par l'ensemble des utilisateurs, et il y a les outils réservés pour l'administration du système (protégés par le mot de passe root pour s'en servir). Ces deux catégories d'outils sont installées généralement dans des répertoires différents.
L'emplacement des outils Gnu
Pour les utilisateurs
Pour le super utilisateur
/bin/*
sbin/*
/usr/bin/*
/usr/sbin/*
/usr/local*
/lib/*
$HOME/bin/*
/boot/*
Les avantages de la transparence
Les avantages de la transparence vont au­delà de la simple curiosité. Les quatre libertés numériques d'accès au code source ont des conséquences pratiques qui tendent vers l'indépendance et l'efficacité du traitement de l'information.
Après les phases de conception et de lancement les nouveaux projets “libres” aboutissent à des programmes qui sont plus lisibles, plus étudiés, plus critiqués et plus remis en question. La liberté laisse libre court à l'imagination de chacun, et l'émulation favorise la recherche de la perfection. En fin de compte, les programmes “libres” sont plus diversifiés et plus performants.
La Console !© par Patrick Hautrive !;~) 2010
11
Ce sont toutes ces qualités induites par les quatre libertés numériques fondamentales qui sont intéressantes pour tous les utilisateurs d'ordinateur et d'Internet. De plus, les acteurs qui contribuent se sentent responsables des programmes qu'ils élaborent, et le suivi et la correction de bug sont de fait beaucoup plus rapides et précis que dans le monde fermé et propriétaire où chacune des actions est “gouvernées” par le critère de la rentabilité immédiate (objectif de maximisation des profits).
Les avantages de la liberté et de la transparence
Complet
Propre
Robuste
Vérifiable
Évolutif
Indépendant
Modulaire
Puissant
Normalisé
Rapide
Sécurisé
Réactif
La Console !© par Patrick Hautrive !;~) 2010
12
Portable
Souple
SYSTEM
L'interface système
Le système Gnu Linux est un logiciel qui a pour fonction de faire l'interface entre l'utilisateur et l'ordinateur. L'ordinateur est constitué de l'unité centrale, des périphériques et de logiciels. Un système d'exploitation ou OS (Operating System) est un programme d'instruction informatique permettant aux personnels (user) de configurer et de piloter le matériel (hardware), les équipements réseaux (middleware) et les logiciels (software). Le système Gnu Linux est un système d'exploitation réseau (network) multi tâches (multi thread) compatible avec de multiples architectures processeurs (user friendly).
L'IHM (Interface Homme Machine) tend vers l'ergonomie, la transparence, la convivialité et l'automatisation. Les interfaces doivent être à tailles humaines. La formulation des messages du système et les choix proposés pour la configuration doivent être compréhensibles par un “individu moyen” et qui n'est pas informaticien.
L'utilisateur devrait pouvoir se servir d'un ordinateur grâce à sa seule intuition. C'est à la machine de se mettre à la portée de l'être humain, et non l'inverse. L'ordinateur est un outil au service de l'utilisateur. Le rôle de la machine est de libérer du temps pour la créativité, non d'asservir les hommes dans les méandres indigestes et les tortueux labyrinthes de la malhonnêteté et de l'incompétence.
L'interface entre l'homme et la machine
User
XServer
Operating System
Shell
Software
Hardware
Middleware
L'on parle indifférament de programme, d'application ou de logiciel. Quand il s'agit d'une application professionnelle propre à un corps de métier spécifique, l'on emploie le terme de progiciel. Le système d'exploitation est un programme particulier, en cela qu'il a pour fonction de faire l'interface entre l'utilisateur, les applications, les matériels constituants l'unité centrale, les périphériques et le réseau.
Les zones de travail
La mémoire de travail ou RAM (Random Access Memory) est scindée en deux zones distinctes, la zone réservée aux activités du noyau (Kernel Zone), et les zones réservées pour les activités des programmes lancés par les utilisateurs (User Zone). Chaque programme est identifié (id) par l'utilisateur qui l'a lancé.
La Console !© par Patrick Hautrive !;~) 2010
13
La multiplicité du traitement
La multiplicité était l'un des objectifs principaux lors de la conception d'un système d'exploitation multi tâches. Afin de traiter plusieurs requêtes simultanément, chacune devaient être conçu à partir de critères d'indépendance, et la gestion de la multitude de ces requêtes impliquait un équilibre dans la répartition des ressources et le traitement des instructions.
Savoir faire une chose bien conduit à pouvoir faire plein de choses.
«Free for the many»
La multiplicité, l'indépendance et l'équilibre des traitements
Multi tâches
I/O, ordonnancement, sheduler, processus, mode préemptif, priorité, threads
Multi utilisateurs 16 bits = 65 535 login, password, quota, nice, crontab
Multi processeurs Core, SMP, Cluster, Grid
Multi plateformes Intel ix86 compatible IBM PC, Pentium, AMD, PowerPC, 68000 Motorola, SPARC, ALPHA, Itanium 64 bits, ARM, MIPS, IBM S/390, Super H
C, C++, Assembler, Basic, Pascal, Delphi, Fortran, Php, HTML, Java, SQL, Tcl­
Multi langages
tk, Perl, Python, Lisp, Ada, Calm, Shell
Multi protocoles TCP­IP, FTP, HTTP, TELNET, SSH, SMB, NFS, DNS, DHCP, PPP, ADSL, POP, IMAP, SMTP, CVS, IRC, NEWS, JABBER, PEAR to PEAR
Ext, Ext2, ext3, Reiserfs, NFS, Proc, Devfs, MSDOS, VFAT, NTFS, HPFS, Multi fichiers
RAID, LVM, ISO 9660, Joliet
serveur internet, routage, filtrage, pare feu, haute disponibilité, temps réel, station Multi usages
bureautique, poste ludique, jeux réseaux, électronique embarqué, domotique, appareil électroménager, calcul scientifique, effets spéciaux cinématographiques, décryptage, encodage, mixage, modelage
Les spécifications du noyau
Les spécifications du noyau Gnu Linux sont multiples et parmi les meilleurs du marché et de l'état de l'art. Les caractéristiques de la conception et du développement libre et protégé par la licence Gnu GPL participent de cette excellence.
La Console !© par Patrick Hautrive !;~) 2010
14
Les spécifications du noyau Gnu Linux
Noyau monolithique modulaire compilable
Adressage 32 bits et 64 bits
Allocation mémoire en mode protégé
Pagination virtuelle (SWAP)
Standard POSIX, ANSI­C, IEEE, OSI, IETF
Normalisation internationale RFC (Request For Comment)
Convention de nommage des fichiers de configuration LSB (Linux Standard Base) et ASCII
Convention de la hiérarchie de l'arborescence FHS (Filesystem Hierarchy Standard)
Serveur graphique déportable XWINDOW du MIT (Massachusetts Institute of Technology)
Compatible RAID 5 (Redundant Array of Inexpensive Disks)
Pile de protocole réseau IPV4 et IPV6
Traitement parallèle des tâches SMP (Symetrical Multiple Processors)
Processus asynchrone (background) et détachable (nohup)
Temps zéro: 1er janvier 1970 à 00h00 GMT (Greenwich Mean Time)
Les versions du noyau
Les numéros de version du noyau comportent plusieurs chiffres qui indiquent la branche (Major) et la phase (Minor) de développement, mais aussi la correction de bug (Révision) et le type d'architecture processeur (Arch).
Les numéros de version du noyau
Kernel version
Stable
Development (unstable)
Exemple: 2.6.10­5­686
=
=
=
=
MAJOR
2
+
MINOR
+
+ Pair (even) +
+ Impair (odd) +
.
6
.
REVISION
«10­05»
+
+
+
­
ARCH
686
Les numéros Major sont espacés de plusieurs années et représentent de grandes modifications dans la conception du noyau. Les numéros Minor sont espacés de quelques mois ou quelques années et représentent des avancées dans les fonctionnalités du noyau. Ces avancées sont des étapes de validation du travail collaboratif, les numéros Minor pairs sont attribués aux versions dîtes stables, et les numéros Minor impairs sont attribués aux versions encore en développement, c'est­à­dire où les dysfonctionnements peuvent être importants, du fait de la mise au point.
Les versions stables sont celles qui peuvent être utilisées dans un environnement de production.
La Console !© par Patrick Hautrive !;~) 2010
15
La ligne de commande
L'interface graphique n'est pas indispensable pour se servir d'un système Gnu Linux. Quand un système est dédié à une utilisation bien précise, comme un serveur, un routeur ou un pare feu, il peut même être plus judicieux de ne pas installer le serveur graphique, qui occuperait des ressources inutilement. Toute l'administration du système passe alors par l'emploi de la ligne de commande et des scripts shell.
Ce mode d'utilisation est presque le même pour toutes les distributions. L'administration en ligne de commande est un mode d'administration universel, pour les différentes distributions Gnu Linux et entre les systèmes de la famille Unix™. Un système Gnu Linux peut très bien fonctionner avec seulement quelques centaines de Méga Octets de mémoire vive (Random Access Memory), et quelques Giga Octets d'espace de stockage sur le disque dur (Permanent Memory).
Pour une utilisation en poste de travail, l'interface graphique est bien sûr indispensable pour le traitement et la visualisation des images ou des vidéos, et de nombreux outils de configuration existent pour administrer le système. Ces outils graphiques sont construits sur la base des commandes Gnu. Connaitre l'utilisation de la ligne de commande permet de s'affranchir de l'interface graphique et des spécificités de chacune des distributions.
En outre, la connaissance du shell, de la ligne de commande, des scripts et des fichiers de configuration permet à l'utilisateur averti non seulement d'affiner le paramétrage et les performances (tuning), mais aussi d'assurer efficacement la maintenance (hot line). L'interpréteur de commande (shell) permet de piloter le noyau (kernel) et de lancer des outils (tools) et des programmes (binaries), et des exécutables (scripts) en mode ligne de commande. Les outils réseaux (network) permettent d'administrer à distances des serveurs (remote).
Les modes d'utilisation
Le système Gnu Linux s'utilise selon plusieurs modes. Le mode d'utilisation peut être choisit dans la phase de démarrage avec l'invite (prompt) du chargeur de démarrage (loader), ou pendant l'utilisation du système avec la commande «init» qui permet de changer de niveau d'initialisation (runlevel).
Les modes d'utilisation de Gnu Linux (runlevel)
Le mode mono utilisateur
Le mode sans interface réseau
Le mode avec interface réseau
Le mode en ligne de commande
Le mode avec interface graphique
Les modes configurables par l'administrateur single
stand alone
network
terminal
serveur X
inittab
La Console !© par Patrick Hautrive !;~) 2010
16
L'activité du système
Toute l'activité du système est enregistrée dans les fichiers journaux (Log). La procédure d'initialisation ne déroge pas à la règle, et tous les évènements significatifs sont consignés dans un fichier journal.
Pendant cette phase d'initialisation, de nombreuses commandes et scripts sont invoqués. Une fois le système démarré, de nombreuses commandes permettent de connaître l'état du système, et de modifier sa configuration. L'initialisation du système en mode single lance le système pour des opérations de maintenance avec la commande “sulogin” (single user login) qui présente un shell pour le super utilisateur (root).
Pendant toute la durée d'utilisation du système, le système de fichiers virtuels “/proc” permet de connaitre directement les paramètres qui sont utilisés par le noyau. Le répertoire “/proc” donne une image “photographique” du contenu de la mémoire vive. Les données du répertoire “/proc” sont les données réelles et instantanées du noyau, et ne sont calculés qu'au moment de l'affichage.
Certaines commandes sont des outils standards qui figurent dans toutes les installations Gnu Linux. Ces outils standards portent parfois le même nom que les outils Unix™ propriétaires, mais porter le même nom ne signifie pas être identique, ni faire la même chose. Ainsi, le contenu des exécutables peut différer selon les systèmes “unices”, de même les options disponibles ne sont pas toujours les même. Par ailleurs, de nombreux outils sont spécifiques à la distribution pour laquelle ils ont été développés.
Les commandes systèmes
Les commandes systèmes permettent d'interroger le système pour connaitre sa configuration, ou obtenir des informations sur les fichiers, les processus, les services, la machine, le réseau, les commandes, le système de fichier, les périphériques, le noyau ou sur les utilisateurs. Les commandes systèmes qui permettent de modifier la configuration du système ne sont accessibles qu'avec les droits root. Ces commandes sont les même pour tous les systèmes unices
La Console !© par Patrick Hautrive !;~) 2010
17
Les commandes de navigation dans l'arborescence
pwd
ls
cd
vi
cat
less
cp
ln
mv
rm
mkdir
rmdir
chown
chmod
lynx
eog
xterm
afficher le répertoire en cours (print working directory)
lister les fichiers du répertoire en cours (list)
changer de répertoire en cours (change directory)
éditer un fichier texte en mode ligne de commande (visual)
pour lire le contenu d'un fichier (concatenate)
pour afficher un fichier (more or less)
copier un fichier (copy)
créer un lien symbolique (link)
déplacer un fichier ou le renommer (move)
supprimer un fichier (remove)
créer un répertoire (make directory)
supprimer un répertoire (remove directory)
changer l'appartenance d'un fichier (change ownership)
changer les permissions d'un fichier (change mode)
charger une page internet en mode ligne de commande
visualiser une image (eye of gnome)
lancer un terminal graphique (x terminal)
Les commandes de gestion des commandes et des processus
ps
pstree
top
jobs
bg
fg
nice
strace
time
kill
history
alias
exit
logout
reboot
halt
lister les processus en activité (process)
afficher la hiérarchie des processus en cours (process tree)
afficher un résumé de l'activité des processus (table of process)
afficher les processus de l'utilisateur en tâche de fond (background)
placer en tache de fond le processus en cours (background)
placer en avant plan un processus (foreground)
changer la priorité d'un processus
afficher les appels systèmes d'une commande passée en paramètre (system trace)
afficher l'utilisation des ressources systèmes d'une commande
envoyer un message à un processus
afficher l'historique des commandes (bash builtin)
afficher les alias en cours
sortir d'une session shell
fermer une connexion sur un terminal virtuel
redémarrer le système d'exploitation
éteindre le système
La Console !© par Patrick Hautrive !;~) 2010
18
Les commandes d'information sur le système
dmesg
hostname
arch
hwclock
date
cal
tzconfig
locale
loadkeys
uptime
uname
runlevel
init
telinit
grub
chkconfig
sysctl
env
chsh
lire les messages systèmes de syslogd (message)
afficher le nom d'hôte de la machine
afficher l'architecture du processeur (architecture)
afficher l'horloge de la carte mère (hardware clock)
afficher l'horloge du système
afficher un calendrier (calendar)
afficher la zone géographique du système (time zone configuration)
affiche la langue du système
charger une langue pour le système
afficher la durée d'utilisation du système
afficher les principaux paramètres du système (unix name)
afficher le niveau d'initialisation
changer le niveau d'exécution
changer de niveau d'initialisation
changer la configuration du chargeur de démarrage (grand unified boot manager)
configurer les services des niveaux d'initialisation (check configuration)
modifier les paramètres du noyau à chaud (system control)
affiche les variables d'environnement du shell (environment)
changer le shell (change shell)
Les commandes d'information sur les utilisateurs et les groupes
id
logname
last
lastlog
finger
who su
passwd
usermod
chage
useradd
groups
groupadd
groupmod
sg
chgrp
afficher l'identité de l'utilisateur en cours (identity)
afficher le nom de l'utilisateur en cours (login name)
lister les dernières connexions des utilisateurs
lister la dernière connexion de tous les utilisateurs (last login)
lister les informations sur les utilisateurs connectés
lister les utilisateurs connectés
changer de compte utilisateur (switch user)
changer le mot de passe dans «/etc/passwd» ou «/etc/shadow» (password)
modifier les paramètres de compte d'un utilisateur (user modification)
changer les informations d'âges des mots de passe (change age)
ajouter un nouvel utilisateur
afficher les groupes de l'utilisateur
ajouter un groupe dans “/etc/group”
modifier le nom et le GID d'un groupe
changer de groupe principal (switch group)
changer le groupe propriétaire d'un ou de plusieurs fichiers
La Console !© par Patrick Hautrive !;~) 2010
19
Les commandes d'information sur les fichiers
man info
apropos
locate
whereis
find
file
ulimit
umask
stat
lsof
lsattr
chattr
hd
shred
rpm
dpkg
apt­cache
apt­add
apt­get
lp
lpq
cups
afficher l'aide en ligne sur les commandes (manual)
afficher l'aide en ligne complète sur les commandes (information)
afficher les informations à propos du nom de la commande passé en paramètre
afficher les chemins des fichiers correspondants au motif passé en paramètre
afficher le chemin absolu d'une commande
rechercher un fichier dans l'arborescence
afficher le type de fichier passé en paramètre grâcee au magic number
afficher les limites quantitatives d'utilisation (bash builtin)
afficher le masque des permissions pour les nouveaux fichiers (bash builtin)
afficher les statuts des fichiers ou du système de fichiers (status)
lister les fichiers ouverts (list open files)
lister les attributs des fichiers (list attributes)
changer les attributs d'un fichier (change attributs)
afficher le contenu d'un fichier binaire (hexa dump)
supprimer définitivement le contenu d'un fichier
gérer les packages au format rpm (red hat package manager)
gérer les packages au format deb (debian package manager)
interroger la base de données des packages debian
ajouter une source de packages Debian dans «/etc/apt/sources.list»
installer et désinstaller les packages debian (advanced packet tool)
envoyer un fichier à l'impression (line printer)
gérer la file d'attente d'une imprimante (line printer queue)
gérer le système d'impression (common unix printing system)
Les commandes de manipulation des fichiers
grep
diff
uniq
sort
wc
patch
awk
sed
tr
cut
col
groff
expand
unexpand
pour sélectionner des lignes contenants une occurrence dans un fichier
pour comparer deux fichiers ligne à ligne (differences)
pour écarter les doublons à l'intérieur d'une liste
pour classer des listes de lignes dans un ordre alphanumérique
pour compter les lignes, les mots ou les caractères (word count)
pour insérer des mises à jour dans un fichier
pour manipuler et formater des expressions avec un langage de programmation
pour d'extraire ou de remplacer des motifs un flux de texte (stream editor)
pour traduire un caractère ou l'effacer (translate)
pour sélectionner une colonne dans une ligne en fonction d'un séparateur connu
pour renverser l'ordre d'un flux
pour formater un flux de sortie
pour convertir les tabulations en espace
pour convertir les espaces en tabulation
La Console !© par Patrick Hautrive !;~) 2010
20
Les commandes de gestion du réseau
ifconfig
route
ping host
exports
ssh
rsync
wget
ftp
tcpdump
inetd2xinetd
afficher la configuration des interfaces réseaux
afficher la table de routage du noyau
demander une réponse de la part d'un hôte sur le même réseau
interroger un serveur de noms de domaine ou DNS (Domain Name Service)
partager un système de fichiers sur un réseau NFS (Network File System)
demander une connexion distante sécurisée à un serveur (secure shell)
copier des fichiers en mode sécurisé sur un autre serveur (remote synchronisation)
télécharger des fichiers depuis internet
demander une connexion pour transférer des fichiers (file transfer protocol)
afficher les paquets tcp passant sur le réseau
changer de super serveur internet (tcp wrapper)
Les commandes de gestion du système de fichiers
rdev
mount umount
fdisk
fsck
mkfs
tune2fs
hdparm
df
du
sync
afficher la partition racine du système de fichier (root device)
afficher les systèmes de fichier qui sont montés dans l'arborescence principale
démonter les systèmes de fichier qui sont montés afficher la table des partitions d'un périphérique passé en paramètre
vérifier le système de fichier (file system check)
créer un système de fichier sur une partition (make file system)
ajuster les paramètres d'un système de fichiers ext2 (tune file system)
paramétrer la géométrie d'un disque (hard disk parameters)
afficher l'occupation de l'espace de stockage (disk free)
afficher la taille des fichiers (disk usage)
forcer l'écriture des tampons sur le disque (synchronisation)
Les commandes d'information sur le matériel
free
vmstat
lspci
lsusb
lsmod
tty
stty
setleds
kbdrate
eject
afficher l'occupation de la mémoire et de la partition de swap
afficher les statistiques de la pagination (virtual statistics)
lister les chipsets branchés au bus PCI de la carte mère (list pci)
lister les périphériques USB (list usb)
lister les modules (list modules)
affiche le chemin du périphérique pour le terminal en cours (terminal type)
affiche les capacités du terminal en cours
afficher la configuration des lumières du clavier
affiche la rapidité de transmission des codes du clavier (keyboard rate)
ouvrir le tiroir d'un lecteur de cdrom
La Console !© par Patrick Hautrive !;~) 2010
21
Les appels systèmes
Les appels systèmes (system calls) du noyau sont les fonctions qui remplissent toutes les tâches à l'intérieur du système d'exploitation. La commande “strace” permet de suivre les appels systèmes d'un programme.
Les appels systèmes
exec()
fork()
read ()
write ()
wait ()
return ()
open()
listen ()
receive ()
send ()
La Console !© par Patrick Hautrive !;~) 2010
22
DESKTOP
L'interface graphique
L'interface graphique n'est pas indispensable pour se servir d'un système Gnu Linux. L'interface graphique n'est généralement pas installée dans le cadre d'un système dédié à l'usage d'une application serveur. Une interface graphique se compose de plusieurs éléments et fonctionne en mode client serveur. Le serveur graphique s'occupe de l'affichage des fenêtres des clients sur l'écran. Les clients graphiques sont toutes les applications développées selon ce mode.
Un environnement graphique complet est constitué du serveur (/usr/X11R6/bin/X), d'un gestionnaire de session pour la connexion des utilisateurs (login manager), d'un gestionnaire de fenêtres (window manager) pour gérer le pointeur de la souris et le placement des fenêtres actives, d'un gestionnaire d'affichage (display manager) pour personnaliser et uniformiser tous les éléments du bureau sous une même charte graphique, comme les couleurs, la taille et l'aspect des fenêtres, des boutons, des icônes, des barres, des ascenseurs et des autres menus, et enfin d'applications clientes qui seront plus ou moins intégrées au bureau (desktop).
L'interface graphique Graphical Environment
=
X Server + Session + Window + Display + Desktop + X Clients
Les bureaux intégrés
Les deux principaux environnements de travail graphiques sont Gnome et Kde. Ces deux bureaux n'utilisent pas les même bibliothèques graphiques. Le bureau de Gnome emploi GTK qui a été distribué sous licence libre dès le départ, tandis que Kde se sert de QT qui était propriétaire et qui est devenu libre par la suite.
Ces deux environnements gèrent le bureau, les icônes, les menus, et ils proposent chacun de nombreux outils propres. Il faut en choisir un selon ses gouts et ses préférences. Toute fois, un utilisateur de Gnome peut très bien se servir des applications de KDE, et vice versa. Ces deux bureaux sont des environnements intégrés, et ils requièrent quelques centaines de méga octet de mémoire vive pour un usage souple. Les autres interfaces graphiques sont beaucoup plus légères et moins gourmandes.
La Console !© par Patrick Hautrive !;~) 2010
23
Les bureaux (Desktop)
Les environnements graphiques intégrés
Bibliothèques graphiques
Le bureau Gnome
Le bureau KDE Les environnements graphiques légers
(GTK)
(QT)
Enlightenment Black Box WindowMaker SawFish
TWM
AfterStep
FluxBox
Le bureau Gnome
Le bureau Gnome est un environnement graphique intégré et complet.
La configuration du bureau Gnome
man 1 gnome
man 8 gnome
gdm
gdmchooser
gnome­wm
gdmlogin
gnome­session
x­session­manager
default.session
eog
gconfigger
gnome­control­center
gnome­desktop­item­edit
gnome­doc
gnome­panel
nautilus
La Console !© par Patrick Hautrive !;~) 2010
24
FVWM
INFORMATION
Les sources d'information
Les sources d'information et de téléchargement sont disponibles principalement sur Internet. L'on y trouve pléthore de sources, et il faut savoir chercher, trier et se méfier. Internet regorge d'information qu'il est possible de retrouver avec un bon moteur de recherche, et une bonne syntaxe pour la formulation de la requête. Les documentations, les images ISO (prêt à la gravure sur CD­ROM) et les archives des programmes (fichier compacté contenant le programme et sa documentation) sont abondamment disponibles sur Internet.
Les librairies spécialisées et les magazines permettent de s'informer de l'actualité des Logiciels Libres. Les sites spécialisés dans Gnu Linux et les sites généralistes comme Wikipédia présentent de nombreuses informations accessibles avec un simple navigateur. Les serveurs USENET (news), l'abonnement aux listes de diffusion (mailing lists), la participation aux blogs, la collaboration à des sites de partage de contenu CMS (Content Management Software), constituent des moyens originaux pour participer aux débats de la communauté des Logiciels Libres. Les canaux (chanel) des serveurs IRC proposent quant à eux un dialogue en direct où il est recommandé de faire preuve de politesse (net nétiquette).
Lors d'un téléchargement (download), il est important de vérifier l'adresse et la notoriété du site source, afin de s'assurer que les programmes sont bien les originaux et que le transfert de fichier s'est bien déroulé. Le calcul de la somme MD5 permet après un téléchargement de contrôler l'intégrité du fichier. La commande «md5sum» permet de générer une somme identifiant un fichier et d'en vérifier l'intégrité en comparant le résultat du calcul avec l'empreinte du fichier (fingerprint).
Les cartes des Logiciels Libres
La LSM (Linux Software Map) présente une carte des Logiciels Libres regroupés par fonctionnalité. Il n'existe pas un domaine d'activité qui ne soit pas couvert par les Logiciels Libres. De la bureautique à la conception assistée par ordinateur, de l'administration réseau à la conception graphique en trois dimensions, toutes les fonctions qui peuvent être remplies par un ordinateur, peuvent être réalisées à l'aide de Logiciels Libres. Les Logiciels Libres s'utilisent nativement sur un système Gnu Linux, mais de nombreuses applications populaires sont disponibles pour d'autres plateformes (Unix™, Windows™, Mac OS X).
Une carte de LUG (Linux User Group) en France présente les associations régionales des utilisateurs de Gnu Linux. Ces associations proposent des réunions d'information, des install parties et une entraide précieuse pour les débutants qui souhaitent progresser rapidement dans l'apprentissage de Gnu Linux.
La Console !© par Patrick Hautrive !;~) 2010
25
La documentation
Chaque application peut présenter sa documentation, et chaque distribution peut présenter le système Gnu Linux. Les pages man qui s'affichent en ligne de commande sont le premier endroit pour chercher l'usage d'une commande et de ses options. La commande “man cmd” décrivent l'utilisation des programmes installés. Certaines page man ne sont plus “maintenues” que dans le format texinfo de la commande “info cmd”.
La documentation HOWTO est une référence qui existe en de nombreuses langues et dans de nombreux format (TEXT, HTML, SGML, DOCBOOK, PDF, LATEX,...). Les FAQ (Frequently Ask Questions) et les METAFAQ sont de bons points de départ pour chercher une réponse à une question. Il est d'usage de chercher soi­même une réponse avant de demander de l'aide, et de lire le manuel d'instruction (RTFM). Il est fréquent de trouver sur Internet “la” réponse que l'on cherche, parce qu'il est rare d'être le premier à se poser “la” question.
Les pages man
Les pages man sont généralement installées en même temps que le programme. Les pages man présentent une description succincte d'un programme ainsi que toutes ses options. Les pages man sont toutes formatées selon la même structure et présentées dans un afficheur en ligne de commande. Il existe des traductions dans de nombreuses langues.
Les chapitres des page man
NAME SYNOPSIS DESCRIPTION RETURN VALUE OVERVIEW DEFAULTS OPTIONS USAGE EXEMPLES FILES EXIT STATUS ERROR HANDLING ERRORS ENVIRONMENT DIAGNOSTICS HISTORY SECURITY CONFORMING TO AUTHOR REPORTING NOTES BUGS COPYRIGHT SEE ALSO
La commande “man” représente la source d'information la plus directe pour connaitre l'utilisation d'une commande ou d'un fichier de configuration. La commande man s'emploie dans un terminal, et les pages man sont généralement automatiquement installées avec le programme. La commande “man man” permet de connaitre l'utilisation de l'aide en ligne, et la commande “man cmd” permet de connaître l'utilisation de la commande passée en paramètre. La touche “Q” du clavier permet de quitter l'afficheur et de revenir au prompt.
Le programme “xman” montre l'arbre de toutes les man page disponibles.
La Console !© par Patrick Hautrive !;~) 2010
26
Les sections des pages man
Les pages man sont classées en 9 sections. Les sections permettent d'organiser les différents types d'information (commands, system, libraries, devices, formats, games, others, administration and kernel). Les différentes sections sont classées dans un ordre. Lors du lancement de la commande man, c'est la première occurrence correspondant à la recherche qui est affichée.
L'ordre de recherche de ces sections peut être configuré. Le numéro de la section affichée par la page man est indiqué en haut de l'afficheur (pager). Par exemple, la commande “man 8 passwd” désigne explicitement d'afficher la page man des mots de passe de la huitième section.
Les sections des pages man (man 8 cmd)
1 Commandes
2 Système
3 Bibliothèques
4 Fichiers spéciaux
5 Format de fichiers
6 Jeux
7 Autres
8 Administration
9 Noyau
La configuration des pages man
La configuration des pages man est immédiate, puisque les pages man sont automatiquement installées en même temps que le programme ou que le package. Les pages man sont reconstruites à partir de fichiers compressés, et elles sont généralement affichées en anglais, à moins que les traductions n'aient été également installées.
La variable d'environnement MANPATH renseigne sur l'emplacement des pages man. La variable MANSECT permet de personnaliser l'ordre de recherche des sections des pages man. Des bases de données («mandb», «makewhatis» et «updatedb») permettent d'accélérer la recherche d'information.
La Console !© par Patrick Hautrive !;~) 2010
27
La documentation en ligne de commande
Commands
man 1 man
man ­k " "
man ­a intro
man ­k man
man ­k passwd
man ­f passwd
man 7 undocumented
man 7 man
man 8 passwd
man ­k man
xman
mandb
manpath
catman
lexgrog
info
makewhatis
updatedb
locate
slocate
apropos
whatis
whereis
whois
set
export
Files
/usr/man/
/usr/local/man/
/usr/share/man/
/usr/doc/
/usr/share/doc/
/usr/src/linux/Documentations
/var/log/message
/etc/man.conf
/etc/manpath.config
/usr/share/man­db/chconfig
/var/cache/man/index.db
/etc/whois.conf
/etc/apt/sources.list
Les commandes d'information
La recherche d'information en ligne de commande
La commande «catman» génère l'index des pages man («mandb»).
La commande «makewhatis» construit l'index pour la commande «whatis».
La commande «updatedb» scanne l'arborescence, classe et enregistre les chemins pour «locate».
La commande «man 1 man» présente une description des pages man.
La commande «man 7 man» présente le formatage des pages man avec l'outil «groff».
La commande «man ­a intro» présente une description de l'utilisation de la ligne de commande.
La commande «apropos» affiche toutes les lignes de SYNOPSIS qui contiennent le motif.
La commande «whatis» montre les sections des pages man qui correspondent au motif.
La commande «whereis» affiche les principaux chemins absolus qui contiennent le motif.
La commande «locate» affiche tous les chemins absolus de l'arborescence qui contiennent le motif.
La commande «whois» interroge un annuaire réseau pour s'informer sur les noms des serveurs.
La commande «info info» présente l'utilisation de l'aide en ligne Textinfo, complète et intégrée.
La commande «info coreutils» présente l'utilisation des commandes de base de Gnu Linux.
La commande «apt­cache search doc» interroge la base de données des packages Debian.
La commande «apt­cache show archive» affiche la description du package archive sous Debian.
Les exemples de l'aide en ligne
echo $MANPATH
export MANPATH=”/usr/man:/usr/local/man”
export MANSECT=”2:3:1:5:4:6:7:8:n:9”
La Console !© par Patrick Hautrive !;~) 2010
28
set env MANPATH /usr/man /usr/local/man
man man | less
whatis printf
man 3 printf
man ­a intro ; man whatis
info info | col ­b > info.txt
info less ; whereis gcc
La documentation Debian
La distribution Debian propose de nombreuses documentations et traductions sur son site debian.org. Les cdroms d'installation et les miroirs de packages contiennent également un florilège de documentations que l'on peut installer sur un système Gnu Linux. La commande “apt­cache search doc” répertorie les packages de documentations (dont la description comporte le motif «doc»). La commande “apt­cache show archive” explicite l'utilisation du programme contenu dans l'archive.
La documentation Debian
doc­debian
doc­linux­text
doc­linux­html
doc­debian­fr
doc­linux­fr­text
debian­installer­manual
debian­reference­common
debian­reference­en
debian­policy
debian­history
ubuntu­docs
ubuntu­quickguide
doc­base
manpages­fr
manpages­dev
info linuxinfo
texinfo
junior­doc newbiedoc
bash­doc
linux­doc
debiandoc­sgml
debmake
dwww
doxygen
docbook­utils
dhelp
docbook­defguide
doc++
doc­gnome­hig
doc­central
user­mode­linux­doc
sysadmin­guide
maint­guide
binutils­doc
bug
developers­reference
harden­environment
harden­tools
harden­clients
harden­doc
Les sites de documentation
Documentation
pathname.com
linuxdoc.org
fr.tldp.org
audamooka.org
metalab.unc.edu
abcdrfc.free.fr
rfc.editor.org
gnulinux.com
root66.net
Guide
framasoft.net
traduc.org
tutoriel.com
commentcamarche.net
linuxfromscratch.org
formats­ouverts.org
freestandards.org
linuxbase.org
Help
counter.li.org
lea­linux.org
minet.net
linuxcare.com
ldh.datapower.com
fr.lolix.org
savannah.gnu.org
missioncriticallinux.com
La Console !© par Patrick Hautrive !;~) 2010
29
News
toolinux.com
theregister.co.uk
linuxhq.com
sans.org
linuxsecurity.com
Les sites d'information
General Information
Wikipédia
Google
Google Groups
Howto
Usenet News
IRC
Gopher
Info Sheet
Meta Faq
Lug
fr.wikipedia.org
google.com/linux
groups.google.com
freenix.fr
fr.comp.os.linux.*
irc.freenode.net
gopher.ens.fr
eu.undernet.org
faq.org
ploug.eu.org
Organisation
w3c.org
gnu.org
fsf.org
aful.org
cnil.fr
internic.net
nic.fr
april.org
Association
orbis.yale.edu
net.guru.com
Les sites de téléchargement
Download
ftp.lip6.fr
kernel.org
www.tucows.com
linuxiso.org
Paquetage
slashdot.org
freshmeat.net
rpmfind.net
sourceforge.net
blackdown.org
rpm.org
linuxapps.com
plf.zarb.com
Distribution
debian.org
distrowatch.com
rootlinux.org
demolinux.org
yellowdoglinux.com
slackware.com
redhat.com
suze.com
La Console !© par Patrick Hautrive !;~) 2010
30
Cdrom Live
Tomsrtbt
Knoppix
Gnuwin
Ubuntu
Shynux
Gentoo
Slax
Dlx
Dsl
Floppyfw
Router
Bitdefender
Sme
Trustx
Linuxwar
SOCIETY
Les productions intellectuelles
La production de données “intellectuelles” est généralement règlementée par les droits d'auteur. Les législations dépendent de chaque pays. A l'origine, l'objectif des droits d'auteur est de garantir un revenu aux auteurs (artistes, peintres, écrivains, compositeurs, découvreurs, inventeurs,...). Les logiciels sont des productions intellectuelles qui font parties des activités de service du secteur tertiaire de l'économie. Le mode de distribution d'une production intellectuelle dépend du choix de son auteur. Beaucoup d'artistes dans l'histoire culturelle des civilisations occidentales ont déplorés les conséquences catastrophiques des contraintes financières qui leur étaient imposées dans l'exercice de leur talent.
Les auteurs de Logiciels Libres consentent librement de distribuer leur code source sous la licence Gnu GPL. Ils font ainsi partie de fait de la communauté des contributeurs, et profitent également de la mise en commun de ces ressources, soit dans le cadre d'une utilisation professionnelle (et là leurs compétences sont rémunérées), soit dans le cadre d'une utilisation privée.
La distribution gratuite
Les Logiciels Libres sont généralement d'accès gratuit, il suffit de les télécharger sur internet, sans contre venir au respect, ni de la licence Gnu GPL, ni des lois. Au contraire, l'esprit des Logiciels Libres et la communauté des contributeurs encouragent la copie et la distribution de leurs programmes. Toutefois, aucune restriction n'est stipulée quand à la vente, et certaines distributions commercialisent les modifications qu'elles apportent aux programmes en même temps que leurs compétences techniques et leur service après vente. La licence Gnu GPL est spécifique et se distingue des autres types de distribution par l'accès au code source.
Le gratuiciel (freeware) est un mode de distribution gratuit, mais qui ne garantie pas nécessairement l'accès au code source. Le partagiciel (shareware) est un mode de distribution participatif. Les programmes sont distribués gratuitement, et une faible participation financière est demandée à postériori. Là aussi, il n'y a aucune garantie sur l'accès au code source.
Le Domaine Publique est un mode de distribution “libre”. C'est un statut particulier qui concerne les œuvres intellectuelles d'un certain age. En France, les œuvres sont protégées par le droit d'auteur pendant les 70 premières années, ensuite, elles “tombent” dans le domaine public, ce qui permet à tous d'en avoir l'usage librement et respectueusement (les modifications caricaturales sont interdites par exemple).
La Console !© par Patrick Hautrive !;~) 2010
31
Le mode de distribution
Le choix d'un mode de distribution est stratégique pour une œuvre. La licence qui règlement la distribution et l'utilisation d'une production intellectuelle détermine l'univers dans lequel elle va évoluer (son mode de vie, son aura, et son entourage) et anticipe sur son cycle de vie et sa capacité d'intégration ou de mixité avec son environnement. De ce choix découle les contraintes juridiques, les intentions des intervenants, les perspectives commerciales.
Par exemple, le code source du serveur graphique Xfree a été refermé par des sociétés commerciales, c'est pourquoi, la communauté a réagie en lançant le projet Xorg qui désormais équipe toutes les distributions de Gnu Linux. Le format MP3 est un format propriétaire dont les droits appartiennent à Thompson Multimédia, et cette société a fait valoir ses droits pour toucher des royalties sur les équipements permettant de lire ce format.
La licence BSD est en quelque sorte “laxiste” ou “ultra libertaire” parce qu'elle permet de s'approprier le code et de le refermer, c'est­à­dire de le diffuser sous une autre licence, quel qu'elle soit. Il n'y a pas de continuité dans le temps, les contributions libres peuvent changer de licence. Un code sous licence BSD laisse la possibilité de se l'approprié, et peut n'être même plus accessibles par ceux la même qui ont contribué aux premières générations.
Il est impossible de prouver juridiquement qu'un utilisateur a cliquer sur un bouton “j'accepte les termes de la licence”. Bien souvent même, rares sont les personnes qui prennent le temps de lire et de comprendre les tenants et les aboutissants d'un tel engagement. La plupart du temps, les licences propriétaires sont des décharges anticipées des responsabilités du producteur, et une acceptation présumée de la culpabilité des utilisateurs.
La liberté de l'information
La liberté de l'information est un pilier fondamental de la liberté. La liberté de penser, la liberté de s'informer, la liberté d'analyser et la liberté d'expression sont des caractéristiques essentielles de l'être humain. Le droit à la parole, le droit à l'écoute, le droit au silence, le droit au désaccord, et le droit de réponse sont des parties constituantes et indivisibles de cette liberté. La liberté de l'information présuppose également que l'information soit accessible, compréhensible, comparable, vérifiable, interprétable, critiquable et contestable.
L'exercice de cette liberté nécessite de la curiosité, de la sensibilité, de l'intelligence, de la culture, de la réflexion, de l'organisation, des moyens, du temps, de la mémoire et de la vigilance, de la perspective et du recul. Les points de vues sont différents aussi parce personne n'a en tête les même informations. La liberté de l'information ne peut exister sans avoir un accès libre et transparent aux sources, aux contextes et aux techniques psychologiques et médiatiques. Enfin, la présentation, la réputation et La Console !© par Patrick Hautrive !;~) 2010
32
les intentions de l'informateur sont déterminantes dans le processus d'évaluation et d'intégration d'une information.
L'internationalisation de l'information
La tendance à la concentration des médias a été concomitante de l'internationalisation des échanges. La nature de l'information s'est bouleversée au 20ième siècle avec les techniques audio visuelles, numériques et informatiques qui sont de plus en plus complexes et de plus en plus couteuses. De nos jours son accélération, sa densité, et sa multiplicité rendent de plus en plus difficile son appréhension. Si une économie de l'information s'est construite, c'est qu'il y a un marché, un retour sur investissement, des profits attendus et des fortunes à amasser.
Ainsi, le traitement de l'information n'a pu échapper à la prédation du capitalisme. Les réflexes et les habitudes ont étés analysés et confortées, les codes ont étés récupérés et détournés, le sens s'est perdu en cours de route, et les messages se sont parés d'un habillage qui est devenu le contenu même.
La standardisation de l'information
L'information se cache derrière une chatoyante et rassurante standardisation, qui n'est que la coquille vide d'une banale et hideuse uniformisation. Il y a un phénomène de privatisation, d'industrialisation, de marchandisation, de normalisation et de médicalisation de l'information. Les messages sont les même pour tous sous l'apparence d'une personnalisation. Le composé moléculaire de la pilule est identique, il nous reste encore pour quelque temps le choix de la couleur.
Les gens sont considérés comme des clients à fidéliser, des cibles à verrouiller, des parts de marché à céder. Les produits sont présentés comme des valeurs d'appartenance et des signes de reconnaissance. D'ailleurs, le produit s'est d'abord transformé en emballage, et c'est le contrat qui maintenant prend sa place. L'entreprise capitaliste ne se suffit pas d'avoir des commandes et des clients, il lui faut un avenir planifié, et une croissance assurée. Et dans ces considérations financières de duration, la personne du client n'est pas vraiment prise ne compte. Les entreprises ne sont pas des assistantes sociales, elles travaillent à la marge pour des intérêts privés.
La privatisation de l'information
Pour atteindre ces objectifs, dictés par les investisseurs, l'entreprise est contrainte d'apporter des certitudes. Il lui faut se composer un profil affable, optimiste et paternaliste. Il lui faut échafauder ses meilleurs prévisions, minimiser ses risques et maximiser ses bénéfices. Derrière la satisfaction de sa clientèle, se cache la conservation de ses profits. En réalité, c'est sa rentabilité à elle qui lui est indispensable et dont elle doit rendre compte.
Ainsi, presque mécaniquement, l'entreprise tente de sécuriser sa position, et de s'approprier un avenir La Console !© par Patrick Hautrive !;~) 2010
33
qui n'est pas le sien, mais celui d'individus qui juridiquement sont des personnalités distinctes. Nous n'achetons pas des services, nous vendons du temps de travail, sous la forme de crédits revolving, d'abonnements annuels, de cartes de membres, d'assurances à vie tout compris.
Ne nous inquiétons pas, ce sont des professionnels, ils vont s'occuper de tout, c'est garanti, nous ne serons pas déçus. Une petite signature, et nous voilà parti espérant le meilleur et occultant le pire. Les engagements sont prévus sur le long terme pour profiter des économies d'échelle, et les pénalités de sortie sont dissuasives. Ensuite, quand le système pyramidal se fissure puis s'effondre, la facture privée est nationalisée. L'économie maffieuse de la drogue et de la prostitution est un modèle tellement performant.
L'accès à l'information
Et pourtant, la connaissance n'a jamais été aussi précise, aussi profonde et aussi diversifiée. L'homme universel, encyclopédique et omniscient du siècle des lumières laisse le flambeau aux spécialistes. Comme si le bon dictateur éclairé préférait désormais se dissimuler dans l'ombre. Les relations et les inter actions humaines sont «packagées» par les intermédiaires, les présentateurs, les représentants, les portes paroles et les avocats.
L'avis de l'expert devient incontournable et c'est lui qui devient le responsable désigné. Les méandres, les lenteurs et les dysfonctionnements des administrations publiques sont jugés comme des maux nécessaires, qu'il faut pardonner avec une jovialité de bon aloi, et assumer avec une indulgence de rigueur. Certains profitent de cet éloignement cognitif pour se réfugier derrière cette apparente opacité. Les jargons deviennent méthodiques et folkloriques. Les discours deviennent rhétoriques et catégoriques.
La circulation de l'information
L'accès à l'information est bien sûr indispensable, mais aussi sa compréhension, parce que c'est la connaissance, la culture qui donne du sens à l'information. C'est la circulation de l'information, l'échange, le partage, la confrontation, et la liberté d'expression qui donne à l'information le statut de vérité consensuelle.
La manipulation de l'information
La masse critique de l'information, la place de la répétition dans la diffusion des messages, et les techniques subtiles de communication, de conditionnement, d'imprégnation et de sublimation sont largement supérieures aux capacités individuelles d'absorption, de perception, de sélection et de compréhension. Les cerveaux humains arrivent à saturation, et paraissent bien fragiles et vulnérables face au progrès de la machine.
La Console !© par Patrick Hautrive !;~) 2010
34
La preuve symbolique de ce changement de paradigme fut apportée par la victoire de Deep Blue, la machine d'IBM, sur le champion des échecs Kasparov. Mais, il y a toujours quelqu'un derrière une machine. Ce n'est plus l'aiguille dans la botte de foin, mais l'aiguille dans une montagne d'aiguilles que chacun doit trouver pour s'y retrouver. Dans cette nouvelle société, tout le monde ne peut se prévaloir d'être un fakir, un lama, un avatar ou un gourou.
La production d'information
L'effort individuel qui cherche à se faire un point de vue indépendant représente un combat inégal avec les états, et plus encore avec les multinationales qui cherchent à imposer leur emprise et accroitre leur empire. Le public est devenu une masse indifférenciée, malléable, orientable, influençable, voire enfin amorphe et indifférente. L'information risque de devenir unilatérale, avec un seul producteur, un seul émetteur, un seul message, et une masse de consommateur. Le divertissement, le spectaculaire, la rumeur et le conforme viennent combler les besoins pulsionnels et remplacent les désirs d'apprendre et d'émancipation.
Les satellites, les radars, les scanners, les systèmes experts, les aéroports, les centrales électriques, la monétique, la robotique, la domotique, les indices statistiques, les bases de données, les téléphones portables, les images virtuelles et les réseaux mondiaux participent de ce nouvel univers et de ces nouvelles formes d'échanges et de communication (numériques et nomades). Les particuliers doivent s'appropriés ces supports, ces codes et ces nouvelles techniques afin de ne pas être les dupes consentant, ni les victimes submergées par le «tsunami» de l'information.
L'humanisation de l'information
La production de l'information ne doit pas tomber sous les seuls critères de la rentabilisation et de la respectabilité. Les artistes ne sont plus les seuls à s'inquiéter de la censure. La créativité de la multitude doit faire face à la cupidité de quelques uns. L'information n'est pas seulement un atout stratégique ou un avantage économique, c'est avant tout la spécificité de la race humaine et du devenir de l'humanité.
Les Logiciels Libres expriment cette volonté de libérer l'espace numérique. Ils représentent une contribution historique majeure pour qui souhaite s'approprier son propre espace informationnel, assurer son indépendance intellectuelle, et conserver un peu d'anonymat et de vie privée. Les réseaux sociaux manifestent cet effort collectif pour créer un autre monde, un monde participatif, communautaire, un autre monde que celui dans lequel certains privilégiés voudraient nous faire basculer pour toujours.
La Console !© par Patrick Hautrive !;~) 2010
35
La qualité de l'information
Le Copy Left est un jeu de mot avec l'expression anglophone de Copy Right, et peut se traduire en français par “gauche d'auteur”. Le Copy Left assure la pérennité de la liberté sur toute les générations de code qui suivent. Une copie des Logiciels Libres est laissée à la disposition des générations futures. Ainsi, un code source libre peut le rester. Il est bien sûr question de liberté , mais il est surtout question de qualité. En effet, seul l'accès au code source permet de vérifier les fonctionnalités réelles d'un programme, et seule la possibilité de le transformer librement permet véritablement de l'améliorer.
La liberté ou la qualité de l'information, c'est un choix quotidien, un mode de vie, c'est une véritable qualité de vie, peut­être même une morale de la vérité.
La société de l'information
La science a de tout temps progressé à partir des avancées de précurseurs, et la culture n'est que le fruit des échanges volontaires entre personnes. Le progrès et la richesse intellectuelle ne peuvent se concevoir sans la libre circulation de l'information. Aujourd'hui, la société industrielle se transforme en société de l'information. C'est donc du type de société que nous voulons dont il s'agit.
Les Logiciels Libres sont le bien et la responsabilité des citoyens du monde. Les Logiciels Libres sont une affaire sociétale, et ils constituent la clé de voute de la liberté numérique. D'ailleurs, le système Gnu Linux fait l'objet d'une demande d'incorporation au patrimoine intellectuel mondial déclaré par l'Unesco.
La Console !© par Patrick Hautrive !;~) 2010
36
GNUGPL
La licence Gnu GPL
Quatre libertés sont garanties par la licence Gnu GPL (General Public Licence).
La licence Gnu GPL (General Public Licence) (fsf.org) (gnu.org)
1.La liberté d'utilisation et d'exécution des Logiciels Libres
2.La liberté d'étudier le code source des Logiciels Libres
3.La liberté d'adapter le code source des Logiciels Libres
4.La liberté de redistribuer ses modifications sous licence Gnu GPL
execute
read
write
sticky bit
Il n'y a pas d'obligation concernant un éventuel prix de vente. Ce qui est essentiel et principal dans un Logiciel Libre, c'est l'accès au code source, non pas l'aspect monétaire qui est laissé à la responsabilité de chacun.
Les termes de la licence sont disponibles à cette adresse: http://www.gnu.org/copyleft/gpl.html
La licence Gnu GPL version 2 sur un système Gnu Linux: “/usr/share/common­licenses/GPL­2”
“Free as freedom”
La quatrième liberté est en fait une obligation, elle est qualifiée de “contaminante”, parce que tout programme utilisant du code sous licence Gnu GPL doit obligatoirement être distribué sous une licence garantissant ces quatre libertés. C'est cette quatrième liberté qui donne au travail collaboratif la valeur d'un travail communautaire.
Ainsi les programmes sous licence Gnu GPL participent à l'accumulation du fond commun, et ne peuvent pas être “récupérés”. C'est cette quatrième liberté qui manque à la licence BSD. Cette différence est un parti pris stratégique, elle ne sépare pas les deux types de licence qui sont toutes les deux fondamentalement “libres”, mais elle instaure une contrainte qui n'est pas négligeable. Ce point est primordiale quand l'on considère la production des Logiciels Libres sur le long terme.
Free to be
“Free to be”
“Free to change”
“Free to use”
“Free to make”
“Free to have”
“Free to give”
“Free to stay”
“Free to go”
“Free to say”
“Free to share”
La Console !© par Patrick Hautrive !;~) 2010
37
Les licences “libres”
Les licences dîtes “libres” sont compatibles entre elles et garantissent l'accès au code source (les trois premières libertés). Le site de la Free Software Foundation conserve une liste de toutes les licences compatibles et livre les explications complètes sur ces points juridiques et philosophiques. Les diverses licences “libres” matérialisent la convergence et la communauté d'esprit des nombreux acteurs qui contribuent aux Logiciels Libres.
Les licences «libres»
Le Domaine Public (propose un accès libre, mais sans droit de modification)
X Consortium
Artistic
Creative Common
BSD (sauf la quatrième liberté sur la conservation de la licence)
Gnu GPL (Garanted Public for Life)
Lesser GPL
Mozilla
Copy Left
MPL
QPL
Libpng
Zlib
MIT
Free Music Public Licence
Le modèle économique
Le modèle économique des Logiciels Libres est différent des autres modèles économiques générateurs de profits. La séparation n'est plus entre ceux qui possèdent (qui en ont les moyens monétaires) et ceux qui ne possèdent pas, mais entre ceux qui savent (qui ont pris le temps d'acquérir la connaissance) et ceux qui ne savent pas. L'acte de payer et celui d'étudier ne reposent pas sur les même pré requis. Avoir et savoir représentent des privilèges fondamentaux et fondamentalement différents. Et ce changement de perspective n'est que la conséquence de la libre circulation de l'information qui va bien au­delà de la libre accumulation des capitaux.
La matière de la planète et la connaissance de l'espèce humaine sont le bien de tous, la responsabilité de chacun, et en principe, n'appartiennent à personne. La propriété n'est qu'un critère d'organisation pour hiérarchiser les individus d'une société. Cette “loi” ou cette “valeur” a été instaurée par ceux qui se sont arrogé ce droit par la force, et qui se sont appropriés les ressources communes pour accroitre leur bien être et renforcer leur puissance. Cette règle est devenue la contrainte, le conditionnement dont se serve les générations de nantis pour imposer leur volonté aux autres. “Il n'y a de richesse que La Console !© par Patrick Hautrive !;~) 2010
38
d'hommes”. L'histoire du monde en récapitule les péripéties. Cette frontière est devenue petit à petit un mode de vie, un mode de pensé, une motivation première et une civilisation.
Le modèle économique des Logiciels Libres est basé sur l'accès au code source, la mise en commun des ressources et la mutualisation des efforts et des résultats. Les Logiciels Libres sont le fruit d'un travail de collaboration, chacun contribue, et la production constitue le bien communautaire. C'est cette contrainte (la redistribution et le partage) qui devient un avantage économique par la masse et la diversité des contributions qui profitent à toute la communauté. Qualifiés également d'”économie du don”, les Logiciels Libres bénéficient des qualités qui découlent des libertés qu'ils garantissent. Les Logiciels Libres sont libres d'accès, mais les compétences pour les mettre en œuvre sont rétribuées.
Les avantages de la liberté
Il est intéressant d'approfondir sa propre réflexion sur les avantages de la liberté et de la transparence.
Les avantages de la liberté et de la transparence
La continuation de la chaine numérique (générations) et la portabilité (plateformes).
La coopération, le partage et l'émulation, et la reconnaissance du mérite par la communauté.
La transparence et l'indépendance et donc la qualité et la pérennité de l'accès du code source.
Les faibles couts de production et d'utilisation, et la mutualisation des couts de maintenance.
La souplesse et la réactivité de la communauté pour diffuser les améliorations ou les correctifs.
La créativité dans la production et la dans la réalisation d'idées individuelles ou collectives.
La connaissance exacte des algorithmes, des protocoles et des formats de fichiers.
La décentralisation des acteurs et la centralisation des ressources avec internet.
La pluralité de la production de code sans contrainte, sans hiérarchie, sans compromis.
La récupération d'un code préexistant pour lancer un projet dans une nouvelle direction (fork).
La prise de conscience d'appartenir à une communauté pour le bien du plus grand nombre.
La Console !© par Patrick Hautrive !;~) 2010
39
STRATEGY
Les stratégies d'installation
Quand l'on commence à s'intéresser aux Logiciels Libres et au système Gnu Linux, il est recommandé de le faire progressivement. Comme tout est accessible, il est facile de se laisser submerger par la diversité et la complexité.
Les Logiciels Libres peuvent se téléchargés gratuitement depuis internet sous différentes formes. Il y a les programmes compilés pour Windows™, les cdrom live et les cdroms d'installation.
Les stratégies d'installation des Logiciels Libres (framasoft.net)
Free software
CD­ROM live
FreeOS, WinLibre Images ISO, USB
Multi boot
Grub, Ubuntu
Dedicate
Debian, Red Hat
Virtual
[Gnu Linux[Linux]]
Les autres plateformes
De nombreux Logiciels Libres sont disponibles pour d'autres plateformes comme Windows™ ou Macintosh™ ou *BSD, et ils représentent un bon moyen pour se familiariser avec la communauté du “libre”. D'autan plus qu'ils sont très compétitifs, tant du point de vue des fonctionnalités que du prix. Les Logiciels Libres ne placent pas en porte à faux les utilisateurs qui téléchargent illégalement des versions pirates des programmes qui n'ont pas les moyens d'acheter.
L'installation de Logiciels Libres disponibles pour d'autres plateformes que Gnu Linux est facile. La plupart des sites dédiés au développement d'un Logiciel Libre proposent des versions compilées pour, entre autres, les API win32, et ils sont téléchargeables sous la forme d'exécutable («.exe») qui automatisent l'installation. De nombreux sites proposent une version de leur application compatible avec Windows™.
Des compilations de Logiciels Libres pour Windows™, téléchargeable en image ISO sont disponibles en français sur internet (Bureau FreeOS, WinLibre). Ces compilations se téléchargent, puis se gravent sur un CD­ROM vierge à l'aide d'un graveur et d'un logiciel de gravure. Des outils de gravure libres pour Windows™ sont également téléchargeables sur Internet. Certains sites comme framasoft.net présentent les Logiciels Libres et proposent des liens vers les programmes et les images.
Les CD­ROM
live
Les CD­ROM live permettent d'avoir un aperçu des fonctionnalités d'un système Gnu Linux sans rien installer et donc sans danger d'écraser quoi que ce soit sur un autre système. Les images ISO de CD­
ROM live sont également téléchargeable depuis internet. Certains magazines spécialisés proposent La Console !© par Patrick Hautrive !;~) 2010
40
régulièrement des galettes inclues dans l'édition papier.
L'installation en mémoire avec un CD­ROM live permet d'essayer une distribution sans toucher au disque dur. En plaçant un CD­ROM live dans le lecteur et en choisissant dans le BIOS le lecteur comme prioritaire au démarrage. Le système Gnu Linux se charge en mémoire vive ainsi que les applications utilisées. Une clé USB, par exemple, permet de sauvegarder les fichiers sur un support externe. Il suffit de rebooter sans le CD­ROM live pour retrouver le démarrage du système installé sur le disque dur.
Le multi boot
L'installation d'un système Gnu Linux sur le même disque dur ou sur un disque dur séparé constitue l'étape logique suivante. L'installation en multi boot permet de pouvoir passer d'un système à l'autre, et d'opérer un transfert progressif des habitudes et des fichiers. Le système Gnu Linux reconnait en lecture et en écriture les partitions et les systèmes de fichiers des autres systèmes d'exploitation (comme Windows™ ou Macintosh™, mais la réciproque n'est pas toujours valable).
L'installation en multi boot permet de passer d'une installation à une autre en partageant le disque dur. Plusieurs systèmes sont alors installés successivement sur le ou les disques durs. Un gestionnaire de démarrage (boot manager) propose lors du démarrage de la machine le choix d'un des systèmes sous la forme d'un menu.
Les différents systèmes sont installés sur des partitions différentes du ou des disques durs. Le secteur de boot du premier disque dur (MBR) est lu et exécuté par le BIOS. Le code du MBR (Master Boot Record) permet de charger en mémoire le gestionnaire de boot (Boot Loader).
L'installation dédiée
L'installation classique permet de réserver tout le disque dur pour Gnu Linux. Un seul système est installé, et celui­ci est chargé en mémoire au démarrage directement depuis le disque dur. L'installation dédiée peut ou non comportée le serveur graphique (X window).
L'installation virtuelle
L'installation virtuelle requiert l'installation d'une application de virtualisation sur le système principal (qui peut être Gnu Linux, Windows™ ou Macintosh™ OS X), puis de l'installation des systèmes sur les espaces virtualisés. De nombreux systèmes Gnu Linux servent de socle pour faire tourner d'autres systèmes d'exploitation ou même d'autres systèmes Gnu Linux dans un espace robuste et stable.
La virtualisation (virtual machine) simule ou émule le comportement d'un autre système d'exploitation. Une machine virtuelle est un espace dédié à un autre système qui tourne à l'intérieur mais de façon indépendante.
La Console !© par Patrick Hautrive !;~) 2010
41
La reconnaissance matérielle
La reconnaissance matérielle est un défi pour la communauté des Logiciels Libres parce qu'elle doit généralement fournir par elle même les pilotes qui vont fonctionner sous Gnu Linux, et ce pour tous les matériels.
En général, c'est le fabriquant de matériel qui met à la disposition de sa clientèle le pilote pour son produit. La part de marché de Gnu Linux était très négligeable pour les fabricants grand public, aussi le développement de pilote pour Gnu Linux n'était pas une de leur priorité. Les fabricants ont longtemps considéré qu'il était dans leur intérêt de conserver le secret sur leurs innovations techniques notamment pour les cartes graphiques indispensables pour les jeux vidéos. De plus, le grand public était habitué à ne pas rencontrer ce genre de problème avec Windows™, parce que des accords commerciaux étaient conclus en amont, que les pilotes étaient intégrés la plupart du temps avec le système d'exploitation, et que le public n'avait pas le choix (les machines sont commercialisées d'office avec le système d'exploitation Windows™, ce qui caractérise une vente liée illégale).
Pour la communauté des Logiciels Libres, la difficulté provenait de la non divulgation des spécifications techniques exactes de chaque matériel. Des ingénieurs en rétro ingeniering faisaient leur possible pour suivre la course à l'innovation et distribuer rapidement les pilotes fiables et complets compatibles Gnu Linux. Ainsi, la plus part des pilotes pour Gnu Linux étaient disponibles quelques mois après la sortie du matériel.
Avec le succès de Gnu Linux dans les entreprises, dans les administrations et chez les particuliers, les fabricants prennent de plus en plus conscience de leur intérêt à développer également les pilotes qui feront fonctionner leur matériel sous Gnu Linux. L'abandon des ententes monopolistiques, des stratégies de clientélisme, des politiques de la vente forcée et des manœuvres de lobbyisme sont des avantages pour les clients finaux qui peuvent dès lors faire fonctionner une véritable concurrence et choisir librement leur système et leur matériel. De plus en plus de fabricant de matériel pourvoient à cette nécessite, mais l'accès au code source de ces pilotes n'est pas encore systématique.
Des sites font l'inventaire des compatibilités et proposent des “pilotes libres”. Certains sites sont même spécialisés dans tel ou tel type de matériel. Toutefois, la vérification de la HCL (Hardware Compatibility List) n'est plus désormais aussi indispensable qu'auparavant, parce que désormais, la plus part des matériels sont reconnus et fonctionnent parfaitement sous Gnu Linux (et sans intervention de l'utilisateur qui dispose d'un système opérationnel complet dès l'achèvement de la procédure d'installation).
La Console !© par Patrick Hautrive !;~) 2010
42
INSTALL
L'installation de Gnu Linux
L'installation de Gnu Linux est devenue au fil du temps de plus en plus facile et rapide, non seulement parce que les machines sont plus performantes et équipées de plus de mémoire vive, mais aussi parce que les procédures d'installation des programmes sont de plus en plus standardisées (installer) et parce que l'installation et la mise à jours des applications (packages) recourent à des miroirs sur internet.
Les types d'installation
Plusieurs types d'installation sont possibles afin de satisfaire le plus grand nombre de situations. L'installation d'un système Gnu Linux peut se faire par duplication d'une image disque (ghost), ou en passant par une procédure d'installation standard qui va reconnaitre et configurer le matériel, et qui va installer les programmes.
La procédure d'installation standard peut se faire à partir d'une source locale ou d'une source distante. L'installation locale peut s'effectuer avec des disquettes, un CD­ROM d'installation ou une copie locale de ces fichiers. L'installation distante peut utiliser différents protocoles réseaux.
Free Software Installation
Gnu Software
Gnu Linux System
Binaries Sources Duplication
Local
win32 Mac Unix™
Ghost
Floppy Cdrom Live Usb/Flash HTTP
Network
NFS
FTP
SMB
La duplication
La duplication d'installation consiste en une copie bit à bit d'une image d'un disque dur pré­installé (ghost). Cette procédure requiert de disposer de machines qui ont les même caractéristiques techniques afin de ne personnaliser que les adresses réseaux, par exemple. La duplication est une procédure qui n'effectue aucune configuration, mais qui permet, par exemple, de faire une réinstallation identique d'un même poste très rapidement.
L'installation locale
L'installation locale est la procédure d'installation standard d'un système Gnu Linux. La procédure d'installation peut être lancée au démarrage de la machine (boot) ou manuellement à partir d'un système en état opérationnel. Les sources locales peuvent être de différentes sortes, comme les disquettes, les Cdrom ou les DVD qui sont des images ISO qui peuvent être librement téléchargées sur Internet puis gravées, ou des supports comme des disques USB Flash Drive, ou une partition locale.
La Console !© par Patrick Hautrive !;~) 2010
43
Les installations standards suivent la procédure mise en place par la distribution choisie. Les distributions définissent leur propre procédure (installer).
L'installation réseaux
L'installation à distance, via le réseau, qui requiert une pré configuration de l'interface réseau avec le pilote de la carte réseau, et le lancement d'un client réseau (netinstall). Une fois démarré le client d'installation va rechercher le serveur sur le réseau LAN (Local Area Network). Les serveurs peuvent véhiculer les fichiers à l'aide de différents protocoles réseaux (HTTP, NFS, FTP, SMB).
Les installeurs des distributions
Chaque distribution dispose de son outil d'installation (installer) et de ces propres procédures. Par exemple pour Debian, l'installation se poursuit au reboot suivant pour décompacter les applications. Tandis que Red Hat propose un outil de pré configuration (Kickstart) pour automatiser et personnaliser les installations. En général, un seul reboot est nécessaire pour l'installation, ce qui rend la procédure beaucoup plus simple et directe que sous d'autres systèmes.
Les installeurs des distributions Linux
Distribution
Debian
Red Hat
Installer
setup
Anaconda
Rules
Kickstart
La procédure d'installation
Les installeurs procèdent à l'installation plus ou moins automatisée de tout le système d'exploitation. Chaque distribution suit une procédure qui lui est propre.
La procédure d'installation passe en revue les étapes fondamentales que sont le mode d'installation, le chargement d'un noyau provisoire pour l'installation, la reconnaissance du matériel, la configuration de la langue et du pays, le partitionnement et le choix d'un système de fichier. l'installation d'un chargeur, la sélection et la copie des applications, et la configuration du réseau, du mot de passe root et de l'interface graphique.
La Console !© par Patrick Hautrive !;~) 2010
44
Les étapes de la procédure d'installation d'un système Gnu Linux
Le mode
La langue (locales)
Le pays (time zone)
Les périphériques d'entrées (mouse)
Le chargement d'un système Le partitionnement et formatage
La sélection et la copie des applications L'installation du chargeur de démarrage
La configuration du réseau
La création du mot de passe root
La création d'un utilisateur
La configuration de l'interface graphique
Le périphérique de sortie (écran)
text
fr latin loadkeys
Europe
Keyboard AZERTY (generic 105 touches)
Liaison COM1 (/dev/cua0 ou /dev/ttyS0)
Liaison COM2 (/dev/cua1 ou /dev/ttyS1)
Le port PS/2 (mini DIN ronde sur /dev/psaux)
kernel
fdsik ext2
cp
grub mbr
ifconfig route
passwd
useradd
gdm
Le balayage horizontal (31.5 à 38 Khz)
Le rafraichissement vertical (50 à 90 Hertz)
Les modes d'installation
Les différents modes d'installation sont plus ou moins complexes.
Les modes d'installation d'un système Gnu Linux
Le mode graphique (par défaut)
Le mode texte (quand le serveur graphique n'est pas opérationnel)
Le mode rescue (pour la maintenance, le MBR et le mot de passe ROOT)
Le mode expert (procédure d'installation détaillée)
Le mode ligne de commande (qui propose un prompt sur un shell de base)
Les écrans F1 à F12 (qui affichent des pages d'aide et d'exemple)
Le mode cdrom live (qui charge un système sans installation)
Les outils d'installation
Les outils d'installation d'un système Gnu Linux sont les outils standards que l'utilisateur retrouve une fois l'installation terminée. D'ailleurs, il est possible d'installer Linux, soit même, manuellement à partir La Console !© par Patrick Hautrive !;~) 2010
45
des packages originaux. La documentation LFS (Linux From Scratch) donne pas à pas la procédure à suivre. Et comme pour une installation «normale», l'utilisateur averti doit passer par les phases incontournables de toute installation, mais en ligne de commande et le tout en anglais.
C'est­à­dire, charger un noyau provisoire (boot), partitionner le disque (fdisk), y installer un système de fichiers (mkfs), créer la partition d'échange (mkswap) et l'activer (swapon), créer les répertoires de l'arborescence (mkdir) et les fichiers spéciaux pour les périphériques (mknod), installer le chargeur de démarrage sur le secteur de boot (grub), copier les utilitaires, les outils de base (coreutils), les bibliothèques (libc6) et les dépendances (cp), décompresser les packages (tar) et les installer, dans le bon ordre, au bon endroit (mv) et avec les bonnes permissions (chmod), compiler un noyau (make), configurer les interfaces réseaux (ifconfig) et la passerelle par défaut (route), installer le serveur graphique (xorg) et le gestionnaire d'affichage (gdm), et enfin créer l'utilisateur root et lui administrer un mot de passe (passwd).
Installation Tools
Partitioning & File system
fdisk
cfdisk
sfdisk
Disk Druide
Qparted
Parted
Partimage
Partition Magic
Paragen
fdformat
hdparm
rdev
dmesg
mount
umount
fsck
dd
mkfs
mke2fs
mkfs.ext2
mkfs.ext3
mkfs.vfat
mkreiserfs
mkswap
swapon
swapoff
Packages
rpm
rpmdrake
urpmi
up2date
yum
autorpm
rpm2cpio
gnorpm
alien
apt4rpm
apt­get
dpkg
emerge
Journal
/tmp/install.log
/root/anaconda.ks.cfg
/mnt/cdrom/images/boot.img
/mnt/cdrom/images/bootnet.img
/mnt/cdrom/images/rescue.img
/var/log/installer/messages
La Console !© par Patrick Hautrive !;~) 2010
46
PARTITION
L'espace de stockage
L'espace de stockage est le lieu ou seront enregistrées toutes les données du système, des applications et des utilisateurs. C'est un espace de mémoire qui conserve la valeur des bits après l'extinction de l'alimentation électrique. Cet espace peut­être une disquette, une clef usb, un cdrom, un dvd ou un disque dur. Chacun de ces dispositifs possède des caractéristiques techniques qui lui sont spécifique (taille, capacité, vitesse, durée, énergie, fragilité, prix). Les disques durs sont les supports qui proposent les meilleures caractéristiques pour une utilisation intensive.
La structure de partitionnement et les types de système de fichiers installés sur chaque partition sont enregistrés dans un tableau que l'on appèle une table de partition. Les supports peuvent être de plusieurs sortes (IDE­ATAPI, SATA, SCSI, USB, FLOPPY, FLASH DRIVE).
L'organisation de l'espace
Avant toute installation, le support qui reçoit les fichiers doit être préparé. Le disque dur doit être structuré en partitions, dans un premier temps, et dans un deuxième temps, la ou les partitions doivent être formatées. Le formatage est une procédure qui consiste à installer un système de fichier pour organiser l'espace de stockage. Les partitions sont aussi appelées des volumes ou des tranches (slice).
Ainsi, deux phases distinctes se succèdent pendant la procédure de préparation d'un disque. La première concerne le disque dans son entier, c'est le partitionnement de l'espace de stockage du disque (partitioning) qui va créer la table de partition (partition table). La seconde phase concerne l'organisation logique de chacune des partitions du disque. Chaque partition sera formatée selon les règles d'un système de fichiers (file system) qui peut être différent d'une partition à l'autre.
Tous les disques durs possèdent un secteur de boot, le MBR (Master Boot Record) qui est placé sur les 512 premiers octets du disque. C'est le MBR qui enregistre la table des partitions et le code pour le chargeur de démarrage. La gestion des volumes d'un disque peut­être gérée par une couche logique supplémentaire qui virtualise l'espace de stockage comme le système LVM (Logical Volume Manager). La table des partitions
La création de la table de partition du disque dur est la première phase de préparation d'un disque. L'espace de stockage est structuré logiquement en partitions, en cylindres, en secteurs et en bocks en fonction du nombre de tête de lecture du disque (heads), du nombre de plateaux, et des adresses physiques. La taille minimale d'une unité physique de stockage peut varier d'un disque à l'autre. La Console !© par Patrick Hautrive !;~) 2010
47
Chacune de ces unités constitue ensemble ce que l'on appèle la géométrie d'un disque.
La table de partition d'un disque est enregistrée sur le MBR et dans d'autres secteurs du disque. Des copies de la table de partition sont stockées régulièrement sur d'autres secteurs du disque. Quand le secteur de boot d'un disque est endommagé, ces copies permettent un dernier recours pour réactiver la table de partition.
Le formatage
L'installation d'un système de fichier pour chaque partition est indispensable pour pouvoir écrire et lire des données sur le support. L'installation du système de fichier est le formatage proprement dit. L'installation d'un système de fichiers sur chaque partition permet de conditionner les partitions, qui sont dès lors prêtes à recevoir des fichiers. Chaque partition peut avoir son propre système de fichiers. Les fichiers systèmes et les programmes sont copiés sur une ou plusieurs partitions pendant la procédure d'installation.
Le système Gnu Linux requiert au moins deux partitions, la partition de pagination (swap) et la partition système ou partition racine (root) qui accueille l'arborescence principale, et à partir de laquelle peut être montées d'autres partitions contenants d'autres systèmes de fichiers.
Les types de partitions
Un disque dur peut contenir différents types de partitions. Le disque peut être structuré avec plusieurs partitions primaires et une partition étendue qui contiendra une ou plusieurs partitions logiques. Les partitions primaires et les partitions logiques forment les partitions qui recevront un système de fichiers. Chacune de ces partitions est identifiée dans la table de partition par une adresse physique de début et de fin, et chacune comporte un secteur de boot. Les 512 premiers octets de la partition qui constituent le secteur de boot de la partition ou le PBR (Partition Boot Record).
La commande «fdsik ­l /dev/hda» permet d'afficher la structure des partitions du premier disque maître du premier contrôleur de disque IDE (hard disk) et de connaitre les partitions actives qui sont marquées par un astérisque (boot flag). Les partitions actives indiquent au BIOS que des fichiers de démarrage s'y trouvent pour lancer le chargement d'un système.
Partition table («fdisk ­l /dev/hda»)
Disk Boot Sector
MBR (512 Octets)
Loader (446)
Table (64)
Magic Number (2)
Primary (1)
Primary (2) Primary (3)
PBR
hda1
PBR hda2
Partition Active (*) Pagination
File system (root) Swap
(/) (/boot)
PBR hda3
Mounting
Ext2
/usr
Primary (4)
Extended (hda4)
Logical
Logical
PBR hda5 PBR hda6
/home
/var
La Console !© par Patrick Hautrive !;~) 2010
48
Free space
Les partitions primaires
Les partitions primaires sont au nombre de quatre au maximum compte tenu de la taille fixe de 512 octets du MBR. Elles sont numérotées de 1 à 4. Au minimum, le disque dur doit contenir une partition primaire qui peut ou non occuper tout l'espace de stockage.
L'une des partitions primaires est choisie comme la partition active du disque dur (spécifiée par la présence d'un drapeau (flag) dans la table de partition, et le secteur de boot (PBR) de celle­ci peut être lancé automatiquement par le BIOS. La partition active est aussi une partition système, c'est­à­dire qu'elle contient les fichiers d'un système d'exploitation qui sont chargés en mémoire lors du démarrage.
La partition étendue
La partition étendue correspond à l'une des partitions primaires. Celle­ci contiendra un certain nombre de partitions logiques. La partition étendue permet de dépasser la restriction des 4 partitions primaires et d'étendre le nombre maximum de partition sur un disque dur à 63.
Les partitions logiques
Les partitions logiques sont réparties à l'intérieur de l'espace délimité par la partition étendue. Les partitions logiques sont numérotées à partir du numéro d'ordre 5 et peuvent contenir indifféremment, comme toutes autres partitions, des fichiers systèmes, des applications ou des données.
Le mode LBA
Dans les anciens BIOS, prévalait une limite dans l'adressage de l'espace disque, et il était nécessaire d'installer les fichiers de boot (/boot) dans une partition séparée et située en dessous du 1024° cylindre (qui correspondait approximativement à 8 Giga Octets d'espace). La première partition de taille réduite, et proche du MBR, servait à accueillir les fichiers de boot. Le mode LBA permit de dépasser cette contrainte quand la taille des disques durs dépassèrent le Giga Octet.
Les secteurs de boot
Les disques et les partitions contiennent toutes un secteur de boot qui est constitué par les 512 premiers octets. Les secteurs de boot (boot sectors) sont les premiers secteurs correspondants, soit au disque (MBR), soit aux partitions sur ce disque (PBR). Les disquettes de boot contiennent également un secteur de boot.
Le MBR (Master Boot Record) est le secteur de boot maître du disque. La taille du MBR est de 512 octets. L'espace du MBR contient, le code du chargeur de démarrage (446 octets), la table de La Console !© par Patrick Hautrive !;~) 2010
49
partition (64 octets) et le Magic Number AA55 (2 octets). Le PBR (Partition Boot Record) est le secteur de boot de chaque partition.
La disquette de boot
La disquette de démarrage (disquette de boot ou de réamorçage) est enregistrée pendant ou après l'installation. La disquette de boot peut être insérée lors du démarrage de la machine pour lancer un système. La configuration de la séquence de boot du BIOS doit être dans un ordre de recherche adéquat (1Floppy 2Cdrom 3HardDisk).
Une disquette de boot contient un chargeur de démarrage et une copie de la table de partition, qui permettent de sélectionner une partition sur le disque et de lancer le chargement d'un système. La disquette de boot peut être utile quand l'on ne souhaite pas installer le chargeur sur le MBR et quand l'on procède à une maintenance. Des images préparées pour les disquettes 1,44 Mo (boot.img, bootnet.img et rescue.img) sont généralement disponibles sur les cdroms d'installation. Les cdroms d'installation permettent également d'accéder au disque et de procéder à des tâches administratives.
Les disquettes de boot permettent de démarrer et de dépanner le système. La commande «mkboot» permet de créer une disquette de boot qui contient le noyau et la table de partition. Selon la place disponible, il est possible de rajouter des utilitaires sur une disquette de boot personnalisée. Des disquettes de dépannage préparées sont téléchargeables depuis Internet comme TOMSRBT (Tom Ocher's Root Boot Disk).
Les partitions actives
Une partition active est marquée par un drapeau, le «boot flag» qui indique au BIOS que des fichiers de démarrage s'y trouvent pour lancer le chargement d'un système. La commande «fdisk» permet de positionner les drapeaux de boot.
Une partition active est souvent la partition système parce qu'elle contient les fichiers systèmes qui permettent le démarrage du système (boot) et son administration (tools). Toutefois, une partition active, peut n'être qu'une partition de boot. La partition de boot (/boot) peut ne contenir que les fichiers systèmes qui permettent le démarrage du système (l'image Ramdisk et le noyau). La partition racine de Gnu Linux est la partition qui contient la racine de l'arborescence des fichiers.
La répartition du système
La répartition du système en plusieurs partitions dépend du type d'utilisation de la machine (serveur ou poste de travail). En fait, cela dépend de l'activité et de l'évolution de certains répertoires. Un système de fichier est composé d'une seule racine, mais sur celle­ci peut se greffer plusieurs partitions selon les besoins. Dans ce cas, les espaces sont segmentés et chacun peut disposer de son propre système de La Console !© par Patrick Hautrive !;~) 2010
50
fichiers.
Par exemple, un système peut requérir plusieurs espaces de swap parce que l'utilisation de la mémoire est très fluctuante. Un autre système peut exiger de séparer l'espace pour les binaires, parce que les mises à jour des applications sont très fréquentes. Un autre système peut être vulnérable si la partition contenant les fichiers temporaires et variables est amenée à stocker de grande quantité de fichiers, comme pour un serveur Internet ou un Proxy par exemple. Un autre système peut obligatoirement être construit de la même façon qu'un autre, parce que des procédures de réinstallation automatique sont prévues, que les machines sont dupliquées (ghost), ou parce que les postes sont standardisés. Enfin, un autre système peut comporter plusieurs partitions pour les utilisateurs, parce que ceux­ci sont nombreux et que leurs données personnelles sont volumineuses.
Les besoins dépendent des situations et des contraintes, et le rôle de l'administrateur est de choisir la configuration qui sera la plus adaptée et la plus conforme au budget alloué, aux performances attendues et au niveau de sécurité retenu (sachant que les besoins sont très rapidement exponentiels).
La racine “/” (root) du système de fichier et ses points de montage
Swap
/boot
/home
/root
/usr
/etc
/var
/tmp
La pagination sur une partition
Le noyau (vmlinuz) et le chargeur de démarrage (grub ou lilo)
Le répertoire des utilisateurs
Le répertoire pour l'administrateur root qui réserve 5% de l'espace
Le répertoire des programmes, utilitaires et outils Gnu
Le répertoire des fichiers de configuration ASCII
Le répertoire du serveur internet (httpd) et des journaux de bord (log)
Le répertoire temporaire et commun à tous
Les outils de partitionnement
Les outils de partitionnement sont plus ou moins complexes, mais ils sont tous à manipuler avec précaution, parce qu'une erreur peut provoquer la perte de la table des partitions, ce qui rend très difficile par la suite l'accès aux données sur le disque dur! Ces outils permettent de supprimer le MBR, de lire la table des partitions, de formater le disque dur, de créer une partition supplémentaire, et éventuellement de modifier la taille ou la place des partitions (redimensionnement) sans détruire les fichiers qu'elles contiennent.
Certains de ces outils sont propriétaires et commercialisés avec des versions d'évaluation. En général, le partitionnement d'un disque dur est effectuée une seule fois lors de l'installation du système ou lors de l'installation d'un nouveau disque dur. C'est pourquoi, il est nécessaire de prévoir à l'avance le nombre et la taille des partitions. La commande «fdisk» permet de partitionner un disque.
La Console !© par Patrick Hautrive !;~) 2010
51
Sous Gnu Linux deux partitions sont au minimum nécessaires. La partition racine du système de fichier qui contient le système (root). La partition de swap (swap) qui permet de paginer la mémoire sur le disque dur.
Le menu de la commande fdisk
La commande «/sbin/fdisk /dev/hda» permet de partitionner le premier disque dur ATAPI (master) de la première nappe IDE. Un menu présente les différentes commandes internes de fdisk en appuyant sur la touche M.
Le menu de la commande fdisk
m
p
d
q
w
n
t
a
l
menu print delete quit write new
type
active
list
v
x
verify
extra
(show this menu)
(show partition table)
(suppress the selected partition)
(exit without saving changes)
(changes the partition table)
(create a new partition)
(select the file system type)
(mark the bootable flag for the partition)
(show all the file system type)
83 for Linux Native
82 for Linux swap
85 for Linux extented
(check the partition table)
(show another expert menu)
Un exemple de table de partition
Voici un exemple de table de partition montrée avec fdisk.
La Console !© par Patrick Hautrive !;~) 2010
52
Un exemple de table de partition (fdisk /dev/hda)
Command (m for help): p
Disk /dev/hda: 6495 MB, 6495068160 bytes
15 heads, 63 sectors/track, 13424 cylinders
Units = cylinders of 945 * 512 = 483840 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 3184 1504408+ 6 FAT16
/dev/hda2 3185 3316 62370 82 Linux swap / Solaris
/dev/hda3 * 3317 8483 2441406 83 Linux
Partition 3 does not end on cylinder boundary.
/dev/hda4 8484 13424 2334592 5 Extended
/dev/hda5 10551 13424 1357933+ 83 Linux
/dev/hda6 8484 10540 971901 83 Linux
Partition table entries are not in disk order
Les exemples de partitionnement
mount ­a ; fdisk ­l
fdisk /dev/hda
mkswap ­c /dev/hda3 ; swapon /dev/hda3
mke2fs ­c /dev/hda2 ; mount ­av
dd if=/mnt/cdrom/images/boot.img of=/dev/fd0
apropos disk
e2fsck ­f ­b 8193 /dev/hda2
/sbin/dump2fs /dev/hda | more
fsck /dev/hda
lilo ­u
vi /boot/grub/menu.lst
vi /boot/grub/grub.cfg
ls ­l /boot/vmlinuz­2.6.10­5­686
dmesg | head ­1
Les outils sous Windows™
delpart.exe
killhd.com
msd.exe
fdisk.exe /MBR
dir X:\dosutils\autobat.bat
X:\dosutils\raw.exe boot.img
rawrite.exe D:\images\boot.img
dir X:\dosutils\fips.exe
La Console !© par Patrick Hautrive !;~) 2010
53
dir X:\dosutils\fips.doc
Le redimensionnement avec fips.exe
format A: /s
cd X:\dosutils\fips.exe
xcopy restorb.exe fips.exe error.txt A:
attrib ­R ­H ­S C:
scandisk defrag.exe
delete (Fichier d'échange de Windows™)
panel (Désactivation de la mémoire virtuelle)
Ctrl + Alt + Del (Reboot)
fips.exe
La Console !© par Patrick Hautrive !;~) 2010
54
LOADER
Le chargeur de démarrage
Le chargeur de démarrage (boot loader) est un programme de petite taille qui permet de présenter, au démarrage de la machine, les différents systèmes installés sous la forme d'un menu. Quand la machine est mise sous tension, le BIOS de la carte mère procède à une vérification (POST), puis recherche et charge en mémoire les instructions et les informations du secteur de boot qui se présente en premier (1floppy, 2cdrom, 3disk).
Le chargeur de démarrage peut être installé sur le MBR du disque, sur le secteur de boot de la partition système (PBR), ou bien sur une disquette de boot. Grâce à la table de partition, le chargeur connait les adresses physiques des différentes partitions du disque dur, et lesquelles sont actives. Ainsi, le chargeur peut présenter à l'utilisateur un menu, puis charger en mémoire les fichiers de démarrage de la partition système correspondant au système que l'utilisateur aura choisit. A chaque démarrage de la machine, l'utilisateur pourra choisir le système qu'il souhaite démarré.
Le menu de démarrage
Lors de la mise sous tension d'une machine, le chargeur de démarrage présente à l'utilisateur un écran avec un menu proposant en général tous les systèmes installés. En fait, le chargeur présente les entrées qui lui ont été indiquées. Une fois le choix validé, le chargeur lance les fichiers de démarrage du système (l'image Ramdisk ou le noyau).
Parfois, deux menus correspondants à deux chargeurs différents se succèdent (chain loading).
L'enchaînement des chargeurs
Parfois, un chargeur principal présente un menu succinct qui permet de lancer un deuxième chargeur plus conséquent, c'est ce qui s'appèle l'enchaînement des chargeurs (chain loading). Ainsi, par exemple, le chargeur primaire (NTLOADER) peut être installé sur le MBR (pour des raisons de compatibilité avec un système Windows qui exige d'occuper le MBR), tandis que le chargeur secondaire (LILO) est installé sur le PBR.
Les types de chargeurs
Il existe de nombreux chargeurs différents et ils dépendent de la plateforme sous laquelle ils fonctionnent. Certains sont même des produits commercialisés pour combler les carences de certains éditeurs. Les chargeurs de démarrage comme Lilo (LInux LOader) et Grub (Grand Unified Boot manager) de Gnu Linux reconnaissent les partitions des autres systèmes d'exploitation, et proposent les entrées correspondantes dans les menus de démarrage, mais ce n'est pas forcément le cas pour les autres La Console !© par Patrick Hautrive !;~) 2010
55
gestionnaires de démarrage des autres systèmes d'exploitation qui excluent la présence des autres systèmes.
Les types de chargeurs de démarrage (boot loader)
Gnu Linux
OS/2
Macintosh™
Windows™
Windows™ NT
Lilo (Linux Loader)
Grub (Grand Unified Boot Manager)
Boot Manager
XOSL
Syscom.sys
Syslinux
Loadlin.exe
System Commander
BootMagic
NTLOADER
La Console !© par Patrick Hautrive !;~) 2010
56
BOOT
La procédure d'initialisation d'un système Gnu Linux
RESET
BIOS
POST
BOOT
LOADER
RAMDISK
KERNEL
MODULES
FILESYSTEM
PROTOCOLS
INIT
SYSINIT
RUNCOMMAND
SINGLE MODE
SERVICES
LOCAL
GETTY
XWINDOW
Alimentation
Basic Input Output System Power On Self Test
Le secteur de boot du disque (MBR)
Le chargeur de démarrage et chaînage Le chargement de l'image disque
Le noyau du système
Les modules et pilotes du noyau
Le système de fichiers racine (/)
La pile réseau intégrée au noyau
Le processus initial (PID=1)
L'initialisation du système
Les scripts d'initialisation (Initdefault)
L'initialisation en mode single
Les serveurs du niveau d'exécution
INTERNET (wrapper tcpd)
NETWORK (interfaces)
HOSTNAME (DNS)
MEMORY (/proc)
HARDWARE (PCI, IDE, SCSI)
DEVICES (/dev)
CLOCK
LIMITS
PAGING
BINARIES
SYSLOGD
POLICES
Les initialisations locales spécifiques
Les consoles virtuelles Ctrl+Alt+F1­F6
LOGIN (prompt & authentification)
SHELL (de connexion)
Le serveur graphique Ctrl+Alt+F7 (X)
Power
Press Del or F2 (PROM on CMOS)
Séquence de boot du Bios (1cdrom 2disk)
Disquette de boot (floppy) Partition (PBR)
(lilo grub)
(initrd)
(/boot/vmlinuz*)
(kerneld kmod)
fsck mount /etc/fstab
Tcp­ip & Adsl (ppp ppoe­ppoa)
/etc/inittab Ctrl+Alt+Del Powerfail
/etc/init.d/rcS ==> /etc/rcS.d/*
/etc/init.d/rc (runlevel)>/etc/rc5.d/[KS??]*
/sbin/sulogin
/etc/init.d/* (daemon)
Le super démon internet (inetd xinetd)
Le réseau (eth0 @ip netmask route gv)
La machine (hostname /etc/host.conf)
L'image de la mémoire (pseudo filesystem)
La détection matérielle (hotplug)
Les fichiers périphériques (MAKEDEV )
L'horloge système (date)
Les restrictions (quota ulimit umask)
La pagination de la mémoire (swap)
Les chemins des exécutables ($PATH)
Les fichiers journaux du système (/var/log)
Les polices de caractère (fonts)
/etc/rc.d/rc.local /etc/rc2.d/s99local
Terminaux virtuels (/etc/tty)
L'invite de connexion (/etc/passwd)
L'interpréteur de commande (/bin/bash)
startx xinit xinitrc xdm xmodmap xorg
La Console !© par Patrick Hautrive !;~) 2010
57
La séquence de boot du BIOS
Le menu de configuration du BIOS (setup menu) est accessible, selon les types de BIOS, en appuyant dès le démarrage sur la touche DEL ou F2. Le nom de la touche appropriée est indiqué sur le premier écran affiché. La séquence de boot du BIOS (ou séquence d'amorçage) peut être modifiée à l'intérieur du menu du BIOS. Une séquence conventionnelle va rechercher les secteurs de boot et la présence d'un chargeur de démarrage successivement dans le lecteur de disquette (floppy), le bus usb (usb), le lecteur de cdrom (cdrom) et enfin sur le disque master de la première nappe IDE (disk).
Parfois, les menus du BIOS sont protégés par un mot de passe qui permet justement d'empêcher les utilisateurs d'en modifier les paramètres. La seule méthode pour contourner le mot de passe (qui peut être oublié) est d'enlever la pile sur la carte mère, afin de réinitialiser le BIOS. La séquence d'amorçage du BIOS
BIOS Boot Sector Sequence (Press Del or F2) 1floppy
2usb
3cdrom
4disk
Les nappes des disques durs
Deux disques durs ATAPI peuvent être branchés sur la même nappe IDE (ou le cordon SATA), l'un est considéré comme le disque maitre et l'autre comme le disque esclave. Des cavaliers sur les disques ou à coté des contrôleurs de disques permettent de configurer la relation (auto, master, slave) des deux dispositifs sur la même nappe. Le disque master est prioritaire pour le contrôleur de disque, aussi les transferts de données (en lecture et en écriture) sont plus efficient, quand les deux disques sont installés comme master sur les deux nappes (par exemple pour un RAID 1 mirroring).
Les disques SCSI sont branchés sur une chaîne SCSI de sept dispositifs qui doit être terminée par un bouchon (terminator), et qui est gérée par les contrôleurs SCSI.
En général, une carte mère (mother board) présente deux contrôleurs de disques, et donc quatre disques peuvent être installés sur les deux nappes. Les cartes contrôleurs de disques supplémentaires sont branchées sur les bus PCI de la carte mère. Ces cartes d'extension sont disponibles sur le marché pour éventuellement augmenter la capacité de stockage.
La procédure d'initialisation
La séquence de boot ou procédure d'initialisation d'une machine peut suivre deux méthodes. Voici détaillées, les étapes du démarrage d'un système Gnu Linux. Ces étapes consistent en une succession d'exécution, de chargement en mémoire, de contrôle et d'affichage. Le résultat de toute cette procédure peut être vérifié dans des fichiers journaux et à l'aide de commandes. Les commandes «man 7 boot» et «man 7 boot­scripts» présentent une description de la séquence de démarrage du système Gnu Linux. La Console !© par Patrick Hautrive !;~) 2010
58
La documentation HOWTO BOOT PROMPT détaille la procédure d'initialisation du système.
Les méthodes ou les procédures d'initialisation du système
La méthode établie par l'UNIX™ SYSTEM V d'AT&T
La méthode établie pour les systèmes de la famille BSD
La séquence d'initialisation est lancée par le chargeur de démarrage et se déroule exclusivement dans la Kernel Zone. C'est un pseudo processus de PID égal à zéro qui effectue le chargement du noyau et le montage de la racine du système de fichier. Ce pseudo processus s'appelle aussi le swapper (kswapd) ou processus noyau (kernel process). La commande «man 7 bootparam» décrit les options qui peuvent être passées au noyau avant le lancement de l'initialisation.
La procédure d'initialisation du système Gnu Linux
Bios
Post Boot Loader Ramdisk Kernel Init Sysinit Services Internet getty passwd Window
phœnix reset mbr grub initrd
vmlinuz inittab sulogin syslogd xinetd login bash gdm
Par exemple, la machine démarre, le BIOS charge le MBR qui charge GRUB qui charge l'image Ramdisk INITRD qui charge VMLINUZ qui lance INIT qui lance SYSINIT et le script RC, lesquels lancent les SERVICES dont le super serveur INTERNET et l'interface graphique X, et qui lance les consoles virtuelles TTY.
Les séquences de boot réseaux sont utiles quand les postes ne disposent pas de leur propre disque dur. Ces séquences utilisent un protocole réseau pour recevoir une adresse IP et trouver le serveur qui leur enverra tous les fichiers d'initialisation (DHCP, TFTP, PXE, Etherboot).
Le rescue boot avec un CD­ROM d'installation
Le rescue boot avec un CD­ROM d'installation (chroot)
Reboot
Press F1
Rescue
Prompt Shell
fdisk ­l
mkdir /mnt/hda5
mount /dev/hda5 /mnt/hda5
cat /mnt/hda5/etc/lilo.conf
chroot /mnt/hda5
vi /etc/lilo.conf
lilo
reboot
La Console !© par Patrick Hautrive !;~) 2010
59
les fichiers d'initialisation
Les fichiers d'initialisation système
Logging
/etc/syslog.conf
/etc/logrotate.conf
/tmp/install.log
/var/log/sulog
/var/log/boot.msg (Suze)
/var/log/boot.log (Red Hat)
/var/log/dmesg (Debian)
/var/log/message
/boot/bootmsg.txt
/proc/kmsg
/var/log/installer/messages
How to Boot Prompt
Init
/dev/initrd
/etc/inittab
/etc/init.d/rc
/etc/rc.d/rc.local
/etc/default/rcS
/etc/initlog.conf
/etc/init.d/netbase
/etc/rc.d/rc.sysinit
/etc/rc.config
Network
/etc/inetd.conf
/etc/xinetd.conf
/etc/services
/etc/protocols
/etc/hosts
/etc/host.conf
/etc/host.allow
/etc/host.deny
/etc/nsswitch.conf
/etc/security
/etc/network/interfaces
Les exemples de boot
ps ­­pid 1
ls /etc/init.d ; ls /etc/rc*
ls /etc/rc.d/init.d
runlevel ; telinit 3
kill ­HUP 1
init 6
who ­r
man 8 inetd
ls ­la /etc/rc2.d/S20inetd
ls ­la /etc/rc.d/rc5.d/S99local
cat /etc/init.d/inetd | less
ls /etc/rc.d/init.d/inetd
ls /usr/sbin/in.fingerd
ls /usr/sbin/in.ftpd
ls /proc
sh ­x rc.inet1
ntsysv ­level 23
rctab ­l
man hosts_access
/etc/init.d/networking restart
/etc/rc.d/init.d/network restart
La Console !© par Patrick Hautrive !;~) 2010
60
Environnement
/etc/sysctl.conf
/etc/fstab
/etc/mtab
/etc/modules.conf
/etc/environment
/etc/manpath.config
/etc/locale.alias
/etc/locale.gen
/etc/gdm/locale.conf
/etc/localtime
/etc/timezone
/etc/X11/xdm/xdm.config
LILO
Le chargeur LILO
Le chargeur LILO (Linux Loader) peut­être installé sur le MBR, sur le PBR de la partition système (racine) ou sur une disquette de démarrage.
La commande «/sbin/lilo» permet de réécrire sur le MBR le code du chargeur quand le fichier de configuration «/etc/lilo.conf» a été modifié. La commande «lilo ­C /etc/lilo.conf» permet de spécifier le fichier de configuration.
Lors du lancement du chargeur, les lettres «LILO» s'affichent progressivement à l'écran pour attester du bon déroulement de la procédure. Quand ce n'est pas le cas, certaines lettres seulement apparaissent, indiquant le type de difficultés rencontrées (LI­­ signifie, par exemple, que la limite du 1024ième cylindre est atteinte). Ces codes erreurs sont documentés sur Internet.
La configuration de LILO
La configuration de LILO
Files
Commands
/etc/lilo.conf
/boot/lilo.conf
/etc/lilo/lilo.conf
/boot/map
/boot/boot.b
/boot/chain.b
/boot/boot.0300 MAJOR+MINOR (MBR­IDE)
/boot/boot.0800 MAJOR+MINOR (MBR­SCSI)
/boot/boot.message.txt
/boot/message
/usr/share/doc/lilo*/doc/
lilo ­v ­t
lilo ­b /dev/hda1
lilo ­C /etc/lilo.conf
lilo ­u /dev/hda
lilo ­r /mnt
dd if=/boot/boot0300 of=/dev/hda bs=446 count=1
mkinitrd /boot/initrd.img
L'invite de LILO
Des options peuvent être passées au noyau lors du démarrage, à partir du prompt «liloboot». L'invite de paramétrage de lilo est présentée avec les touches Shift+Ctrl+Tab. Ces options peuvent également être renseignées dans le fichier de configuration de lilo.
liloboot linux single
liloboot linux 3
Pour démarrer en mode single.
Pour démarrer dans le niveau 3 d'init.
La Console !© par Patrick Hautrive !;~) 2010
61
liloboot rescue
liloboot linux ­b emergency
liloboot linux ether=10,0x210,eth0
liloboot linux verbose=5
liloboot mediacheck
Pour démarrer en mode de dépannage avec un shell root.
Pour démarrer en mode secours.
Pour démarrer en paramétrant une carte réseau.
Pour démarrer en affichant tous les messages.
Pour vérifier l'état du cdrom d'installation (Red Hat).
Les options de LILO
Les options de lilo sont nombreuses, elles peuvent être renseignées à l'invite de lilo ou dans le fichier de configuration «/etc/lilo.conf».
Les options de lilo (/etc/lilo.conf) et le prompt de lilo (liloboot)
rw
Pour monter un système de fichier en lecture/écriture (read write).
ro
Pour monter un système de fichier en lecture seule (readonly).
mem=128M
Pour fixer à 128 Méga Octet la mémoire vive (memory).
append=«mem=128M»
Pour fixer à 128 Méga Octet la mémoire vive (memory).
append=«mem=130496K» Pour fixer à 128 Méga Octet la mémoire vive (memory).
root=/dev/hda5 Pour indiquer la partition pour le système de fichier racine (root).
boot=«/dev/hda2»
Pour indiquer la partition système à activer.
ether=9,0x300,0,1,eth0
Pour paramétrer la première carte réseau (IRQ, I/O,,, alias eth0).
append=«ether=10,0x210,eth0 Pour paramétrer la première carte réseau (IRQ, I/O, alias eth0).
append=«single»
Pour démarrer en mode single user.
append=«hd=683,16,38»
Pour fixé les paramètres du disque (cylinders, heads, sectors).
append=«hd=64,32,202»
Pour fixé les paramètres du disque (cylinders, heads, sectors).
password=«secret»
Pour demander un mot de passe au démarrage.
init=«/bin/bash»
Pour lancer le shell Bash après le démarrage.
append=«init=/bin/zsh»
Pour lancer un shell Z après le démarrage.
initrd= «/boot/initrd.img»
Pour indiquer le fichier de l'image disque (initrd).
ramdisk_size
Pour fixer la taille de l'image disque (initrd).
ramdisk=1024ko
Pour fixer la taille de l'image disque (initrd).
panic=30
Pour indiquer le niveau de panique
debug
Pour afficher les informations de débogage du démarrage.
nosmp
Pour désactiver le traitement parallèle multi processeurs.
prompt
Pour proposer l'invite liloboot.
lba32
Pour gérer les disques de grande capacité.
vga=normal
Pour indiquer la capacité d'affichage.
vga=extended
Pour indiquer la capacité d'affichage.
linear
compact
rescue
verbose
La Console !© par Patrick Hautrive !;~) 2010
62
Le fichier lilo.conf
Le fichier «/etc/lilo.conf» est composé de deux parties, la première partie rassemble les options générales pour toutes les images, et la seconde partie est constituée des différentes images qui apparaîtrons dans le menu de démarrage.
Un exemple de fichier de configuration de lilo (/etc/lilo.conf)
boot
install
map
timeout
delay
default
message
verbose
password
=
=
=
=
=
=
=
=
=
/dev/hda
/boot/boot.b
/boot/map
100
20
linux
/boot/message
5
«secret»
image
=
=
=
=
=
=
=
/boot/vmlinuz­2.4.2
linux
/dev/hda5
ask
/boot/initrd.img
«devfs=mount»
«verbose=5»
=
=
=
=
/dev/hda1
windows
/dev/hda
/boot/chain.b
label
root
vga
initrd
append
append
read­only
other
label
table
loader
La Console !© par Patrick Hautrive !;~) 2010
63
GRUB
Le chargeur GRUB
Le chargeur GRUB (Grand Unified Boot Loader) est le chargeur de la génération suivante pour Gnu Linux. Écrit par Éric Boeym en 1995. Dans le cas d'une mise à jour, il est conseillé de prévoir la désinstallation de l'ancien Grub et de surtout de sauvegarder le fichier de configuration «/boot/grub/menu.1st».
Le gestionnaire de démarrage Grub est compatible avec de nombreux systèmes de fichiers qu'il reconnait et propose spontanément dans son menu de démarrage (MSDOS, FAT16, FAT32, MINIX, EXT2, REISERFS, JFS, XFS, UFS) et il gère parfaitement le chainages des chargeurs. Enfin, Grub propose une invite de commandes interactives au démarrage qui permet de modifier la configuration avant l'initialisation du système (#grub + TAB).
Les fichiers de configuration sont placés dans le répertoire «/boot/grub/*». Les numéros de volume identifiant les disques et les partitions commencent à partir de zéro. Les modifications apportées au fichier de configuration seront automatiquement prises en compte lors du prochain redémarrage de la machine.
La correspondance entre les nomenclatures des périphériques des disques et celle de Grub
/dev/hda1 == > hd0,0
/dev/hda2 == > hd0,1
/dev/hda3 == > hd0,2
La configuration de grub
La configuration de grub s'effectue, soit en utilisant la commande «grub» qui présente l'invite de commande, soit en modifiant directement l'un des fichiers de configuration «/boot/grub/menu.1st» ou «/boot/grub/grub.conf».
La Console !© par Patrick Hautrive !;~) 2010
64
La configuration de Grub
Files
/boot/grub/menu.1st
/boot/grub/grub.conf
/usr/share/doc/grub
/usr/share/doc/grub/*
*/examples/menu.lst
/boot/grub/stage1
/boot/grub/stage2
Prompt
grub>
help
kernel (hd0,0)
root (hd0,0)
boot
chainloader (hd0,0) +1
quit
grub­install /dev/hda
Commands
locate grub
/sbin/grub
update­grub
grub­install
grub­floppy
grub­md5­crypt
locate /grub/i386­pc
Installation
tar xzvf grub­0.5.96.1.tar.gz
cd grub­0.5.96.1
./configure
make
make install
updatedb
cp /boot/vmlinuz /floppy/boot
Le fichier grub.conf
Le fichier de configuration est soit «/boot/grub/menu.1st» (lire l'extension first avec le chiffre un), soit «/boot/grub/grub.conf».
Un exemple de fichier de configuration de Grub (/boot/grub/grub.conf)
defaults 0
timeout 10
splashimage= (hd0,4) /boot/grub/splash.xpm.gz
color white/blue blue/green
#
title
linux
root (hd0,4)
kernel /boot/vmlinuz­2.4 root=/dev/hda5 ro quiet splash devfs=nomount
initrd /boot/initrd.img
savedefault
boot
#
title
linux­initrd
root
(hd0,0)
kernel
/boot/bzImage root=/dev/loop0 initrd=/initdisk.gz
initrd
/initdisk.gz
#
title
Other operating systems:
root
title
dos
root (hd0,0)
makeactive
savedefault
chainloader +1
La Console !© par Patrick Hautrive !;~) 2010
65
Un autre exemple de fichier de configuration de Grub (/boot/grub/grub.conf)
#
defaults 0
timeout 10
splashimage= (hd0,4) /boot/grub/splash.xpm.gz
color white/blue blue/green
#
title
linux
root (hd0,4)
kernel /boot/vmlinuz­2.4 root=/dev/hda5 ro quiet splash devfs=nomount
initrd /boot/initrd.img
savedefault
boot
#
title win98
hide
(hd0,0)
hide
(hd0,1)
unhide
(hd0,2)
hide
(hd0,3)
root (hd0,2)
makeactive
chainloader +1
#
title
windows2000
hide
(hd0,0)
hide
(hd0,1)
hide
(hd0,2)
unhide
(hd0,3)
root (hd0,3)
makeactive
chainloader +1
#
title floppy
root (fd0)
chainloader +1
#
Le prompt de Grub
Le prompt de Grub («grub>») s'obtient dans un terminal virtuel en lançant la commande «grub» ou en pressant la touche C quand le menu du chargeur se présente à l'écran lors du démarrage du système. La Console !© par Patrick Hautrive !;~) 2010
66
Les commandes internes à Grub sont affichées en pressant la touche Tab ou à l'aide de la commande interne «grub> help –all».
#La création d'une disquette de boot pour Windows avec Grub.
reboot
#Press C éditing the Grub command line
hide (hd0,0)
hide (hd0,1)
#Insert Floppy for Boot
chainloader (fd0) +1
reboot
#L'installation de la partition Windows dans Grub
reboot
root (hd0,2)
makeactive
chainloader +1
boot
reboot
#L'installation du chargeur Grub sur le PBR après l'installation d'un nouveau Gnu Linux
reboot
Press C for the Grub prompt
root (hd0,4)
kernel /boot/vmlinz­2.4.19 root=/dev/hda5
boot
quit
reboot
#Reboot sur l'ancien Gnu Linux pour modifier le fichier de configuration «/boot/grub/menu.1st».
vi /boot/grub/menu.1st
title
linux­new
root
(hd0,4)
kernel /boot/vmlinuz­2.4.19 root=/dev/hda5 ro quiet
chainloader (hd0,4) +1
La disquette stage de Grub
Le «stage1» correspond au secteur de boot de la disquette (les 512 premiers octets) et le «stage2» s'installe à la suite pour constituer une disquette de boot avec une image préparée. Les «stages» sont aussi présent dans le répertoire de démarrage de Grub «/boot/grub/stage1» et «/boot/grub/stage1». La commande «setup» de Grub installe le chargeur sur le MBR.
La Console !© par Patrick Hautrive !;~) 2010
67
locate /grub/i386­pc
cd /lib/grub/i386­pc
hd /boot/grub/stage2|less
dd if=stage1 of=/dev/fd0 bs=512 count=1
dd if=stage2 of=/dev/fd0 bs=512 seek=1
reboot
grub
help –all
find /boot/grub/stage1
root (hd0,0)
setup (hd0)
reboot
fdisk ­l
La disquette de boot de Grub
La disquette de boot est créer, puis la configuration de Grub est replacé dans l'état initial.
mke2fs /dev/fd0
mkdir /mnt/floppy ; mount /dev/fd0 /mnt/floppy
mkdir ­p /mnt/floppy/boot/grub
cp /lib/grub/i386­pc/stage1 /mnt/floppy/boot/grub
cp /lib/grub/i386­pc/stage2 /mnt/floppy/boot/grub
grub
root (fd0)
setup (fd0)
quit
reboot
grub
root (hd0,0)
kernel /boot/vmlinuz root=dev/hda1 ro quiet
boot
quit
La Console !© par Patrick Hautrive !;~) 2010
68
INITRD
Le démarrage INITRD
Le démarrage du système peut être accéléré en chargeant en mémoire une image disque (Ram Disk) contenant un noyau provisoire, une racine et les modules appropriés pour piloter les disques (SCSI) ou les systèmes de fichiers (EXT3). Le chargeur de démarrage est configuré pour retrouver sur le disque cette image et la charger en mémoire. C'est la procédure «initrd» (Init Ram Disk) qui ensuite charge en mémoire le véritable noyau et monte le véritable système de fichier et présente l'invite de connexion.
Le démarrage du système avec Initrd une image disk en mémoire (Ram Disk)
Le fichier spécial de périphérique «/dev/initrd».
L'image initrd «/boot.initrd.img­2.6.10­5­686».
La carte du système «/boot/System.map­2.6.10­5­686».
La configuration des options de compilation pour le noyau «/boot/config­2.6.10­5­686».
Le noyau Gnu Linux «/boot/vmlinuz­2.6.10­5­686».
Le répertoire «/usr/share/initrd­tools» rassemble des fichiers.
La commande «mkinitrd» permet de créer l'image initrd avec «/etc/mkinitrd/mkinitrd.conf».
La commande «mkcramfs» permet de créer un système de fichiers compressés pour la mémoire.
Les fichiers pour initrd sont placés dans le répertoire de démarrage.
Le Map Installer renseigne le chargeur sur les adresses physiques des blocs du disque. Ces adresses physiques dépendent de la géométrie et du partitionnement du disque.
Les exemples initrd
mkdir /ramdisk
cat /etc/lilo.conf
image=/boot/vmlinuz
label=linuxramdisk
ramdisk=60
ls ­l /dev/ram*
mke2fs /dev/ram1
mount /dev/ram1 /ramdisk ; mount
df /ramdisk
La Console !© par Patrick Hautrive !;~) 2010
69
INITTAB
Le pseudo processus
Le processus init est lancé par le pseudo processus de PID zéro qui a pris la main après le chargeur de démarrage (grub) et qui a déjà chargé en mémoire les bases du système Gnu Linux, dont le noyau (vmlinuz), les modules et les pilotes intégrés au noyau (kmod), le système de fichier principal (root) et la pile de protocole réseau (tcp­ip).
C'est donc le pseudo processus qui s'est occupé du chargement du noyau (kernel), et qui passe le relais en lançant le processus init pour la phase d'initialisation du système. Le processus init consulte son fichier de configuration “/etc/inittab” et poursuit l'installation et la configuration du système.
L'initialisation du système
L'initialisation du système utilise largement les scripts pour la configuration et le lancement d'exécutable. Tous les processus du système sont lancés à partir du processus “init” qui porte toujours le PID 1. Le processus “/sbin/init” est en quelque sorte le parent de tous les autres processus. Comme les processus enfants sont interrompus quand le processus parent qui les a générés est arrêté, si le processus “init” est stoppé, alors tous le système est stoppé. Selon les distributions, les scripts d'initialisation et les fichiers de configuration ne sont pas toujours placés au même endroit (/etc, /etc/init.d, /etc/rc.d ou /etc/rc.d/init.d), mais ils figurent toujours dans le répertoire de configuration (/etc). En effet, chaque distribution crée l'arborescence qui lui semble la plus appropriée, et souvent les fichiers ne sont que des liens symboliques vers d'autres fichiers dans d'autres répertoires.
Le processus “init”
Le processus init lance le script «sysinit» («/etc/init.d/rcS») qui lance les scripts systèmes («/etc/rcS.d/*»), puis, il lance éventuellement le mode single user (sulogin), ou les scripts Run Command correspondant au niveau d'initialisation, et enfin il lance la procédure de connexion (getty) qui présentera un prompt de login sur les terminaux virtuels (Ctrl+Alt+F1 à Ctrl+Alt+F6).
Le fichier «/etc/inittab» définit le niveau d'initialisation (initdefault), la séquence de contrôle des touches Ctrl+Alt+Del qui renvoi à la commande «/sbin/shutdown», le comportement en cas de perte d'alimentation (power) et le basculement vers une éventuelle alimentation de secours (onduleur).
La Console !© par Patrick Hautrive !;~) 2010
70
La procédure d'initialisation du système Gnu Linux
init sysinit
single
run command
services
Ctrl+Alt+Del
powerwait
TTY
/etc/inittab /etc/init.d/rcS
/etc/init.d/rc
powerfailnow getty
initdefault /etc/rcS.d/* sulogin /etc/rc5.d/[KS]??* /etc/init.d/* sbin/shutdown powerokwait login
Les méthodes inittab
Les méthodes inittab permettent de configurer le comportement des commandes définis dans «/etc/inittab». Les méthodes sont placées dans la troisième colonne d'une ligne de configuration.
Les méthodes du fichier /etc/inittab
initdefault
sysinit
ctrlaltdel
respawn
once
boot
bootwait
wait
kbrequest
powerfail
powerwait
powerokwait
powerfailnow
ondemande
off
Si la valeur est absente, le processus init demandera le niveau a appliquer
La méthode pour lancer le script sysinit
La méthode pour configurer le comportement des touches Ctrl+Alt+Del
La commande est relancée quand celle­ci s'est terminée (prompt de login)
La commande n'est exécuté qu'une seule fois à chaque initialisation
La commande n'est exécuté qu'au démarrage du système
La commande n'est exécuté qu'au démarrage et init attend le signal de fin
La commande est exécuté et le processus père attend le signal de fin
La commande qui permet de configurer certaines touches (Keyboard Magic Keys)
La méthode pour envoyer le signal SIGPWR à init en cas de perte d'alimentation
La méthode pour basculer l'alimentation sur un onduleur (UPS)
La méthode pour rebasculé l'alimentation en mode normal
Le fichier inittab
Le fichier «/etc/inittab» est le fichier de configuration du processus init. Ce fichier fonctionne ligne à ligne, c'est­à­dire qu'à chaque ligne correspond une configuration. Les éléments d'une même ligne sont séparés par le caractère séparateur conventionnel du deux points («:»), déterminant ainsi des colonnes. Chaque colonne est constituée du même type de données.
Dans la première colonne, un ou deux caractères forment un identifiant unique pour la ligne (identificator). Dans la deuxième colonne, les chiffres correspondent aux niveaux d'initialisation concernés (runlevel). Quand cette deuxième colonne est vide, cela signifie que tous les niveaux sont concernés par cette ligne. Dans la troisième colonne, figure les méthodes appliquées (method). Dans la La Console !© par Patrick Hautrive !;~) 2010
71
quatrième colonne s'inscrit éventuellement le chemin absolu de la commande (command). L'administrateur peut définir d'autres lignes de configuration, afin d'automatiser certaines tâches à chaque démarrage.
La commande «telinit ­Q» permet une relecture du fichier «/etc/inittab».
Le fichier /etc/inittab
Identificator
id
si
0
c1
1
T1
~~
l5
z6
ca
cx
pf
pn
po
pr
px
ud
x
runlevel
3
S
0
12345
2345
23
S
5
6
12345
12345
12345
5
method
initdefault
sysinit
wait
respawn
respawn
respawn
wait
wait
respawn
ctrlaltdel
ctrlaltdel
powerwait
powerfailnow
powerokwait
powerokwait
powerfail
once
respawn
command
/etc/init.d/rcS
/etc/rc.d/rc
/sbin/mingetty tty1
/sbin/getty 38400 tty1
/sbin/getty ­L ttyS1 9600 vt10
/sbin/sulogin
/etc/init.d/rc 5
/sbin/sulogin
/sbin/shutdown ­t1 ­a ­r now
/sbin/shutdown ­t3 ­Rf now
/etc/init.d/powerfail start
/etc/init.d/powerfail now
/etc/init.d/powerfail stop
/sbin/shutdown ­c
/sbin/shutdonw ­h ­f +2
/sbin/update
/etc/X11/prefdm
Les niveaux d'exécution
Le niveau d'initialisation (ou niveau d'exécution) est choisi au boot ou définit dans le fichier «/etc/inittab». La commande «runlevel» permet de connaitre le niveau en cours. Les commandes «init» et «telinit» permettent de changer le niveau d'initialisation, sans rebooter, alors que le système a déjà démarré. A chaque niveau correspond une certaine configuration du système et des services qui sont généralement des serveurs ou DAEMON (Disk And Execution Monitor).
La configuration des niveaux d'initialisation peut changer d'une distribution à l'autre, mais en général, le niveau 0 est celui de l'arrêt du système (shutdown), le niveau 1 est dédié au dépannage (single), le niveau 5 est celui du mode graphique (xserver), et le niveau 6 celui du redémarrage de la machine La Console !© par Patrick Hautrive !;~) 2010
72
(reboot). Les niveaux 4, 7, 8 et 9 sont laissés libres pour la personnalisation de l'initialisation, et les niveaux correspondants à des lettres (S, s, a, b, c) sont des pseudo niveaux.
Les niveaux d'initialisation (runlevel) /etc/inittab (initdefault)
0
1
2
3
4
5
6
7
8
9
S, s
a
b
c
shutdown
single
multiuser
network
Pour arrêter le système
Pour démarrer en mode single user sans montage de file system (console) Pour démarrer en mode multi utilisateurs, mais sans le réseau (console)
Pour démarrer en mode multi utilisateurs, mais avec le réseau (console)
xwindow
reboot
Pour lancer le serveur graphique en mode multi utilisateur avec le réseaux
Pour redémarrer la machine
single
Synonyme du niveau 1 pour démarrer en mode single user (console) Les exemples init
uptime ; update ; runlevel
updatedb
ls /etc/init.d ; ls /etc/rcS.d ; ls /etc/rc5.d
find /etc ­name "*boot*"
find /etc ­name "*rc*" | less
find /etc ­name "*S*" | less
find /etc ­name "*K*"|less
/etc/init.d/rc 2
init 2
telinit 2
chkconfig –list httpd start
sysctl ­A
telinit ­t 10 3
telinit ­Q
grep ^id: /etc/inittab
shutdown ­r 6 ; shutdown ­h now
La Console !© par Patrick Hautrive !;~) 2010
73
SERVICES
Le niveau d'initialisation
Chaque niveau d'initialisation (1, 2, 3, 4, 5 ) est configuré pour lancer des scripts (Start ou Kill). Le script «rc» récupère le niveau d'initialisation (initdefault) et les noms des fichiers dans le répertoire d'initialisation correspondant (/etc/rc5.d/*), puis il lance les différents services qui s'y trouve dans l'ordre alphabétique. L'exécution du script «rc» conduit au lancement des services correspondants au niveau d'initialisation. Ainsi, à chaque niveau correspond une certaine configuration du système et des services (daemon). Selon le niveau d'initialisation, choisit au boot avec le prompt du chargeur ou paramétré dans le fichier «/etc/inittab», le système ne présentera pas les même caractéristiques, et certains services seront automatiquement lancés tandis que d'autres ne le seront pas.
Les scripts d'initialisation
Le comportement du processus “init” est défini dans le fichier “/etc/inittab” qui permet de configurer le niveau d'initialisation du système (runlevel). Le fichier «/etc/inittab», définit le lancement des scripts d'initialisation («sysinit», «rc» et «rc.local») qui vont s'occuper du chargement des différents services, et aussi, le lancement de la procédure de connexion de l'utilisateur au système.
Les scripts d'initialisation sont aussi appelés les scripts RC (Scripts Run Command) parce que ce sont essentiellement des scripts qui permettent de sélectionner les commandes qui vont être lancées pour le niveau d'initialisation choisit. Parmi les différents services qui sont lancés par les scripts d'initialisation se trouvent éventuellement, le super serveur internet (inetd ou xinetd) et l'interface graphique (xinit).
La centralisation des scripts
Les scripts d'initialisation sont centralisés dans un seul répertoire («/etc/init.d/*»). Chaque niveau d'initialisation possède sont propre répertoire, identifié par le chiffre correspondant à son niveau («/etc/rc5.d/*»). A l'intérieur de chacun de ces répertoires d'initialisation figurent des liens (link) qui pointent vers le script d'initialisation qui lui correspond.
C'est le processus «init» qui lance le script «/etc/init.d/rc», lequel en fonction du niveau d'initialisation choisit (initdefault), va lancer les uns après les autres les scripts d'initialisation se trouvant dans le répertoire d'initialisation.
La Console !© par Patrick Hautrive !;~) 2010
74
Le script run command
Les noms des liens figurant dans chacun des répertoires d'initialisation commencent soit par un K (kill), soit par un S (start) pour indiquer au script Run Command («/etc/init.d/rc») si le service correspondant doit être, pour ce niveau d'initialisation, respectivement arrêter ou démarrer.
Ensuite, le nom des liens est composé de deux chiffres indiquant la priorité d'exécution. Par exemple, dans le niveau zéro d'une distribution Debian («/etc/rc0.d/*»), le script correspondant au gestionnaire d'affichage (gnome display manager) K01gdm sera stoppé en premier, et le script correspondant à l'arrêt du système (/sbin/halt) S90halt sera lancé en dernier.
En général, les scripts de désactivation d'un service (K) sont placés avant les scripts d'activation d'un service (S). Il faut prendre en considération que l'administrateur peut changer le niveau d'initialisation avec la commande «init». Le passage d'un niveau à l'autre doit suivre la logique que les services du niveau précédent sont d'abord désactivés (avec les scripts K), et qu'ensuite seulement, sont activés les services correspondants au niveau demandé (avec les scripts S).
L'enchainement des scripts d'initialisation
init
Run Command
/etc/inittab ­­> initdefault 5 ­­> /etc/init.d/rc ­­> /etc/rc5.d/* ­­> K01 → S99
Services
­­> /etc/init.d/*
L'emplacement des scripts
Selon les distributions, l'organisation des scripts Run Command est différente. Les chemins des répertoires d'initialisation contenant les liens et l'ordre dans lequel sont lancés les services sont susceptibles de varier selon les distributions.
L'emplacement des scripts (Run Command)
/etc/rc.d/*
/etc/rc.d/init.d/*
/sbin/init.d/*
/etc/init.d/*
Slackware
Red Hat
SuSE up to 7
Debian, SuSE 8
Le lancement des services
Les scripts de chaque niveau d'initialisation ne sont lancés qu'une seule fois, lors du démarrage ou lors du changement de niveau. Chaque script va lancer une commande correspondant au service qu'il propose, et cette commande peut être, soit une commande de configuration du système, soit une commande lançant un serveur en tâche de fond. Les services constitués de serveurs (daemon) sont aussi appelés des sous systèmes, et ils attendent de pouvoir rendre service au système ou aux La Console !© par Patrick Hautrive !;~) 2010
75
utilisateurs.
Le lancement des services utilisent les scripts Run Command qui acceptent selon les cas plus ou moins de paramètres (start, stop, status, restart, reload, force­reload). Les scripts Run Command sont lancés à l'initialisation avec le paramètre stop quand le nom commence par un K (kill), et avec le paramètre start quand le nom commence par un S (start). Ainsi, la commande «/etc/init.d/networking restart» permet d'arrêter le réseau (stop) et de le relancer (start) tout de suite, prenant en considération la nouvelle configuration des interfaces réseaux. La commande «chkconfig» permet de configurer le démarrage des services. La commande «service» chez Red Hat permet également de gérer l'activation des services. La commande «redhat­config­services» chez Red Hat permet de gérer la configuration des services. Chez SuSE chaque service peut être relancé ou arrêté avec un script dédié qui se trouve dans un répertoire spécialisé, lequel figure dans le PATH de l'utilisateur root («/usr/sbin/rcnfs restart»).
La Console !© par Patrick Hautrive !;~) 2010
76
WRAPPERTCP
Le service Internet
Le service internet est lancé par le script run command du processus «init». Le service internet est aussi appelé le démon internet. Un démon (francisation de l'anglais “daemon”) est un serveur qui en permanence est à l'écoute d'une demande de service. C'est un programme qui tourne en permanence en tâche de fond (background) et qui vérifie régulièrement si une demande lui est adressée.
Le démon internet est un serveur qui reste à l'écoute de toutes les demandes de connexion réseau et qui surveille les ports des requêtes tcp provenant de toutes les cartes réseaux. Quand une demande de connexion est détectée, le serveur internet l'examine et la redirige vers le service approprié, en l'occurrence, vers un autre serveur spécialisé dans le type de connexion en question. Ainsi, le service internet est aussi appelé le wrapper tcp, parce qu'il écoute toutes les connexions tcp et les redirige vers le serveur approprié en fonction du port et du protocole de la demande.
Les serveurs réseaux qui ne sont pas gérés par le démon internet doivent être protégés par un pare feu (firewall) comme iptables qui assure un filtrage des requêtes au niveau des ports (STATEFULL INSPECTION). Un serveur réseau peut avoir plusieurs numéros de port et plusieurs protocoles, et les numéros de port des services standards peuvent être changés («/etc/services»). Les conventions d'attribution des numéros de ports aux services réseaux sont maintenues par l'organisation IANA.
Le wrapper tcp
Le service internet (internet daemon) est aussi appelé le wrapper tcp. Le démon Internet est appelé “wrapper TCP” parce qu'il enveloppe toutes les demandes de connexion de la pile de protocoles réseaux TCP (Transport Control Protocol). Le démon internet surveille les demandes de connexion provenants de l'extérieur et les redistribuent aux services ou serveurs réseaux correspondants. Une liste des correspondances entre le type de services réseaux et le numéro de port est consultée dans le fichier «/etc/services».
Par exemple, le démon internet est à l'écoute sur une interface réseau et capte une demande de connexion FTP, il lance alors une instance de serveur FTP en mémoire, puis, il répercute la demande de connexion au serveur FTP qui la traite. Ainsi, un seul démon est perpétuellement en attente de demande de connexion (un seul processus), et les serveurs ne sont lancés que quand ils sont nécessaires. La Console !© par Patrick Hautrive !;~) 2010
77
Le mécanisme de Wrappertcp
Le Wrappertcp gère la plupart des types de connexion provenant de l'extérieur. En fait, cela dépend si le service a été intégré au Wrappertcp, ou s'il est lancé séparément. Les connexions distantes permettent de se connecter à un service sur un système à distance (remote), via le réseau. C'est très pratique pour l'administration et la configuration à partir d'un seul poste, sans se déplacer physiquement.
Le mécanisme de Wrappertcp
Socket + Port
(Requête client)
Inetd
Wrapper TCP
(Ecoute serveur) (Redirection)
Service
Exif
(Lancement du démon) (Fin de connexion)
Les communications réseaux
Les communications réseaux utilisent les socket et les RPC. Les sockets sont des fichiers spéciaux qui permettent l'échange de données dans une connexion réseau entre un client et un serveur (communication inter processus distant). Les RPC (Remote Procedure Call) qui utilisent le format XDR permettent également un échange de données réseaux. Par exemple, le service NFS (Network File System) de partage de fichiers utilisent le Portmapper et emploient les RPC.
Les communications réseaux
RPC (format XDR)
Socket (remote process)
TCP­IP (pile de protocoles)
La commande «rpcinfo» permet d'interroger les serveurs RPC.
Le fichier «/etc/rpc» est un fichier qui associe les noms et les numéros des programmes RPC.
Le fichier «/etc/portmap»
L'initialisation des interfaces
Au démarrage du système, l'initialisation des interfaces réseaux s'effectue juste avant le lancement du service Internet. La commande «ifconfig» permet la configuration des interfaces réseaux (les cartes réseaux Ethernet qui portent le nom de eth0, eth1).
Les fichiers de configuration des interfaces réseaux diffèrent selon les distributions Gnu Linux. Par exemple, la configuration des interfaces réseaux peut provenir du script «/etc/rc.d/rc.inet1» et le lancement du démon internet «inetd» peut provenir du script «/etc/rc.d/rc.inet2».
La Console !© par Patrick Hautrive !;~) 2010
78
Les instances de serveur
Selon les configurations, le démon Internet peut être “multithread”, c'est­à­dire qu'à une demande de connexion correspond le lancement d'une instance du service (un processus par demande).
A contrario, le démon Internet peut être configuré en «singlethread» pour lancer une instance lors de la première demande, puis transmettre à la même instance, les demandes suivantes (un processus par service).
Les démons internet
Deux démons internet se sont succédés, le démon «inetd» qui est communément appelé le serveur internet, et le démon «xinetd», qui est plus récent, et qui est aussi appelé le super serveur internet. Les deux services internet proposent le même principe d'écoute et de redirection des demandes de connexion (wrapper tcp).
Le démon internet «inetd»
Le démon internet «inetd» est un service qui lance le serveur «tcpd», lequel s'occupe de rediriger les demandes de connexions (wrapper tcp). Le fichier de configuration de «inetd» est «/etc/inetd.conf».
La commande «man inetd» donne une description du service internet.
La commande «man update­inetd» explique comment ajouter des services réseaux au démon internet.
La configuration du démon Internet Inetd
Commands
/usr/sbin/inetd
/usr/sbin/tcpd
update­inetd
Files
/etc/inetd.conf
/etc/init.d/inetd
Le super démon internet «xinetd»
Le super démon internet «xinetd» (extended inetd) est un service qui redirige lui même les requêtes tcp, et qui intègre le wrapper tcp, il est compatible IPV6 et il gère les journaux (log). Le fichier de configuration de «xinetd» est «xinetd.conf».
La commande «inetd2xinetd» permet d'évoluer du démon internet vers le super démon.
La Console !© par Patrick Hautrive !;~) 2010
79
La configuration du démon Internet Inetd
Commands
xinetd
inetd2xinetd
Files
/etc/rc.d/xinetd.conf
/etc/rc.d/xinet.d/*
Le fichier services
Le fichier «/etc/services» fait la correspondance entre le nom du service réseau et le numéro de port qui lui est attribué officiellement par l'IANA (Internet Assigned Numbers Authority). Les requêtes peuvent utiliser les protocoles tcp ou udp.
La Console !© par Patrick Hautrive !;~) 2010
80
Les principaux services réseaux tcp et leur numéro de port attribués par l'IANA (/etc/services)
daytime
netstat
ftp­data
ftp
ssh
telnet
smtp
time
nameserver
whois
domain
bootps
bootpc
gopher
finger
www
link
kerberos
hostnames
rtelnet
pop3
sunrpc
auth
sftp
uucp­path
nntp
ntp
imap2
mailq
irc
ipx
imap3
rpc2portmap
clearcase
ldap
https
isakmp
13/tcp
15/tcp
20/tcp
21/tcp
22/tcp
23/tcp
25/tcp
37/tcp
42/tcp
43/tcp
53/tcp
67/tcp
68/tcp
70/tcp
79/tcp
80/tcp
87/tcp
88/tcp
101/tcp
107/tcp
110/tcp
111/tcp
113/tcp
115/tcp
117/tcp
119/tcp
123/tcp
143/tcp
174/tcp
194/tcp
213/tcp
220/tcp
369/tcp
371/tcp
389/tcp
443/tcp
500/tcp
ipp
exec
biff
login
who
shell
syslog
printer
talk
ntalk
route
timed
tempo
courier
conference
netnews
netwall
gdomap
uucp
klogin
kshell
nntps
ldaps
webster
rsync
ftps­data
ftps
telnets
imaps
ircs
pop3s
631/tcp
512/tcp
512/udp
513/tcp
513/udp
514/tcp
514/udp
515/tcp
517/udp
518/udp
520/udp
525/udp
526/tcp
530/tcp
531/tcp
532/tcp
533/udp
538/tcp
540/tcp
543/tcp
544/tcp
563/tcp
636/tcp
765/tcp
873/tcp
989/tcp
990/tcp
992/tcp
993/tcp
994/tcp
995/tcp
socks
kazaa
nessus
lotusnote
ingreslock
kermit
radius
unix­status
log­server
remoteping
cvspserver
venus
mon
dict
mysql
nut
radmin­port
rfe
xmpp­client
xmpp­server
postgresql
x11
gnutella­svc
font­service
hkp
1080/tcp
1214/tcp
1241/tcp
1352/tcp
1524/tcp
1649/tcp
1812/tcp
1957/tcp
1958/tcp
1959/tcp
2401/tcp
2430/tcp
2583/tcp
2628/tcp
3306/tcp
3493/tcp
4899/tcp
5002/tcp
5222/tcp
5269/tcp
5432/tcp
6000/tcp
6346/tcp
7100/tcp
11371/tcp
La Console !© par Patrick Hautrive !;~) 2010
81
kerberos4
swat
linuxconf
poppassd
spamd
xtel
frox
fax
hylafax
rplay
nsca
mrtd
canna
sane
ircd
zope­ftp
webcache
tproxy
xinetd
zope
amanda
xpilot
750/tcp
901/tcp
98/tcp
106/tcp
783/tcp
1313/tcp
2121/tcp
4557/tcp
4559/tcp
5555/tcp
5667/tcp
5674/tcp
5680/tcp
6566/tcp
6667/tcp
8021/tcp
8080/tcp
8081/tcp
9098/tcp
9673/tcp
10080/udp
15345/tcp
Les exemples de inetd
less /etc/services
man 8 inetd
man 8 tcpd
man 8 update­inetd
man 8 xinetd
man 5 xinetd.conf
man 5 xinetd.log
man 5 host_access
less /etc/init.d/inetd
ls ­l /usr/sbin/in.telnetd
itox
echo ALL:ALL EXCEPT localhost > /etc/hosts.deny
cat /etc/hosts.allow
grep ^ftp /etc/inetd.conf
/etc/rc.d/init.d/inet restart
echo telnet stream tcp nowait root /usr/bin/tcpd in.telnetd >> /etc/inetd.conf
tail ­f /var/log/secure
telnet localhost
echo in.telnetd: ALL EXCEPT LOCAL >> /etc/host.deny
echo in.telnetd: .free.org >> /etc/host.allow
La Console !© par Patrick Hautrive !;~) 2010
82
LOGIN
L'invite de connexion
A l'issue de l'initialisation, le système présente en générale une invite de connexion. L'invite de connexion peut être, soit une invite de connexion sur un terminal, soit l'affichage graphique d'ouverture de session. L'utilisateur renseigne alors son “login” (le nom de connexion ou de son compte figurant dans le fichier “/etc/passwd”), puis le mot de passe associé (conservé dans le fichier “/etc/shadow”). Quand c'est toujours le même utilisateur qui se sert de la même machine, le gestionnaire de session graphique peut­être configuré de telle sorte que l'ouverture de sa session soit automatique, et que le bureau s'affiche directement.
Les modes de connexion
Les modes de connexion dépendent du niveau d'initialisation et de la localisation du système. Au login, le noyau ouvre automatiquement les fichiers spéciaux pour le clavier et l'écran (respectivement l'entrée et la sortie par défaut des processus).
Les modes de connexion (login)
La connexion en mode terminal avec la commande “getty”
La connexion en mode graphique avec le Display Manager (“gdm”)
La connexion à distante (remote) en mode client serveur avec la commande “ssh”
La connexion en mode terminal
Au démarrage, le processus initial lance tous les scripts qui sont attachés au niveau d'initialisation (“runlevel”). La conduite du processus “init” (PID=1) est définie dans le fichier “/etc/inittab”. En fin de parcours, le processus “init” lance la procédure de connexion avec la commande “getty” qui présente l'invite de connexion.
Le processus de la commande “getty“ sera automatiquement relancé pour proposer de nouveau l'invite de connexion si celle­ci échoue ou si l'utilisateur se déconnecte (directive respawn du fichier “/etc/inittab”). La commande “getty” passe la main à la commande “login” qui procèdera à l'authentification de l'utilisateur, et qui elle même passera la main au shell (le shell de l'utilisateur définit dans le fichier “/etc/passwd”).
La commande “login” récupère le nom de l'utilisateur et le mot passe saisi qu'elle va crypter avec la commande “crypt” pour le comparer avec celui qui correspond au nom de l'utilisateur (“/etc/shadow”) à l'aide de la commande “diff”. Si la vérification est probante (et passés les autres contrôles sur l'accès La Console !© par Patrick Hautrive !;~) 2010
83
au terminal, comme les fichiers “/etc/securetty”, «/etc/nologin» et «/etc/login.defs» ;­), la commande “login” continue en affichant le message du jour (“/etc/motd” pour message of the day et «/etc/issue»), l'avertissement mail si la boite contient un message non lu, et enfin, s'ils existent, la commande “login” interprète l'environnement contenu dans le fichier de profile standard («/etc/profile») et les fichiers de profile personnels de l'utilisateur (“~/.profile”, «~/.bash_profile» et “~/.bashrc”).
Le shell “bash” prend le relais en affichant le prompt dont l'aspect est défini dans les variables d'environnement $PS1, $PS2 et $PS3. Le shell “bash” est le shell par défaut de Gnu Linux. Le shell reste en attente des commandes de l'utilisateur jusqu'à ce que celui­ci frappe Ctrl+D pour interrompre le processus du shell ou saisisse la commande “exit” qui produit le même effet. Toutes les commandes validées par l'utilisateur sont des gérées par des processus enfants de shell, et tous les processus enfants du shell sont stoppés si le processus du shell est stoppé.
La procédure d'authentification à la base des comptes
init
/etc/inittab
getty
/etc/passwd
login
/etc/shadow
crypt
/etc/motd
bash
~/.profile
exit
~/.bashrc
Le contrôle des connexions
Le contrôle des connexions va bien au­delà de l'authentification à la base des comptes et de la vérification du mot de passe dans les fichiers «/etc/passwd» et «/etc/shadow». D'autres contrôles ont éventuellement lieu selon la configuration.
En fait, souvent des contrôles supplémentaires se produisent quand le fichier correspondant est présent au bon endroit dans l'arborescence. Quand le fichier n'existe pas, le contrôle n'est pas effectué. La procédure d'authentification est également le moment propice pour configurer l'environnement de l'utilisateur.
La procédure de connexion et de configuration de l'environnement de l'utilisateur
Password
Terminal
Environment
Locale
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
/etc/netgroup
/etc/nologin
/etc/login.access
/etc/porttime
/etc/pam.d/login
/etc/security/*
/etc/securetty
/etc/usertty
/etc/terminfo
/etc/termcap
/etc/gettydefs
/etc/ttytab
/etc/issue
/etc/motd
/boot/bootmsg.txt
/usr/games/fortune
/etc/shells
/etc/bash_completion
/etc/login.defs
/etc/environment
/etc/sysctl
/etc/profile
/etc/bash.bashrc
/etc/limits
/etc/skel
/etc/aliases
/etc/sudoers
/etc/locale.alias
/etc/locale.gen
/etc/gdm/locale.conf
/etc/profile.d/lang.sh
/etc/localtime
/etc/alternatives
/etc/magic
/etc/timezone
La Console !© par Patrick Hautrive !;~) 2010
84
Profile
~/.login
~/.bash_profile
~/.bash_login
~/.bash_history
~/.profile
~/.bashrc ~/.Xsession
~/.Xdefaults
~/.Xinitrc
~/.signature
~/.bash_logout
Les journaux de connexion
Les journaux de connexion sont en général enregistrés dans le répertoire «/var/log/*». Ils permettent de conserver une trace des tentatives de connexion et devraient être régulièrement consultés par l'administrateur du système. Lors d'une première connexion, à la suite d'une installation, l'administrateur peut profiter de la consultation des journaux qui retracent le déroulement de la procédure d'installation. De même, à chaque démarrage du système, des journaux de boot ont enregistrés les évènements de la procédure d'initialisation du système.
Les journaux d'installation, de démarrage et de connexion
Installation
Boot
/var/log/installer/messages
/tmp/install.log
/root/anaconda.ks.cfg
/proc/kmsg
/var/log/message
/var/log/boot.msg /var/log/boot.log /var/log/dmesg Login
Gnu Linux
Suze
RedHat
Debian
/var/log/wtmp
/var/log/secure /var/log/lastlog /var/log/sulog /var/log/dmesg /var/log/utmp /var/log/btmp (last)
(login)
(lastlog)
(su)
(dmesg)
(who)
(lastb)
Les paramètres locaux
Les paramètres locaux sont le temps, l'heure ou la date, la zone géographique TZ (Time Zone), la langue (locales)...
Les commandes pour les paramètres locaux
Commands
date
time­admin
times
clock
hwclock
cal
Zone
tzconfig
tzfile
tzsetup
tzselect
zdump
zic
Time
ntp
ntp­keygen
ntpdate
ntpdc
ntpq
ntpsweep
Language
echo $TZ
loadkey fr
Les exemples de login
loadkey fr
uname ­a ; runlevel
echo $SHELL ; echo $PS1 ; echo $BASH_ENV
chsh
env
La Console !© par Patrick Hautrive !;~) 2010
85
Profile
logname ; id ; who ; lastlog
sync
umount ­a
free init 6 &
touch file ; echo «hello world» > file
cp file copy
echo «good bye world» >> file
diff ­h file copy
wc < file
df ­h ; du ­h ; ps $$
umask ; ulimit ; exit
wall % message to all users
(write all)
La Console !© par Patrick Hautrive !;~) 2010
86
SHELL
L'interface avec le noyau
Le shell est l'interface privilégiée entre l'utilisateur et le noyau. C'est le shell qui reçoit les commandes de l'utilisateur sur son entrée standard (KEYBOARD) et qui restitue les résultats sur sa sortie standard du terminal (DISPLAY 0.0). La sortie standard correspond en général au premier écran de l'ordinateur, mais celle­ci peut être redirigée vers l'entrée d'un autre processus ou vers un fichier.
C'est le shell qui analyse la syntaxe des commandes et qui lance les appels systèmes (system calls). Les appels systèmes sont les fonctions du noyau. Le shell est un processus qui est lancé, soit par la procédure d'initialisation, soit par l'utilisateur.
L'interpréteur de commande
Le shell est un interpréteur de commande. Le shell est un programme qui interprète les commandes passées par l'utilisateur. Le shell est l'interface entre l'utilisateur et le noyau. Le shell peut être un shell de connexion qui est lancé à l'issue de la procédure d'initialisation, ou un shell interactif qui est lancé par l'utilisateur depuis l'interface graphique. Après la validation d'une ligne de commande, le shell en contrôle la syntaxe et lance les différents processus enfants qui seront gérés par le noyau et qui accompliront les tâches demandées par l'utilisateur. Les processus enfants sont des processus clonés sur le modèle que le processus parent, c'est­à­dire qu'ils partagent le même environnement de travail (les droits, les variables d'environnement, etc.).
Les processus sont en général lancés avec l'identité (user) et les droits de l'utilisateur (permissions).
Le shell Bash
Le shell Bash (Bourne Again Shell) est le shell par défaut des distributions Gnu Linux. C'est un shell complet, fonctionnel, performant et personnalisable. Le shell Bash est conforme à la norme POSIX. Par défaut, c'est le shell Bourne (“/bin/sh”) qui est attribué à un nouvel utilisateur (“useradd”) qui ne possède pas de répertoire personnel.
La commande «echo $­» affiche les options actives du shell Bash.
La commande «man bash» présente les différentes options du shell Bash (option flags).
http://en.wikipedia.org/wiki/Bash_%28Unix_shell%29
La Console !© par Patrick Hautrive !;~) 2010
87
Les options du shell Bash
Le shell bash est lancé au boot comme un shell de connexion (login shell), et de manière interactive (interactive shell) lorsqu'un terminal graphique est lancé. La commande «man bash» présente la façon d'invoquer un shell bash (invocation) de manière non ineractive. Un shell non interactif ne lira pas les fichiers habituels pour les profiles, mais les fichiers «/etc/bash.bashrc» et «~/.bashrc». La commande «bash ­norc cmd» permet de lancer un shell de manière non interactive sans aucune lecture de fichier d'environnement.
La commande «echo $­» montre les options actives pour le shell en cours (active bash option).
La commande «bash –help» montre un résumé des options du shell bash (bash option).
La commande «bash ­c help» présente les commandes internes au shell bash (builtin commands) La commande «bash ­c "help set"» présente la signification des différentes options (bash options).
La commande «bash ­c «cmd»» permet de lancer une commande dans un nouveau shell non interactif.
La commande «bashbug» permet de faire un rapport de bug auprès des développeurs de Bash.
La commande «bash ­rcfile bashconfigfile» permet de lancer un shell non interactif avec pour seule configuration le fichier passé en argument.
La Console !© par Patrick Hautrive !;~) 2010
88
Les options du shell Bash (man bash)
Options
Fonction
­c
Lancer un shell de façon non interactive (non interactive shell)
­i Lancer un shell de manière interactive (interactive shell)
­l
Lancer un shell de connexion (login shell)
­r
Lancer un shell dans un environnement restreint (restricted shell)
­s Lancer un shell qui reçoit ses commandes depuis l'entrée standard (stdin)
­v Lancer un shell qui affiche les commandes qu'il reçoit depuis l'entrée standard (print stdin)
­x
Lancer un shell pour le débogage qui affiche les commandes quand elles sont exécutées (print exec)
­D
Lancer un shell afin d'extraire des chaines de caractères pour les traduire (non interactive shell)
[­+]O
Lancer un shell avec ou sans les commandes internes à Bash (builtin options shopt)
­­ Lancer un shell en indiquant la fin des options et le commencement des arguments
Lancer un shell en mode résolution avec l'option function tracing (extdebug option)
­­debugger
­­dump­po­strings Equivalent à ­D avec le format Gnu gettext (portable object)
­­dump­strings
­­help
Equivalent à ­D
Affiche les principales options (help)
­­init­file file
­­rcfile file
­­login
Lancer un shell non interactif avec pour seule configuration le fichier passé en argument (configuration file)
Equivalent ­l (login shell)
­­noediting
Lancer un shell interactif sans utiliser la librairie Gnu readline pour lire les commandes (no readline gnu library)
­­noprofile
Lancer un shell sans aucune lecture de fichier de profile (no «/etc/profile», «~/.bash_profile», «~/.bash_login», or «~/.profile»)
­­norc Lancer un shell interactif sans aucune lecture de profile (no «~/.bashrc»)
­­posix
Lancer un shell avec le comportement d'un shell POSIX (posix mode)
­­restricted
Equivalent à ­r (restricted shell)
­­verbose
Equivalent à ­v (verbose)
­­version
Affiche la version du shell Bash (bash version)
La Console !© par Patrick Hautrive !;~) 2010
89
L'environnement du shell
L'environnement du shell correspond en générale à l'environnement de l'utilisateur. Toutefois, l'environnement d'un utilisateur peut être restreint à une partie du système seulement (“rbash”), limité à une partie de l'arborescence (“chroot”) et à une partie des commandes.
Ces environnements particuliers (nesting) sont parfois des leurres pour tromper l'ennemi (honey pot). Lors d'une connexion à distance, un utilisateur se connecte à un serveur sur lequel il dispose d'un compte (login et password) qui lui donne accès à un shell distant (remote shell).
Un shell de connexion est généralement “attaché” à un terminal (“tty”). Un shell interactif est “attaché” à un pseudo terminal. Les terminaux sont des périphériques qui sont utilisés pour capter les entrées du clavier (STDIN) et afficher les sorties sur l'écran (STDOUT et STDERR).
Le shell est l'interpréteur de commandes
La connaissance de la ligne de commande
La connaissance de l'environnement La connaissance des variables d'environnement
L'affichage des variables d'environnement
La connaissance de la table de codage
La connaissance des signaux envoyés aux processus
La liste des commandes internes (builtin)
La recherche d'un motif dans l'afficheur des pages man
L'environnement shell restreint L'arborescence limitée
(“man ­a intro”)
(“man environ”)
(“info coreutils env”)
(“env”)
(“man ascii”)
(“man signal”)
(“man bash”)
(“/motif”)
(“rbash”)
(“chroot”)
Les shells POSIX
La norme POSIX permet d'uniformiser les fonctionnalités des Shells et de rendre compatibles les scripts. Les shells qui satisfont à la norme POSIX (Portable Operating System Interface) remplissent un cahier des charges en commun, ce qui rend les scripts compatibles.
Le shell Gnu Bash est compatible POSIX. La norme POSIX définit des critères fonctionnels précis pour la rédaction d'une ligne de commande, la définition de l'environnement et les communications entre les processus.
La Console !© par Patrick Hautrive !;~) 2010
90
Les caractéristiques du shell Bash et la norme POSIX
L'édition de la ligne de commande (prompt, historique, colorisation, complétion)
L'analyse syntaxique de la ligne de commande (mots, variables, chemins, validation)
Le traitement séquentiel (nohup, background)
L'expansion des variables (internal, environment)
L'interprétation des séquences (escape, control)
L'évaluation des expressions (special, meta, separator, operators, jokers, regex, octal, hexa, expr)
La programmation (structures, fonctions, passage par valeurs, l'interaction, scripts)
L'héritage de l'environnement (variables, permission, root, pwd, tty)
La filiation des processus (descriptor, PPID)
Les commandes et les variables internes (chemins absolus et relatifs, commandes builtin, alias)
Les variables d'environnement (env, export, set, unset)
Le contrôle des permissions (special bits)
La personnalisation et/ou la restriction de l'environnement (rbash, profile)
La communication inter processus (signal)
Les I/O standard (stdin, stdout, stderr, redirections, concaténation)
Le contrôle des tâches et des priorités (jobs, fg, bg, nice)
Le shell de connexion
Le shell de connexion (login shell) est le shell qui est proposé à l'utilisateur lors de sa connexion au système Gnu Linux en mode terminal. Le shell de connexion est issue de la procédure d'initialisation (“init”) et de la commande “login”, qui ne fonctionne qu'avec les terminaux virtuels (Ctrl+Alt+F1 à F6). A l'issue de la procédure d'initialisation du système (“/etc/inittab”), un prompt de login est présenté à l'utilisateur. Commence alors, la procédure de connexion (“/etc/passwd”). Quand l'authentification a réussie, un shell de connexion est lancé, lequel présente son prompt dans le répertoire de connexion de l'utilisateur («~/»).
Par contre, quand la procédure d'initialisation du système lance automatiquement l'interface graphique (Xserver), l'utilisateur s'authentifie dans une fenêtre de session, et s'il lance un shell dans un pseudo terminal (“xterm”), ce n'est pas un shell de connexion, c'est un shell interactif. Le shell de connexion est toujours lié à un terminal virtuel du système (“/dev/tty4”) dont il est possible de connaitre les caractéristiques avec la commande “tty”.
La commande “bash –noprofile” invoque le shell sans la lecture des fichiers de lancement. Les fichiers de lancement, de configuration ou de personnalisation du shell de connexion sont lus dans un ordre très précis, le dernier pouvant annuler une configuration antérieure.
La Console !© par Patrick Hautrive !;~) 2010
91
Le shell de connexion (login)
La procédure d'initialisation
Le prompt de connexion
Le terminal du shell de connexion
Les fichiers de lancement du shell de connexion
Le lancement du shell de connexion vierge
Le terminal d'un shell de connexion
(“init” et “/etc/inittab”)
(«login» et “/etc/passwd”)
(“tty”)
(“/etc/profile”)
(“~/.bash_profile”)
(“~/.bash_login”)
(“~/.profile”)
(“~/.bash_logout”)
(“bash –noprofile”)
(“/dev/tty4”)
Le shell interactif
Le shell en mode interactif (interactive shell) n'est pas un shell de connexion, le shell bash est lancé au cours de session et ne lit que les instructions contenues dans le fichier «/etc/bash.bashrc», puis celles contenues dans le fichier «~/.bashrc» (si celui­ci existe avec les permissions adéquates pour le lire). Le shell interactif est lié à un pseudo terminal (“/dev/pts/0”) du système qui simule la présence d'un terminal.
L'ordre de lecture et les fichiers de configuration de Bash en mode interactif ne sont pas les même que pour le shell de connexion. La commande “bash –norc” invoque le shell interactif sans la lecture des fichiers de lancement.
Le shell interactif (session)
Les fichiers de lancement du shell interactif
Le lancement du shell interactif vierge
Le pseudo terminal d'un shell interactif
(“/etc/bash.bashrc”)
(“~/.bashrc”)
(“bash –norc”)
(“/dev/pts/0”)
Le chemin absolu et relatif
Le chemin absolu d'un fichier s'écrit en entier depuis la racine du système de fichier. Le chemin relatif d'un fichier ne commence jamais par le slash (“/”) indiquant la racine de l'arborescence. Le chemin relatif s'écrit en tenant compte de l'emplacement de travail en cours (“pwd”). Ainsi, depuis son répertoire personnel (“cd”), un utilisateur peut utiliser le chemin relatif pour faire référence à un fichier (“ls ../.bashrc”).
Dans chaque répertoire se trouvent des liens indestructibles pointant vers le répertoire parent (“..”) et vers le répertoire courant (“.”). Le caractère tilde (“~” ou Altgr+2) est synonyme du répertoire personnel de l'utilisateur (“$HOME”). Les liens dans chaque répertoire permettent de remonter La Console !© par Patrick Hautrive !;~) 2010
92
l'arborescence (“../../”). Ces caractères spéciaux ont une signification particulière pour le shell Bash.
Les chemins absolus et relatifs au répertoire courant
Le répertoire de travail (print working directory)
Le chemin absolu depuis la racine
Le chemin relatif au répertoire courant
Le lien symbolique vers les répertoires parents
Le lien symbolique vers les répertoires courants
Le répertoire personnel de l'utilisateur
(«pwd»)
(“/”)
(“../..” et “./script”)
(“..”)
(“.”)
(“cd”, “$HOME”, “~” ou Altgr+2)
L'imbrication des shells
L'imbrication de shell consiste à ouvrir un shell à l'intérieur d'un autre shell (un sous shell dont le processus est le fils). La commande “echo $SHLVL” permet de connaitre la profondeur des imbrications. Chaque niveau est doté de son propre environnement et se comporte de façon indépendante. Il convient de clore chaque niveau méthodiquement les uns après les autres.
La restriction du shell
La restriction du shell permet de lancer un shell comportant de nombreuses restrictions dans les fonctionnalités. Un shell restreint permet de contrôler au plus juste l'environnement d'un processus ou d'un utilisateur. Un shell restreint est lancé avec la commande “rbash” ou la commande “bash ­r”. A l'intérieur d'un shell restreint certaines opérations ne sont alors plus autorisées.
La restriction et l'imbrication de shell
L'imbrication de shell
La restriction du shell
Le changement de répertoire La modification de variables
Les commandes contenant la racine
L'utilisation des fonctions du système
Le changement des options autorisées
La redirection des entrées sorties
L'utilisation de la commande interne d'exécution
La modification des commandes internes
Le contournement des restrictions
“echo $SHLVL”
(“rbash” ou “bash ­r”)
(“cd”)
(SHELL PATH ENV BASH_ENV)
(“/”)
(system calls)
(SHELLOPTS)
(pipe)
(exec)
(builtin)
(“set +r” et “set +o”)
Les principaux shell
Il existe différents types de shell et chacun possède ses caractéristiques propres. Pourtant, deux familles se distinguent, les shells qui sont très influencés par le langage de programmation C, et les shells La Console !© par Patrick Hautrive !;~) 2010
93
descendant de Bourne. Ainsi, l'affichage du prompt pour les utilisateurs n'est pas le même selon la famille de shell que l'on utilise. Les binaires de Bash (“/bin/bash”) et du shell de Bourne (“/bin/sh”) peuvent être retrouvés à l'aide de la commande “whereis bash”.
Pareillement, les commandes pour gérer l'environnement du shell (“set” et “env”), c'est­à­dire les variables exportés (“export”) communes aux processus ne sont pas les même. Les fichiers de configuration non plus ne sont pas les même. Quand les shells sont lancés, chacun exécutent les commandes à l'intérieur du ou des fichiers de configuration qu'il prend en compte (“~/.login” et “~/.profile”).
Les principaux shell
Shell
Name
Prompt
csh
tcsh
ksh
C Shell
TC Shell
Korn Shell
sh
bash
zsh
vsh
Bourne Shell
$
Bash Shell
Z Shell
Visual Shell
Root
Profile
%
~/.login
#
Environnement
$VAR= VAL
set
unset
printenv
env
export
~/.profile
Les séquences de contrôle
Les séquences de contrôle permettent de gérer le shell et le terminal virtuel avec le clavier. Les séquences de contrôle sont effectuées en maintenant deux touches (parfois trois) appuyées en même temps. Ces séquences commencent parla touche contrôle (CTRL) suivie d'une autre touche du clavier. Toutefois, d'autres types de séquences, commençant par les touches SHIFT, MAJ ou ALT (anciennement META) peuvent être configurées, comme les touches magiques (Magic Keys), et deviennent significatives pour le système.
Ces séquences forment des raccourcis clavier qui permettent de gérer la ligne de commande, d'appeler des menus contextuels ou d'envoyer certains signaux à certains processus. Les processus qui peuvent être concernés par les séquences de contrôle sont le processus en cours ou en avant plan (foreground), le processus initial (init) ou les processus qui gèrent l'affichage des terminaux virtuels et celui de l'interface graphique.
Les applications graphiques acceptent également des séquences de contrôle qui permettent d'éviter de naviguer avec la souris dans les menus.
La Console !© par Patrick Hautrive !;~) 2010
94
Les commandes “man stty” et “man console_codes” donnent une description des séquences de contrôle.
Les séquences de contrôle du shell Bash (stty console_code)
Ctrl+A
Ctrl+C
Ctrl+D
Ctrl+E
Ctrl+H
Ctrl+L
Ctrl+M
Ctrl+O
Ctrl+R
Ctrl+U
Ctrl+V
Ctrl+W
Ctrl+Z
Ctrl+Alt+F1 à F6
Ctrl+Alt+F7 à F8
Ctrl+Alt+Del
Ctrl+Backspace
(Curseur en début de ligne)
(Interruption du processus en cours)
(Terminaison du processus shell) (Curseur en fin de ligne)
(Efface en arrière)
(Efface l'écran)
(Validation)
(Validation)
(Historique alphabétique)
(Efface la ligne)
(Nouvelle page dans un afficheur)
(Efface le dernier mot avant le curseur)
(Suspension du processus en cours)
(Affichage des six terminaux)
(Affichage de l'interface graphique)
(Suppression du processus initial)
(Suppression du serveur graphique)
(SIGHUP)
(SIGTERM)
(EOL)
(BACKSPACE)
(RETURN)
(RETURN)
(REPRINT)
(SIGINT)
(TTY)
(DISPLAY)
(INIT)
(X)
Les exemples du shell
vi ~/.profile
noclobber=1
export PATH=$PATH:$HOME/bin
alias ll=”ls ­la”
echo “Hello world, the date today is $(date)”
!­1
sh ­x scriptdebug
alias X=`{startx > /dev/null &}; clear; logout`
Les exemples du C shell
vi ~/.login
set noclobber
setenv PATH “${PATH}:${HOME}/bin”
set PATH=($PATH ~/bin)
alias ll=”ls ­la”
Les exercices du shell
La Console !© par Patrick Hautrive !;~) 2010
95
Voici quelques exercices pour pratiquer...
script file­for­study.txt
man signal
man env
man environ
man bash
ps
ps aux
echo $SHELL
chsh
Crtl+D
bash
logout
exit
Ctrl+Alt+5
(login + password)
logout
pwd
cd /
pwd
su
(root password)
pwd
cd
pwd
exit
cd ~
id
cd ..
pwd
cd
touch one.txt
ls
ln one.txt two
mkdir TEXT
ls ­la
mv two TEXT
ls TEXT
cd /usr/bin
ls; cd
env | grep HOME
ls ­la $(HOME)/one.txt
echo $PATH
echo “Hello ?”
echo “Hello ?”> one.txt
cat one.txt
echo “How ?”>> one.txt
cat one.txt
ls ­ld
alias ld=”ls ­ld”
ld
unalias ld
ld
ls ­R /
ls ­id ~
ls ­id /
mkdir tic tac toe
ls
rmdir tic tac toe
mkdir ­p bring/my/wife
cd bring/my/wife
mkdir ­p won/der/full
cd
ls ­R
rm ­Rf bring
ls ­R
echo “cinq” > newline
ls ­l newline
wc ­l newline
cp newline saveline
ls ­i *line
mv saveline oldline
ls ­i *line
rm ­i *line
touch link
ln link hardlink
ln ­s link symlink
ls ­i *link
ls ­l *link
ls */*
rm ­f *link
mkdir tmp; cd tmp
touch .hiden
ls
man sudo
rm ­Rf *
su
ls ­a
id
rm .*
pwd
ls ­a
exit
cd
su ­
rmdir tmp
id
touch file1 file2 file3
pwd
touch File4 file4
exit
rm file[23]
touch paper
ls
ls ­la paper
ls [Ff]ile?
chmod go+rw paper
ls [A­Za­z]*
ls ­la
touch file{0123456789} chmod 700 paper
ls
ls ­la paper
touch chmod a­rw
file{0,1,2,3,4,5,6,7,8,9} ls ­la paper
!!
chown noone paper
!$
rm paper
history
echo $PATH
HI=”Hello world”
cd
echo $HI
mkdir ~/bin
echo “un deux trois” | wc ls bin
ls ­s | sort ­n
PATH=$PATH:~/bin
ls ­R / export PATH
ls ­R | sort | uniq | wc ­l STAY=stay
head ­n5 /etc/hosts
FOLLOW=follow
cat /etc/passwd | grep export FOLLOW
$USER
echo $STAY
tail ­n5 /var/log/message echo $FOLLOW
su
bash
adduser noone
echo $STAY
exit
echo $FOLLOW
passwd noone
exit
cat /etc/passwd | grep unset FOLLOW
noone
echo $STAY
su noone
echo $FOLLOW
id
bash
pwd
echo $STAY
cd
echo $FOLLOW
pwd
exit
La Console !© par Patrick Hautrive !;~) 2010
96
unset STAY
echo $SHELL
FOO=””
set |grep ^FOO
exit
su
find / ­user “noone”
userdel ­r noone
find / ­user “noone”
cd
echo $?
top&
jobs
fg
nice ­n ­7 xeyes
ps ­u | grep xeyes
renice ­p PID
renice +9 PID
info coreutils env
env
tty
stty
vi /etc/inittab
cat /etc/shells
ls /etc/skel
CTRL+D
(ending file­for­study.txt)
cat file­for­study.txt
kill ­9 ­1
ls / | tee $HOME/root.txt
La Console !© par Patrick Hautrive !;~) 2010
97
VARIABLE
Les variables
Les variables peuvent être de plusieurs types et être qualifiées de différentes épithètes. Les variables internes sont intégrées au shell, et elles servent à gérer les paramètres d'une ligne de commande. Les variables d'environnement sont propres à l'environnement du shell, ou à l'environnement de l'utilisateur ou à celui d'un processus. Les variables d'environnement exportables sont transmises d'un processus à l'autre. Les variables prédéfinies sont les variables d'environnement d'un shell qui sont attribuées automatiquement lors du lancement d'un shell. L'on parle de variables locales quand elles sont propres à un seul environnement, et de variables globales, quand elles sont partagées par un groupe de processus.
Les utilisateurs peuvent définir leurs propres variables quand ils ouvrent une session. Celles­ci peuvent être enregistrées dans leurs fichiers de personnalisation («~/.profile»).
Les variables internes, prédéfinies, d'environnement, interactives, exportables
L'affectation directe dans un environnement
L'affectation par substitution de commande (reverse quote)
La transmission avec passage par fonction
La transmission avec passage par valeur
L'expansion de la valeur d'une variable
L'échappement de l'expansion d'une variable
La protection par l'apostrophe (single quote)
La protection par les guillemets (double quote)
L'invitation interactive à la saisie
Les variables d'environnement du processus
Les variables internes du shell
Les variables prédéfinies du shell
Les variables exportées
La visualisation des variables d'environnement
La visualisation des variables systèmes
La définition de variable d'environnement
Les variables locales
Les variables globales
(VAR=VAL)
(VAR=`cmd`)
(“FONCTION (VAR)”)
(“script VAR”)
(“echo $VAR”)
(“echo \$VAR”)
(“echo '$VAR')
(“echo ''$VAR'')
(“read VAR”)
(“env”)
(“$0”)
(“set”)
(“export PATH=$PATH:~/bin”)
(“env”)
(“set”)
(“typeset”)
La valeur d'une variable
Les variables sont des mots auxquels sont affectés une valeur (VAR=VAL). L'on parle d'affectation quand une valeur est affectée à une variable. La commande “echo $VAR” permet de connaitre la La Console !© par Patrick Hautrive !;~) 2010
98
valeur d'une variable. A l'intérieur d'un script ou d'une commande, l'on parle d'expansion d'une variable quand c'est, non pas le nom, mais la valeur de la variable qui est pris en compte. L'expansion peut être annulée avec l'apostrophe (“'”) ou les guillemets (“””), et empêché avec l'échappement (“\”).
L'exportation des variables
Les variables constituent un moyen de passer des informations communes d'un processus parent à un processus enfant. Par exemple, les valeurs des variables d'environnement sont héritées d'un processus à l'autre. D'autre part, les variables peuvent être exportées d'un environnement à l'autre avec la commande “export”. La valeur de ces variables communes ne change pas. Les variables internes
Les variables internes (special parameters) au shell sont des variables utilisées par le shell pour gérer les différents éléments de la ligne de commande. Une ligne de commande simple est en générale constituée de la commande suivie de ses paramètres (paramètres, arguments, options, swithches, flags).
Une ligne de commande plus compliquée sera constituée de plusieurs commandes reliées ou imbriquées entre elles par des caractères spéciaux (jokers, séparateur, méta caractères, opérateurs de contrôle, séquence d'échappement, expressions, structures de contrôle,...). Le shell interprète ces différents éléments et en vérifie la syntaxe avant d'en lancer l'exécution. La commande “man bash” donne une description des variables internes.
Les variables internes du shell Bash (man bash)
La ligne de commande (le nom du shell, du script ou du fichier placé en argument)
La valeur des paramètres selon leur positionnement (positional parameters)
Le nombre de paramètres contenus dans la ligne de commande (commande incluse)
La chaine des paramètres de la ligne de commande (string positional parameters)
La liste des paramètres de la ligne de commande (table positional parameters)
Le code retour de la dernière commande exécutée en avant plan (fg)
Le numéro de processus du shell (PID)
Le numéro de processus (PID) de la dernière tâche de fond (bg)
Les options du shell (option flags)
Le chemin absolu pour l'invocation d'un shell
“$0”
“$1” à “$9”
“$#”
“$*”
“$@”
“$?”
“$$”
“$!”
“$­”
“$­”
Les variables d'environnement
Les variables d'environnement sont aussi appelées variables prédéfinies. Un certain nombre de variables prédéfinies sont plus ou moins présentes dans l'environnement d'un processus. Dans un shell La Console !© par Patrick Hautrive !;~) 2010
99
restreint, elles ne peuvent être modifiées. Par convention, les noms des variables d'environnement sont écrites en majuscule. La commande “env” permet d'afficher les variables d'environnement actives et la commande “set” permet d'afficher toutes les variables. La variable d'environnement BASH_ENV permet de gérer l'environnement pour les nouvelles instances de shell.
Les variables d'environnement du shell Bash (man bash)
ALIAS
BASH
BASHOPTS
BASHPID
BASH_ALIASES
BASH_ARGC
BASH_ARGV
BASH_CMDS
BASH_COMMAND
BASH_ENV
BASH_EXECUTION_STRING
BASH_LINENO
BASH_SOURCE
BASH_SUBSHELL
BASH_VERSINFO
BASH_VERSION
BASH_XTRACEFD
CDPATH
COLUMNS
COMPREPLY
COMP_CWORD
COMP_KEY
COMP_LINE
COMP_POINT
COMP_TYPE
COMP_WORDBREAKS
COMP_WORDS
DESKTOP_SESSION
DIRSTACK
DISPLAY
EDITOR
ENV
EMACS
EUID
FCEDIT
FIGNORE
FORWARD
FUNCNAME
GDMSESSION
GID
GLOBIGNORE
GROUPS
HISTCHAR
HISTCMD
HISTCONTROL
HISTFILE
HISTFILESIZE
HISTIGNORE
HISTSIZE
HISTTIMEFORMAT
HOME
HOSTFILE
HOSTNAME
HOSTTYPE
IFS
IGNOREEOF
INPUTRC
LANG
LANGUAGE
LC_ALL
LC_COLLATE
LC_CTYPE
LC_MESSAGES
LC_NUMERIC
LESSCLOSE
LESSOPEN
LINENO
LINES
LOGNAME
LS_COLORS
MACHTYPE
MAIL
MAILCHECK
MAILPATH
MAILTO
OLDPWD
OPTARG
OPTERR
OPTIND
OSTYPE
PAGER
PATH
PIPESTATUS
POSIXLY_CORRECT
PPID
PRINTER
PROMPT
PROMPT_COMMAND
PROMPT_DIRTRIM
PS1
PS2
PS3
PS4
PWD
La Console !© par Patrick Hautrive !;~) 2010
100
RANDOM
REPLY
SECONDS
SHELL
SHELLOPTS
SHLVL
SSH_AGENT_PID
SSHAUTH_SOCK
TERM
TIMEFORMAT
TIMOUT
TMPDIR
TTY
TZ
UID
UMASK
ULIMIT
USER
USERNAME
VISUAL
WINDOWID
XAUTHORITY
auto_resume
histchars
La transmission de valeurs
La valeur d'une variable peut être modifiée en cours de session. La valeur d'une variable peut être différente d'un processus à l'autre. Pour transmettre automatiquement une valeur qui change d'un processus à l'autre, il existe deux moyens, le “passage par fonction” (la valeur est le résultat d'une fonction) et le “passage par valeur” (la valeur est un des paramètres d'un script).
L'invitation interactive
Une invitation interactive permet également de récupérer la valeur saisie au clavier (STDIN) avec la commande “read”.
La Console !© par Patrick Hautrive !;~) 2010
101
COMMAND
Les commandes internes
Les commandes internes sont intégrées dans le shell (builtin). Ainsi, la commande “cd” (change directory) ou la commande “pwd” (print working directory) sont des commandes intégrées au shell Bash. Les commandes internes sont lancées à l'intérieur du même processus que le shell. Le shell ne crée pas de processus fils, il exécute les instructions wait() et read(), et s'occupe lui même de la tâche.
En général, les commandes internes ne disposent pas de page manuel puisque ce ne sont pas des commandes indépendantes du shell. Les conditions d'utilisation sont spécifiées dans la page man du shell avec la commande “man bash” dans laquelle il est facile de faire une recherche avec l'opérateur “/motif” à l'intérieur de l'afficheur.
Les commandes internes du shell Bash (builtin) (man bash)
source
command
disown
fg
local
read
times
alias
compgen
echo
getops
logout
readonly
trap
bg
complete
enable
hash
mapfile
return
type
bind
comptopt
eval
help
readarray
set
ulimit
break
continue
exec
history
popd
shift
umask
builtin
declare
exit
jobs
printf
shopt
unalias
caller
typeset
export
kill
pushd
suspend
unset
cd
dirs
fc
let
pwd
test
wait
Les commandes externes
Les commandes externes sont toutes celles qui peuvent être lancées dans un système Gnu Linux. Les commandes externes sont des exécutables ou des scripts avec le droit d'exécution (“x”). Les commandes externes peuvent être invoquées en spécifiant le chemin absolu (“/bin/bash”) ou le chemin relatif (“./script”) dans l'arborescence du système de fichier. Quand le chemin n'est pas spécifié, le shell recherche l'emplacement de la commande dans les répertoires spécifiés dans la variable PATH, et seulement dans ces répertoires (“echo $PATH”).
Les commandes externes sont lancées dans le cadre d'un processus enfant du shell. Le processus père (le shell) exécute les instructions fork() et wait(), tandis que le processus fils (la commande à l'intérieur d'un sous shell) exécute l'instruction exec().
Cette filiation des processus implique l'héritage de l'environnement du shell. Les commandes externes sont définies par opposition aux commandes internes, et concernent par conséquent tout ce qui peut s'exécuter sur un système. Les commandes externes sont les outils et les utilitaires Gnu, les La Console !© par Patrick Hautrive !;~) 2010
102
scripts exécutables qui sont interprétés et qui peuvent contenir une succession de commandes, les programmes compilés et autres applications sources installées.
Les commandes externes au shell
L'affichage des droits et des types de fichiers
Les commandes, les outils et les utilitaires Gnu
Les scripts exécutables interprétés
Les programmes compilés
Les applications sources installées
L'évaluation d'une ligne de commande
(“ls ­la /bin/bash”)
(“echo $PATH”)
(“./script”)
(“gcc”)
(“./configure; make; make install”)
(«type cmd»)
L'analyse d'une commande
Le shell analyse la syntaxe et procède à l'évaluation des expressions de la ligne de commande, puis il lance l'exécution de la commande, soit à l'intérieur de son propre processus (builtin), soit dans le cadre d'un processus fils (sous shell).
Dans le cadre d'une exécution par un processus fils, le shell ouvre éventuellement les descripteurs de fichier pour les redirections, et se met en attente du signal que lui envoi le processus fils quand il a terminé sa tâche (sauf quand la commande est lancée en background auquel cas, le shell représente immédiatement le prompt à l'utilisateur). Quand le sous shell a terminé, le shell peut alors lancer un autre sous shell et traiter séquentiellement une succession de commandes.
La commande interne “type” permet de vérifier l'évaluation par le shell des mots d'une ligne de commande.
1. Le shell récupère la ligne de commande avec l'instruction read()
2. Le shell analyse la syntaxe et évalue les mots de la ligne de commande
Opérateur de contrôle
Substitution des jokers
Expansion des variables
Traduction des alias
Placement des méta caractères
Évaluation des séquences d'échappement
3. Le shell recherche les commandes dans les chemins des binaires par défaut (/bin et /usr/bin), puis dans les chemins de la variable PATH de l'utilisateur
4. Le shell exécute les commandes internes BUILTIN
5. Le shell lance la commande externe dans un sous shell
Création du processus fils avec l'instruction fork()
Ouverture des fichiers descripteurs avec l'instruction open()
Décalage des fichiers descripteurs en cas de redirection (3­­>0 et 4­­>1)
La Console !© par Patrick Hautrive !;~) 2010
103
Attente du processus père (le shell) avec l'instruction wait()
Exécution par le processus fils de la commande avec l'instruction exec()
Communication de redirection avec les instructions write() et read()
Communication inter processus du fils au père avec l'instruction return()
Terminaison du processus fils (sous shell) avec l'instruction exit()
6. Le shell enchaîne les blocs de commande en traitement séquentiel
7. Régulation des flux par le pipeline et les filtres
L'analyse, l'évaluation et l'exécution d'une commande Analyse syntaxique
space operator escape chain tty bloc pipe quote control background rwxst
Valuation des mots
joker
Exécution interne
builtin special export env
variable alias
Lancement sous shell fork() open()
meta bin root path regex expr
boulean
set link host ascii nohup fonction
wheel
display
wait() read() for nice suid octal sticky descriptor signal
Exécution extérieure exec() write() return() exit() if test case while until
substitution prompt
L'exécution détachée du terminal
L'exécution d'une commande peut être détachée du terminal du processus parent qui la générée. La commande “nohup cmd” (pour “no hang up”) permet au processus fils de ne pas hériter du terminal de son père. Les commandes détachées du terminal ne seront pas interrompues quand la session de l'utilisateur sera stoppée. Un fichier spécial sera créé pour stocker toutes les sorties “nohup.out”.
L'exécution détachée du terminal
Le terminal attaché au shell
L'exécution détachée du
(“tty” et “stty”)
(“nohup cmd” et “nohup.out”)
La gestion des alias
La gestion des alias avec les commandes internes “alias” et “unalias” permet de donner des noms à des lignes de commandes longues et souvent utilisées. Les alias sont généralement générées pour une seule session, c'est pourquoi leur définition sont souvent placées dans un fichier de lancement du shell.
La gestion des alias dans le shell Bash
L'activation d'alias
La désactivation d'alias
La définition des alias de session
(“alias”)
(“unalias”)
(“~/.profile” et “~/.bashrc”)
La Console !© par Patrick Hautrive !;~) 2010
104
Le traitement séquentiel
Le traitement séquentiel des commandes permet de faire suivre plusieurs commandes les unes à la suite des autres. L'enchainement d'une commande est conditionné à la réussite de la précédente. Le shell attend la fin de l'exécution de la première commande pour vérifier son code retour puis lancer la deuxième commande. Une commande est jugée réussie quand son code retour est égale à zéro.
Le code retour d'une commande peut être connue avec la commande “echo $?”. Les trains de commandes pour un traitement séquentiel sont toutes sur la même ligne de commande, séparées les unes des autres par l'opérateur de traitement séquentiel “;”. Le traitement séquentiel permet d'enchainer l'exécution de plusieurs commandes, tout en conditionnant leur exécution à la réussite de la précédente. Quand l'une des commandes échoue, les autres qui suivent ne sont pas exécutées.
Le traitement séquentiel des commandes
L'opérateur de contrôle de traitement séquentiel des commandes (“cmd;cmd”)
Le code retour zéro pour la réussite de la commande précédente (“echo $?”)
La Console !© par Patrick Hautrive !;~) 2010
105
La formulation d'une commande
Le lancement d'une commande prend une multitude de formes selon les besoins ou les situations.
La formulation d'une commande : cmd arg option source target
Commands
cmd
cmd ; cmd
cmd | cmd
cmd `cmd`
cmd $(cmd)
cmd &
cmd && cmd
cmd || cmd
cmd; \\n cmd
nohup cmd
type cmd
echo “text”
echo '$VAR'
echo \$HOME
echo '`cmd`'
echo ­e “\120”
batch (Ctrl+D)
at now (Ctrl+D)
crontab
cmd | tee > cmd
!!
!num
/usr/bin/cmd
Fonction
Validation (enter)
Traitement séquentiel (train)
Redirection (pipe)
Substitution en sous shell
Substitution POSIX
Background (jobs)
Conditionnement Vrai (AND)
Conditionnement Faux (OR)
Échappement Eol (Escape)
Détachement du terminal (tty)
Évaluation de la syntaxe (test)
Protection littérale (sauf `,\,$)
Annulation de toute expansion
Échappement d'un caractère
Protection de l'évaluation
Évaluation Escape Sequence
Execution séquentielle (FIFO)
Execution programmée (atd)
Execution régulière (crond)
Execution et duplication (fork)
Execution last command
Execution from history
Chemin absolu (Absolut Path)
Commands
Fonvtion
(cmd ; cmd)
{cmd ; cmd}
cmd > file.txt
cmd >> file.txt
cmd < file.txt
cmd 2> error.txt
cmd 1&2> ouput.txt
!cmd
alias cmd=”cmd ­option”
unalias cmd
time cmd
su root ­c “cmd”
sh ­c cmd
ssh ­v user@host cmd
ln ­s /bin/bash ~/myshell
echo $?
batch < script.txt
source script.sh
. script.sh
./script.sh
declare_function
Sous shell (fils distincts)
Bloc (un seul processus)
Écrasement
Concaténation
Passage de paramètres
Déviation STDERR
Déviation des sorties
Inversion du code retour
Définition d'un alias
Suppression d'un alias
Minutage de l'exécution
Lancement en root
Lancement en sous shell
Lancement à distance
Lien symbolique (link)
Dernier code retour
Execution d'un script
Execution shell Bash
Execution shell Bash
Execution sub shell Bash
Execution d'une fonction
L'édition des commandes
L'édition des commandes permet de “circuler” à l'intérieur d'une ligne de commande afin d'en modifier une partie (avec les touches FLECHE GAUCHE et FLECHE DROITE du clavier).
L'historique des commandes
La Console !© par Patrick Hautrive !;~) 2010
106
L'historique des commandes permet de rappeler au prompt toutes les commandes qui ont étés déjà validées (avec les touches FLECHE HAUT et FLECHE BAS du clavier). Les commandes “history”, “!!” et “!4” permettent d'afficher dans l'ordre toutes les commandes de l'historique, de relancer la dernière ou la quatrième en partant de la dernière. Les commandes mémorisées dans l'historique sont enregistrées dans un fichier caché (“~/.bash_history”) dans le répertoire personnel de l'utilisateur (“echo $HOME”). La configuration de l'historique est personnalisable à l'aide des variables adéquates.
La coloration syntaxique
La coloration syntaxique permet de colorier dans le terminal les réponses du shell en fonction du type de fichier par exemple.
La Console !© par Patrick Hautrive !;~) 2010
107
La complétion des commandes
La complétion des noms de commande permet de ne saisir que le début d'une commande (et de compléter la formulation avec la touche de tabulation (TAB). Le shell complète automatiquement les éléments manquants ou propose une liste des commandes ou des fichiers qui correspondent avec la saisie. La liste des commandes proposées dépend des répertoires déclarés dans la variable PATH pour la recherche des exécutables, et la liste des fichiers proposés dépend du répertoire courant ou du chemin absolu. La complétion des options des commandes est particulier au shell Z et à sa configuration.
L'édition, la complétion et l'historique des commandes ­ La coloration syntaxique des fichiers
L'édition de la ligne de commande
La circulation dans l'historique des commandes
L'historique des commandes
Le lancement d'une commande
Le lancement de la dernière commande lancée
Le fichier de stockage de l'historique
Les variables historiques
La coloration syntaxique
La complétion des commandes
Les chemins de recherche des exécutables
La complétion des options ARROWS LEFT RIGHT HOME END
ARROWS UP DOWN
(“history”)
(“!NUMCMDHIST”)
(“!!”)
(“~/.bash_history”)
(HISTFILE et HISTFILESIZE)
(“color”)
(TAB)
(“echo $PATH”)
(shell Z)
La redirection de commande
La redirection d'une commande s'effectue avec les opérateurs de redirection (pipe).
La commande «cmd | tee file.txt» permet de dupliquer la sortie standard (stdio) et de la rediriger vers un fichier ou une autre commande.
La Console !© par Patrick Hautrive !;~) 2010
108
LANGUAGE
Le langage de programmation
Le shell contient un langage de programmation. Ce langage est dit “interprété” et permet la rédaction de scripts complexes.
Le langage de programmation inclue l'évaluation des expressions et l'interprétation des caractères spéciaux (méta, joker, separator, operator, special, escape, octal, hexa), l'affectation, la déclaration, l'expansion, et l'exportation de variables, la définition de fonctions et la transmission de valeur d'un environnement à l'autre, la substitution du résultat d'une commande, l'utilisation de structures de contrôle comme l'itération (les boucles) et les décisions (tests), et l'interaction avec l'utilisateur.
Les structures de contrôle
Les structures de contrôle du langage de programmation du shell Bash sont, soit des structures itératives et conditionnelles (boucles), soit des structures décisionnelles ou de contrôles (tests).
Les structures de contrôle du langage de programmation interprété du shell Bash
La boucle itérative à compteur fixe
La boucle conditionnelle à compteur variable au début de tour
Les boucles conditionnelles à compteur variable en fin de tour
Les structures décisionnelles (branchement et tests)
Les choix multiples
(for in do done)
(while do done)
(until do done)
(If then else fi)
(case in esac)
L'évaluation des expressions
Le shell assure l'évaluation des expressions arithmétiques et alphanumérique. Ces évaluations permettent de ne pas indiquer de valeur précise en “dur” à l'intérieur d'un script, mais de construire une expression qui sera évaluée et/ou calculée le moment venu avec la commande “expr”.
Les méta caractères
Les méta caractères sont des caractères spéciaux qui séparent et relient les commandes entre elles. Les méta caractères comprennent, les jokers, le séparateur interne des mots (IFS) et les opérateurs de contrôle.
La Console !© par Patrick Hautrive !;~) 2010
109
L'évaluation des expressions et des méta caractères par le shell Bash
L'évaluation des expressions arithmétiques
Les méta caractères qui séparent ou relient les commandes
Les jokers ou expressions rationnelles ou régulières (regex)
Le séparateur interne (IFS)
Les opérateurs de contrôle
L'opérateur de (BACKGROUND)
L'opérateur logique (AND)
L'opérateur logique (OR)
L'opérateur d'enchainement des commandes (DOT COMA)
L'opérateur de redirection (PIPE)
L'opérateur de concaténation (SUPERIOR INFERIOR)
L'opérateur de regroupement dans un sous shell
L'opérateur de regroupement dans un bloc shell
L'opérateur d'évaluation d'expression (BRACKETS)
L'opérateur de fin de ligne de script
L'opérateur de passage à la ligne
(“expr”)
(| ? * ­ & ; () {} [] <> IFS)
(?, *, [,­])
(SPACE TAB)
(& && | || ; ;; <> <<>> CR NL) (“cmd &”)
(“cmd && cmd”)
(“cmd || cmd”)
(“cmd ; cmd”)
(“cmd | cmd”)
(«cmd >> file»)
(“(cmd;cmd)”)
(“{cmd;cmd}”)
(“[cmd;cmd]”)
(“;;”)
(RETURN et NEWLINE)
Les jokers
Le shell assure également la traduction des expressions rationnelles (expressions régulières). Ces expressions emploient les caractères spéciaux du shell et permettent de définir des ensembles de valeurs à l'intérieur d'une formulation courte et générique. L'utilisation des jokers (?, *, [,­]) par exemple remplace dans un mot un ou plusieurs caractères présents mais inconnus. Les jokers sont des caractères spéciaux qui, comme d'autres caractères sont significatifs pour le shell. Ces caractères spéciaux peuvent être compris comme des raccourcis pour désigner un ensemble de valeur (les “regex” qui est la contraction de regular expression).
Le séparateur interne
Par convention, le séparateur interne ou IFS (Internal Field Separator) est le caractère d'espace frappé avec la barre d'espace (SPACE) ou la touche de tabulation (TAB). Le séparateur interne est un méta caractère qui permet de distinguer les options entre elles.
Les opérateurs de contrôle
Les opérateurs de contrôle sont des méta caractères qui opèrent une fonction de contrôle de la ligne de commande. Un opérateur de contrôle termine toujours une ligne de commande. Les opérateurs de contrôle permettent de relier deux commandes entre elles et d'effectuer des contrôles avant leur exécution.
La Console !© par Patrick Hautrive !;~) 2010
110
Les caractères spéciaux
Les shell reconnait un ensemble de caractères spéciaux. Les caractères spéciaux désignent tous les caractères visibles du clavier (figurant à l'intérieur de la table de codage des caractères ASCII) qui ont pour le shell et les scripts une signification particulière.
L'ensemble de ces caractères spéciaux font l'objet d'une standardisation. Les méta caractères qui se composent des jokers, du séparateur interne (IFS), et des opérateurs de contrôle sont des caractères spéciaux, auxquels s'ajoutent les caractères d'échappement qui protègent une expression de l'évaluation par le shell ou une variable de son expansion, comme l'antislash, les guillemets simples (apostrophe) ou doubles. Le guillemet inversé (Altgr+7 ou reverse quote ou back quote ou backtick) est le caractère spécial de substitution du résultat d'une commande.
Les caractères spéciaux du shell Bash
Le séparateur interne (IFS)
Le joker caractère
Le joker multiple
Le séparateur de valeur
L'intervalle de valeur
La substitution du résultat d'une commande
La redirection de la sortie en entrée
L'échappement du passage à la ligne
Le lancement de commandes en sous shell
Le regroupement de commandes en bloc shell
Le regroupement d'expression
La protection contre toute évaluation
L'échappement d'un méta caractère
La protection contre l'expansion des variables
L'enchaînement de commandes
Le lancement en tâche de fond
« »
“?”
“*”
“[a,c]”
“[a­z]”
“`”
“|”
“\”
“()”
“{}”
“[]”
“””
“\”
“'”
“;”
“&”
(barre d'espace et tabulation)
(interrogation)
(étoile)
(virgule)
(hyphen)
(Altgr+7 ou quote)
(Altgr+6 ou pipe)
(backslash)
(parenthèse)
(accolade)
(crochet)
(guillemet)
(backslash)
(apostrophe)
(point virgule)
(esperluette)
Les séquences d'échappement
Les séquences d'échappements spéciales permettent d'inscrire un caractère associé à une touche du clavier ou à une valeur de la table de codage des caractères ASCII sur 8 bits dont la liste est donnée avec la commande “man bash”. La commande “man ascii” donne une description de la table de codage ASCII. Les séquences d'échappement sont interprétées avec l'option “­e” (escape) de la commande echo.
La Console !© par Patrick Hautrive !;~) 2010
111
Les séquences d'échappement (escape) (echo ­e) (man ascii)
L'interprétation des séquences d'échappement
“echo ­e "\120\115\114\110"”
La clochette
\a
(alert bell)
La touche backspace
\b
(backspace)
Désactication de l'affichage du message
\c
(produce no further output)
Un espace
\e
(escape character)
La touche
\f
(form feed)
Le caractère ASCII nouvelle ligne
\n
(new line)
La touche ENTRE
\r
(carriage return)
La tabulation horizontale
\t
(horizontal tab)
La tabulation verticale
\v
(vertical tab)
L'échappement du symbole d'échappement
\\
(backslash)
L'échappement de l'apostrophe
\’
(single quote)
L'échappement du guillemet
\”
(double quote)
L'échappement de l'apostrophe inversée
\`
(reverse quote)
La valeur octale d'un caractère ASCII 8 bits
\NNN
(octal value)
La valeur hexadécimale d'un caractère ASCII
\HHH
(hexadécimal value)
Le caractère de contrôle
\cx
(control­x character)
Les options de la commande echo (man echo)
L'interprétation des séquences d'échappement
La désactivation de l'affichage nouvelle ligne
La désactivation de l'interprétation (by default)
­e
­n
­E
(echo ­e « \n Hello »)
(echo ­ne « Hello \n)
(echo ­E « \t\n\c HELLO »)
Les scripts shell
Les scripts shell sont des fichiers exécutables contenants des commandes. Les scripts permettent d'automatiser les tâches d'administration. Un script shell sera interprété par le shell dans lequel il s'exécute. Les scripts doivent avoir le droit d'exécution (“x”) pour l'utilisateur qui souhaite l'exécuter. A l'intérieur d'un script, le caractère dièse permet d'afficher des commentaires. L'exécution d'un script peut faire l'objet d'une interprétation spécifique. Le type d'interprétation est alors indiqué en début de script par la référence au chemin du binaire de l'interpréteur de commande.
Les scripts shell
L'attribution du droit d'exécution
Les commentaires à l'intérieur d'un script
Les scripts Bourne Shell Les scripts Bourne Again Shell Les scripts C shell Les scripts Perl Les scripts Php
(“chmod +x script”)
(“#” avec Altgr+3)
(#! /bin/sh)
(#! /bin/bash)
(#! /bin/csh)
(#! /usr/bin/perl)
(#!)
La Console !© par Patrick Hautrive !;~) 2010
112
L'interaction avec l'utilisateur
L'interaction entre l'utilisateur et le processus peut s'effectuer avec l'appel système “read()” ou la commande interne au shell “read” qui permettent de redonner la main à l'utilisateur afin qu'il saisisse une donnée, laquelle sera stockée dans une variable interne et utilisée par la suite par la fonction ou le script.
L'interaction avec l'utilisateur
L'interaction avec la commande interne
L'interaction avec la fonction du système
(“read”)
(“read ()”)
La Console !© par Patrick Hautrive !;~) 2010
113
PROCESS
Les processus
Les processus représentent les commandes, les applications ou les serveurs en mémoire vive (memory). Tous les exécutables qui tournent sur un système Gnu Linux sont identifiables par un processus. Les processus portent le nom de la commande avec ses options. Le système attribue un numéro séquentiel unique à chaque processus, pouvant aller de 2 à 30 000. Le numéro d'identification d'un processus ou PID (Process Identification) permet de faire référence au processus et de lui envoyer des signaux (signal). Les processus peuvent communiquer entre eux et échanger des données, soit localement, par le mécanisme des IPC (Inter Process Communication) et des redirections des entrées sorties ou I/O (Input Output), soit à distance, via le réseau, par l'intermédiaire des sockets TCP/IP ou des RPC (Remote Procedure Call).
Tous les processus sont les descendants d'un autre processus, et forment ainsi une filiation (pstree) qui remonte jusqu'au processus init. Le processus init est le premier processus du système. Le processus init a été lancé par le noyau lors de la procédure d'initialisation, et porte le numéro d'identifiant un. Les processus héritent de leur processus parent le même environnement (variables, droits, racine). Par exemple, tous les processus d'un utilisateur qui s'est connecté sur un terminal virtuel, sont les descendants de son shell de connexion. Tous les processus appartiennent à un utilisateur du système. Le propriétaire d'un processus est généralement l'utilisateur qui a lancé la commande. Les processus partagent les permissions de l'utilisateur et du groupe qui en sont les propriétaires.
Les processus peuvent être exécutés en avant plan (foreground) ou en arrière plan (background). Le contrôle des tâches (job control) consiste à gérer les processus. Les processus peuvent être détachés du terminal auquel il sont relié (nohup). Un processus détaché n'a plus de lien de filiation avec son processus parent. Les serveurs ou DAEMON (Disk And Executive Monitor) sont des processus qui tournent en tâche de fond, qui sont détachés de leur terminal, et qui restent à l'écoute d'un évènement grâce à une structure de code en boucle infinie. La procédure d'initialisation du système (init) démarre de nombreux services ou serveurs, dont le super démon internet (xinetd). Les processus sont regroupés par groupes de processus. Les shells de connexion sont initialisés avec un nouveau numéro de groupe (SESSION).
Les commandes «ps», «top» et «pstree» permettent de visualiser les processus en cours.
La vie d'un processus
La vie d'un processus se déroule en mémoire vive. Le noyau réserve un espace en mémoire vive pour chaque processus (core image), et l'ordonnanceur du noyau (sheduler) distribue le temps processeur (time sharing) à chacun des processus en fonction de leur priorité (nice). Les processus exécutent ainsi La Console !© par Patrick Hautrive !;~) 2010
114
à tour de rôle les tâches, les instructions ou le code qu'ils contiennent. Par exemple, un processus remplit l'espace mémoire qui lui est attribué par le code binaire de la commande qu'il représente, et le code binaire est régulièrement chargé, puis exécuté par le processeur. L'exécution des tâches de chaque processus s'effectue au fur et à mesure, et en fonction de la répartition des tâches par l'ordonnanceur (multi threads).
C'est l'ordonnanceur qui décide, quand et quel processus s'exécute (multi tâches préemptif).
Les activités des processus sont contrôlées par le système. L'espace mémoire des processus est protégé, et les processus ne peuvent faire que ce qui est autorisé par leurs permissions. Si un processus tente de faire quelque chose que ne lui permet pas ses permissions, alors un message d'erreur est envoyé à la sortie standard pour prévenir l'utilisateur de l'arrêt de sa commande. Toutefois, il est possible qu'un processus soit programmé pour changer le code qu'il contient. Quand tout se déroule bien, le processus fait exécuter toutes ses tâches par le processeur et se termine.
La terminaison d'un processus
La terminaison d'un processus peut être due à un arrêt brutal de son exécution, soit parce qu'il ne détient pas les permissions suffisantes, soit parce qu'un dysfonctionnement l'empêche de continuer (bug). En général, un processus se termine quand il a fait exécuter toutes ses tâches par le processeur. Quand un processus enfant se termine, il en informe son processus père en lui envoyant son code retour (return code). Le code retour d'un processus est toujours égal à zéro quand sa tâche s'est déroulée sans encombre, et que son exécution fut une réussite (success). La terminaison d'un processus libère le PID.
Les processus constituent des groupes de processus qui ont le même ancêtre. La terminaison d'un processus entraine la terminaison de tous ces descendants. Ainsi, la terminaison du shell de connexion d'un utilisateur entraine la terminaison de tous ses processus, sauf ceux qui ont été détachés (nohup) et pour lesquels le lien de filiation a été rompu.
La commande ps
La commande «ps» permet de visualiser l'activité des processus. La commande «ps» est commune a tous les systèmes Unices, mais l'emploi de ses options peut légèrement varier d'un système à l'autre. Par exemple, les Unix™ AT&T propriétaires utilisent les options en plaçant devant un tiret (hyphen ou dash), les systèmes libres BSD utilisent les options sans préfixe, et les systèmes Gnu Linux utilisent les options longues et explicites (gnu long option) en plaçant devant deux tirets continus (double dashes). Les systèmes Gnu Linux acceptent également les options formulées à la façon des autres systèmes. En général, les options des commandes Gnu sont beaucoup plus nombreuses, parce que les programmes sont développés librement par des membres de la communauté des Logiciels Libres (free software).
La commande «man ps» donne une description complète des options de la commande, des attributs et des codes d'état des processus, des correspondances avec d'autres systèmes Unices, ainsi que le nom La Console !© par Patrick Hautrive !;~) 2010
115
des variables susceptibles d'en modifier le comportement ou l'aspect (personality). Par exemple, le champ SESSION correspond à un groupe de processus. Le champ STAT indique l'état d'activité d'un processus. Le champ RSS (Resident Set Size) correspond à la taille de l'espace réservé en mémoire vive. Certaines options possèdent plusieurs alias.
Les options de la commande ps et les attributs des processus (man ps)
%cpu
command
fgroup
ni
psr
sgi_p
start_time
tpgid
%mem
cp
flag
nice
rgid
sgid
stat
tt
args
cputime
flags
nlwp
rgroup
sgroup
state
tty
blocked
egid
fname
nwchan
rss
sid
suid
ucmd
bsdstart
egroup
fuid
pcpu
rssize
sig
suser
ucomm
bsdtime
c
eip
esp
fuser
gid
pending pgid
rsz
rtprio
sigcatch sigignore
svgid
svuid
uid
uname
caught
etime
group
pgrp
ruid
sigmask
sz
user
class
euid
ignored
pid
ruser
size
thcount
vsize
cls
euser
label
pmem
s
spid
tid
vsz
cmd
f
lstart
policy
sched
stackp
time
wchan
comm
fgid
lwp
ppid
sess
start
tname
Les états d'un processus
Selon l'ordonnancement des processus (sheduler), les processus passent d'un état à l'autre (STAT). Les processus sont créés par un processus parent (fork), puis passent successivement dans les états d'attente (sleeping), de réveil et d'élection au processeur (running), d'arrêt (stopped), de pagination (swapping), et de semi terminaison après avoir envoyé un signal à leur père (zombie).
La Console !© par Patrick Hautrive !;~) 2010
116
Les états d'activité des processus (man ps)
Code
D
R
S
T
W X
Z
<
N
L
s
1
+
Meaning
Damned
Running
Sleeping
Stopped
Swapping
Dead
Zombie
English
French
Uninterruptible sleep (usually IO)
Dormance
Running or runnable (on run queue)
Processeur
Interruptible sleep (waiting for an event to complete)
Attente CPU
Stopped, either by a job control signal or because it is being traced Arrêt Ctrl+Z
Paging (not valid since the 2.6.xx kernel)
Pagination
Dead (should never be seen)
Mort
Defunct ("zombie") process, terminated but not reaped by its parent Zombie
Format BSD
Not nice
High­priority (not nice to other users)
Nice
Low­priority (nice to other users)
Locked
Pages locked into memory (for real­time and custom IO)
Session
Session leader
Multi thread Multi­threaded (CLONE_THREAD, NPTL pthreads)
Foreground Process is in the foreground process group
Le temps processeur
Le temps processeur se mesure de différentes façons. La commande «time cmd» expose trois temps, le temps réel écoulé (REAL), le temps d'utilisation du processeur en zone utilisateur (USER) et le temps d'utilisation du processeur en zone kernel (SYS).
La communication inter processus
La communication inter processus est un mécanisme global de communication des processus. La communication inter processus ou IPC (Inter Process Communication) utilise le concept de sémaphores (sem.h) et de fichiers descripteurs (file descriptor) pour transmettre des données d'un processus à l'autre. La communication inter processus comprend également l'envoi de signal à un processus. Par exemple, un processus enfant peut envoyer un signal à son processus parent lui indiquant qu'il a terminé sa tâche (SIGTERM). Par ailleurs, un utilisateur peut envoyer un signal à l'un de ses processus avec la commande “kill”. Enfin, deux processus peuvent communiquer entre eux par l'intermédiaire des entrées sorties (pipe).
Chaque processus possède son propre environnement, et dispose d'une entrée et de deux sorties standards (I/O standard pour input et output). Certains programmes sont appelés des filtres parce qu'ils récupèrent un flux de données qu'ils transforment et restituent en sortie.
La Console !© par Patrick Hautrive !;~) 2010
117
La communication inter processus (sémaphores IPC)
L'envoi d'un signal à une commande
L'envoi d'un signal à la dernière commande lancée
La connaissance du PID d'une commande
L'envoi d'un signal SIGKILL à un processus
L'information sur les signaux et la communication IPC
(“kill ­NUMSIG %cmd”)
(“kill %%”)
(“ps aux | grep cmd”)
(“kill ­9 NUMPID”)
(«man signal» et «man ipc»)
Les fichiers descripteurs
Tous les processus sont dotés d'une entrée (STDIN) et de deux sorties standards, la sortie pour l'affichage normal (STDOUT) et la sortie pour l'affichage des erreurs (STDERR). Les entrées et les sorties standards d'un processus transitent par des fichiers spéciaux appelés des fichiers descripteurs (file descriptor). Les fichiers descripteurs de chaque processus sont numérotés de zéro à quatre. Comme chaque commande est exécutée dans le cadre de son propre processus, chaque commande dispose des moyens de communication standards pour recevoir des signaux et échanger des données avec d'autres processus. Les sorties peuvent être redirigées vers un fichier sans fond (“/dev/null”).
Quand il y a une redirection, les deux derniers fichiers descripteurs (3 et 4) des deux processus sont ouverts pour recevoir ou dispenser les données. Les redirections utilisent les fichiers spéciaux “/dev/stderr”, “/dev/stdin” et “/dev/stdout” pour transmettre les flux. Par exemple, le processus père (le shell) transmet au processus fils (la commande) ces cinq fichiers descripteurs en héritage (numérotés de zéro à 4), mais un décalage est opéré quand il y a une redirection entre les deux.
Les redirections des entrées sorties (pipeline)
L'entrée standard d'un processus (clavier)
La sortie standard d'affichage des résultats (écran)
La sortie standard d'affichage des erreurs (écran)
Les communications entre fichiers descripteurs
Les communications entre fichiers descripteurs
0 =STDIN
(“/dev/stdin”)
1 =STDOUT (“/dev/stdout”)
2 =STDERR (“/dev/stderr”)
3 ==> 0 (sortie du père vers l'entrée du fils)
4 ==> 1 (entrée du père reçoit la sortie du fils)
Les pipelines
Deux processus peuvent être reliés entre eux par l'intermédiaire d'un tunnel (pipeline). Une connexion est établie entre deux processus quand la sortie standard de l'un est reliée à l'entrée standard de l'autre. Un flux de données transite de l'un à l'autre. Le flux sortant (STDOUT) d'un processus alimente l'entrée standard (STDIN) de l'autre.
Ce mécanisme de redirection est appelé pipeline et permet de former des trains de commandes. Les opérateurs de redirection (>, <, >>, << et le pipe “|” avec Altgr+6) établissent les tunnels où transite le flux d'information entre une sortie et une entrée.
La Console !© par Patrick Hautrive !;~) 2010
118
Les opérateurs de redirection
Les opérateurs de redirection sont des caractères spéciaux du shell, ce sont des méta caractères qui ont la fonction d'opérateurs de contrôle. Les opérateurs de redirection peuvent s'utiliser vers un fichier ou vers un fichier descripteur (file descriptor) correspondant à l'entrée d'un processus. Quand la redirection concerne deux processus, l'on dit que les opérateurs de redirection établissent des tunnels ou des canaux de communication entre les deux processus. Un tunnel permet de faire transiter le flux de sortie d'un processus vers l'entrée d'un autre processus. Un opérateur de redirection simple écrase et remplace toute information préexistante, tandis qu'un opérateur de concaténation permet de placer à la fin d'un fichier le nouveau flux qui devient un stock.
Les opérateurs de redirection (flow & stock) (man bash)
Les opérateurs de contrôle de redirection simples
Les opérateurs de contrôle de concaténation
La redirection de l'entrée standard STDIN 0 (clavier)
La redirection de la sortie standard STDOUT 1 (écran)
La redirection de la sortie des erreurs STDERR 2 (écran)
La redirection des sorties standard STDOUT et STDERR
La redirection des sorties standard STDOUT et STDERR
(>, <, et le pipe “|” avec Altgr+6)
(>>, <<)
(0>)
(1>)
(2>)
(2>&1)
(>&)
L'envoi de signal aux processus
L'envoi de signaux aux processus permet de gérer l'activité des processus en mémoire. La liste des signaux disponibles est donnée avec la commande “man signal”. Les signaux sont envoyés aux processus avec la commande “kill ­SIG PID” qui prend pour paramètres le type de signal adressé et le numéro d'identification du processus (PID).
Chaque processus est identifié par un numéro d'ordre unique qui lui est attribué au lancement de son exécution, le PID (Processus Identifier). Les numéros de PID des processus en activité sont indiqués dans la commande “ps ­aux”. Les signaux SIGKILL(9) et SIGSTOP(17) ne peuvent être ni interceptés, ni bloqués, ni ignorés par les processus qui les reçoivent.
La Console !© par Patrick Hautrive !;~) 2010
119
L'envoi de signal aux processus (man signal) (kill ­l)
SIGHUP
SIGINT
SIGQUIT
SIGILL
SIGTRAP
SIGABRT
SIGFPE
SIGKILL
SIGSEGV
SIGPIPE
SIGALRM
SIGTERM
SIGUSR1
SIGUSR2
SIGCHLD
SIGCONT
SIGSTOP
SIGTSTP
SIGTTIN
SIGTTOU
1
2
3
4
5
6
8
9
11
13
14
15
30,10,16
31,12,17
20,17,18
19,18,25
17,19,23
18,20,24
21,21,26
22,22,27
(hangup or death process) (reload)
(interrupt)
(Ctrl+Alt+Del)
(quit)
(core)
(illegal instruction)
(trap)
(abort signal)
(floating point exception)
(kill signal no interception)
(invalid memory reference) (segment)
(broken pipe)
(timer alarm)
(termination)
(default)
(user­defined)
(user­defined)
(child stopped or terminated)
(continue if stopped)
(stop with no interception)
(stop typed at tty)
(stop tty input)
(stop tty output)
L'héritage de l'environnement
Tous les processus engendrés héritent de l'environnement de leur processus père. Comme tous les processus dépendent du processus initial (init), tous disposent apriori du même environnement. L'environnement d'un processus est constitué de toutes les informations que lui a transmises son père (PPID), comme les variables et les fonctions d'environnement (“env”).
Toutefois, une commande peut­être lancée dans un environnement spécifique. Les variables d'environnement sont dites globales quand elles sont exportées d'un processus à l'autre, et sont dites locales quand leur influence reste confinée à l'intérieur d'un seul processus. Une description de l'environnement est donnée par les commandes “man environ”, “man env”, “info coreutils env”.
La filiation des processus
L'héritage de l'environnement représente tous ce qu'un processus père lègue à ses processus fils. Cette transmission entre processus est un partage et une attribution des mêmes informations. Cette filiation se matérialise avec la commande “pstree” qui liste et classe tous les processus.
Pour lancer une commande, le processus du shell va, en règle générale, demander au noyau de créer un clone de lui même (fork). Le système va créer en mémoire un processus séparé mais ayant le même La Console !© par Patrick Hautrive !;~) 2010
120
environnement que le shell, et va lancer la commande à l'intérieur de ce nouveau processus. Le processus père ne s'occupe pas de la réalisation des tâches relatives à la commande. C'est le processus fils qui réalise de façon indépendante les tâches de la commande. Quand le fils a terminé son travail, il rend compte à son père (SIGTERM).
Quand la commande a accomplie son travail, celle­ci transmet au shell les résultats qui les affiche à l'écran. C'est pourquoi parfois le prompt du shell ne réapparait pas tout de suite. Quand certaines commandes prennent un certain temps pour terminer les tâches qui leur incombent, alors le shell attend pour afficher les résultats et présenter de nouveau le prompt. Par contre quand une commande est lancée directement en tâche de fond (background), le shell n'attend pas la fin de l'exécution de celle­ci et présente le prompt immédiatement.
Dans certain cas, le travail est réalisé à l'intérieur même du processus du shell, comme par exemple l'exécution d'une commande interne au shell.
L'héritage de l'environnement entre les processus
La connaissance des filiations des processus
Le répertoire courant (print working directory)
Les variables d'environnement issues du processus initial Les variables exportables du processus père La place de la racine dans le système de fichier visible Le masque de création des fichiers
Les limites quantitatives d'usage des ressources Les permissions de l'utilisateur parent (rwx)
Le numéro d'identification du processus père (PPID)
Les variables les fonctions globales
La définition des alias La position du bit qui empêche l'écrasement de données Le terminal s'il n'y a pas de détachement (TTY)
(“pstree”)
(“pwd”)
(“init”)
(“export”)
(“chroot”)
(“umask”)
(“ulimit”)
(“ls ­la”)
(“ps ­aux”)
(“env”)
(“alias”)
(“noclobber=1” «set noclobber»)
(“tty”)
Le contrôle des tâches
Le contrôle des tâches (job control) permet de gérer l'avant et l'arrière plan des processus. La commande “jobs”. Les jobs sont ordonnés par numéros. Les commandes peuvent être lancées en arrière plan (ou autrement dit en tâche de fond) à l'aide de l'opérateur esperluette (“cmd&”) et à l'aide de l'interruption au clavier (Ctrl+Z) qui permet d'interrompre le processus en cours, puis de le basculer en tâche de fond avec la commande “bg” (background).
Un travail en tâche de fond peut­être rebasculé à l'avant plan avec la commande “fg” (foreground). Pour le lancement d'une commande en tâche de fond, le shell (le processus père) n'exécute pas l'instruction “wait()” afin d'afficher le prompt immédiatement.
La Console !© par Patrick Hautrive !;~) 2010
121
Le contrôle des priorités
Le contrôle des priorités permet de ralentir ou d'accélérer l'exécution relative d'une tâche (“nice” et “renice”). Les processus sont lancés par défaut avec la priorité zéro, c'est­à­dire qu'ils sont tous traités sur le même pied d'égalité. Toutefois, la priorité d'un processus peut être modifiée (de +19 à ­20). Un processus gentil (nice) est un processus qui laisse la priorité aux autres pour l'accès au temps processeur. Les valeurs positives ralentissent le travail d'un processus, tandis que les valeurs négatives (not nice!) accélèrent le traitement des tâches d'un processus.
Le contrôle des tâches et des priorités
Le lancement d'une commande BACKGROUND
L'affichage des tâches en BACKGROUNG
Le basculement en BACKGROUND
Le basculement en FOREGROUND
L'envoi de signal à une tâche
L'interruption du processus en cours
L'attribution d'une priorité
La modification d'une priorité
(“cmd &”)
(“jobs”)
(“bg”)
(“fg %NUMJOB”)
(“kill ­NUMSIG %NUMJOB”)
(Ctrl+Z)
(“nice” de +19 à ­20)
(“renice”)
L'identité des processus
L'identité du propriétaire d'un processus est renseignée par la variable UID (User ID) et l'identité effective sous laquelle sera exécuté le processus est renseignée par la variable EUID (Effective UID). Généralement, ces deux identités sont les même, mais l'utilisation des bits SUID et SGID permettent l'usage de cette distinction. L'identité de l'utilisateur peut être modifiée afin de lancer une commande avec les droits d'un autre utilisateur.
Le changement d'identité
Le changement d'identité peut s'opérer ponctuellement (“sudo cmd”) ou bien pour un certain temps avec la commande “su” pour “switch user”. Dans le premier cas, il faut faire partie des utilisateurs autorisés (“/etc/sudoers”), et dans le deuxième cas, il faut connaitre le mot de passe de l'utilisateur (le mot de passe “root” quand la commande “su” est lancée sans paramètres).
La commande “su ­” permet de basculer dans l'environnement de l'utilisateur root. Les utilisateurs faisants partie du groupe wheel possèdent les mêmes droits que le super utilisateur. La commande “id” permet de connaitre l'identité de l'utilisateur en cours.
La Console !© par Patrick Hautrive !;~) 2010
122
Les permissions spéciales
Dans d'autres cas, les commandes sont prévues pour s'exécuter avec les droits de leurs propriétaires et non pas les droits de l'utilisateur qui lance la commande. Par exemple, pour la commande “/usr/bin/passwd” dont le bit SUID est activé, cette procédure est indispensable afin de permettre aux utilisateurs de changer leur mot de passe. Toutefois, d'un point de vue sécuritaire, la prolifération des binaires ayant le bit SUID ou SGID n'est pas conseillée.
Les bits SUID et SGID sont respectivement les bits attribués au propriétaire et au groupe propriétaire d'un binaire. Ces binaires seront respectivement lancés automatiquement avec les droits de leur propriétaire ou avec ceux de leur groupe propriétaire. De même, les Sticky Bits sont attachés aux droits des répertoires et permettent de conserver la propriété de tous les fichiers qui y sont créés sous l'identité du propriétaire du répertoire. Un Sticky Bit attaché à un fichier binaire stipule au système de conserver son code exécutable en mémoire.
Les bits SUID et SGID sont représentés avec un “S” majuscule (quand il n'y a pas le droit “x” d'exécution) ou avec un “s” minuscule (quand il y a le droit d'exécution). Pour être exécuté un binaire doit posséder le droit d'exécution, mais celui­ci n'a pas besoin d'être placé partout (ugo). Pareillement, les Sticky Bit sont représentés avec un “T” majuscule (quand il n'y a pas le droit “x” d'exécution), et avec un “t” minuscule (quand il y a le droit d'exécution).
Les permissions spéciales et le changement d'identité
L'identité de l'utilisateur en cours (UID et EUDI)
Le basculement dans l'environnement d'un utilisateur
Le changement d'identité
Le lancement d'une commande avec d'autres droits
Les utilisateurs habilités pour sudo
Les bits SUID et SGID des binaires
Les Sticky Bits des répertoires ou des binaires
Le groupe des utilisateurs habilités root
(“id”)
(“su – root”)
(“su”)
(“sudo cmd”)
(“/etc/sudoers”)
(“S” ou “s”)
(“T” ou “t”)
(wheel)
La Console !© par Patrick Hautrive !;~) 2010
123
La configuration des processus
La configuration des processus
ps
top
pstree
pgrep
ls
env
umask
ulimit
Commands
man ps
pidof id
jobs
man bash
nice fuser bg
man signal renice lsof fg
man environ nohup watch kill
man env
su
time killall
info coreutils sudo init pkill
man ipc
alias pwd
cmd& set
xargs
Files
at
/proc/*
/etc/at.allow
atq
/proc/kcore /etc/at.deny
atrm
/dev/mem /etc/cron.d/cron.allow
batch /etc/sudoers /etc/cron.d/cron.deny
crontab /etc/toprc /var/spool/cron/atjobs
cron
~/.toprc
/var/spool/cron/crontabs
export /dev/stderr /usr/include/asm/signal.h
chroot /dev/stdin
/dev/stdout
Packages
procps
psmisc
coreutils
Les exemples de processus
kill­l ; killall httpd
hd /proc/kcore
ps ­e ­o uid,pid,ppid,session,%mem,nice,stat,tty,cmd
ps ­aux | grep httpd | grep ­v grep | awk '{print $2}' | xargs kill ­9
ps aux ; ls /proc/1 ; pstree ­p ; urpmi procps ; ps ­wax ; ps ­C httpd
pidof bash ; nice ­n ­15 bash ; nice ­n ­10 emacs &
jobs ; gedit ; Ctrl+Z ; bg ; fg 1 ; Ctrl+C ; gedit & ; jobs
ps ­alux ; ps –pid 1 ; kill ­HUP PIDNUM ; kill ­9 PIDNUM ; kill ­SIGHUP 'cat /var/run/syslogd.pid'
renice 10 PIDNUM ; ps ­t "1 2" ; time gzip file
ps ­u root (Gnu Linux) ; ps ­fu root (Unix System V)
crontab todo.txt
at 1:23
lp /usr/*
echo «programmes» | mail ­s «Job OK» root
Ctrl+D
at 10:00 < todo.txt ; at ­l ; atrm ATNUM
nohup ls | nohup sort
set ignoeof (Ctrl+D)
batch
sort /usr/* | lp
echo «yes» | mailx ­s «Job OK» root
Ctrl+D
La Console !© par Patrick Hautrive !;~) 2010
124
TERMINAL
Les types de terminal
Les terminaux sont soit physiques, soit logiques. Les terminaux physiques (pupitres) sont des équipements matériels constitués d'un clavier et d'un écran relié à un ordinateur central. L'on parle de terminaux passifs quand aucun traitement ne s'y déroule et que l'unique fonction dont ils sont chargés est de transmettre et de recevoir les données. Tandis que les terminaux logiques (émulateurs) sont des logiciels qui imitent le comportement d'un terminal physique. Les terminaux logiques peuvent être de plusieurs sortes, notamment les terminaux virtuels (consoles) accessibles avec les touches Ctrl+Alt+1­6 et les pseudo terminaux (fenêtres) qui sont affichés par le serveur graphique. L'on parle alors de terminal X.
Les types de terminal
Les terminaux physiques Les terminaux logiques Les terminaux virtuels (Ctrl+Alt+F1)
Les pseudo terminaux (“xterm”) ou terminaux X
(pupitres)
(émulateurs)
(consoles)
(fenêtres)
L'émulation de terminal
Les systèmes Gnu Linux sont capables d'émuler de nombreux types de terminaux dont ceux qui correspondent à la norme ANSI. Les terminaux d'un système Gnu Linux sont des émulations d'un “antique” terminal vidéo de type Télétype (d'où l'appellation de la commande “tty”). Une émulation signifie que le comportement du terminal physique historique qui permettait de se connecter à un ordinateur central distant (le terminal Dec VT100) est imité par les terminaux du système Gnu Linux. La commande “xterm” est un émulateur de terminal pour le serveur graphique. La commande “ls ­la /usr/share/terminfo/” permet de visualiser les terminaux reconnus par Gnu Linux.
IBM 3101
IBM 3270
HPterm
Dec VT52
Dec VT100
Dec VT102
Dec VT220
Tektronix 4014
La Console !© par Patrick Hautrive !;~) 2010
125
Les terminaux virtuels
Les terminaux virtuels sont les terminaux présentés à l'issue de la procédure d'initialisation en mode ligne de commande (sans interface graphique). Les six terminaux virtuels par défaut sont accessibles après le démarrage du système avec les touches Ctrl+Alt+1 à Ctrl+Alt+6. Depuis un terminal virtuel, les touches Alt+FLECHEDROITE et Alt+FLECHEGAUCHE permettent de basculer d'un terminal à l'autre. Les touches Ctrl+Alt+7 (DISPLAY=0) et Ctrl+Alt+8 (DISPLAY=1) permettent de revenir à l'interface graphique.
Les terminaux virtuels sont aussi appelés consoles. Le premier terminal virtuel (/dev/tty1 ou Ctrl+Alt+1) est le terminal par défaut où sont envoyés par défaut les messages du système. Le premier terminal virtuel est aussi appelé la console maitresse qui est généralement réservée à l'administration du super utilisateur (root). Une console distante désigne le terminal virtuel d'une connexion à distance.
La console
La console est un terminal virtuel pour l'administrateur root.
Les pseudo terminaux
Les pseudo terminaux sont des terminaux présentés dans le cadre d'une fenêtre affichée par le serveur graphique Xwindow. L'on parle de fenêtre de terminal ou de terminal graphique. La commande “xterm” affiche dans une fenêtre un pseudo terminal.
Les périphériques caractères
Un terminal est un périphérique de type caractère. Les périphériques de type caractère (character device) sont des périphériques qui acceptent la transmission d'un flux de données, caractère par caractère. Tandis que les périphériques de type bloc (bloc device) accepte la transmission par bloc entier. La commande “ls ­la /dev/” indique les types de fichiers et permet donc de visualiser tous les périphériques prévus par le système. Les périphériques caractères sont distingués par la lettre “c” et les périphériques blocs par la lettre “b”.
Les fichiers spéciaux des périphériques (device) sont généralement automatiquement créés par le système et ils se trouvent dans le répertoire “/dev/”. L'administrateur peut toutefois les générer à l'aide du script “/sbin/MAKEDEV” ou de la commande “mknod”. Un numéro MAJOR et un numéro MINOR sont attribués à chaque fichier spécial. Le système Gnu Linux peut gérer jusqu'à 63 consoles virtuelles. Ces périphériques de type caractère reçoivent le numéro 4 pour le MAJOR et un numéro allant de 1 à 63 pour le MINOR. Les consoles virtuelles portent le nom de “/dev/tty*”. La console en cours d'utilisation porte le nom de “/dev/tty0” (MAJOR 4 et MINOR 0).
La Console !© par Patrick Hautrive !;~) 2010
126
Les terminaux fonctionnent en mode “fifo” (first in first out), c'est­à­dire que les caractères transmis en premier arrivent en premier. Le flux de transmission des caractères peut aller jusqu'à 9600 baud (unité de vitesse de transmission approchant le bit par seconde), et chaque flux comporte un bit d'amorçage, un bit de parité et un bit d'arrêt. Lors de son activation, un terminal signale sa séquence d'échappement qui lui est propre (^] ou Ctrl+]). Les terminaux utilisent la bibliothèque “ncurses” pour gérer l'affichage des caractères.
La fenêtre active d'un terminal peut montrer le curseur soit en surbrillance, soit en clignotement. La chasse de la police de caractère peut être fixe ou variable. Le point d'insertion des caractères peut être avant ou après le curseur. Une sélection peut s'effectuer à l'aide de la souris avec un double clic pour un mot, et un triple clic pour toute la ligne. Un copier coller peut être réalisé (paste) à partir d'une sélection en surbrillance en utilisant le clic du milieu (ou à défaut de molette, un clic simultané sur les boutons gauche et droit).
La Console !© par Patrick Hautrive !;~) 2010
127
Les fichiers du terminal
Les fichiers du terminal (library ncurses)
Commands
xterm
uxterm
kvt
rxvt
gnome­terminal
konsole
fgconsole
xconsole
screen
tty
stty
set
reset
export
install­keymap
codebreaker
mknod
MAKEDEV
Configuration
tic
loadkeys
dumpkeys
showkey
showrgb
xev
setkeycodes
setleds
setmetamode
xmodmap
charmap
setxkbmap
setterm
tset
resize
chvt
hexdump
hd
od
xcolor
dircolors
codepag
Information Variables
/etc/secutty
info coreutils
echo $TERM
/etc/usertty
man termcap
echo $TERMCAP
/etc/terminfo
man curses
echo $LS_COLOR
/etc/termcap
man terminfo
/etc/gettydefs
man term
/etc/login.defs
man termios
/etc/issue
man console
/etc/motd
man console_code
/usr/games/fortune
man consolechars
~/.signature
man charset
/dev/console
man stty
/dev/error
man termwrap
/usr/share/terminfo/
man base­config
/usr/lib/X11/app­
man ascii
defaults/XTerm
man charsets
/usr/lib/terminfo/
man utf­8
/
man unicode
usr/lib/kbd/keymaps/i386/azert man latin1
y/fr­latin1.map.gz
man locale
/
man stty
usr/share/keymaps/i386/azerty/f
r­latin1.map.gz
/etc/profile.d/lang.sh
/etc/rc.config
/etc/console/boottime.kmap.gz
/usr/X11R6/lib/X11/rgb.tx
Les tables de caractères
Une table de caractères (table code) est un tableau qui donne la correspondance entre les évènements du clavier (la pression sur les touches) et les caractères alphanumériques. Les caractères alphanumériques sont l'ensemble des caractères de l'alphabet en majuscule (de A à Z) et en minuscule (de a à z), mais aussi, les chiffres décimaux (de 0 à 9), la ponctuation (de la virgule au point d'intérogation), les opérateurs numériques (du plus au supérieur), les unités monétaires (comme le dollar ou la livre sterling), les caractères spéciaux (comme le slash, le dièse, l'espace ou le pipe), les touches de fonction (de F1 à F12), les touches de navigation (PAGEUP, PAGEDOWN, HOME, END La Console !© par Patrick Hautrive !;~) 2010
128
et ARROWS), les touches de gestion de l'écran (comme l'impression écran ou la pause du défilement), les touches de gestion du clavier (comme la touche VERNUM et les touches Ctrl, Alt et Maj) et les caractères attribués à certaines séquences spéciales (comme la touche de validation ou de tabulation).
Les caractères alphanumériques sont classés à l'intérieur d'une table, et ils sont ordonnés selon des codes qui permet de les identifier (de zéro à 127 pour un chiffrage sur 7 bits comme la table ASCII). Ces codes peuvent être écrits en octal, en décimal ou en hexadécimal. Le codage des caractères peut être réalisé sur 7 bits ou 8 bits (ASCII), voire sur plusieurs octets, selon l'ampleur de la table de codage et le nombre de caractères différents à prendre en compte. La table de caractères dépend bien évidemment de la langue choisie pour le système, puisque certaines langues utilisent d'autres caractères que ceux du monde occidental. L'affichage des caractères est complété par la police de caractères qui permet de choisir le style de l'écriture et le rendu (gras, italique, souligné).
Les évènements du clavier et de la souris sont captés grâce aux interruptions systèmes (IRQ). L'on parle de clé (keycode) pour indiquer la traduction de chaque caractère en décimal (base 10), en octal (écrit avec 3 chiffres) et en hexadécimal (base 16), et l'on parle de mappage (mapping) pour indiquer la translation de ces clés vers chaque caractère de la table de code (keymap). Les tables de caractères (charmap) sont propres à chaque langue. Les commandes “charmap” et “zcat /usr/share/i18n/charmaps/ISO­8859­1.gz” permet de visualiser la table de code “ISO Latin1” qui est la table de caractère utilisée par défaut par le système Gnu Linux. La commande “locale” permet de définir la langue du système.
La table de code de base est la table ASCII (American Standard Code for Information Interchange) codée sur 7 bits (pour 128 caractères) et sur 8 bits (pour 256 caractères). Seuls les tables codées sur 8 bits peuvent afficher les caractères accentués des langues non anglophones.
La table de code universel est l'Unicode (universal code) qui permet de représenter tous les caractères de tous les langages, mais elle requiert un encodage sur des entiers de 32 bit (ou deux fois UTF­16). La table de code ISO est un standard international. La table ISO 10646 correspond à la table Unicode. La table ISO 8859­1 ou latin1 est de facto la table qui remplace la table ASCII et dont les 256 premiers caractères sont identiques à la table Unicode.
La table de code UTF­8 (Unicode Transformation Format sur 8 bits) représente pour Gnu Linux le standard pour l'affichage des caractères. L'encodage UTF­8 utilise un octet (byte) pour coder un caractère de 7 bits (0xxxxxxx), deux octets pour coder un caractère jusqu'à 11 bits (les deux premiers bits du premier octet sont annonciateurs d'une suite de deux octets: “110xxxxx 10yyyyyy” est assemblé en “00000xxx xxyyyyyy”), etc. Ainsi le passage de la table ASCII à la table UTF­8 ne fait progresser la taille des fichiers que de 2% en moyenne, parce la plus part des langues se servent principalement des 128 premiers caractères (sauf le russe et le grec dont les fichiers doublent de taille). Le code UTF­8 est traduit en Unicode et puis le glyphe correspondant est stocké en mémoire vidéo avant d'être affiché.
La Console !© par Patrick Hautrive !;~) 2010
129
Les tables de code
ASCII
Unicode
ISO
UTF­8
man ascii
man unicode (ISO 10646)
man latin1
(ISO 8859­1)
man utf­8
Les commandes “man ascii” et “man unicode” et “man latin1” et “man utf­8” décrivent les tables de codage des caractères.
Les séquences de contrôle
Les séquences d'interruption sont des séquences de touches maintenues qui ont une signification spéciale. Les commandes “man stty” et “man console_codes” et “info coreutils stty” donnent une description des séquences de contrôle.
La commande “stty ­a” affiche les valeurs des séquences de contrôle.
Les séquences de contrôle du terminal (stty ­a)
susp intr eof eol erase eol2 flush start rprnt stop kill lnext werase quit swtch dsusp
Sequence
Ctrl+Z
Name
susp
Signification
Suspension
Ctrl+A
Fonction
Stop le processus en avant plan
Commande
Signal
stty susp ^Z
Curseur en début de ligne
Ctrl+C
intr
Interruption
Abandonne le processus en cours stty intr ^C
Ctrl+D
eof
End Of File
Termine le processus en cours
stty eof ^D
Ctrl+E
eol
End Of Line
Curseur en fin de ligne
stty eol ^E
Ctrl+H
erase
Erase Character Backspace one Column
Ctrl+L
Clear Screen
Ctrl+M
Carriage Return Validation de la ligne
stty erase ^H
Efface l'écran
Ctrl+O
flush
Flush Line
Validation de la ligne
stty flush ^O
Ctrl+R
rprnt
Reprint
Historique alphabétique inversé
stty rprnt ^R
Ctrl+U
kill
Kill Line
Efface la ligne de commande
stty kill ^U
Ctrl+V
lnext
Line Next
Nouvelle page dans un afficheur
stty lnext ^V
Ctrl+W
werase Word Erase
Efface le dernier mot de la ligne
stty werase ^W
La Console !© par Patrick Hautrive !;~) 2010
130
SIGTERM
La personnalisation
du terminal
La personnalisation du terminal permet de modifier la configuration par défaut.
La personnalisation du terminal
Les touches magiques
Les touches mortes
Les séquences de contrôle
Le prompt
Les couleurs syntaxiques
La police de caractère
La table de code des caractères
Les exemples de terminal
stty ­a
loadkeys fr
set ­o vi
set ­o noclobber
xterm Isl 2000
xterm fg red
xterm ­geometry 80x40+10+100 ­fg green ­bg red ­fn 7x13bold
QUOTE=”Les chaînes libres” ; PS1="$QUOTE \a \n[\u@\h:\w]"
Ctrl+L
stty erase '^?' kill '~x'
hd /usr/share/terminfo/x/xterm | less
strace echo ­e "\120"
number 555
clear
numlock
ls /usr/lib/magic
zcat /usr/share/i18n/charmaps/LATIN­GREEK­1.gz
La Console !© par Patrick Hautrive !;~) 2010
131
HIERARCHY
L'espace de stockage
L'espace de stockage du système est ordonné de telle sorte qu'il n'y ait aucune ambigüité. Il ne faut pas confondre l'arborescence (racine) qui présente la hiérarchie des fichiers, et le système de fichiers (file system) qui organise le support de stockage (disque). Sous la forme d'un arbre inversé, la hiérarchie du système de fichier ne comporte qu'une seule racine (root). La racine est son propre répertoire parent (“..”). Par contre, de nombreux points de montage peuvent y être greffés, soit en local (partition), soit à distance (nfs), et chacun peut disposer de son propre formatage (système de fichiers). Ces points de montage peuvent être automatiquement montés lors de l'initialisation du système (mount). La théorie des graphes explique que d'autres types d'organisation sont envisageables, mais que celle­ci est rapide et souple.
Le FHS (File System Hierarchy Standard) correspond à une volonté d'harmoniser la structure hiérarchique des fichiers à l'intérieur de l'arborescence d'un système Gnu Linux. Le LSB (Linux Standard Base) marque la volonté de conserver une seule convention de nommage pour les fichiers de configuration du système Gnu Linux. Ces volontés sont le signe du besoin de convergence quand les distributions Linux s'éloignent petit à petit les unes des autres (du simple fait de l'indépendance de leur développement). En générale, la compatibilité est maintenue, mais il n'est pas rare de devoir rechercher et identifier un fichier, puis de vérifier son contenu. Souvent un système de liens symboliques permet de satisfaire aux exigences de chacun.
Les partitions de swap
Les partitions swap sont des espaces séparées de l'espace de stockage des fichiers. Les partitions swap permettent de libérer de la mémoire vive (ram) en copiant son contenu. Ce procédé de transfert de pages entières de la mémoire vers le disque, et du disque vers la mémoire s'appèle la pagination.
La swap est généralement enregistrée dans une partition, c'est le cas le plus courant, le plus rapide avec les accès disques et le plus sûr parce qu'il s'agit d'une partition séparée. Toutefois, il est également possible de gérer la swap à l'intérieur d'un fichier dans une partition du système de fichier. La taille de la swap dépend des besoins et du type d'utilisation, mais une bonne moyenne est le double de la taille de la mémoire.
Comme pour les autres partitions, les partitions de swap sont généralement créée pendant la phase d'installation du système, mais, l'administrateur peut à tout moment ajouter, modifier ou supprimer des partitions. Les commandes “fdisk”, “mkswap”, “swapon” et “swapoff” permettent de gérer les partitions swap.
La Console !© par Patrick Hautrive !;~) 2010
132
L'arborescence
L'arborescence peut être répartie dans plusieurs partitions de plusieurs disques durs, montés en local ou par le réseau. La commande “ls ­R / | less” permet de visualiser récursivement toute l'arborescence. L'outil Midnight Commander qui se lance avec la commande “mc” propose une interface succincte pour naviguer à l'intérieur de l'arborescence depuis le shell en mode terminal.
L'arborescence du système de fichier d'un système Gnu Linux
La swap
/
La racine de l'arborescence (root file system, “fdisk ­l “)
/bin
Les outils, commandes et utilitaires de base (tools, commands, binaries)
/boot
Les fichiers d'amorçage du système (grub, lilo, vmlinuz, maps, initrd)
/dev
Les fichiers spéciaux de périphériques (device)
/etc
Les fichiers de configuration du système et des applications (ASCII)
/etc/skel
Le modèle de répertoire pour les nouveaux utilisateurs (“useradd ­m”)
/etc/rc3.d
Les liens vers les services du niveau d'initialisation du système (Kill et Start)
/etc/init.d
Les scripts d'initialisation des services de tous les niveaux d'initialisation (“init”)
/etc/X11
Les fichiers de configuration du serveur graphique (“xorg.conf”)
/home
Les répertoires personnels des utilisateurs ($HOME)
/lib
Les bibliothèques de fonctions pour le compilateur C (shared library)
/lib/modules Les modules du noyau (modprob)
/lost&found Le répertoire où sont placés les fichiers perdus ou les liens cassés (orphan)
/media
Le répertoire pour le montage des lecteurs (cdrom, floppy)
/mnt
Le répertoire pour le montage des autres systèmes de fichiers (“mount”)
/proc
Le répertoire permettant d'interroger l'image volatile du noyau (PID)
/pub
Le répertoire public pour les téléchargements et les connexions anonymes
/root
Le répertoire personnel du super utilisateur (root)
/sbin
Les commandes d''initialisation du système réservées au super utilisateur (root boot)
/tmp
Le répertoire des fichiers temporaires accessibles à tous (chmod o=r+w)
/usr
Les applications installées sur une machine et accessibles à tous les utilisateurs
/usr/bin
Les binaires (“chmod o=x”)
/usr/doc
La documentation
/usr/games
Les jeux
/usr/include Les entêtes de programmation C (headers “*.h” et #include)
/usr/lib
Les bibliothèques des applications (*.so)
/usr/local
Les applications installées pour le poste
/usr/sbin
Les commandes d'administration du système réservées au super utilisateur (root)
/usr/share
Les fichiers partagés des applications comme des images ou de la documentation
/usr/share/manLes pages man
/usr/src
Les fichiers sources du noyau (kernel source)
/usr/X11R6 Les fichiers du serveur graphique
/var
Le répertoire des fichiers à taille variable (log, httpd, mail, spool)
La Console !© par Patrick Hautrive !;~) 2010
133
Le nommage des fichiers
L'arborescence est répartie en répertoires, en fichiers standards et en fichiers spéciaux. Pourtant, l'on dit que dans un système Gnu Linux, tout est fichier. C'est parce que un répertoire est un fichier dans lequel est enregistré la liste des fichiers qu'il contient. Les répertoires sont des fichiers conteneurs.
Les noms de fichiers ne peuvent contenir certains caractères spéciaux (“/”, “.”, “..”) qui ont une signification particulière pour l'arborescence. Les noms de répertoires, les noms de commandes ou les mots réservés sont sujets à ambigüités pour le nommage des fichiers. Il faut garder à l'esprit que les noms de fichiers peuvent être amenés à faire partie d'une ligne de commande, et qu'ils devront être évalués et interprétés par le shell. Pourtant, le caractère d'échappement (backslash) permet la création de fichiers qui commencent par des caractères spéciaux.
Il n'y a pas de règle, ni de convention, mais le bon sens et l'anticipation suggèrent d''éviter les accents, les espaces et les caractères spéciaux pour assurer aisément la gestion, la portabilité et la migration. Une nomenclature explicitant le contenu des fichiers peut en outre faciliter le traitement en grand nombre. Les noms de fichiers des premiers systèmes Unix™ ne pouvaient comporter que 14 caractères, et les noms des premiers systèmes BSD étaient limités à 64 caractères. Le système Gnu Linux accepte les noms longs de 256 caractères.
Le système Gnu Linux tient compte de la casse (minuscules ou majuscules), et n'exige pas une extension pour les noms de fichier. Les fichiers cachés dont le nom commencent par un point ne sont pas répertoriés par la commande “ls” sans l'option “­a”. En règle générale, les fichiers sont triés selon l'ordre alphabétique de la table de code ASCII, c'est­à­dire que les chiffres s'affichent en premier, puis les majuscules qui précèdent les minuscules.
Le numéro d'inode d'un fichier
Dans un système Gnu Linux, tout les fichiers sont identifiés par un numéro d'inode et tous les fichiers portent des droits d'appartenance à l'un des utilisateurs du système. La table d'inode référence les adresses physiques de l'espace de stockage, et est propre au système de fichier installé sur la partition. La suppression d'un fichier libère son numéro d'inode, mais n'écrit rien sur le disque. La taille maximale d'un fichier dépend bien sûr de la taille de la partition, mais celle­ci dépend également du système de fichiers employés et de la taille de ses secteurs (sectors).
Les types de fichiers
L'arborescence est constituée de fichiers de types différents. Le répertoire racine se situe tout en haut de la hiérarchie et son nom est un slash “/”. Placé en début de chemin absolu, le slash indique la racine La Console !© par Patrick Hautrive !;~) 2010
134
de l'arborescence, par contre, quand il est placé ailleurs, le slash est un interprété comme le caractère séparateur des répertoires. La commande “ls ­la” permet de visualiser les types de fichiers et les droits afférant à chacun d'entre eux.
Les types de fichiers (ls ­la)
Les répertoires (directory)
Les fichiers standards (file)
Les fichiers spéciaux des liens symboliques et des alias (symlink)
Les fichiers spéciaux des périphériques en mode bloc (bloc device)
Les fichiers spéciaux des périphériques en mode caractère (caracter device)
Les fichiers spéciaux des sockets TCP­IP
(socket)
Les fichiers spéciaux des tubes nommés (pipe) pour les redirections (fifo)
d
­
l
b
c
s
|
La commande “ls ­F” permet d'afficher les fichiers avec une extension symbolique (append) indiquant une caractéristique. La coloration syntaxique (LS_COLORS) permet de configurer la commande “ls” afin de voir les types de fichiers apparaitre avec une certaine couleur. La commande “readlink” permet de suivre les liens.
La classification des types de fichiers (ls ­F)
Les fichiers
Les liens brisés
Les répertoires
Les liens
Les exécutables et les images
Les pipes (fifo)
Les sockets
/
@
*
|
=
(blanc)
(rouge)
(blue)
(turquoise)
(green)
(blanc)
(violet)
Les magic number
Certains fichiers sont particuliers comme le fichier “/dev/null” qui est toujours vide, ou les fichiers “/dev/zero” ou “/dev/random”. La commande “file” évalue le type de format d'un fichier en examinant le formatage qu'il contient. Les fichiers peuvent être identifiés à l'aide d'un identifiant numérique magique (magic number). La commande “man magic” et les fichiers “/etc/magic” et “/usr/share/mime/magic” donnent une description de l'utilisation de ces identifiants.
Les liens symboliques
Un lien (link) peut être, soit un raccourci (soft), soit un synonyme (hard). Dans le cas d'un lien symbolique (symlink), le fichier pointe vers un autre fichier. Le fichier est de type “l”, le lien est un lien vers le nom du fichier et quand la cible est supprimée, le lien est cassé, et le fichier est dît orphelin, il y a deux noms de fichiers, mais le fichier symbolique est presque vide puisqu'il ne contient La Console !© par Patrick Hautrive !;~) 2010
135
que le nom auquel il fait référence, et chacun des fichiers est référencé sur le disque avec son propre numéro d'inode. Les liens symboliques peuvent faire référence à un fichier appartenant à un autre système de fichiers.
Dans le cas d'un lien en dur (hardlink), les deux fichiers sont représentés par le même numéro d'inode. Le fichier est du même type, le lien est un lien vers le même numéro d'inode et quand l'un est supprimé, l'autre existe toujours, et il est toujours possible d'accéder au fichier, les fichiers sont identiques et de même taille, toutefois, à l'intérieur d'une même partition, l'espace de stockage n'est pas doublé puisque c'est le même numéro d'inode qui les identifie.
La commande ls
La commande “ls ­la” indique dans l'ordre le type, les permissions, le nombre de hardlink, l'utilisateur propriétaire, le groupe propriétaire principal, la taille exprimée en octets, la date et l'heure de la dernière modification (mtime), et le nom du fichier.
Les champs de l'affichage long de la commande «ls ­l»
type
permission
hardlink
user
group
size
date
mtime
name
La table des inodes garde en mémoire les dates de création (ctime), d'accès (atime) et de modification (mtime) pour toutes ses entrées. Les commandes “ls –time=status” et “ls –time=use” montrent respectivement un affichage précis en fonction du statut ou de la date d'accès des fichiers, l'affichage par défaut étant la date de la dernière modification. Des recherches ciblées prenant en compte ces paramètres peuvent être entreprises avec l'outil “find”. La commande “touch” permet d'actualiser les dates d'accès et de modification du fichier.
La recherche avec find
L'outil find permet d'effectuer des recherches ciblées sur des fichiers de l'arborescence et d'enchainer une commande qui s'appliquera pour chaque occurrence.
find / ­name “pattern” ­print
find / ­name core ­exec rm {} \;
find . ­name “*doc*” ­exec ls ­la {} \;
find / ­name README* ­ok less {} \;
find . ­name "*.jpg" ­exec ls>ls.txt {} \;
find . \( ­name "*.jpg" ­o ­name "*.png" \) | less
find /etc ­atime 1 ­size 8 ­print
find $HOME ­mtime ­3
find /tmp ­atime 2 ­exec rm {} \;
find /usr/bin ­type l | less
sudo find / \( \( ­perm ­04000 ­a ­perm +011 \) ­o \( ­perm ­02000 ­a ­perm +011 \) \) ­print
La Console !© par Patrick Hautrive !;~) 2010
136
find . ­name \* ­mtime 0
find . ­mtime +0 ­mtime ­3
find / ­type f ­size ­50c ­exec ls ­l {} \;
find / ­type f ­size ­500k ­exec ls ­l {} \;
Les alternatives de debian
Les alternatives de Debian sont un système de liens symboliques permettant de faire correspondre des noms génériques de programme vers les binaires associés. Par, exemple, plusieurs éditeurs de texte peuvent être installés sur un système et les variables EDITOR peuvent ne pas être renseignées pour tous les utilisateurs, nonobstant, certains programmes proposent la fonctionnalité d'éditer un texte dans un éditeur, mais alors doivent faire un choix parmi tous ceux qui sont installés. Le programme pourra systématiquement faire référence à un lien symbolique lequel renverra vers le binaire choisit par défaut. Les liens symboliques sont créés dans le répertoire “/etc/altenatives”. La commande “man update­
alternatives” donne une description de cette méthode.
Les exercices de navigation
uname ­a; uptime ; runlevel ; hostname ; echo $SHELL ; stty ; ps ; id ; echo $PATH ; date ; pwd
ls ­R / ; vi /
ls ­la $HOME
cd ­ ; cd ~ ; cd ..
cd /pub ; more wine
touch blanc; ln ­s one two ; ls ­il ; touch one ; ls ­il ; ln one zero­same­inode ; ls ­il
echo “What is it ?” > ?? ; cat ??
xeyes ­center green ; xclock ­fg green ­bg blue & ; jobs ­l ; ps aux –forest
>empty ; echo “Hello world” > not­empty
stat *empty ; hd not­empty ; od not­empty ; mc
who ­uH
stat ­f /
tr ­d aeiouy < file.txt > consonnes.xxx
tr ­d “\015” < dos.txt > unix.txt
grep ^# /etc/fstab ; grep ^/ /etc/fstab
date ­s 11:20:00
date ­s 070211201963
history 50 | grep man
cat ~/.bash_history
touch I\ love\ you
grep ­i bash /etc/passw
cat /etc/passwd | grep bash
cat >> file.txt
CTRL + D
La Console !© par Patrick Hautrive !;~) 2010
137
La recherche sur internet
La recherche sur internet peut être ciblée en formulant judicieusement ses requêtes sur un moteur de recherche.
La formulation d'une requête dans un moteur de recherche sur Internet (google.com)
Les noms propres en MASJUSCULE
Les phrases exactes entre GUILLEMET
Les mots acceptés avec un PLUS
Les mots refusés avec un MOINS
Les inclusions avec l'opérateur AND
Les ensembles avec l'opérateur OR
La négation avec l'opérateur NOT
Les groupes de mots entre PARENTHESES
Les adresses URL
Les adresses internet URL (Uniform Ressource Locator) sont généralement formulées en indiquant dans l'ordre, le nom du protocole réseau, le nom du serveur , le nom de domaine, le nom du TLD, puis le numéro de port optionnel, et enfin le chemin absolu vers le fichier dans l'arborescence du serveur. Une adresse internet écrite en extension est conforme au FQDN (Full Qualified Domain Name).
La formulation des adresses des serveurs internet
URL (Uniform Ressource Locator) protocol://name.host.server.domain.tld:port//path/to/file
FQDN (Full Qualified Domain Name) http://
https://
ftp://
gopher://
news://
telnet://
file:///
mailto:
Le protocole hypertexte des pages web
Le protocole hypertexte sécurisé
Le protocole de transfert de fichiers
Le protocole gopher
Le protocole de Usenet
Le protocole de connexion non sécurisé
Le protocole référençant l'arborescence locale
Le protocole pour indiquer une adresse mail
Les domaines TLD
Les TLD (Top Level Domain) sont les noms de domaine qui forment la cime de la hiérarchie sur Internet. Les TLD indiquent soit la nature de l'activité de l'organisation, soit le pays où se trouve la dite organisation.
La Console !© par Patrick Hautrive !;~) 2010
138
Les noms de domaine de la hiérarchie d'internet
TLD (Top Level Domain)
.org
.gouv
.com
.mil
.asso
.net
.fr
.uk
.de
Les organisations
Les gouvernements
Les sociétés commerciales
Les administrations militaires
Les associations
Les sociétés internet
L'extension pour la France
L'extension pour le royaume uni (United Kingdom)
L'extension pour l'Allemagne (Deutchland)
Le format Unix ™
Les fichiers textes n'ont pas tous le même format selon le système sur lequel ils sont élaborés. Le format Unix™ se sert du caractère LF (Line Feed) pour opérer un passage à la ligne, tandis que le format Dos (Windows™) emploi les deux caractères LF et CR (Carriage Return). Ainsi, quand l'on visualise un fichier Unix™ dans un environnement Windows™, le texte semble écrit sur une seule ligne.
Les formats texte chez Unix et Dos
Le format Unix™
Le format Dos
(LF)
(LF + CR)
code ascii en octal \012
code ascii en octal \012 et \015
Des utilitaires (recode, flip, d2u, u2u, dos2unix, unix2dos, fromdos, todos) permettent de faire la conversion entre les deux formats. La commande “recode ibmpc.latin1 < dos.txt > unix.txt” opère cette conversion. Le package “mtools” contient les outils pour manipuler les fichiers Dos (Disk Operating System).
Les formateurs de fichiers et autres convertisseurs (troff, nroff, groff, ngroff, pr) permettent d'extraire des caractères à l'intérieur des fichiers. Certains éditeurs de texte sous Gnu Linux proposent la conversion. Les émulateurs (dosemu, wine, wabi) et les systèmes de virtualisation permettent également d'accéder aux fichiers Dos.
Les formats de fichiers
Les fichiers textes (ascii) sont aussi appelés des fichiers de textes bruts (raw). Ils sont très largement utilisé dans les systèmes Unices, parce que c'est un format simple, direct, natif, et standard. C'est le format pour les scripts interprétés dans un shell. C'est le format qui facilite les manipulations du contenu d'un fichier (extraction et modification). Tous les fichiers de configuration du répertoire “/etc” sont dans le format texte. Les fichiers textes (plaintext) sont les plus simples et les plus légers des formats de fichier. Avec un simple éditeur, l'on peut faire du copier coller, de la recherche et du La Console !© par Patrick Hautrive !;~) 2010
139
remplacement de motif.
Un fichier texte ne comporte que très peut de formatage (tabulation, casse, indentation), à contrario d'un fichier RTF (polices, tailles, gras, soulignement, italique, listes numérotées, justification, tableau) ou d'un traitement de texte qui proposent de nombreuses fonctionnalités (insertion d'images, de desseins, de feuilles de calcul, colorisation, stylisation, correcteur orthographique, pied de page, numérotation des pages, sommaire, bibliographie, macro commandes, etc.).
Un fichier texte peut être visualisé en ligne de commande dans un afficheur (pager), être manipulé avec un formateur (processor) et être édité dans un éditeur (editor) comme vi (visual). En mode graphique, le même fichier texte peut être visualisé en lecture seule (readonly), en mode WYSIWYG (What You See Is What You Get), être édité dans un éditeur graphique (gedit), être travaillé dans un traitement de texte (open office) et être finalisé dans un logiciel de mise en page (scribus).
Les formats de fichiers sont très nombreux. Ces formats de fichiers peuvent être libres, ouverts, universels et gratuits, tandis que d'autres peuvent être propriétaires, fermés, spécifiques et payants. La communauté des Logiciels Libres privilégie l'utilisation des formats connus et diffusés sous licence libre, parce qu'ils permettent ainsi de pérenniser l'accès aux documents dans le temps.
Souvent, le formatage utilisé dépend de la fonction (image, sons, vidéo, archive, impression, etc.) ou de la plateforme (Unix™, Windows™, Macintosh™, etc.) ou du programme qui la généré. En règle générale, les noms de fichiers sont dotés d'une extension qui correspond à l'application. Cependant, de nombreux Logiciels Libres sont compatibles avec d'autres formats que les leurs. Ainsi, l'on parle d'archives ZIP auto extractibles, de textes en RTF (Rich Text Format), de documents imprimables en PDF (Portable Document Format), de livres en LATEX, d'images au format PNG (Portable Network Graphic), de musique enregistrée en MIDI, de vidéo en OGG VORBIS, de feuilles de calcul (spreadsheets) de la suite bureautique (open office), de distribution distribuée en image ISO prête pour la gravure sur cdrom, de package RPM ou DEBIAN, de fichiers sources, de binaires ou d'exécutables...
Les fichiers joints
Les fichiers joints avec les mails sont appelés des pièces jointes. Ces fichiers sont transportés dans un format spécial afin d'être reconnus par les lecteurs de mail. Les formats UUENCODE et MIME (Multipurpose Internet Mail Extension) ont été successivement utilisés.
Les caractères spéciaux
Les shell reconnait et interprète un ensemble de caractères spéciaux. Les caractères spéciaux désignent tous les caractères du clavier (figurant à l'intérieur de la table de codage des caractères ASCII) qui ont pour le shell et les scripts une signification particulière. Les caractères spéciaux sont en quelque sorte La Console !© par Patrick Hautrive !;~) 2010
140
tous les caractères qui ne sont pas alphanumériques. L'ensemble de ces caractères spéciaux font l'objet d'une standardisation. Les jokers, le séparateur interne (IFS), les méta caractères et les opérateurs de contrôle et les opérateurs logiques sont des caractères spéciaux.
N'importe quel caractère peut se substituer à un joker (wildcard globbing). L'ordre de recherche ou de remplacement correspond à l'ordre de la table de codage ASCII: les chiffres en premier, puis les majuscules et les minuscules dans l'ordre alphabétique.
Les exemples d'utilisation des caractères spéciaux jokers (wildcards)
“?”
“??”
“*”
[14]
[1­4]
[A­Z]
[a­z]
[A­Z] & [a­z]
Remplace un et un seul caractère (un)
Remplace deux caractères (deux)
Remplace une chaine de caractères qui peut être nulle (zéro, un OU plusieurs)
Remplace deux valeurs (un ET quatre)
Remplace quatre valeurs (de un A quatre)
Remplace toutes les lettres majuscules
Remplace toutes les lettres minuscules
Remplace toutes les lettres
La manipulation des fichiers
Les caractères spéciaux sont abondamment employés dans les scripts et les recherches à l'aide des jokers et des expressions régulières (regex). Les caractères spéciaux permettent de former des motifs (pattern) de recherche qui seront évalués par le shell. L'outil “grep” (Globaly Research for Regular Expression) peut être combiné à d'autres (“find”, “diff”, “cut”, “sort”, “uniq”, “wc”, “awk”, “sed”, “tr”, “groff”, ...) pour effectuer des recherches ciblées et extraire de l'arborescence des fichiers, puis des lignes, et enfin des colonnes. Des lignes de commandes complexes peuvent être enchainées les unes aux autres pour former des trains de commandes reliés par des pipes, chacune recevant en flux d'entrée, le flux de sortie de la précédente.
La Console !© par Patrick Hautrive !;~) 2010
141
Les commandes de manipulation des fichiers (filter)
cat
less
vi
find
grep
diff
uniq
sort
wc
patch
awk
sed
tr
cut
col
groff
expand
unexpand
pour lire le contenu d'un fichier (concatenate)
pour afficher un fichier
pour éditer un fichier texte (visual)
pour rechercher un fichier dans l'arborescence
pour sélectionner des lignes contenants une occurrence dans un fichier
pour comparer deux fichiers ligne à ligne (difference)
pour écarter les doublons à l'intérieur d'une liste
pour classer des listes de lignes dans un ordre alphanumérique
pour compter les lignes, les mots ou les caractères (word count)
pour insérer des mises à jour dans un fichier
pour manipuler et formater des expressions avec un langage de programmation
pour d'extraire ou de remplacer des motifs un flux de texte (stream editor)
pour traduire un caractère ou l'effacer (translate)
pour sélectionner une colonne dans une ligne en fonction d'un séparateur connu
pour renverser l'ordre d'un flux
pour formater un flux de sortie
pour convertir les tabulations en espace
pour convertir les espaces en tabulation
Les exemples de recherche
cmp file1 file2
diff file1 file2
sort file > filealpha
sort file ­o
sort ­b file ­o filealpha
sort ­d file > filedico
sort ­nr
grep hda[1­8] /etc/fstab
grep ^# /etc/iftab
wget –limit­rate=96k http://server.org/image.iso
La Console !© par Patrick Hautrive !;~) 2010
142
PERMISSION
Les attributs des fichiers
Tous les fichiers possèdent des attributs. Ces attributs sont des caractéristiques propres à chaque fichier et ces caractéristiques sont consultables à l'aide des commandes «ls» et «lsattr» (nom, inode, hardlink, permission, user, group, dates, étiquettes). Les attributs peuvent être compatibles avec les ACL (Access Control List). Lorsqu'un fichier est transféré sur un autre système de fichier (file system), le fichier copié peut perdre certains de ces attributs parce qu'ils ne sont pas gérés.
Le nom d'un fichier est unique à l'intérieur d'un même répertoire, mais il peut exister des fichiers différents, situés à des endroits différents, mais portant le même nom. Les numéros d'inode sont uniques, ils identifient un emplacement physique sur le disque, mais plusieurs noms différents peuvent pointer vers le même numéro d'inode, c'est le principe des liens (hardlink).
Les permissions sur un fichier indiquent les opérations possibles pour l'utilisateur propriétaire, pour le groupe propriétaire, et enfin pour tous les autres utilisateurs qui ne sont, ni les premiers, ni les seconds. Les permissions normales sont appelées indifféremment les droits et les permissions spéciales sont qualifiées de droits d'endossement.
La commande «chmod» permet de modifier les permissions d'un fichier ou de tout un répertoire avec l'option ­R (recursive).
Les commandes «lsattr», «chattr» et «attr» permettent de connaitre et de modifier les attributs spécifiques d'un fichier.
Le contrôle des permissions
Les permissions sont les attributs d'appartenance d'un fichier. Tous les fichiers du système, quels qu'ils soient, appartiennent à un utilisateur ou à un autre, et à un groupe. Comme le système Gnu Linux est un système multi tâches et multi utilisateurs, toutes les opérations sur les fichiers sont contrôlées par le noyau afin de déterminer si ces opérations sont conformes aux permissions de l'utilisateur qui les demandes. La norme POSIX impose que les droits d'accès à un fichier soient toujours comparés aux droits de l'utilisateur sur le fichier.
Les fichiers appartiennent à des utilisateurs et les commandes sont lancées sous l'identité d'un utilisateur (UID et EUID, GID et EGID). La comparaison entre les droits de l'utilisateur (effective) et les droits du fichier ou ceux d'une commande permet de contrôler si les opérations sont permises. La procédure de contrôle des droits passe par plusieurs étapes, et en dernier ressort, quand les droits pour l'utilisateur et ceux pour les groupes ont été examinés, ce sont les droits pour les autres utilisateurs qui s'appliquent.
La Console !© par Patrick Hautrive !;~) 2010
143
Les catégories des utilisateurs
Les permissions d'un fichier sont présentées par la commande “ls ­l” (listing au format long). Les permissions sont réparties en trois catégories de population, celle de l'utilisateur (user), celle du groupe (group) et celle des autres utilisateurs (others). Les permissions attribuées pour tous les utilisateurs (all) valent également pour l'utilisateur propriétaire.
Une autre catégorie peut être ajoutée pour désigner les droits spéciaux (special). Dans l'ordre, les droits sont affichés en octal avec quatre chiffres (de 0000 à 7777) et dans leur forme symbolique, les droits sont affichés avec neuf lettres (rwxrwSrsT).
Les utilisateurs peuvent faire partie d'un groupe ou de plusieurs groupes, auquel cas, ils possèdent indirectement les droits du groupe auquel ils appartiennent. Les droits de l'utilisateur propriétaire priment sur ceux du groupe propriétaire. Le super utilisateur ou l'administrateur du système (root) possède tous les droits et tous les privilèges sur l'intégralité du système, il peut donc accéder à tous les fichiers, et en modifier les droits à n'importe quel moment.
Un utilisateur ne peut changer les droits que des fichiers dont il est l'utilisateur propriétaire. Aucun utilisateur (mis à part root) ne peut changer les droits d'un fichier appartenant à un autre utilisateur. Les membres d'un même groupe partagent les mêmes droits sur les fichiers appartenants au groupe propriétaire.
Pour s'octroyer les droits sur un fichier, le moyen le plus simple consiste alors à essayer d'en devenir propriétaire, et par exemple de faire une copie du fichier, si c'est possible, puis de changer les droits sur la copie. Les fichiers copiés appartiennent à l'utilisateur qui les a copiés. Les droits se modifient avec la commande “chmod”. Les types de permissions
Les permissions sont de plusieurs ordres. Un utilisateur peut avoir sur un fichier la permission de le lire (read) et donc de le copier, la permission d'y écrire (write) et donc de le modifier, et/ou la permission de l'exécuter (execute) et donc de lancer les instructions qu'il contient.
Il existe également des permissions qui ont une fonction spéciale, comme les bits d'exécution d'une commande sous l'identité de son propriétaire (suid) ou de son groupe propriétaire (sgid), et les bits de conservation (sticky) qui permettent, pour les répertoires de rester propriétaire de tous les fichiers qui s'y trouvent, et pour les programmes de rester en mémoire après leur première exécution.
Les permissions spéciales doivent être réservées aux binaires et aux programmes compilés, et ne doivent jamais être attribuées à des scripts, parce que l'insertion de shell ou de commande seraient La Console !© par Patrick Hautrive !;~) 2010
144
autorisée pour n'importe quel utilisateur.
Les permissions et les attributs des fichiers
Permission
­
r
w
x
s
nothing
read
write
execute
special
SUID
SGID
t sticky bit
Directories
Binaries
File
Directory
Owner Operators Attributs Etiquette (ACL)
u (user)
Copy
List
g (group)
Modify & Erase Create & delete o (other)
Run
Browsable
a (all)
Endossement
s (special)
EUID=owner
EUID=group
Conservation
Heritage
Memory
“=”
“+”
“­”
A
S
a
s
c
d
i
u
e
J
T
D
Acces time
Synchrone file (sync)
Append mode writing
Data at Zero if destroy
Compressed by kernel
No dump
Immutable (lock no link)
Undelete (récupération)
Extents disk mapping
Ext3 journal first
Top hierarchy directory
Synchrone dir (dirsync)
Les permissions des répertoires
Les répertoires sont également des fichiers et des droits y sont attachés. Pour un répertoire, le droit de lecture (read) signifie le droit de visualiser la liste des fichiers du répertoire, le droit d'écriture (write) signifie le droit d'y créer, d'y supprimer ou d'y renommer une entrée (un fichier dans le répertoire), et le droit d'exécution (execute) signifie le droit de parcourir (browsable) l'arborescence en traversant ce répertoire (avec la commande “cd” par exemple).
Ainsi, un utilisateur qui a le droit d'écriture dans un répertoire (write) peut supprimer un fichier alors qu'il n'a aucun droit sur le fichier lui même. Les sticky bits sont des droits qui s'appliquent pour les répertoires quand un fichier y est placé. Par exemple, le répertoire conteneur qui possèdent les droits spéciaux (suid, sgid, sticky) prodigue aux fichiers son groupe propriétaire.
L'expression des permissions
Les permissions peuvent s'exprimer dans une forme absolue (avec la numérotation octale) ou relative (avec une expression symbolique). La forme absolue est la numérotation octale qui fixe tous les droits (7777) pour toutes les catégories (sugo). La forme relative est l'expression symbolique (rwxst) qui permet, grâce à des opérateurs (+=­), de ne modifier que les droits qui changent pour une certaine catégorie.
Par exemple, la commande “chmod 777 file” attribue tous les droits à toutes les catégories, tandis que La Console !© par Patrick Hautrive !;~) 2010
145
la commande “chmod o­rwx file” permet de supprimer sur ce fichier tous les droits à tous les autres utilisateurs, sans spécifier les autres droits pour les autres catégories, et sans prévaloir des droits antérieurs pour la catégorie concernée.
Pour changer les droits d'un fichier, l'utilisateur doit en avoir la permission, c'est­à­dire qu'il doit en être le propriétaire ou passer par l'identité du super utilisateur (root). L'utilisateur qui copie (cp) un fichier doit posséder le droit en lecture (read) sur le fichier, mais comme il devient propriétaire de la copie, il peut donc la modifier (write) ou en changer les droits (chmod).
Octale
3bits
Values
“111”
“110”
“101”
“100”
“011”
“010”
“001”
“000”
Endossement
SUID
4
s
s
s
s
­
­
­
­
SGID
2
s
s
­
­
s
s
­
­
Décimale
Sticky bit
1
t
­
t
­
t
­
t
­
1digit
0 à 7
7
6
5
4
3
2
1
0
Permission
read
4
r
r
r
r
­
­
­
­
write
2
w
w
­
­
w
w
­
­
execute
1
x
­
x
­
x
­
x
­
La numérotation octale
La numérotation octale permet d'exprimer les droits d'un fichier sous une forme numérique. La numérotation octale est une base 3. C'est­à­dire que la valeur des permissions de chacune des quatre catégories d'utilisateur (sugo) sera exprimée pour chacune sur trois bits. Il faudra douze bits pour exprimer entièrement les droits d'un fichier en octal (4x3bits=12 bits pour exprimer toutes les valeurs possibles de 0000 à 7777). Les droits spéciaux (SUID, SGID et sticky bits) s'expriment en milliers, les droits des utilisateurs en centaines, les droits de groupes en dizaines, et les droits des autres en unités.
La catégorie “user” peut prendre les valeurs de O à 7 (un bit peut avoir la valeur de un ou de zéro, et le résultat de 2 puissance 3 est égale 8 possibilités).
La Console !© par Patrick Hautrive !;~) 2010
146
L'équivalence entre les expressions symboliques et la numérotation octale des permissions
Les droits rwxrwxrwx
Les droits rwx­ ­ ­ ­ ­ ­ Les droits rwx­ ­x­ ­x
Les droits rw­r­­r­­
Les droits ­ ­ ­ ­ ­ ­ ­ ­ ­
Les droits rwsr­xr­x
Les droits r­xr­Sr­x
Les droits rw­rw­rwt
Les droits rwsrwsrwt
Les droits rwSrwSrw­
Les droits r­sr­ ­r­t
sont égaux à 0777
sont égaux à 0700
sont égaux à 0711
sont égaux à 0644
sont égaux à 0000
sont égaux à 4755
sont égaux à 2545
sont égaux à 1667
sont égaux à 7777
sont égaux à 6666
sont égaux à 5555
La numérotation octale des permissions
r
400
user
w
200
r
w
x
100
SUID
S (sans x)
s (avec x)
4000
S/s
r
40
r
group
w
20
w
x
10
SGID
S (sans x)
s (avec x)
2000
S/s
r
4
other
w
2
r
w
x
1
Sticky bit special
T (sans x)
t (avec x)
1000
T/t
Le masque des fichiers
Lors de leur création, les fichiers peuvent être générés ou être copiés. Quand ils sont copiés, les nouveaux fichiers héritent des droits qui étaient attribués au fichier source, mais dans la limite des droits possibles selon le masque de l'utilisateur qui fait l'opération. Quand ils sont générés, les fichiers sont créés selon le masque de l'utilisateur (mais, sans tenir compte des droits d'exécution, à moins qu'ils ne soient des répertoires). Dans tous les cas le masque de l'utilisateur prévaut, sauf pour la création de liens symboliques.
Ces droits attribués automatiquement sont calculés en fonction du masque de l'utilisateur. Le masque de l'utilisateur est indiqué avec la commande “umask”. En général, la valeur du masque est de 0022, mais le premier digit qui correspond aux droits spéciaux ne sera pas pris en compte. Seuls les trois derniers digits seront appliqués. Cette valeur de 022 pour le masque de l'utilisateur signifie que les fichiers qui seront générés se verront attribués les droits complémentaires à la valeur maximale possible de 777, mais sans tenir compte du droit d'exécution dans le cas des fichiers standards.
Ainsi, avec un masque de 022, les droits seront de 644 (777­022­111=644 ou 666­022=644) pour un La Console !© par Patrick Hautrive !;~) 2010
147
fichier standard, et seront de 755 (rwxr­xr­x=777­022=755) pour les répertoires. La commande “umask 0022” peut être insérée dans le fichier de personnalisation de l'utilisateur “~/.profile”.
Les exemples de permission
ls ­la $HOME
umask 023 ; umask ­p ; umask ­S ; ulimit ­a
touch file ; ls ­l file
chmod 754 file ; ls ­l file
chmod ugo=rwx ; ls ­l file
chmod ­r file ; ls ­l file
chown ­R $USER:noone $HOME ; ls ­l /home/noone
lsof ­u 500,501,502,1000
ps | grep bash ; lsof ­p PID
ln ­s file filesoft ; ls ­l file
chfn ; finger ; man usermod
ls ­l /etc/passwd ; ls ­l /usr/bin/passwd ; ls ­l /bin/bash
id ; whoami ; groups
groups root daemon wheel
chmod +x script.sh
chmod u+s script.sh
su
mkdir /home/groupspace ; groupadd mygroup
useradd noone ; usermod ­G mygroup noone ; groups noone
chgrp mygroup /home/groupspace ; chmod g+s /home/groupspace
chmod g+w groupspace/ ; ls ­ld /home/groupspace
su noone
id ; pwd ; touch /home/groupspace/filenoone ; ls ­l /home/groupspace/filenoone
exit
id ; pwd ; chmod 1775 /home/groupspace
su noone
touch /home/groupspace/filenoonetwo ; ls ­l /home/groupspace/filenoone*
exit
chmod 3775 /home/groupspace/ ; su noone
su noone touch /home/groupspace/filenoonethree ; ls ­l /home/groupspace/filenoone*
lsattr file.txt
chattr file.txt
chattr +Ss script.sh
chattr ­Ss script.sh
man attr
La Console !© par Patrick Hautrive !;~) 2010
148
PASSWORD
L'authentification
La procédure d'authentification (authentication) sur un système informatique est essentielle, parce c'est elle qui octroie à l'utilisateur son identité pour le système, et par conséquent ses droits et ses permissions. Le contrôle de l'identité est assurée par la vérification du mot de passe (password) pour le compte (login). Sur un système Gnu Linux, il faut avoir un compte utilisateur pour se connecter au système. La fonction “getpass()” récupère le mot de passe saisie par l'utilisateur.
Parfois, des comptes génériques pour les invités (guest et wild), pour les utilisateurs anonymes (anonymous), ou pour les inconnus (nobody) sont disponible pour se connecter. Normalement, ces comptes possèdent des droits restreints et n'ont accès qu'à une partie du système.
Les systèmes Gnu Linux utilisent de plus en plus PAM (Pluggable Authentication Modules) pour gérer l'authentification des utilisateurs. Les autres systèmes d'authentification les plus courants utilisent des bases de comptes plus sophistiquées, comme NIS (Network Information Service), LDAP, ACL, KERBEROS, RADIUS.
Les types d'authentification
Il existe deux types d'authentification, l'une est basée sur le compte de l'utilisateur, et l'autre est basée sur la ressource. Dans le premier cas, la vérification a lieu lors de la connexion avec le mot de passe de l'utilisateur, et l'authentification est valable tout le temps de la session de l'utilisateur. Dans le deuxième cas, la vérification a lieu lors de chaque tentative d'accès à la ressource avec le mot de passe attaché au fichier par exemple.
Les comptes des utilisateurs
Les utilisateurs qui possède un compte sur un système Gnu Linux peuvent se connecter en présentant le nom du compte (login) au prompt de connexion, et en saisissant le mot de passe (password) correspondant. Le compte de l'utilisateur (UID et GID) renseigne le système sur ces droits, son appartenance à des groupes, sa configuration et ses préférences.
Un utilisateur peut appartenir à plusieurs groupes, mais l'un d'entre eux sera désigné comme le groupe principal (ou groupe primaire). La configuration des règles des comptes utilisateurs est définie dans le fichier “/etc/login.defs”. Les systèmes Debian utilisent la commande “shadowconfig on” pour activer les mots de passe cachés (shadowing).
Les utilisateurs lancent la commande “passwd” pour changer de mot de passe.
La Console !© par Patrick Hautrive !;~) 2010
149
Les bases de comptes
Les fichiers d'administration des comptes, des groupes et des mots de passe des utilisateurs constituent ce que l'on appèle la base de donnée des comptes utilisateurs. Les fichiers “/etc/passwd” et “/etc/group” sont les deux fichiers d'administration principaux, auxquels peut s'adjoindre deux autres fichiers de shadowing des mots de passe “/etc/shadow” et “/etc/gshadow”. Les systèmes Debian conservent une copie de ces fichiers dans “/usr/share/base­passwd/passwd.master” et “/usr/share/base­passwd/group.master”.
L'accès au système peut être règlementé en fonction de l'hôte dans “/etc/login.access”, et en fonction de la date et de l'heure de connexion avec le fichier “/etc/porttime”.
Certains autres fichiers sont importants pour les utilisateurs parce qu'ils définissent l'environnement de connexion comme “/etc/login.defs”, “/etc/environment”, “/etc/skel” et “/etc/default/useradd”. D'autres fichiers de configuration sont plutôt optionnels et permettent l'automatisation de l'administration des comptes comme “adduser.conf” et “deluser.conf”.
Le service d'authentification PAM par modules se généralise sous les systèmes Gnu Linux. Les fichiers de configuration de PAM est “/etc/pam.conf”, mais ce sont les fichiers dans “/etc/security/*” et les scripts dans “/etc/pam.d/*” qui sont privilégiés pour affiner la configuration. Ainsi, le fichier “/etc/pam.d/login”. La commande “man 7 pam” donne une description de l'utilisation de PAM.
Les fichiers de connexion
De nombreux autres fichiers peuvent être consultés lors de la procédure de connexion.
Les fichiers de configuration d'une connexion
Password
Host
Network
/etc/passwd
/etc/inittab
/etc/shadow
/etc/fstab
/etc/group
/etc/securetty
/etc/gshadow
/etc/usertty
/etc/login.defs /etc/terminfo
/etc/nologin
/etc/termcap
/etc/login.access /etc/gettydefs
/etc/porttime
/etc/ttytab
/etc/limits
/etc/shells
/etc/environment /etc/skel
/etc/pam.d/login /etc/sysctl
/etc/security/*
Configuration
Message
/etc/services /etc/aliases
/boot/bootmsg.txt
/etc/protocols /etc/sudoers
/etc/issue
/etc/hosts
/etc/locale.alias
/etc/motd
/etc/host.allow /etc/locale.gen
/etc/profile
/etc/host.deny /etc/gdm/locale.conf /etc/bash.bashrc
/etc/host.equiv /etc/profile.d/lang.sh /var/log/boot.log
/etc/netgroup /etc/localtime
/var/log/dmesg
/root/.rhosts /etc/alternatives
/tmp/install.log
/etc/ftpusers /etc/magic
/proc/kmsg
/etc/dialups
/etc/timezone
/var/log/secure
/etc/dpasswd /etc/bash_completion /var/log/sulog
/etc/modules.conf
/var/log/dmesg
La Console !© par Patrick Hautrive !;~) 2010
150
Profile
~/.login
~/.bash_profile
~/.bash_login
~/.bash_history
~/.profile
~/.bashrc ~/.Xsession
~/.Xdefaults
~/.Xinitrc
~/.signature
~/.rhosts
~/.bash_logout
L'administration des utilisateurs
L'administrateur et les utilisateurs utilisent ces commandes pour gérer les comptes des utilisateurs.
Les commandes d'administration des utilisateurs
USER PASS UID GID GROUPS INFO HOME SHELL LOCK UNLOCK STOP DELAY
La commande “vipw”
La commande “passwd”
La commande “chage”
La commande “useradd”
La commande “userdel”
La commande «su»
La commande “usermod”
pour éditer le fichier “/etc/passwd”.
pour changer les mots de passe.
pour changer les informations d'âges des mots de passe (change age).
pour ajouter un nouvel utilisateur (HOME, SHELL, GROUP, STOP).
pour supprimer un compte (la désactivation est moins dur!).
pour changer d'utilisateur (switch user).
pour administrer les comptes utilisateurs
L'administration des groupes
L'administrateur et les utilisateurs utilisent ces commandes pour gérer les groupes des utilisateurs.
La commande “gpasswd” permet d'administrer le fichier “/etc/group”, et indirectement le fichier «/etc/gshadow» si la variable SHADOWGRP existe.
Les commandes d'administration des groupes
GROUP PASS GID ADMIN USERS
La commande “vigr”
La commande “groupadd”
La commande “groupdel”
La commande “groupmod”
La commande “sg”
La commande “newgrp”
La commande “chgrp”
La commande “gpasswd”
pour éditer le fichier “/etc/group”.
pour ajouter un groupe dans “/etc/group”.
pour supprimer un groupe dans “/etc/group”.
pour administrer le nom et le GID d'un groupe.
pour changer de groupe principal (switch group).
pour changer de groupe principal.
pour changer le groupe propriétaire d'un ou de plusieurs fichiers.
pour changer “/etc/group” et «/etc/gshadow» si SHADOWGRP.
L'administration du shadowing
Le shadowing consiste à placer les mots de passe cryptés des comptes et/ou des groupes dans des fichiers séparés inaccessibles.
La Console !© par Patrick Hautrive !;~) 2010
151
Les commandes d'administration du shadowing
La commande “pwck”
vérifier la conformité et la concordance de “passwd” et de “shadow”.
La commande “pwconv”
convertir le champ PASS du fichier “/etc/passwd” en “/etc/shadow”.
La commande “pwunconv” enlever le shadowing et réintégrer les mots de passe cryptés.
La commande “grpck”
vérifier la conformité et la concordance de “group” et de “gshadow”.
La commande “grpconv”
convertir le champ PASS du fichier “/etc/group” en “/etc/gshadow”.
La commande “grpunconv” enlever le shadowing et réintégrer les mots de passe dans “group”.
La commande “shadowconfig”
activer le shadowing des comptes sous Debian.
La commande “update­passwd”
générer des copies de la base des mots de passe sous Debian.
Les groupes des utilisateurs
La création des groupes est réservée au super utilisateur (root). Le nom d'un groupe doit être un nom unique, comme l'identifiant GID. Les utilisateurs possèdent en générale tous au moins un groupe, parfois plusieurs. Quand l'utilisateur fait parti de plusieurs groupes, l'un d'entre eux est le groupe principal (groupe primaire ou initial).
Les groupes peuvent être administrés par un administrateur de groupe, qui n'a pas besoin de faire partie du groupe. Un groupe peut être protégé par un mot de passe, dans ce cas les utilisateurs qui n'en font pas partie, mais qui connaissent le mot de passe, peuvent utiliser la commande “newgrp” afin de faire partie du groupe temporairement.
La commande “newgrp” permet de changer le groupe principal de l'utilisateur (moyennant l'appartenance au groupe ou le mot de passe du groupe s'il est défini). La commande “sg” (switch group) permet de lancer une commande avec l'identité d'un autre groupe.
Les mots de passe
Les mots de passe sont administrés avec la commande “passwd” qui appartient au super utilisateur (root) et qui porte le bit SUID. Les données des utilisateurs sont enregistrées dans le fichier “/etc/passwd”. Les mots de passe sont cryptés et stockés dans le fichier “/etc/shadow” qui ne doit pas être accessible aux utilisateurs pour prévenir les attaques par dictionnaires. La commande «man 5 passwd»
L'appartenance aux groupes est administrée dans le fichier “/etc/group”. Les mots de passe afférant aux groupes s'ils existent sont conservés dans le fichier “/etc/gshadow”. La commande “man 3 crypt” présente les méthodes de cryptage des mots de passe.
La Console !© par Patrick Hautrive !;~) 2010
152
Les mots de passe et l'appartenance aux groupes
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
USER
USER
GROUP
GROUP
PASS
PASS
PASS
PASS
UID
1970
GID
ADMIN,
GID
INFO HOME SHELL
LIVE
DELAY ALERT STOP 1970STOP
USERS,
USERS,
Certaines anciennes applications réseaux font passer les noms de login et les mots de passe en clair (rshd, telnetd, ftpd). Un sniffer de packet permet ainsi de les récupérer. Il est bien sûr conseillé d'utiliser les applications sécurisées comme ssh qui cryptent les mots de passe. Les utilisateurs sont invités à choisir un bon mot de passe et à le renouveler fréquemment. De plus, ils doivent le conserver pour eux seuls, et ne jamais l'écrire sur un post­it collé à l'écran, ni de le divulguer à qui que ce soit et ce quelques soient les circonstances. Les mots de passe sont personnels et ils engagent la responsabilité de l'utilisateur.
Le shadowing
Le shadowing consiste à stocker les mots de passe cryptés dans un fichier séparé. Les fichiers de shadowing ne sont pas accessibles aux utilisateurs, afin d'empêcher l'éventualité d'une attaque de force brute avec un dictionnaire de mots de passe. Seuls l'utilisateur root et le groupe shadow ont la possibilité de lire les fichiers “/etc/shadow” et “/etc/gshadow”.
Les commandes “pwck” et “grpck” doivent être lancées avant d'effectuer un changement de shadowing. Les commandes “pwconv” et “grpconv” permettent de passer au système des mots de passe cachés, respectivement dans “/etc/shadow” pour les comptes des utilisateurs et dans “/etc/gshadow” pour les groupes des utilisateurs. Tandis que les commandes “pwunconv” et “grpunconv” permettent de revenir en arrière, malgré la perte des informations sur les âges des mots de passe.
Les champs de passwd
/etc/passwd
USER
PASS
UID
GID
INFO HOME SHELL
Le champ USER contient le nom de compte de l'utilisateur (login).
Le champ PASS du fichier “/etc/passwd” peut être renseigné de plusieurs façons.
Le champ PASS est vide pour indiquer que le mot de passe est une chaine nulle.
Le champ PASS est une croix (“x”) pour indiquer que le mot de passe est dans “/etc/shadow”.
Le champ PASS est une étoile (“*”) pour indiquer qu'il y a un verrou sur le compte.
Le champ PASS est deux points d'exclamation (“!!”) pour indiquer l'inexistence du mot de passe.
Le champ UID contient l'identifiant unique de l'utilisateur.
Le champ GID contient l'identifiant unique du groupe principal de l'utilisateur.
La Console !© par Patrick Hautrive !;~) 2010
153
Le champ INFO est un champ libre ou peuvent se retrouver les informations GECOS utilisées par les commandes “finger” et «chfn», et la définition des quotas (nice, umask et ulimit) de l'utilisateur. Les quotas sont séparés par une virgule (pri= , umask= , ulimit= ). Les quotas peuvent être également définis dans les variables du fichier “/etc/login.defs”.
Le champ HOME contient le répertoire personnel de l'utilisateur et la valeur de la variable HOME.
Le champ SHELL propose l'exécutable lancé dès la connexion, souvent le shell “/bin/bash”, mais pour les comptes qui ne sont pas autorisés à se connecter, ce peut être “/bin/false” ou “/bin/nologin”.
Les champs de shadow
/etc/shadow
USER
PASS 1970
LIVE DELAY ALERT STOP 1970STOP RESERVE
Le fichier «/etc/shadow» contient les informations d'âge.
Le champ USER contient le nom de connexion de l’utilisateur (login).
Le champ PASS contient le mot de passe chiffré en alphanumérique avec la commande “crypt”.
Le champ PASS commence par un point d'exclamation (“!”) avec «passwd ­l user» (lock).
Le champ 1970 contient le nombre de jours depuis le 1er janvier 1970 et le dernier changement.
Le champ LIVE contient le nombre de jours pendant lesquels le changement est interdit.
Le champ DELAY contient le nombre de jours après lesquels le changement est obligatoire. La date du dernier changement 1970 plus le champ DELAY donne la date d'expiration. Quand le champ LIVE est supérieur au champ DELAY, l'utilisateur ne peut pas changer son mot de passe.
Le champ ALERT contient le nombre de jours d'avertissement avant l'expiration.
Le champ STOP contient le nombre de jours de répit après la date d'expiration et qui fixe la date de désactivation du compte.
Le champ 1970STOP contient le nombre de jours depuis le 1er janvier 1970 de désactivation.
Le champ RESERVE est un champ qui n'est pas utilisé.
Les champs de group
/etc/group
GROUP
PASS
GID
USERS,
Le champ GROUP contient le nom unique du groupe.
Le champ PASS du fichier “/etc/group” peut être renseigné de différentes façons.
Le champ PASS est vide pour indiquer qu'il n'y a pas de mot de passe.
Le champ PASS est une croix (“x”) pour indiquer que le mot de passe est dans “/etc/gshadow”.
Le champ PASS est un point d'exclamation (“!”) pour indiquer que le groupe est verrouillé.
Le champ GID contient l'identifiant unique du groupe.
Le champ USERS contient les noms des utilisateurs membres du groupe, séparés par une virgule.
La Console !© par Patrick Hautrive !;~) 2010
154
Les champs de gshadow
/etc/gshadow
GROUP
PASS
ADMIN, USERS,
Le champ GROUP contient le non du groupe unique et en accord avec le fichier «/etc/group».
Le champ PASS contient le mot de passe crypté pour le groupe (s'il existe un mot de passe).
Le champ ADMIN contient les administrateurs du groupe avec «gpasswd ­A user group».
Le champ USERS contient les utilisateurs membres du groupe, séparés par une virgule.
L'environnement de connexion
Le fichier “/etc/login.defs” donne les paramètres définis pour les utilisateurs lors de la connexion. La commande “man login.defs” donne une description de la configuration de l'environnement de l'utilisateur, et des mécanismes de gestion des durées des mots de passe. La configuration des mots de passe consiste à affecter des valeurs pour les variables qui vont déterminer le comportement des mots de passe. Le module PAM (Pluggable Authentication Modules) prend le relais pour configurer l'environnement de l'utilisateur qui se connecte.
MAIL_DIR
/var/mail
#Définition obligatoire de la variable $MAIL
MAIL_FILE
.mail
#Fichier contenant les mails de l'utilisateur
FAIL_DELAY
3
#Nombre de seconde d'attente après échec de la connexion
FAILLOG_ENAB
yes
#Acceptation des échecs et log dans “/var/log/faillog”
LOG_UNKFAIL_ENAB
no
#Acceptation des échecs avec login inconnus (unknown)
LOG_OK_LOGINS
no
#Enregistrement dans les journaux des connexions réussies
QUOTAS_ENAB
yes
#Acceptation des quotas (umask, ulimit, nice) (Gecos)
SYSLOG_SU_ENAB
yes
#Log avec syslog de la commande “su”
SYSLOG_SG_ENAB
yes
#Log avec syslog des commandes “newgrp” et “sg”
SULOG_FILE
/var/log/sulog #Log de la commande “su”
TTYTYPE_FILE
/etc/tty
#Type de terminal
FTMP_FILE
/var/log/btmp #Log des échecs de connexion “lastb”
SU_NAME
su
#Affichage du “su” pour la commande “ps”
HUSHLOGIN_FILE
.hushlogin
#Acceptation du hush mode
NOLOGIN_STR
nologin
#Refus de connexion
ENV_TZ
/etc/timezone #Définition de la variable d'environnement TZ
ENV_HZ
HZ=100
#Définition de la variable HZ
ENV_SUPATH
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/bin/X11:/usr/local/sbin:/usr/local/bin
ENV_PATH
PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
TTYGROUP
tty
#Le groupe propriétaire pour le périphérique terminal
TTYPERM
0600
#Les permissions attribuées au périphérique terminal
ERASECHAR
0177
#Caractère d'effacement (backslash) pour system V
KILLCHAR
025
#Caractère de suppression de ligne (Ctrl+U) pour system V
La Console !© par Patrick Hautrive !;~) 2010
155
UMASK
022
#Définition du masque par défaut de création des fichiers
ULIMIT
2097152
#Les limites (file, size, process, user, cpu, memory)
PASS_MAX_DAYS
99999
#Nombre maximal de jours valides pour un mot de passe
PASS_MIN_DAYS
0
#Nombre minimal de jour entre deux changements
PASS_WARN_AGE
7
#Nombre de jour d'alerte avant l'expiration
UID_MIN
1000
#Numéro d'ordre minimal pour l'attribution des UID
UID_MAX
60000
#Numéro d'ordre maximal pour l'attribution des UID
GID_MIN
100
#Numéro d'ordre maximal pour l'attribution des GID
GID_MAX
60000
#Numéro d'ordre maximal pour l'attribution des GID
LOGIN_RETRIES
5
#Nombre maximal de tentative de connexion
LOGIN_TIMEOUT
60
#Nombre maximal de seconde pour se connecter
PASS_MAX_LEN
8
#Nombre de caractères pour le cryptage du mot de passe
CHFN_AUTH
yes
#Mot de passe pour les commandes “chfn” et chsh”
CHFN_RESTRICT
rwh
#Champ de “chfn” (full name, room#, work#, home#)
LOGIN_STRING
%s password: #Prompt pour la demande de mot de passe
DEFAULT_HOME
yes
#Acceptation des connexions sans cd $HOME
USERDEL_CMD
/usr/sbin/userdel_local
#Commande automatique après “userdel”
NO_PASSWORD_CONSOLE tty1:tty2:tty3:tty4:tty5:tty6
#Login sans mot de passe
GETPASS_ASTERISKS
1
#Nombre d'astérix affiché à la place des caractères saisis
USERGROUPS_ENAB
yes
#Acceptation de umask UID pour les GID égaux aux UID
FAKE_SHELL
/bin/fakeshell #Lancement d'un script avant le lancement du shell
CLOSE_SESSIONS
no
#Acceptation de pam_close_session() de pam_unix.so
Les variables suivantes sont obsolètes et sont maintenant gérées par les fichiers de PAM qui se trouvent dans le répertoire “/etc/pam.d/*”.
MOTD_FILE
DIALUPS_CHECK_ENAB
LASTLOG_ENAB
MAIL_CHECK_ENAB
OBSCURE_CHECKS_ENAB
PORTTIME_CHECKS_ENAB
SU_WHEEL_ONLY
CRACKLIB_DICTPATH
PASS_CHANGE_TRIES
PASS_ALWAYS_WARN
MD5_CRYPT_ENAB
CONSOLE_GROUPS
ENVIRON_FILE
NOLOGINS_FILE
ISSUE_FILE
PASS_MIN_LEN
La Console !© par Patrick Hautrive !;~) 2010
156
Le choix d'un mot de passe
Le choix d'un mot de passe est la clef d'une bonne sécurité. Souvent les systèmes sont infiltrés à cause d'un manque de discipline dans la gestion des mots de passe. Pour se connecter, pour ouvrir une session, ou pour utiliser la commande «sudo», le mot de passe sera demandé à l'utilisateur. Si le mot de passe est divulgué, si une compromission est suspecté, ou si l'utilisateur ne s'en souvient plus, alors seul l'administrateur (root) du système sera en mesure d'opérer le changement indispensable du mot de passe.
Les mots de passe doivent avoir en principe une durée de validité et une certaine complexité. En général, un mot de passe doit être changé régulièrement, afin de ne pas laisser suffisamment de temps pour le trouver. L'usage des mots du dictionnaire ou des codes personnels de l'utilisateur sont à proscrire. Il est conseillé d'utiliser la palette de la table des caractères (minuscule, majuscule, ponctuation) avec un minimum de huit caractères pour agrandir le champ d'investigation.
Le bon usage est de ne jamais écrire un mot de passe, de ne jamais le réutiliser, et de ne le confier à personne, quelque soient les situations ou le degré d'intimité. Certains programmes génèrent des mots de passe aléatoire. D'autres programmes, comme «crack» ou «john» (John the Ripper) essaye de casser un mot de passe. Ce peut être un bon moyen en interne pour mettre à l'épreuve la solidité des mots de passe. Le mot de passe peut être également appelé «pass phrase». Il existe différents moyens mnémotechniques pour trouver un bon mot de passe que l'on ne va pas oublier. Par exemple, un utilisateur peut choisir une phrase, et ne conserver que certaines lettres de chaque mot.
Les exemples de password
ls ­l /etc/passwd; ls ­l /etc/group ; ls ­l /etc/shadow
chown root:root /etc/passwd
chmod 4444 /etc/passwd
chmod 755 /dev
chmod 700 /lost+found
chmod o+t /tmp
sudo passwd root
passwd ­i 3 user
passwd ­l user
passwd ­u user
groupadd ­g 1010 PMLH
usermod ­G PMLH user
sudo echo noone:x:1020:1040:Mister no what:/home/noone:/bin/bash >> /etc/passwd
sudo echo wild:x:99:99:Special Account::/bin/false >> /etc/passwd
sudo echo noone:1€qGrl9GtV£wy/QoG/Re3xVRTjkwpuW01:14637:0:99999:7::: >> /etc/shadow
sudo echo NOONE:x:1040:noone >> /etc/group
vipw ­s
La Console !© par Patrick Hautrive !;~) 2010
157
vigr ­s
ls ­la /etc/skel
mkdir /home/noone
chown noone.NOONE /home/noone
chmod o­rwx /home/noone
chfn ; finger
chage ­M 15 ­w 3 joe
apropos md5
dpasswd
npasswd
yppasswd
john
crack
La Console !© par Patrick Hautrive !;~) 2010
158
ROOT
L'administrateur système
L'utilisateur root est le premier utilisateur du système (UID=0 et GID=0). Les collaborateurs de l'administrateur travaillent sous sa responsabilité. Les utilisateurs qui appartiennent au groupe «wheel» ou qui ont le droit d'utiliser la commande «sudo», ont parfois les mêmes droits que le super utilisateur sans demande de mot de passe. Une personne qui a l'accès physique à une machine, peut en avoir très facilement le contrôle, soit en débranchant la machine, ce qui la rend inopérante, soit en redémarrant le système (reboot), en mode rescue, ou à l'aide d'un CDROM live.
Les responsabilités de l'administrateur
Le super utilisateur est la personne responsable du système. L'administrateur est omnipotent et possèdent tous les droits sur tous les fichiers du système. L'administrateur est chargé de la planification, de l'installation, de la configuration, de l'évolution et de la sécurisation du système. Il est responsable de la disponibilité des services (access), de l'intégrité des fichiers (data), de l'authentification des utilisateurs (permission) et de la confidentialité des échanges (privacy). L'administrateur doit respecter les législations en vigueur et la vie privée des gens.
La sécurité
La sécurité d'un système d'information peut être abordée de plusieurs points de vue. La sécurité du point de vue de l'intérieur du système d'information concerne essentiellement les utilisateurs (insiders), tandis que la sécurité du point de vue de l'extérieur concerne toutes les autres personnes qui ne font pas partie de l'organisation (internet). Ensuite, la sécurité peut être envisagée selon que la ressource est de type matérielle (hardware), logicielle (software), réseau (middleware) ou personnelle (userware).
Personne ne peut garantir l'invulnérabilité, ni l'inviolabilité d'un système d'information. Ce n'est qu'après coup, que l'on peut attester qu'une infraction s'est produite. Et quand aucune intrusion n'est décelée, cela ne prouve pas qu'il n'y en ait pas eu. La seule sécurité absolue, c'est que tout soit accessible à tous. C'est ce qui fait la force et la fiabilité des Logiciels Libres.
Aucun secret ne peut être découvert quand la vérité est connue de tous et que la transparence prévaut. L'obscurité du secret ne protège que ceux qui ne veulent pas voir ou qui ne souhaitent pas être vu. La transparence ne signifie pas la perfection, mais s'en est une condition de sinéquanone. La RFC 2196 et la documentation Linux Security HOWTO présentent les enjeux de la sécurité.
La Console !© par Patrick Hautrive !;~) 2010
159
La géographie de l'administration système
World People Association Hacker Cracker Politician Company Admin Robot
Internet Provider Software
System Kernel Program Scripts
Tools
Virus
Power Industry Hardware Processor Router
Cable
Firewall Network Bios
User
Data
Disk
Les attaques
Les attaques sur un système d'information peuvent être de plusieurs formes. A chaque attaque correspond une défense et à chaque parade correspond une riposte. Dans tous les cas, il est possible de mettre en place des solutions qui, soit répondent au problème, soit en permet la détection. Un attaquant peut chercher à obtenir l'identité d'un utilisateur (usurpation), il peut chercher à exploiter la faille d'un programme pour entrer dans le système avec les privilèges de l'administrateur (intrusion), il peut chercher à écouter les émissions sur le réseau (captation) ou jouer les intermédiaires dans les communications (interception), il peut chercher à copier des fichiers (indiscrétion) ou en modifier le contenu (falsification), il peut chercher à introduire un programme malicieux (insertion) ou à propager du code malveillant (inoculation), il peut aussi chercher à bloquer l'accès au système (saturation). Les attaques perpétrées par les crackers (casseur de code) ou les scripts kiddies sont appelées des exploits.
Les attaques et les vulnérabilités d'un système d'information
Dictionary
Logger
Force
Social
Trojan
Rootkit
Spoofing Middle
Sniffing Xforwarding
Dos
Flood
Defacing Cracking Spamming Bombs
Virus
Vorms
Les organisations de régulation
De nombreuses organisations, nationales ou internationales, publiques ou privées se donnent pour objectif l'organisation et le contrôle des réseaux informatiques. Ces organisations peuvent jouer le rôle d'une instance de régulation ou celui de référence quand à l'usage ou la définition de normes.
Les organisations de régulation des systèmes d'information et des réseaux
La CNIL (Commission Nationale Informatique et Libertés)
Le SCSSI (Service Central de la Sécurité des Systèmes d'Information)
Les audits de sécurité
Les administrateurs free­lance spécialisés dans la sécurité des systèmes et des réseaux se font parfois appelés des samouraïs. Des outils peuvent être mise en place pour surveiller un système et faire un audit des vulnérabilités (nmap, saint, nagios, satan, cops, nessus, ethereal, ipsec, tripwire, cryptographic, pgp, courtney, john the ripper, crack, rootkit, swatch, gshield, etc.). Le SUSHI (Super User Shell Interactive) est un shell interactif pour root.
La Console !© par Patrick Hautrive !;~) 2010
160
Les audits de sécurité dits blancs n'utilisent que des outils autorisés et ils cherchent les vulnérabilités depuis l'extérieur, tandis que les audits de sécurité dits noirs cherchent également les vulnérabilités depuis l'intérieur, et tous les coups sont permis.
Les outils de sécurité peuvent être employés avec de bonnes ou de mauvaises intentions. Il est indispensable d'obtenir une autorisation écrite officielle d'un responsable reconnu et en activité avant de se lancer dans l'étude d'un système d'information. Parfois, la simple utilisation de certains de ces outils est considérée comme une attaque susceptible de provoquer des contres mesures et d'engendrer des poursuites judiciaires.
Les outils d'audit et de sécurité des systèmes d'information en réseaux
nmap, saint, nagios, satan, cops, nessus, ethereal, ipsec, tripwire, cryptographic, pgp, courtney, john the ripper, crack, rootkit, swatch, gshield, rootkit
Le contexte de l'administration
Une machine informatique fait ce qu'on lui demande et de la façon dont on lui demande. Les programmes ne prévoient pas forcément tous les cas possibles, et la configuration d'un système n'est pas forcément la plus optimisée. De plus, les applications évoluent, elles doivent être mise à jours, mais les mises à jours ne sont pas forcément encore au point. D'autre part, les utilisateurs ne sont toujours formés aux outils qu'ils utilisent. Enfin, l'on ne sait jamais ce qui peut se passer dans un réseau, à l'autre bout d'un câble.
Une machine réagit toujours de la même façon à une même situation, c'est qu'elle ne dispose pas de liberté de choix, elle exécute les instructions prévues par le programme. Une machine peut planter, mais jamais elle ne fera quelque chose qu'on ne lui a pas transmis. Tandis qu'un être humain peut réagir de différentes façons une même situation, c'est le facteur humain qui est imprévisible et incontrôlable, et qui peut engendrer des conséquences colossales, parce que le levier est celui de la machine qui peut répéter imperturbablement des milliards de fois la même erreur, et la propager à la vitesse de la lumière. Ainsi, la sensibilisation des utilisateurs au bon usage de l'outil informatique est primordiale.
L'arbitrage de l'administration
L'objectif principal d'un administrateur est d'assurer la disponibilité du système pour les utilisateurs autorisés et l'intégrité des fichiers des utilisateurs. Les choix de sécurité sont toujours le résultat d'un arbitrage, et l'administrateur doit toujours prendre en considération, la sensibilité des données, le coût de la réparation (en général la sauvegarde plus le temps de travail perdu) et le cout des infrastructures de sécurité. La qualité de service d'un système se mesure en QOS (Quality Of Service).
La Console !© par Patrick Hautrive !;~) 2010
161
Un système sécurisé doit rester à la portée des utilisateurs, et trop de contraintes peut nuire à l'objectif de départ. Les utilisateurs recherchent la facilité, et c'est ce que doit leur apporter le système. Par ailleurs, une configuration trop souple peut être insuffisante pour l'objectif fixé. Ici aussi, l'arbitrage est de rigueur, et c'est tout le talent de l'administrateur, de mettre l'outil informatique à la bonne hauteur pour ses utilisateurs.
L'arbitrage des objectifs, des contraintes, des coûts et des risques
System
Disponibility
Files
Intégrity
Network
Sécurity
Secrets
Sensibility
Users
Identity
Adminsitrator
Registry
People
Confidentiality
L'activité d'administration
Le rôle de l'administrateur est en quelque sorte ambivalent. Il possède tous les droits sur le système, et en même temps, il se doit de rester neutre et discret vis à vis des activités des utilisateurs. Et en même temps, l'administrateur doit être méthodique et vigilant. Un bon administrateur est invisible et semble inactif. Son rôle est de pourvoir aux besoins et de prévoir les situations d'urgences.
Le rôle de l'administrateur n'est pas de satisfaire à toutes les exigences des utilisateurs, comme le besoin de formation ou le soutient psychologique, ni de pallier toutes les situations. Les systèmes d'information sont tellement intégrés aux activités humaines, qu'une simple panne de courant pourrait faire vaciller la civilisation.
L'administrateur doit savoir rester ferme sur ces prérogatives, et en même temps, il doit savoir être souple pour s'adapter en permanence aux circonstances. Par exemple, l'aide aux utilisateurs (hot line) n'est pas du ressort de l'administrateur. Par contre, l'administrateur doit contrôler périodiquement le renouvèlement des mots de passe ainsi que le niveau de permission des utilisateurs. Un administrateur ne répondra jamais aux questions d'un inconnu au téléphone (social engeenering), et conservera en permanence son obligation de réserve.
Les objectifs de l'administration
L'administrateur travaille tous les jours à l'amélioration du système (audit), il envisage méthodiquement les besoins futurs (innovation), il évalue objectivement les performances (benchmark), il gère scrupuleusement les sauvegardes à l'extérieur du site (backup) et vérifie régulièrement leur utilité (restauration), il surveille l'activité du système (log), il contrôle l'utilisation et la capacité des machines (ressources), il vérifie les branchements réseaux (cable), il se tient informé des nouveautés (internet) et de la communauté (patch), il planifie les implémentations (test) et les mises à jours (update), il protège les infrastructures (firewall) et segmente les réseaux (dmz), il configure le noyau (kernel) et les services (server), il conduit le déploiement et le dépannage des matériels (hardware), il dirige l'installation des applications et des pilotes (software), il évalue les compétences des utilisateurs (formation), il organise le partage des fichiers (share) et des La Console !© par Patrick Hautrive !;~) 2010
162
périphériques (printer), il automatise l'administration (script), il documente la configuration (register) pour un éventuel successeur administre les utilisateurs (users) et ses collaborateurs (management), il conseille et il rend compte à ses supérieurs (consulting), enfin, il doit savoir rediriger les personnes qui lui soumettent des problèmes (organisation) et il doit anticiper les situations d'urgence (anticipation) avec la mise en place de règles strictes (rules), de procédures rigoureuses (procedures) et de sauvegarde des preuves d'intrusions ou de falsifications (proofs).
Les principes de l'administration
Pour faire bien son travail, l'administrateur doit faire preuve de bon sens et de rigueur. L'administrateur doit réaliser en permanence une veille technologique, faire les tests appropriés avant une mise en production, et mettre en place les parades qui conviennent avant que ne se produisent les situations d'urgences. Il n'est pas facile de garder son sang froid et de produire des idées innovantes en situation de stress, aussi, ce rôle peut être dévolu à un groupe qui sera séparé des autres au sein d'une cellule d'urgence.
Quand tout va bien, l'administrateur semble n'avoir pas grand chose à faire, pourtant, c'est à ce moment là qu'il faut réfléchir et discuter des améliorations du système (tuning). Par contre, quand tout va mal et que les alertes retentissent, la priorité absolue est de rétablir le système dans les plus brefs délais. L'administrateur doit avoir prévu les dispositions adéquates et il doit sans attendre lancer les procédures pour réagir à la situation. Les meilleurs systèmes sont ceux qui restent stables, fiables et robustes, et pour lesquels les modifications sont toujours souhaitées et jamais imposées. Le temps d'utilisation d'une machine peut être un indice de cette qualité, MTBF (Mean Time Between Failure).
Certains informaticiens considèrent souvent qu'il vaut mieux ne pas toucher à quelque chose qui fonctionne, l'intervention humaine étant la principale source de négligences, d'erreurs et de dysfonctionnement. Toutefois, les systèmes d'information évoluent perpétuellement, et plutôt vers une complexification, aussi, l'attentisme et le conformisme ne sont pas des attitudes efficaces, et l'administrateur ne doit pas attendre que la faille surviennent. Tous les changements de configuration devraient être consignés dans un registre et tous les journaux de surveillance devrait être sauvegardés dans un lieu séparé.
L'administration des programmes
Les programmes et le noyau constituent les éléments de code qui sont en activité dans la machine. Moins, il y aura de code, moins il y aura de source d'erreurs. Ainsi, un des principes de l'administration d'un système est d'interdire tout ce qui n'est pas indispensable, et de n'autoriser explicitement que ce qui est rigoureusement nécessaire. L'administrateur choisira de prendre son temps pour évaluer les besoins et les risques, et de n'installer que le minimum d'applications, de services et de serveurs, et il prévoira de désinstaller les packages obsolètes.
La Console !© par Patrick Hautrive !;~) 2010
163
Toutefois, les mises à jour de sécurité font parties des priorités, parce que lorsqu'une faille est divulguée, il existe un temps de latence entre le moment de sa découverte et le moment où tous les systèmes sont mis à jours. Et pendant ce temps d'adaptation, la faille est connue, la solution est disponible, mais son application n'est pas encore mis en place.
Un autre principe est de n'octroyer que les droits suffisants pour l'exécution d'une tâche. Ainsi, il n'est pas nécessaire que ce soit l'administrateur (root) qui lance le serveur graphique (xwindow). D'autre part, la présence et l'usage des droits SUID et SGID doivent être limités au strict nécessaire. Une bonne connaissance du code d'un programme est un facteur déterminant pour un bon usage. C'est pourquoi, les Logiciels Libres qui permettent l'accès au code source est primordial pour l'administration des systèmes d'information.
La segmentation de l'administration
La segmentation de l'administration consiste à séparer les choses (non pas diviser pour régner mais plutôt la séparation des pouvoirs). En effet, plus les activités sont dissociées, et plus il est facile de les hiérarchiser, de les superviser et de les contrôler. Les sous réseaux permettent de séparer les lieux et les communications de paquets TPC­IP. L'interposition de pare feu et de zones démilitarisées (DMZ) permet de filtrer les connexions et les échanges.
La création de groupes permet de rassembler les utilisateurs autour d'une même tâche, avec les même droits, et en même temps d'en exclure les autres. L'attribution de fonctions précises à certains utilisateurs permet de savoir exactement qui fait quoi, où, quand et pourquoi. La séparation des évènements systèmes dans des fichiers journaux spécifiques permet de remonter l'information directement.
Le compte root doit être réservé à un seul utilisateur, clairement identifié (clearance). Le super utilisateur doit veiller à se déconnecter quand sa tâche d'administration est accomplie. Le mot de passe de l'administrateur doit être tenu secret (avec une ou deux copies de sécurité), et il doit être modifié régulièrement. L'identification des utilisateurs doit être unique et chaque compte doit avoir son propre identifiant (UID et GID). Les permissions doivent être les plus restrictives possibles. Les scripts shell ne doivent jamais porter un bit spécial (SUID et SGID). Les utilisateurs qui n'ont plus accès au système doit avoir leur compte désactivé. Les serveurs doivent évolués dans un environnement protégé (chroot). Les applications inutiles doivent être désinstallées. Les machines doivent être installées dans des salles fermées à clés. Les sauvegardes doivent être gardées dans un ou plusieurs autres lieux à l'abri des incendies et des vols.
Le cryptage
Le cryptage des données consiste en un calcul effectué sur une donnée. Généralement, le cryptage permet de rendre des données illisibles pour une personne ne possédant pas la clef permettant de les La Console !© par Patrick Hautrive !;~) 2010
164
décoder. Le cryptage apporte les avantages de la discrétion (la confidentialité des données et des messages, l'authenticité des interlocuteurs, et l'intégrité des données).
La commande sudo
La commande «sudo» permet d'octroyer des privilèges de l'administrateur à certains utilisateurs et pour certaines commandes. La commande «sudo» est compatible avec PAM. Il est conseillé de ne pas inclure d'outils interactifs, ni de scripts (échappement du shell) dans les exécutables autorisés à être lancé avec les droits root. La commande, exécutée une fois, donne une estampille temporelle (timestamp) de cinq minutes (ticket), c'est­à­dire que l'utilisateur peut lancer les commandes qu'il souhaite sans avoir à fournir à chaque fois son mot de passe.
C'est le fichier «/etc/sudoers» qui définie les utilisateurs autorisés et leurs privilèges. La commande «man sudoers» donne une description de la syntaxe de ce fichier et de la grammaire EBNF (Extended Backus­Naur Form). La commande «sudoedit» montre comment ajouter un utilisateur parmi les membres privilégiés. Les activités de sudo peuvent être enregistrées dans le journal «/var/log/sudo.log».
Le fichier sudoers
Un exemple de fichier /etc/sudoers
defaults insult
#login
commande
root
ALL
#%groupe
commande
%usersALL
User_Alias ENSEMBLE
Host_Alias MACHINE
Cmd_Alias ARRETER
Cmd­Alias
MONTER
joe
ALL
%mygroup ENSEMBLE
noone
ENSEMBLE
%wheel
ALL
defaults
joe !authenticate
= (machine) identité de l'utilisateur (run as other user)
= (ALL)
ALL
= (machine) identité de l'utilisateur (run as other user)
= ()
ALL
= joe, noone, phil
= localhost
= /usr/sbin/halt
= /sbin/mount, /sbin/umount
= HALT
= ARRETER, MONTER
= MONTER
= (ALL)
NOPASSWD: ALL
Les exemples root
ntpdate
cd /root
chmod ­R 700 /root
La Console !© par Patrick Hautrive !;~) 2010
165
chmod ­R 700 /var/log
chmod o­w /etc/aliases
chmod 700 /usr/sbin/chroot
cat /etc/crontab
vi /etc/profile
umask 077
find /usr ­type f ­perm +6000 ­xdev ­exec ls ­l {} \;
find /home ­name .rhosts ­exec cat {} \;
find / ­user root ­perm ­4000 ­exec ls ­la {} \;
sudo find / ­nouser ­o ­nogroup ­print
echo «» > /etc/nologin
echo $PATH
time ls /
ulimit ­a
cat /etc/hosts.allow
cat /etc/hosts.equiv
less /var/log/messages | grep root
cat /etc/group | grep wheel
useradd ­u 0 ­o admin
cat /etc/group | grep root
echo root:x:0:root, wheel, admin >> /etc/group
passwd admin
su admin ; id ; groups
visudo ­c ; visudo ­s
tar xvzf sudo.tar.gz
cd sudo
./configure –with­logpath=/var/log/sudo.log
­­with­timeout=10
­­with­env­editor
­­use­pam
­­disable­shadow
cat /proc/cpuinfo
sudo cat /proc/kcore | less
cat /proc/meminfo
cat /proc/version
ls /proc/sys/net/ipv4/tcp*
vi /etc/sysctl.conf
net.ipv4.tcp_fin_timeout
= 30
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_window_scaling= 0
net.ipv4.tcp_sack
= 0
net.ipv4.tcp_timestamps
= 0
/etc/rc.d/init.d/network restart
La Console !© par Patrick Hautrive !;~) 2010
166
cat /proc/sys/net/ipv4/tcp_fin_timeout
cat /proc/sys/net/ipv4/tcp_keepalive_time
cat /proc/sys/net/ipv4/tcp_window_scaling
cat /proc/sys/net/ipv4/tcp_sack
cat /proc/sys/net/ipv4/tcp_timestamps
La Console !© par Patrick Hautrive !;~) 2010
167
PACKAGE
L'installation des packages
Une fois le système installé et démarré, l'utilisateur peut installer ou désinstaller les applications qu'il souhaite. Les distributions se différencient selon le type de package qu'elles utilisent. Les packages sont des archives (Rpm, Debian ou Tarball) qui contiennent les fichiers binaires pour une application. Ces archives sont préparées spécialement pour un type de distribution (Red Hat ou Debian). Les packages standardisent l'installation des applications qui s'intègrent alors parfaitement avec le reste du système.
Des gestionnaires graphiques (packet manager) permettent la récupération des archives depuis Internet, et l'automatisation de l'installation et de la désinstallation des applications. Les gestionnaires de paquets gèrent également les dépendances d'une application.
Parfois, un programme n'est disponible que sous la forme des sources. La compilation des sources permet d'installer une application quelque soit le type de distribution Linux. Toutefois, l'installation des applications par l'intermédiaire des packages managers est toujours préférables quand c'est possible.
L'installation des applications
Distribution Archive
Gestionnaire
Commande
Format
Red Hat
Rpm
Red Hat Packet Manager rpm ­i archive.rpm
.rpm
Debian
Deb
Advanced Packet Tool
.deb
BSD
Bsd
Port BSD
Gnu Linux
Tarball
Compilation des sources ./configure;make;make install .tar.gz ou .tar.bz2
apt­get install archive.deb
Les dépendances des applications
Les dépendances d'une application sont les binaires et les bibliothèques (libraries) dont se sert l'application pour fonctionner. Les dépendances peuvent être communes à plusieurs applications. La même bibliothèque peut servir à plusieurs applications. Le gestionnaire de paquet d'une distribution vérifie la présence de ces dépendances avant d'installer une application. Les dépendances ne sont généralement pas incluses dans les archives pour une question de place et de temps de téléchargement, mais elles sont indispensables au fonctionnement de l'application.
Les applications sont généralement compilées avec des liens dynamiques pour les bibliothèques. Ainsi, les bibliothèques sont séparées du programme, mais sont chargées en mémoire en même temps que le programme. La compilation d'un programme avec des liens statiques pour les bibliothèques La Console !© par Patrick Hautrive !;~) 2010
168
permet d'inclure les bibliothèques à l'intérieur du binaire, cela rend le programme plus autonome, mais aussi plus volumineux. En général, les dépendances doivent être installées avant l'application afin que celles­ci puissent être configurées dans la foulée.
C'est pourquoi, il est toujours préférable de privilégier l'installation d'une application sous la forme d'archive correspondant au type de distribution (Red Hat ou Debian). Toutefois, l'installation manuelle d'une application est toujours possible sur un système Gnu Linux, mais requière des compétences plus approfondies parce qu'il faut alors gérer soi même les dépendances.
La compilation des sources
La compilation des sources permet une configuration plus précise de l'application. La compilation des sources d'un Logiciel Libre permet d'installer un programme quelque soit le type de distribution. La compilation des sources d'une application est relativement simple et répétitive. Toutefois, tout programme dépend des choix du programmeur.
Les conventions et les règles d'usage ne sont pas toujours suivies, aussi la lecture des fichiers INSTALL, README, HELP ou MAKEFILE qui peuvent accompagner le code source sont parfois salutaires pour résoudre des problèmes de dépendance. Une fois l'archive téléchargée, la procédure de configuration, de compilation et d'installation est standard.
L'exemple de compilation
ftp archive.tar.gz
tar xvfz archive.tar.gz
cd archive
./configure –Prefix=/usr/archive
make
make install
La Console !© par Patrick Hautrive !;~) 2010
169
SCRIPTS
L'environnement des scripts
Les scripts sont écrits dans la syntaxe de l'environnement qui les interprétera. Les environnements shell (Bourne, C) sont différents les uns des autres, et ils se distinguent encore plus des environnements d'autres langages d'interprétation (Php, Python, Perl). Ainsi, un script shell est écrit pour un type de shell. Un script shell de type Bourne (Bash), ne sera pas forcément compatible dans un shell de type C shell (TCSH). Ces deux types de shell possèdent en effet des particularités qui leur sont propres. Toutefois, les scripts shell qui remplissent les conditions de la norme POSIX doivent pouvoir être compatible et portable. A contrario, les scripts rédigés pour d'autres langages d'interprétation, comme les scripts Php, Python ou Perl sont foncièrement différents parce que leur grammaire est particulière.
Les commandes à l'intérieur d'un script seront exécutées dans l'environnement qui est indiqué en début de script. Cet environnement est stipulé par le chemin du binaire. Pour un script shell, cet environnement sera indiqué par le chemin vers le shell (#!/bin/bash). Pour un script propre à un autre langage, l'environnement sera indiqué par le chemin vers le langage interprété (#!/usr/bin/perl). Bien sûr, le package du langage d'interprétation doit être installé sur le système.
Chaque ligne d'un script constitue une ligne de commande, et chaque ligne sera interprétée, analysée et exécutée par le langage de l'environnement dans l'ordre d'apparition. Tous les scripts sont plus ou moins capables de remplir les mêmes fonctionnalités, mais leur écriture sera plus ou moins facile selon le contexte et le résultat attendu. Les environnements peuvent être adaptés selon les besoins. Les commentaires à l'intérieur d'un script sont très utiles pour le documenter. Les commentaires sont toutes les lignes qui commencent par un dièse et elles ne sont pas interprétées. Le code retour («echo $?») permet de savoir si tout s'est bien déroulé.
L'exécution des scripts
Les scripts sont des fichiers textes contenants des commandes. Les scripts permettent d'automatiser les tâches répétitives. Ces commandes peuvent être des outils, d'autres scripts, ou des applications. Pour être exécutés, les scripts doivent posséder le droit d'exécution (chmod u+x script.sh). Le lancement d'un script obéit aux mêmes règles que les commandes, c'est­à­dire que l'environnement qui exécute le script doit connaitre le chemin des exécutables.
Le chemin des exécutables est donné, soit par la variable PATH («echo $PATH»), soit par le chemin absolu («/home/$USER/script.sh»), soit par le chemin relatif au répertoire courant («./script.sh»), soit par la valeur d'un lien (link) ou celle d'un alias. Mais, il n'est pas recommandé de placer le répertoire courant («.») dans la variable d'environnement PATH, parce que cela permettrait de pouvoir exécuter La Console !© par Patrick Hautrive !;~) 2010
170
tous les exécutables, simplement en se plaçant dans leur répertoire. L'appel d'un script par le point («./scripteur») exécute le script dans l'environnement courant, avec les droits de l'utilisateur en cours.
Le lancement des scripts
Un script est généralement lancé depuis un terminal virtuel, dans un sous shell, au moyen d'un appel implicite («./script.sh»), ou d'un appel explicite en spécifiant le shell d'exécution («bash script.sh»). La formulation d'une commande appelant un script obéit aux mêmes règles que pour les commandes, c'est­à­dire que les scripts peuvent être lancés en backgound («./script.sh &») ou détachés du terminal («nohup sh script.sh»). Les scripts peuvent être lancés régulièrement, dans une table cron, et avec les droits d'un utilisateur spécifique.
Les scripts shell utilisent les caractéristiques du shell, comme l'interprétation des expressions régulières (regex), les variables d'environnement («setenv»), les fonctions et les variables internes («echo $0»), les redirections de l'entrée et des sorties du terminal (stdin, sdtout et stderr), la communication inter processus avec l'envoi de signal (kill), mais aussi le langage de programmation de l'interpréteur de commande. C'est tout cela qui en fait un outil souple et puissant.
Un script commence toujours par un «Sha­Bang», expression (#!bin/bash) qui désigne le chemin absolu de l'interpréteur de commande (shell) qui interprètera le script. L'exécution d'un script avec le Sha­Bang «# !/bin/bash ­xv» permet de voir l'exécution ligne par ligne par le shell Bash, et de visualiser les valeur des variables lors de leur interprétation.
La rédaction des scripts
Les scripts shell fonctionnent dans l'environnement d'un shell et peuvent donc utiliser toutes les capacités de leur environnement. Ces capacités (l'héritage de l'environnement, les variables, l'interprétation des caractères spéciaux, les fonctions, les structures de programmation, les redirections, l'envoie de signal, les appels systèmes, les outils gnu, les autres scripts et les applications locales,...) sont tellement riches et complexes, qu'il y a toujours plusieurs façons d'écrire un script. La différenciation d'un script d'un autre, ne s'effectue plus, dès lors, sur l'objectif à atteindre, mais sur l'économie des ressources dont il a besoin, en terme, de nombre de lignes, de nombre de processus ou de nombre de fichiers ouverts.
Les scripts utilisent abondamment les outils Gnu, qui permettent de rechercher et de consulter des fichiers et d'en extraire des valeurs. Chaque commande peut agir comme un filtre et rediriger son résultat vers la commande suivante. Il est important de prendre le temps de documenter un script, c'est à dire de placer des commentaires pour expliquer son fonctionnement, afin de faciliter sa compréhension par une tierce personne et sa modification par la suite.
Les scripts peuvent être interactifs, c'est­à­dire qu'ils peuvent attendre les réponses de l'utilisateur avec La Console !© par Patrick Hautrive !;~) 2010
171
les commandes internes au shell (echo, wait et read). Ils peuvent être modulables avec les instructions internes au shell (true, sleep, continue, break). Ils peuvent s'adapter aux circonstances en utilisant les structures de contrôle.
Enfin, les scripts reconnaissent les opérateurs logiques (AND, OR, NOT, TRUE, FALSE), les opérateurs arithmétiques pour le calcul d'entiers numériques à l'intérieur de formules et les opérateurs alphanumériques pour la comparaison de chaines de caractères.
Les commandes de manipulation des fichiers (filter)
find
grep
diff
uniq
sort
wc
patch
awk
sed
tr
cut
col
groff
expand
unexpand
pour rechercher un fichier dans l'arborescence
pour sélectionner des lignes contenants une occurrence dans un fichier
pour comparer deux fichiers ligne à ligne
pour écarter les doublons à l'intérieur d'une liste
pour classer des listes de lignes dans un ordre alphanumérique
pour compter les lignes, les mots ou les caractères (word count)
pour insérer des mises à jour dans un fichier
pour manipuler et formater des expressions avec un langage de programmation
pour d'extraire ou de remplacer des motifs un flux de texte (stream editor)
pour traduire un caractère ou l'effacer (translate)
pour sélectionner une colonne dans une ligne en fonction d'un séparateur connu
pour renverser l'ordre d'un flux
pour formater un flux de sortie
pour convertir les tabulations en espace
pour convertir les espaces en tabulation
Les structures de contrôle
Les structures de contrôle des scripts peuvent être des structures décisionnelles ou des structures itératives. Les structures de contrôle sont des mécanismes propres au langage de programmation interprété du shell.
Les structures décisionnelles sont aussi appelées des branchements conditionnels ou des tests, et elles permettent d'orienter l'exécution du script selon les circonstances vers tel ou tel bloc d'instruction.
Les structures itératives sont aussi appelées des boucles, et elles permettent de répéter un certain nombre de fois le même bloc d'instructions. Les boucles tournent selon la valeur d'un compteur qui est incrémenté à chaque tour selon un pas spécifique (en générale «i++», c'est­à­dire la valeur précédente plus une unité). En général, un compteur est modifié à l'issue d'un traitement, à la fin d'un bloc d'instruction.
La Console !© par Patrick Hautrive !;~) 2010
172
Les structures de contrôle
Les structures décisionnelles (branchements et tests)
Minimum of Tours
La condition
«if then else then fi» one
Le choix multiple
«case in default esac» one
Les structures itératives (boucles, compteurs et pas d'incrémentation)
Le compteur de tours fixé en début de boucle
«for do done»
=>fixed
Le compteur de tours contrôlé en début de boucle
«while do done»
=>zero
Le compteur de tours contrôlé en fin de boucle
«until do done»
=>one
Les tours de boucles
Les boucles peuvent tourner un nombre de fois, fixé à l'avance, ou un certain nombre de fois qui peut être variable mais qui va dépendre du résultat d'un traitement à l'intérieure de la boucle. Le nombre de tours d'une boucle for (pour) peut être variable, mais il est connu et fixé en début de boucle.
Le nombre de tours d'une boucle while (tant que) est variable, et le compteur est contrôlé en début de boucle, c'est­à­dire que la boucle peut ne pas s'exécuter, si la condition d'entrée n'est pas remplie, mais la boucle peut également tourner indéfiniment si la condition de sortie n'est jamais réalisée. C'est le cas des serveurs qui restent à l'écoute d'une demande de connexion, et qui tournent en tâche de fond.
Le nombre de tours d'une boucle until (jusqu'à ce que) est également variable, mais le compteur est contrôlé en fin de boucle, c'est­à­dire que la boucle s'exécute toujours au moins une fois.
Les opérateurs arithmétiques Les opérateurs arithmétiques permettent le calcul d'entiers numériques à l'intérieur de formules. Il existe un ordre de prévalence pour le calcul de ses formules. A moins d'expliciter l'ordre à l'aide de parenthèse qui est interprété en priorité, les opérateurs suivent un certain ordre: le regroupement (), l'addition («a+b»), la soustraction («a­b»), la multiplication («a*b»), la division («a/b»), l'exponentiel (a**b) et le modulo (a%b) qui renvoi le résultat d'une division mais sans les chiffres après la virgule, c'est­à­dire sans les décimales. Par exemple, la formule («a+bxc») est équivalente à («(a+b)xc»).
L'expansion des variables d'une formule est effectuée avant l'évaluation de l'expression.
Les opérateurs de test
Les opérateurs de la commande interne test du shell Bash s'appliquent sur les attributs des fichiers ou sur des quantités alphanumériques. Les opérateurs de test des attributs d'un fichier vont effectuer un test ou une comparaison sur la valeur d'un attribut (permission, type, taille). Les opérateurs La Console !© par Patrick Hautrive !;~) 2010
173
alphanumériques permettent de tester ou de comparer des valeurs numériques (numerical test) ou des valeurs alphabétiques, c'est­à­dire de chaines de caractères. Une valeur numérique représente un nombre entier, et une chaine de caractère représente un ensemble de caractères de la table des caractères (ASCII) placés les uns à la suite des autres. Une chaine de caractère peut former un mot, une phrase, ou représenter le nom d'une variable. Une chaine de caractères peut être nulle.
Les tests utilisent la commande interne test du shell qui renvoi la valeur zéro si le test est vérifié et valide, ou renvoi une autre valeur, même négative, souvent égale à l'unité, quand le test n'est pas probant. La commande «echo $?» renvoi zéro quand la dernière commande s'est réalisée avec succès.
La commande « test condition » peut être remplacée par des crochets [condition]. L'expression (keyword) est alors évaluée par le shell, et retourne le code retour (return code) égal à zéro (zero) si la condition est remplie. La commande «man bash» explique l'utilisation des commandes internes au shell bash (builtin).
La commande «info coreutils 'test invocation'» donne des exemples d'utilisation des tests.
La commande «man test» explique l'utilisation des opérateurs conditionnels.
http://tldp.org/LDP/abs/html/index.html
Les opérateurs arithmétiques
Les opérateurs arithmétiques ou opérateurs de test des variables numériques permettent de comparer deux valeurs numériques (integer).
Les opérateurs de test des variables arithmétiques (man test)
Les opérateurs sur les valeurs arithmétiques (binary) (integer)
test A ­eq B
test A ­ne B
test A ­le B
test A ­ge B
test A ­gt B
test A ­lt B
equal (==)
not equal (!=)
less or equal (<=)
greater or equal (>=)
greater than (>)
less than (<)
Teste si l'expression A est égale à B (equal)
Teste si l'expression A n'est pas égale à B
Teste si l'expression A est inférieure ou égale à B
Teste si l'expression A est supérieure ou égale à B
Teste si l'expression A est strictement supérieure à B
Teste si l'expression A est strictement inférieure à B
Les évaluations arithmétiques
Les évaluations arithmétiques dans Bash consistent à effectuer des calculs numériques. Les expressions arithmétiques comportent des variables numériques ou des valeurs numériques entières. Les nombres peuvent être des entiers (integer) ou des décimales (decimal) signés (signs), négatifs ou positifs. Le calcul des expressions s'effectue à l'intérieur de parenthèses ou avec la commande « expr », et l'affectation des résultats s'effectue avec l'opérateur égal (equal). Plusieurs valeurs à l'intérieur d'une La Console !© par Patrick Hautrive !;~) 2010
174
liste peuvent être séparées par des virgules (comma).
Les évaluations arithmétiques dans Bash (man bash) (let)
Les opérations sur les expressions arithmétiques (expr)
L'addition
La soustraction
La multiplication
L'exponentiel
La division
Le modulo (remainder)
L'évaluation conditionnelle
L'affectation de valeur (assignment)
La séparation de valeur (comma)
Les signes unitaires
+
­
*
**
/
%
expr ? expr : expr
= *= /= %= += ­= <<= >>= &= ^= |= expr1 , expr2 La valeur positive
La valeur négative
+
­
Les opérateurs de comparaison arithmétique
Les opérateurs de comparaison arithmétique permettent de comparer deux valeurs numériques.
Les évaluations arithmétiques dans Bash (man bash)
Les opérations de comparaison
La comparaison strictement supérieure
La comparaison strictement inférieure
La comparaison supérieure ou égale
La comparaison inférieure ou égale
L'égalité (equality)
L'égalité (equality)
La différence (inequality)
>
<
>=
<=
=
==
!= Les opérateurs logiques
Les opérateurs logiques permettent de comparer deux expressions selon la valeur de leur code retour (return code). Une expression est considérée comme vrai (true), si sa valeur est égal à zéro, ou faux (false), si sa valeur est différente de zéro. Les opérateurs logiques utilisent les tables de vérité de l'algèbre de Boole. Les opérations logiques effectuées sur plusieurs expressions permettent à l'intérieur de structures de contrôle d'orienter le déroulement d'un script.
La Console !© par Patrick Hautrive !;~) 2010
175
Les évaluations arithmétiques dans Bash (man bash)
Les opérations logiques (table de vérité)
La négation logique (NOT)
La conjonction logique (AND)
La disjonction logique inclusive (OR)
!
&& || Les opérateurs a lp
hab
é ti
qu
e s Les opérateurs alphabétiques ou opérateurs de test sur les chaines de caractères permettent de comparer deux chaines alphabétiques ou mots (string).
Lors de l'emploi de simple crochet, le caractère spécial supérieur ou inférieur, pour comparer les positions de chaines de caractères dans l'ordre de la table ASCII, doit être précédé d'un échappement (escape) avec le caractère d'échappement anti slash (baskslach). Dans la version 2 de l'interpréteur Bash, les doubles crochets (double brackets) ont été implémentés pour satisfaire aux habitudes des programmeurs des autres langages de programmation. Avec l'utilisation des doubles crochets [[condition]], les caractères supérieurs ou inférieurs n'ont plus besoin d'être échappés (\).
Les opérateurs de test des variables alphabétiques (man test)
Les opérateurs sur les chaines de caractères ASCII (string) (numbers → letters → capitals)
test A = B
test A != B
test A \< B
test A \> B
test ­n A
test ­z A
same
different
before
after
not empty
is empty
La chaine A est identique à B
La chaine A n'est pas identique à B
La chaine A apparaît avant B dans la liste triée ASCII
La chaine A apparaît après B dans la liste triée ASCII
La chaine A n'est pas vide
La chaine A est vide
La Console !© par Patrick Hautrive !;~) 2010
176
Les opérateurs d'attribut des fichiers
Les opérateurs d'attribut des fichiers ou opérateurs de test sur les types de fichiers permettent de tester l'existence d'un fichier et le positionnement d'un attribut particulier, comme le type de fichier (file, directory, pipe, socket, symlink, block device, caracter device), ses droits (permissions), son appartenance (owner), sa taille (size) ou sa date de dernière modification (mdate), et de comparer deux fichiers selon leur inode (hardlink) ou leurs dates d'écriture (mdate).
Les opérateurs de test des fichiers (man test) ([[condition]])
Les opérateurs sur les attributs des fichiers (file)
test ­a file
test ­e file
test ­f file
test !­e file
test ­d dir
test ­h symlink
test ­L symlink
test ­b block
test ­c block
test ­p pipe
test ­S socket
test ­t file
test ­N file
test ­O file
test ­G file
test ­r file
test ­s file
test ­w file
test ­x file
test ­g file
test ­u file
test ­k file
test file1 ­nt file2
test file1 ­ot file2
test file1 ­ef file2
exist
exist
exist
do not exist
exist
exist
exist
exist
exist
exist
exist
terminal
modified
EUID
EGID
read
not empty
write
execute
SGID
SUID
STICKYBIT
newer
older
same hard link
Existence du fichier (file exists)
Existence du fichier (file exists)
Existence d'un fichier normal (regular file)
Non existence du fichier (file does not exist)
Présence du répertoire (directory)
Présence d'un lien symbolique (symlink)
Présence d'un lien symbolique (symlink)
Présence d'un fichier bloc (block device)
Présence d'un fichier caractère (character block device)
Présence d'un fichier FIFO (pipe)
Présence d'un fichier de connexion réseau (socket)
Le fichier est associé à un terminal (file descriptor open)
Le fichier a été modifié depuis la dernière lecture (new)
Le fichier appartient à l'utilisateur effectif (EUID)
Le fichier appartient au groupe effectif (EGID)
Le fichier a le droit en lecture pour l'utilisateur (read)
Le fichier n'est pas vide (size not empty)
Le fichier a le droit d'écriture pour l'utilisateur (write)
Le fichier a le droit d'exécution pour l'utilisateur (exe)
Le fichier a le droit SGID (sgid flag)
Le fichier a le droit SUID (suid flag)
Le fichier a le droit « t » (sticky flag)
Le fichier est plus récent que le deuxième (mdate)
Le fichier est plus vieux que le deuxième (mdate)
Les deux fichiers pointent vers la même inode (hardlink)
La Console !© par Patrick Hautrive !;~) 2010
177
Les opérations particulières
Certaines opérations arithmétiques ne sont pas très utilisées, comme les opérations sur les bits (bitwise) ou les opérations d'incrémentation de variables numériques.
Les opérations arithmétiques particulières dans Bash (man bash)
Les opérations sur les bits (bitwise)
L'inversion du bit (NOT)
~
Le basculement vers la droite des bits
>>
Le basculement vers la gauche des bits
<<
La conjonction logique de deux bits (AND) & La disjonction logique de deux bits (OR) |
L'exclusion logique de deux bits (XOR)
^ Les opérations sur l'incrémentation des variables numériques
La post incrémentation
La post décrémentation
La pré incrémentation
La pré décrémentation
id++
id­­
++id
­­id
Les opérations hexadécimales
Les opérations hexadécimales permettent d'effectuer des calculs sur une base 12 (hexadecimale). Les opérations sur d'autres bases sont également possibles dans Bash avec l'expression « base ».
Les opérations sur les hexadécimales
http://tldp.org/LDP/abs/html/refcards.html
Les exemples de scripts
date > file ; who >> file
sort < file >> file­alphanum
sort file | lp ; cat file | sort | lp
mail user < file
echo "$PATH" ;export PATH=$PATH:. ; echo "$?"
vi suppr
rm ­i $*
chmod u+x suppr
ls ­l suppr
La Console !© par Patrick Hautrive !;~) 2010
178
./suppr file fool
vi .profile
#Alias dans le Shell Korn
rm()
{
/bin/rm ­i $*
}
vi $HOME/.cshrc
#Alias dans C shell
alias rm 'rm ­i $*'
vi prompt
if [ ! «$PS1» ] ;
then
PS1= «\h:\w%» ;
fi
vi answer
echo «Please type your answer A, B or C»
read ANSWER
case $ANSWER in
A|a) echo « You typed A or a» ;;
B|b) echo « You typed B or b» ;;
C|c) echo « You typed C or c» ;;
*)
echo « Your answer is out of range» ;;
esac
vi plusdate
JOUR=`date +%m­%d­%y`
mv $1 $1.$JOUR
for i in *.txt ; do cp $i /tmp/$i ; done
for FILE in $(find .­type f ­name «*.html») ; do sed ­e 's/old/new/g' $FILE ; done
vi copytmp
for i in $*
do
cp $i /tmp/$i
done
sort << END
MacosX
Linux
OpenBsd
Windows
END
. script.sh
La Console !© par Patrick Hautrive !;~) 2010
179
EXEMPLES
­ 3 . Good practice
L'indentation (indentation) des lignes de codes et le respect de certaines règles (rules) permettent de qualifier un script d'élégant, voire d'intellectuellement esthétique (beauty). Ces bonnes habitudes (good practice) et ces conventions permettent de fournir un code lisible et facile à maintenir pour l'exploitation en production.
La fonction d'une variable devrait être bien identifiée, et ne servir qu'un seul dessein (purpose), afin d'éviter les confusions. Le nom qui est attribué à une variable devrait refléter sa fonction (naming). La convention de nommage des variables en majuscule (capital letter) est bien utile pour la relecture des scripts. Le choix de variables et de fonction « généralistes » permet de faire évoluer le code (evolution), et l'écriture de petits scripts simples permet de les utiliser ensembles, avec des redirections ou des appels (call).
L'écriture de script devrait toujours privilégier les normes officielles (posix) et prendre en considération la portabilité (portability) d'un script vers un autre interpréteur de commandes ou vers un autre système d'exploitation.
­2. Errors
Les variables devraient toujours être encadrées d'apostrophe (double quote) afin d'éviter l'ambigüité des interprétations par le shell Bash (particulièrement dans les tests des boucles). La déclaration des variables et des tableaux requière impérativement que le signe égal (equal) soit accolé au nom (name) et à la valeur (value). Les structures conditionnelles (test) et les boucles itératives (loop) requièrent un point virgule (semi colon) après le test d'entrée dans la boucle (entry test). Les crochets (brackets) qui entourent les conditions requièrent un espace de part et d'autre de l'expression conditionnelle.
Lorsqu'un script est lancé, les erreurs que le shell Bash renvoi sont généralement indiqueés avec le numéro de la ligne correspond à l'erreur (line number) dans le script, et avec un code d'erreur (error code) qui permet de faire des recherches sur internet pour en trouver la signification et la solution. Quand une apostrophe (quote) manque quelque part, alors l'interprétation du script par le shell Bash est décalée.
La coloration syntaxique (syntax colour) des terminaux (terminal) ou des éditeurs (editor) de scripts shell permet de visualiser rapidement les variables, les expressions, les commentaires, les structures et les caractères spéciaux.
Le Sha­Bang «#!/bin/sh ­xv» montre l'éxécution d'un script ligne par ligne avec à chaque moment la La Console !© par Patrick Hautrive !;~) 2010
180
valeur des variables qui sont interprétées par le shell Bash.
­1 . Warnings
Attention, la copie ou le déplacement écrase le fichier cible, s'il existe déjà, et la redirection simple vers un fichier écrase sont contenu (à moins que le verrou noclobber ne soit fixé). La copie de texte par sélection en surbrillance et clic avec la molette (middle clic) ou clic droit puis coller (right clic and paste) dans un terminal ne copie pas toujours les mêmes caractères (caracters mapping), spécialement les apostrophes (quotes).
Il est important de tester au préalable les scripts sur une machine d'essai (textbox). Avant d'appuyer sur la touche d'enter du clavier, il est toujours judicieux de relire sa commande attentivement, et de visualiser ce qu'elle est censée accomplir (are you sure?)...
Les Logiciels Libres (free software) sont des outils très bien conçus, et qui s'améliorent grâce à l'accès au code source, et au travail de la communauté. La licence GNU/GPL protège les utilisateurs des Logiciels Libres, en gardant libres toutes les modifications et/ou améliorations qui peuvent être apportées à un programme (free license). Toutefois, ces logiciels ne sont pas responsables de la façon dont on les emploi, et sont livrés gratuitement sur internet, mais sans aucune garantie d'utilisation ou de fonctionnement (no warranty)...
0. Links
http://bashshell.net/category/bash­shell/
http://www.linuxtutorialblog.com/category/tutorials
http://www.linuxconfig.org/Bash_scripting_Tutorial
http://tldp.org/HOWTO/Bash­Prog­Intro­HOWTO.html#toc7
http://www.linuxselfhelp.com/gnu/bash/html_chapter/bashref_toc.html
http://www.linuxdoc.org/HOWTO/Bash­Prog­Intro­HOWTO.html
http://www.livefirelabs.com/sample_course/index.htm
http://www.gnu.org/software/bash/manual/html_node/
http://www.linuxtopia.org/online_books/index.html
http://www.faqs.org/docs/abs/HTML/index.html
http://tldp.org/LDP/abs/html/index.html
http://wiki.bash­hackers.org/start
http://www.faqs.org/docs/artu/
http://www.linuxforums.org/
1. L'expansion
touch script.sh
ls ­lih
La Console !© par Patrick Hautrive !;~) 2010
181
script.sh
VAR="ls"
echo $VAR
ls
echo "VAR = $VAR"
VAR = ls
echo "VAR = \$VAR"
VAR = VAR
echo 'VAR = $VAR'
VAR = $VAR
echo "VAR = " `$VAR`
VAR = script.sh
echo $VAR
ls
2. L'affectation
read ­p «Please give a value to the variable VAR and press the ENTER key ?» VAR
Please give a value to the variable VAR and press the ENTER key ?
Variable Local and Temporary
echo ­e «\n The variable VAR is: \t $VAR»
The variable VAR is:
Variable Local and Temporary
3. L'exportation des variables
echo $USER $HOME $SHELL
env
env | grep OSTYPE
OSTYPE=linux
export OSTYPE=GNU/Linux
echo $OSTYPE
GNU/Linux
bash
echo $OSTYPE
GNU/Linux
exit
CTRL+D
echo $OSTYPE
linux
4. Les alias
La Console !© par Patrick Hautrive !;~) 2010
182
alias
ls
script.sh
ll= «ls ­l»
ll
­rw­r­­r­­ 1 pat users 0 2011­03­31 14:59 script.sh
unalias ll
ll
command­not­found
cnf nagios
ll= «ls ­l»
exit
CRTL+D
ll
command­not­found
5. Les profiles
bash ­­login
ls ­l /etc/profile
­rw­r­­r­­ 1 root root 9154 2010­06­08 17:58 /etc/profile
ls ­l ~/.bash_profile
ls ­l ~/.bash_login
ls ­l ~/.profile
­rw­r­­r­­ 1 pat users 1027 2011­03­17 21:38 /home/pat/.profile
echo $SHLVL
3
bash ­i
ls ­l /etc/bash.bashrc ­rw­r­­r­­ 1 root root 8692 2010­06­08 17:58 /etc/bash.bashrc
ls ­l ~/.bashrc ­rw­r­­r­­ 1 pat users 1177 2011­03­06 12:57 /home/pat/.bashrc
echo $SHLVL
4
exit
echo $SHLVL
4
exit
6. L'environnement
vi ~/.bashrc
EDITOR="/usr/bin/vim"
La Console !© par Patrick Hautrive !;~) 2010
183
PATH="/opt/bin/:$PATH"
export EDITOR PATH
alias ls='ls ­lih'
echo "Chargement de la configuration terminé."
echo "Bienvenue "`whoami`
bash ­i
Chargement de la configuration terminé.
Bienvenue pat
echo $EDITOR $PATH
/usr/bin/vim
echo $PATH
/opt/bin/:/home/pat/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:
ls
1705429 ­rw­r­­r­­ 1 pat users 0 2011­03­31 14:59 script.sh
echo $SHLVL
3
exit
echo $SHLVL
2
ls
script.sh
7 . Hello World
man bash
vi script.sh
#! /bin/bash
#script.sh
echo «Hello World»
VAR=LocalEnvironment
echo "The variable VAR is: $VAR"
echo $VAR
chmod +x script.sh
ls ­l script.sh ­rwxr­xr­x 1 pat users 32 2011­03­31 16:03 script.sh
./script.sh
Hello World
The variable VAR is: LocalEnvironment
echo $VAR
source script.sh
Hello World
The variable VAR is: LocalEnvironment
La Console !© par Patrick Hautrive !;~) 2010
184
echo $VAR
LocalEnvironment
export VAR=LocalEnvironmentInitialShell
echo $VAR
LocalEnvironmentInitialShell
echo $SHLVL
2
bash
echo $SHLVL
3
vi script.sh
#! /bin/bash
#script.sh
echo «Hello World»
VAR=LocalEnvironmentNewShell
echo "The variable VAR is: $VAR"
./script.sh
Hello World
The variable VAR is: LocalEnvironmentNewShell
echo $SHLVL
3
echo $VAR
LocalEnvironmentInitialShell
unset VAR
echo $VAR
env | grep VAR
exit
echo $SHLVL
2
echo $VAR
LocalEnvironmentInitialShell
unset VAR
echo $VAR
8. Les paramètres
man bash
vi script.sh
#!/bin/bash
#script.sh
echo ­e "\n\t Hello World \n"
VAR=LocalEnvironment
La Console !© par Patrick Hautrive !;~) 2010
185
echo "The variable VAR is set to: $VAR"
#export VAR
#Print the script parameters#
echo ­e "\n\t Here are the script parameters \n"
echo $0 $1 $2 $3 $4 $5 $6 $7 $8 $9
echo ­e "\n\t Here are other shell builtin parameters \n"
echo "\$# is set to:" $#
echo "\$* is set to:" $*
echo "\$@ is set to:" $@
echo "\$? is set to:" $?
echo "\$$ is set to:" $$
echo "\$! is set to:" $!
echo "\$­ is set to:" $­
echo "\$_ is set to:" $_
chmod +x script.sh
./script.sh one two three four five six seven eight nine ten
Hello World The variable VAR is set to: LocalEnvironment
Here are the script parameters
./script.sh one two three four five six seven eight nine
Here are other parameter builtin
$# is set to: 10
$* is set to: one two three four five six seven eight nine ten
$@ is set to: one two three four five six seven eight nine ten
$? is set to: 0
$$ is set to: 5819
$! is set to:
$­ is set to: hB
$_ is set to: hB
9. Le debugging
kill ­l
stty ­a
man bash
man trap
vi script.sh
La Console !© par Patrick Hautrive !;~) 2010
186
#!/bin/bash
#script.sh
echo ­e "\n\t Hello World \n"
VAR=LocalEnvironment
echo "The variable VAR is set to: $VAR"
#export VAR
#Infinite Loop and exit with CTRL+C
echo ­e "\n\t Infinite Loop \"while true\" (no exit with CTRL+C) Please use: kill ­9 PID"
#Trap the SIGNALS 2 & 15 (kill ­l)
trap “echo You have pressed Ctrl­C before the loop” SIGINT SIGTERM
sleep 3
while true ;
do
echo "The process signal CTRL+C will not stop the Loop (use kill ­9 PID)"
COUNTER=0
while [ "$COUNTER" ­lt 10 ];
do
echo The counter is $COUNTER
let COUNTER=COUNTER+1
trap 'echo "You have pressed Ctrl­C inside the loop"' SIGINT SIGTERM
sleep 2
done
sleep3
#trap 'echo "You have pressed Ctrl­C after the loop"' SIGINT SIGTERM
done
#trap “The EXIT SIGNAL has been trapped” EXIT
#trap “This is to trap for debugging” DEBUG
#echo "The exit code is (137 is for SIGINT or CTRL+C): $?"
#exit 0
#return ­7
xterm ­e «source script.sh» &
[1] 7064
ps aux | grep script.sh
pat
7064 18.7 1.2
11976 6548 pts/0
S
16:14 0:08 xterm ­e source script.sh
pat
7068 43.7 0.2
4516 1380 pts/3
Rs+ 6:14 0:19 bash ­c source script.sh
pat
7119 0.0
0.1
3628 788 pts/0
S+
16:15 0:00 grep script.sh
kill ­2 7064
[2]+ Exit 2 xterm ­e "source script.sh"
echo "The exit code of the latest foreground process was: $?"
xterm &
[3] 7023
ps aux | grep script.sh
pat
7023 44.7 0.2
4516 1224 pts/3
R+
16:11 0:18 /bin/bash ./script.sh
La Console !© par Patrick Hautrive !;~) 2010
187
pat
7027 0.0
0.1
3628 784 pts/0
S+
kill ­2 7023
kill ­15 7023
kill ­9 7023
echo "The exit code of the latest foreground process was: $?"
echo "The exit code of the latest foreground process was: $?"
xterm &
[4] 8804
./script.sh > pipe­script.txt
^C^C^C
ps aux | grep script.sh
pat
8804 83.3 0.2
4512 1224 pts/4
R+
pat
8806 0.0
0.1
3628 788 pts/0
S+
kill ­9 8804
Processus arrêté
cat pipe­script.txt | grep "loop"
You have pressed Ctrl­C in the loop
You have pressed Ctrl­C in the loop
16:11 0:00 grep script.sh
18:19 0:10 /bin/bash ./script.sh
18:19 0:00 grep script.sh
10. Les commandes
pwd ; id ; who ; users ; groups ; hostname ; uptime ; uname ­a ; lsb_release ­a
{ls; du ­h; df ­h;date} > /tmp/my_log ; less /tmp/my_log ; fdisk­ l
ls / ­R ; ls ­la ~/ | wc ­l ; cat ~/.bashrc ; less /etc/passwd ; cat /etc/group | grep $USER
touch newfile.txt ; vi newfile.txt ; echo «Another line at the end of the file» >> newfile.txt
ifconfig ; route ; tcdump ; nmap ­A ­T5 localhost ; nmap ­A ­T3 scanme.org
ps aux | grep $USER | grep tty ; stty ; kill ­l; man bash ; man ascii ; stty ; kill ­l
emacs & ; nohup emacs &
emacs & top
emacs || echo “Emacs did not start !”
emacs && echo “Emacs is starting...”
KERNEL1=`uname ­sr` ; KERNEL2=$(uname –sr) ; echo ­e «$KERNEL1 \n $KERNEL2»
!! ; history ; echo ­e «The error code ZERO shows the last command was successfull \n\t» ; echo $?
11. Les opérateurs
man test
test ­1 ­gt ­2 && echo yes
yes
test ­1 ­gt ­2 ; echo $?
0
[ 10 ­eq 7 ]; echo $?
1
La Console !© par Patrick Hautrive !;~) 2010
188
[[ 10 ­lt 11 && 100 ­gt 99 ]] ; echo $?
0
12. Les expressions
expr $((4+3))
7
let $[12/3]
4
echo “3+2= $[3+2]”
«3+2= 5»
13. La sauvegarde
vi backup­home.sh
#!/bin/bash
#To unzip and extract a tarball, go to the directory of extraction and launch the tar command
tar ­czf $HOME/backup­$USER­$(date +%d­%b­%Y).tar.gz $HOME
chmod +x backup­home.sh
./backup­home.sh
ls ­lih
mkdir $HOME/backup
cd $HOME/backup ; pwd
tar ­xzvf $HOME/backup­pat­04­avril­2011.tar.gz
mv $HOME/backup­pat­04­avril­2011.tar.gz backup
cd backup
gunzip backup­pat­04­avril­2011.tar.gz
tar ­xvf backup­pat­04­avril­2011.tar
ls
14. Les locales
vi locale.sh
#!/bin/bash
#Declaration of global variable
VAR="global variable"
echo «The variable «VAR» is set GLOBALLY and worth: $VAR»
#Creation of a fonction called «local­var»
#The Bash function «local» defines the local variable for «local­var»
function local­var
{
local VAR="local variable"
echo «The variable «VAR» is set LOCALY and worth: $VAR»
}
La Console !© par Patrick Hautrive !;~) 2010
189
#The local function «local­var» is launched in the script
local­var
echo «The variable «VAR» has returned to its GLOBALLY value: $VAR»
chmod +x locale.sh ./locale.sh «The variable «VAR» is set GLOBALLY and worth: global variable»
«The variable «VAR» is set LOCALY and worth: local variable»
«The variable «VAR» has returned to its GLOBALLY value: global variable»
15. Les arguments
vi argument.sh
#!/bin/bash
#argument.sh
#To passe arguments to the script. Example: "./argument.sh one two three"
echo ­e "\n The first nine arguments passed to the script line (Bash special parameters)."
echo ­e "\t The first nine arguments are: \n\t $1 $2 $3 $4 $5 $6 $6 $7 $8 $9"
echo ­e "\n The command line (\$0\$*) with all the special pamameters passed as arguments."
echo ­e "\b The command line was: \n\t $0 $*"
echo ­e "\t The command line contained $# parameters (\$#)."
#Arguments can be stored in an array args=("$@")
echo ­e "\n The arguments passed to the script command line can be stored in an array:"
echo ­e "\t ${args[0]} \t ${args[1]} \t ${args[2]} \t ${arg[3]} \t ${args[4]} \t ${args[5]}"
echo ­e "\t ${args[6]} \t ${args[7]} \t ${args[8]} \t ${arg[9]} \t ${args[10]} \t ${args[11]}"
echo ­e "\n The values of all the lines of the array are:"
echo ­e "\t 'args=("$@")' \n"
chmod +x argument.sh
./argument.sh one two three four five six seven eight nine ten eleven twelve
The first nine Arguments passed to the script command line (Bash special parameters).
The first nine arguments are: one two three four five six six seven eight nine
The command line ($0$*) with all the special pamameters passed as arguments.
./argument.sh one two three four five six seven eight nine ten eleven twelve
The command line contained 12 parameters ($#).
The arguments passed to the script command line can be stored in an array:
one
two three five six
seven eight nine eleven twelve
The values of all the lines of the array are:
La Console !© par Patrick Hautrive !;~) 2010
190
'args=(one two three four five six seven eight nine ten eleven twelve)' 16. Le développement
vi expand.sh
#!/bin/bash
#The caracter backticks or backquote ' `cmd `' execute a shell command and give the output
echo ­e "The result of the command 'uname ­o' is: \t `uname ­o`"
chmod +x expand.sh
./ expand.sh
GNU/Linux
17. Les réponses
vi response.sh
#!/bin/bash
#The interactivity with a script when it is launched allow the user to enter input.
echo ­e "Welcome, please enter one word of your choice: "
read word
echo "Thank you, you have typed the word: $word"
echo ­e "Please, enter now two words, separated by a space: "
read first second
echo "Thank you, you have typed the words \"$first\" and \"$second\""
#The response can be stored into the default build­in variable $REPLY
echo ­e "Please tell me your first name: "
read
echo "Thank you $REPLY, I'm glad to meet you... "
#The read «­a» option ennable you to store the answers of the user into an array
echo ­e "$REPLY, can you tell me in four words, why the licence GNU/GPL is important ? "
read ­a answers
echo "Ok, $REPLY, Thank you for your answers. "
echo "I understood that for you the GNU/GPL licence stand for: "
echo ­e " \n\t ${answers[0]}, ${answers[1]}, ${answers[2]} and ${answers[3]} :­) \n" 18. L
a
trap
pe
vi trap.sh
#!/bin/bash
#trap.sh
#The command /usr/bin/clear is used to clear the screen of the terminal
clear
#The trap builtin Bash command will intercept the process signals send to the script echo «The signal CTRL+C is disabled»
La Console !© par Patrick Hautrive !;~) 2010
191
#The trap command will execute the local «trapfunction» when receiving the signal
trap trapfunction INT
#The trapfunction will print on the terminal screen a message every time the subrutine is called
trapfunction()
{
echo "You have pressed CTRL+C, your signal has been intercepted !"
}
#The loop will count to ten and exit
#The loop uses the «/usr/bin/seq» command to get the sequence of number of cycles
echo «You can press CTRL+C, but it will not stop the loop of ten seconds...»
for counter in `seq 1 10`;
do
echo "Counting $counter/10 before Exit..." sleep 1;
done
echo ­e "\n\t The 'trapfunction' has worked successfully" chmod +x trap.sh
./trap.sh
«The signal CTRL+C is disabled»
«You can press CTRL+C, but it will not stop the loop of ten seconds...»
Counting 1/10 before Exit...
Counting 2/10 before Exit...
Counting 3/10 before Exit...
^CYou have pressed CTRL+C, your signal has been intercepted !
Counting 4/10 before Exit...
Counting 5/10 before Exit...
Counting 6/10 before Exit...
Counting 7/10 before Exit...
^CYou have pressed CTRL+C, your signal has been intercepted !
Counting 8/10 before Exit...
^CYou have pressed CTRL+C, your signal has been intercepted !
Counting 9/10 before Exit...
Counting 10/10 before Exit...
The 'trapfunction' has worked successfully
19. Les tableaux
vi array.sh
#!/bin/bash
#array.sh
#Declaration of an array with 7 elements into it
ARRAY=('Debian GNU/Linux' 'RedHat CentOS' FreeBSD Ubuntu OpenSuSE Slackware 'Linux From Scratch')
La Console !© par Patrick Hautrive !;~) 2010
192
#Declaration of a variable that contents the number of lines into the array
ELEMENTS=${#ARRAY[@]}
#The loop will extract each element of the array and print it
#The counter is "i", the loop increment by 1 and stop with the last element of the array
echo ­e " \n "
for (( i=0;i<$ELEMENTS;i++));
do
echo ­e " \t ${ARRAY[${i}]} "
done
echo ­e " \n "
chmod +x array.sh
./array.sh Debian GNU/Linux RedHat CentOS FreeBSD Ubuntu OpenSuSE Slackware Linux From Scratch 20. L'extraction
./array.sh > list.txt
vi extract.sh
#!/bin/bash
#extract.sh list.txt
#The script is launched with an argument: a file that countains the lines to be stored in the array
# Declararation of the array with the builtin Bash command «declare»
declare ­a ARRAY
#Link the standard input «stdin» (0) with file descriptor 10, and opening file descriptor 10
#The link is made with the builtin Bash command «exec»
exec 10<&0
#With the redirection of stdin, all the input will come from the file put in argument of the script
#The file will be read line by line, and each line will be stored into the array
#The argument of the script is the first internal variable «$1» (list.txt)
#This file is set to be the input stdin for the script (extract.sh)
exec < $1
#Initialisation of a counter for the loop at ZERO, increment by 1 while there is still a new line
#Each cycle of the loop will store one numbered line into the variable LINE and into the array
#The array starts at ZERO
let counter=0
La Console !© par Patrick Hautrive !;~) 2010
193
while read LINE;
do
ARRAY[$counter]=$LINE
((counter++))
done
echo ­e "\n\t The Number of elements in the array is: ${#ARRAY[@]}"
echo ­e "\n\t The Elements of the array are: \n\t ${ARRAY[@]} \n"
#Restoration of stdin from file descriptor 10 and release of file descriptor 10 (10<&­)
exec 0<&10 10<&­
21. La boucle
vi loop.sh
#!/bin/bash
#loop.sh
sleep 1
echo ­e "\n\t Counting a list of predefine numbers"
for i in 10 20 30 40 50 60 70 80 90 100
do
echo ­e "\t Counting by 10s: \t $i"
done
sleep 2
echo ­e "\n\t Counting a range of numbers within curly bracketss"
for i in {0..100}
do
echo ­e "\t Counting by ones: \t $i"
done
sleep 2
echo ­e "\n\t Counting a sequence of numbers by increment with the command 'seq'"
for i in $(seq 1 2 100)
do
echo ­e "\t Counting by sequence of 2: \t $i"
done
chmod +x loop.sh
./loop.sh
22. Le ban n
issement
vi bannish.sh
#!/bin/bash
#bannish.sh
#The file with known zombie networks is maintained at http://www.spamhaus.org/xbl/
#The banned file is a list of Ips addresses by example: 41.206.45.202 or 58.0.0.0/8
La Console !© par Patrick Hautrive !;~) 2010
194
#The script will input those Ips adresses into the firewall iptables and drop them
#This script requires to be launched with root privileges
#The variable IP refers to the file that countains the zombie networks
IP=/opt/scripts/banned
for i in $(awk '{print}' < "$IP")
do
echo $i
iptables ­A INPUT ­p tcp ­s $i ­j DROP
done
exit 0
chmod +x bannish.sh
su
./bannish.sh
iptables ­L ­n
Chain INPUT (policy ACCEPT)
target prot opt source destination
RH­Firewall­1­INPUT all – 0.0.0.0/0 0.0.0.0/0
DROP tcp – 41.206.45.202 0.0.0.0/0
DROP tcp – 58.0.0.0/8 0.0.0.0/0
23. Les exécutables
vi executables.sh
#!/bin/bash
#executables.sh
#The script will output the files with executables permissions in the directory it is launched
echo ­e "\n\t Those executable files where found in this directory: `pwd` "
for i in *
do
if [ ­f "$i" ­a ­x "$i" ]
then
echo "$i"
fi
done
chmod +x executables.sh
./executables.sh Those executable files where found in this directory: /home/pat/script argument.sh
array.sh
executables.sh
expand.sh
extract.sh
La Console !© par Patrick Hautrive !;~) 2010
195
locale.sh
loop.sh
response.sh
script.sh
test.sh
trap.sh
24. La condition
vi directory.sh
#!/bin/bash
#test.sh $HOME
#The script declare a varaible that contain a directory (first argument of the script)
#The script check if this directory exists
DIRECTORY="$1"
if [ ­d "$DIRECTORY" ]; then
echo "The directory does exist"
else
echo "The directory does not exists"
fi
chmod +x directory.sh
./directory.sh
The directory does not exists
./directory.sh $HOME
The directory does exist
25. L'imbrication
vi nest.sh
#!/bin/bash #nest.sh #The script present a list of choices in a cascade menu echo ­e " \n\t Welcome to the Menu " echo ­e " \n\tPlease choose between [1, 2 or 3] \n " echo ­e " \t 1. You wish to go out tonigth " echo ­e " \t 2. You prefer to stay at home " echo ­e " \t 3. You want to exit the menu " read CHOICEPLACE # bash while loop while [ "$CHOICEPLACE" ­ne 3 ]; do if [ "$CHOICEPLACE" ­eq 1 ] ; then La Console !© par Patrick Hautrive !;~) 2010
196
echo "You have chosen to go out" PLAN="You have chosen to go out" echo ­e " \t 1. Do you want to go dancing ?" echo ­e " \t 2. Do you want to go to the cinema ?" echo ­e " \t 3. You want to exit the menu " read CHOICEACTION if [ "$CHOICEACTION" ­eq 1 ] ; then echo ­e "\n\t $PLAN" echo ­e "\t Ok, swell we will go dancing tonight" CHOICEPLACE=3 #exit 0 else if [ "$CHOICEACTION" ­eq 2 ] ; then echo ­e "\n\t $PLAN" echo ­e "\t Ok, great we will go to the cinema tonight" CHOICEPLACE=3 #exit 0 else echo ­e "\n\t $PLAN" echo ­e "\t Oh well, you will know later where to go tonight..." CHOICEPLACE=3 #exit 0 fi fi else echo "You have chosen to stay at home" PLAN="You have chosen to stay at home" echo ­e " \t 1. Do you want to relax ?" echo ­e " \t 2. Do you want to read ?" echo ­e " \t 3. You want to exit the menu " read CHOICEACTION if [ "$CHOICEACTION" ­eq 1 ] ; then echo ­e "\n\t $PLAN" echo ­e "\t Ok, cool we will stay zen tonight" CHOICEPLACE=3 #exit 0 else if [ "$CHOICEACTION" ­eq 2 ] ; then La Console !© par Patrick Hautrive !;~) 2010
197
echo ­e "\n\t $PLAN" echo ­e "\t Ok, nice we will read a good book tonight" CHOICEPLACE=3 #exit 0 else echo ­e "\n\t $PLAN" echo ­e "\t Oh well, you will find later what to do at home..." CHOICEPLACE=3 #exit 0 fi fi fi done
chmod +x nest.sh
./nest.sh
26. La comparaison
vi compare.sh
#!/bin/bash
#compare.sh
#Declaration of the integers numbers to be compared one another
NUM1=2
NUM2=3
if [ "$NUM1" ­eq "$NUM2" ];
then
echo "The two numbers are equal"
elif [ "$NUM1" ­gt "$NUM2" ];
then
echo ""$NUM1" is greater then "$NUM2""
else
echo ""$NUM2" is greater then "$NUM1""
fi
chmod +x compare.sh
./compare.sh
27. Le clavier
vi keybord.sh
#!/bin/bash
#keybord.sh
La Console !© par Patrick Hautrive !;~) 2010
198
echo "Please press one key of the keybord and then press ENTER"
read KEY
case "$KEY" in
[a­z] ) echo "You have pressed one minuscule letter: "$KEY"";;
[A­Z] ) echo "You have pressed one majuscule letter: "$KEY"";;
[0­9] ) echo "You have pressed one number: "$KEY"";;
*
) echo "You have pressed a key that is not a letter, neither a number: "$KEY"";;
esac
chmod +x keybord.sh
./keybord.sh
28. L'expiration
vi expiration.sh
#!/bin/bash #expiration.sh
#The script requires two integer as arguments
#The first argument must be lower than the second
i="$1"
j="$2"
echo ­e "\n\t The two arguments of the script are "$1" and "$2""
#The loop will run while the first is less than the second number
while [ "$i" ­lt "$j" ];
do
echo ­e "\t "$i""
i=`expr "$i" + 1`
done
chmod +x expiration.sh
./expiration.sh 4 12
29. Les chaines
vi string.sh
#!/bin/bash
#string.sh word string
#The script requires two strings as arguments
#The test check if the one of the two Bash internal variable are empty ("||" is OR condition)
if [[ ­z "$1" || ­z "$2" ]];
then
echo ­e "\n\t Please give two strings arguments when you launch the script ! \n"
exit ­5
fi
#Declaration of the two variables with the script two string arguments
La Console !© par Patrick Hautrive !;~) 2010
199
FIRST="$1"
SECOND="$2"
#Comparison of the two strings
if [ $FIRST = $SECOND ];
then
echo "The two strings are the same: "$FIRST" equals "$SECOND" "
exit ­5
else
#With one only bracket the escape superior or inferior sign need to be escape
if [ $FIRST \< $SECOND ];
then
echo "The two strings are different: "$FIRST" before "$SECOND" "
exit ­5
else
#With two bracket do not need to escape the superior or inferior sign
# [[ $FIRST > $SECOND ]];
echo "The two strings are different: "$FIRST" after "$SECOND" "
exit ­5
fi
fi
chmod +x string.sh
./string.sh linux debian
30. Le tank
vi while.sh
#!/bin/bash #while.sh
#The while loop tests if the condition is true and runs while the condition remains true
COUNTER=1
LIMIT=25
#The while loop must have a semi colon after the condition and before the do on the same line
#The while loop:
#
"while [condition];do"
# "cmd"
# "done"
while [ "$COUNTER" ­le "$LIMIT" ]; do
echo ­e "\t "$COUNTER"/"$LIMIT" "
let "COUNTER +=1"
#COUNTER=$(( $COUNTER + 1 ))
done
chmod +x while.sh
./while.sh
La Console !© par Patrick Hautrive !;~) 2010
200
31. La presence
vi presence.sh
#!/bin/bash
#presence.sh file.txt
#The script checks the presence of the file that is given as argument
FILE=$1
#Checking if the file allready exist
if [ ­e "$FILE" ];
then
echo ­e "\t\n The file \""$FILE"\" allready exist !" echo ­e "\n\t `ls ­lih "$FILE"` "
fi
#The loop to create the file
while [ ! ­e "$FILE" ];
do
echo ­e "\n\t ...The file \""$FILE"\" doesn't exist..."
sleep 1
echo ­e "\t Do you want to create the file \""$FILE"\" in `pwd` ? (yes or no)"
read ANSWER
echo "ANSWER is: "$ANSWER""
echo "FILE is: "$FILE""
if [[ $ANSWER == "yes" ]];
then
/bin/touch "$FILE"
echo ­e "\n\t `ls ­lih "$FILE"` "
echo ­e "\n\t The file \"`pwd`/"$FILE"\" now exist \n"
else
echo ­e "\n\t The file \""$FILE"\" will not be created !"
fi
done
chmod +x presence.sh
./presence.sh file
32. Les inombrables
vi listing.sh
#!/bin/bash
# listing.sh directory
#The script list the files into the directory put as argument
DIRECTORY=$1
echo ­e "\n\t The files in the directory \""$DIRECTORY"\" are:\n"
La Console !© par Patrick Hautrive !;~) 2010
201
for FILES in $( ls "$DIRECTORY" );
do
echo ­e "\t $FILES"
done
chmod +x listing.sh
./listing.sh /
33. La minuterie
vi countdown.sh
#!/bin/bash
#countdown.sh
#The script will count down from ten second and stop
COUNTER=10
echo ­e "\n\t This script will stop in ten seconds \n"
while [[ "$COUNTER" ­gt 0 ]];
do
echo ­e "\t "$COUNTER""
sleep 1
let COUNTER=COUNTER­1
done
chmod +x countdown.sh
./countdown.sh
34. La progression
vi progressing.sh
#!/bin/bash
#progressing.sh
#The script will count number from zero to ten seconds
COUNTER=0
echo ­e "\n\t The script will count from 0 to 10 \n"
until [[ "$COUNTER" ­gt 10 ]];
do
echo ­e "\t "$COUNTER" "
sleep 1
let COUNTER=COUNTER+1
done
chmod +x progressing.sh
./progressing.sh
35. La substitution
La Console !© par Patrick Hautrive !;~) 2010
202
vi underspace.sh
#!/bin/bash
#underspace.sh
#The script will locate the files with a space in the name and replace the spaces with underscore
DIRECTORY="."
#The loop condition is controlled with the bash "read" command
#The command "find" redirects its STDOUT to the STDIN of the while loop
#The command "tr" truncates the files found in the local directory by substituting " " with "_"
#The result of the command "tr" is piped into the "rename" command
find "$DIRECTORY" ­type f | while read FILE; do
#The POSIX class [:space:] is used to find space in the filename
if [[ "$FILE" = *[[:space:]]* ]];
then
#Each files are renamed and each " " is substitue with "_" caracter
mv "$FILE" `echo $FILE | tr ' ' '_'`
#A semi colon is put at the end of "if" structure to get back to the "while" loop
fi;
done
chmod +x underspace.sh
touch "file with space"
./underspace.sh
ls file_with_space
36. Les fonctions
vi function.sh
#!/bin/bash
#The Bash "function" command is used to declare a local function into the script
function fn_echo
{
echo ­e "\n\t The function \"fn_echo\" print out that output \n"
}
function fn_echo_arguments
{
echo $*
}
function fn_ls
{
ls $1
}
#The function can be called with parameters fn_echo
fn_echo_arguments how many arguments are passed to the function \"fn_echo_arguments\" ?
La Console !© par Patrick Hautrive !;~) 2010
203
echo ­e "\n\t The function \"fn_ls\" lists the files from the directory \"\$HOME\""
fn_ls $HOME
fn_echo
chmod +x function.sh
./function.sh
37. La sélection
vi selection.sh
#!/bin/bash
#selection.sh
#The Bash variable "PS3" is used to change the default prompt with the "select" Bash command
PS3='Choose one word: '
#The Bash "select" command uses a list of words to propose in an ordered menu
select WORD in "linux" "bash" "scripting" "tutorial"
do
echo ­e "\n\t The word you have selected is: $WORD"
#The Bash "break" command is used to go out of the endless loop
break
done
exit 0
chmod +x selection.sh
./selection.sh
Le menu
vi choices.sh
#!/bin/bash
#choices.sh
#The script present a list of choice in a menu
echo ­e "\n\t Welcome to the Menu "
echo ­e "\n\t Please choose between [1, 2, 3, 4 or 5] \n "
echo ­e "\t\t 1. Launch a terminal "
echo ­e "\t\t 2. Get some informations about the Operating System "
echo ­e "\t\t 3. Read the Man Pages "
echo ­e "\t\t 4. See the logs "
echo ­e "\t\t 5. Exit "
read CHOICE;
case $CHOICE in
1)
echo ­e "\t You have chosen to launch a teminal..."
sleep 1
/usr/bin/xterm&
;;
La Console !© par Patrick Hautrive !;~) 2010
204
2)
3)
4)
5)
echo ­e "\t You have chosen to get some informations about the OS:"
echo ­e "\t The date is:\t\t `date` "
echo ­e "\t The hostname is:\t `hostname` "
echo ­e "\t The processor is:\t `uname ­mp` "
echo ­e "\t The memory is:\t\t `cat /proc/meminfo | grep MemTotal` "
echo ­e "\t The system is:\t\t `uname ­o` "
echo ­e "\t The kernel is:\t\t `uname ­r`"
echo ­e "\t The `lsb_release ­a | grep Description` "
echo ­e "\t The system is up since:`uptime` "
echo ­e "\t The disk usage is:\t `du ­sh $HOME` "
echo ­e "\t You are logged in as:\t `id` "
;;
echo ­e "\t You have chosen to read the Man Pages... "
/bin/bash ­c 'xterm ­e man man'
;;
echo ­e "\t You have chosen to see the logs"
/bin/dmesg | less
;;
echo ­e "\t You have chosen to Exit...bye..."
exit
;;
esac
chmod +x choices.sh
./choices.sh
La Console !© par Patrick Hautrive !;~) 2010
205
TOOLS
Inventaire « inhexaustif » des principales commandes (man man)
Init: init telinit runlevel Info: man info xman help Window: xinit startx X gdm Environnement: env set inetd2xinetd msginit mkinitrd mandb manpath catman xdm kdeinit xev xload unset printenv export reset typeset declare
Host: uname uptime hostname updatedb apropos makewhatis xosview
whois whatis whereis locate Devices: lsusb lspci hotplug Control: Ctrl+C Ctrl+D dmesg arch hostid
slocate
MAKEDEV mknod Ctrl+L Ctrl+Z Ctrl+U Times: clock hwclock date Tools: find grep egrep fgrep Partition: sync fsck e2fsck Ctrl+S+Q Ctrl+At+F1 ntpdate times cal tzconfig Ctrl+At+F7 tzfile tzselect tzsetup zdump sort uniq wc diff comp patch mount umount mountpoint awk sed tr cut col expand Ctrl+Backspace zic
mkfs mke2fs mkreiserfs Ctrl+Alt+Del Login: login sulogin last lastb unexpand pr troff nroff groff reiserfsck debugreiserfs Shift+Ctrl+Tab
Format: hexdump hd od tune2fs debugfs dump2fs lastlog logger getty agetty codepage recode
badblocks fdisk cfdisk sfdisk Terminal: tty stty openvt mingetty wall
fdformat hdparm rdev df du screen tic setterm tset resize Archives: gzip gunzip tar Shell: sh bash chsh wish dd ddrescue testdisk e2label chvt
md5sum chksum gpg ar Users: w who logname id chfn e2image resize2fs sum
Console: xterm uxterm kvt cdrecord
users finger whoami useradd Memory: free mkswap rxvt gnome­terminal Programs: make gcc userdel usermod false nologin swapon swapoff vmstat
konsole fgconsole xconsole Groups: groupadd groupdel Network: ifconfig route host Process: ps pstree top jobs bg Keys: locale locale­gen groupmod chgrp newgrp sg netstat ping iptables tcpdump localedef loadkeys nmblookup nslookup nc netcat fg tee kill killall skill nice Shadowing: shadowconfig nmap tripwire exports losetup renice time pidof pkill pgrep dumpkeys showkey install­
pwck pwconv pwunconv keymap setkeycodes Remote: ssh scp rsync mail Kernel: strace bootparam grpck grpconv grpunconv getkeycodes setxkbmap ftp wget telnet rlogin rsh rcp ltrace
update­passwd
setmetamode xmodmap Journal: klogd syslogd
rwho rdist kermit Vmware tip Commands: history alias charmap showrgb dircolors
procomm minicom rpcinfo
Modules: lsmod depmod unalias script nohup & watch
Fonts: xfsinfo
Services: chkconfig sysctl modprobe modinfo update­
Permissions: passwd gpasswd Counting: bc calc number ntsysv service tcpdchk modules ldd
vipw vigr chage visudo random morse sc
tcpdmatch
Packages: rpm urpmi yum sudoedit su sudo
apt­get apt­cache apt­add dpkg Images: eog
Root: ls pwd ln lndir unlink Configuration: linuxconf Internet: lynx w3c wget
alien apt4rpm rpmdrake readlink type file mc cd mv drakconf yast2 lisa setup Games: xeyes fortune pom redhat­config control­panel up2date cp rm mkdir rmdir chroot swat webmin gnome­system­ Scripts: echo expr read sleep codebreaker corewars
ulimit umask rename monitor
exec wait write exit continue Logout: exit logout halt basename dirname pathchk
Hardware: kbdrate setleds break clear type toe xargs
reboot shutdown reset Files: file stat lsof fuser lsattr sndconfig mouseconfig alsa poweroff
Printing: cups lp lpd chattr attr chown chmod crypt sane scsi_info eject hotplug Screensaver: munch Backup: dump restore
cryptdir shred filefrag touch discover recover
newer
Cron: cron crontab batch at mismunch
Editing: less more cat zcat tac Loader: lilo grub
atq atrm
vi pico nano emacs gedit tail Floppy: mkboot mkbootdisk head split strings xpdf gv gs superformat mformat
La Console !© par Patrick Hautrive !;~) 2010
206
FILES
Inventaire « inhexaustif » des principaux fichiers de configuration
Man
/etc/man.conf
/etc/manpath.config
/usr/man/
/usr/local/man/
/usr/share/man/
/usr/share/man­db/chconfig
/var/cache/man/index.db
Documentation
/usr/doc/
/usr/share/doc/
/usr/src/linux/
Log
/var/log/message
/var/log/sulog
/var/log/boot.msg Suze
/var/log/boot.log RedHat
/var/log/dmesg Debian
/var/log/installer/messages
/tmp/install.log
/root/anaconda.ks.cfg
/proc/kmsg
/var/log/wtmp (last)
/var/log/secure (login)
/var/log/lastlog (lastlog)
/var/log/sulog (sulog)
/var/log/dmesg (dmesg)
/var/log/utmp (who)
/var/log/btmp (lastb)
Locale
/etc/environment
/etc/locale.alias
/etc/locale.gen
/etc/gdm/locale.conf
/etc/profile.d/lang.sh
/etc/localtime
/etc/alternatives
/etc/magic
/etc/timezone
Init
/etc/inittab
/etc/init.d/rc
/etc/initlog.conf
/etc/rc.d/rc.sysinit
/etc/rc.d/rc.local
/etc/default/rcS
/etc/syslog.conf
/etc/sysctl
/etc/sysctl.conf
/etc/inetd.conf
/etc/rc.config
/etc/rc.d/rc.inet1
/etc/rc.d/rc.inet2
/etc/rc.d/xinetd.conf
/dev/initrd
/etc/mkinitrd.conf
Pam
/etc/pam.d/login
/etc/security/pam_env.conf
/etc/security/group.conf
/etc/security/time.conf
/etc/security/access.conf
/etc/security/limits.conf
Window
/etc/X11/xinit
/etc/X11/xinit/xinitrc
/etc/X11/xdm/xdm.config
/usr/lib/X11/xinit/.Xinitrc
/usr/X11R6/lib/X11/xinit
/etc/X11/xdm/xdm.config
Modules
/etc/modules.conf
Floppy
/images/boot.img
/images/bootnet.img
/images/rescue.img
Partition
/etc/fstab
/etc/mtab
Terminal
/etc/securetty
/etc/usertty
/etc/terminfo
/etc/termcap
/etc/gettydefs
/etc/ttytab
Device
/dev/null
/dev/zero
/dev/random
/dev/console
/dev/error
Variables
PS1 PS2 PS3 BASH_ENV PATH SHELL LOGNAME MANPATH TERM TERMCAP LS_COLOR
Network
/etc/services
/etc/protocols
/etc/exports
/etc/hosts
/etc/host.allow
/etc/host.deny
/etc/host.equiv
/root/.rhosts
/etc/ftpusers
/etc/dialups
/etc/dpasswd
/etc/rpc
/etc/portmap
man hosts_access
Boot
Howto Boot Prompt
/etc/crontab
Halt
/etc/shutdown.allow
/etc/powerstatus
La Console !© par Patrick Hautrive !;~) 2010
207
Password
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
/etc/netgroup
/etc/login.defs
/etc/nologin
/etc/login.access
/etc/porttime
/etc/environment
/etc/limits
/etc/pam.d/login
/etc/security/*
Login
/etc/issue
/etc/motd
/boot/bootmsg.txt
/etc/profile
/etc/bash.bashrc
Shell
/etc/shells
/etc/bash_completion
/bin/bash
/bin/false
/bin/nologin
User
/etc/skel
/etc/aliases
/etc/sudoers
Profile
~/.login
~/.bash_profile
~/.bash_login
~/.bash_history
~/.profile
~/.bashrc ~/.Xsession
~/.Xdefaults
~/.Xinitrc
~/.signature
~/.rhosts
~/.bash_logout
CARACTERS
Les caractères spéciaux – ASCII ­ AZERTY
Fonction
Le séparateur interne (IFS)
L'indentation
Le joker caractère
Le joker (multiplication)
Les commentaires
La séparation de valeurs
L'intervalle de valeur
La substitution de commande
La redirection
L'échappement caractère
Le séparateur de répertoire
Le lancement en sous shell
Le lancement en un bloc shell
Le regroupement d'expression
La protection à l'évaluation
La protection à l'expansion
La succession de commandes
Le lancement en background
L'opérateur logique (AND)
L'opérateur logique (OR)
L'opérateur logique (NOT)
Le lien répertoire parent
Le lien répertoire courant
Le répertoire personnel Le séparateur
Le préfixe des jobs
La dernière commande
La redirection vers la droite
La redirection vers la gauche
La concaténation
Les séquences de contrôle
L'expansion de variables
L'attribution des droits
L'identification d'un compte
Octal
Char
French
La barre d'espace
La touche de tabulation
? Le point d'interrogation
* L'étoile
# Le dièse
, La virgule
­ Le tiret
` L'apostrophe inversé
|
La barre verticale
\ La barre oblique gauche
/ La barre oblique droite
( La parenthèse ouvrante
) La parenthèse fermante
{ L'accolade ouvrante
} L'accolade fermante
[ Le crochet ouvrant
] Le crochet fermant
“” Le guillemet
'
L' apostrophe
; Le point virgule
& L'esperluette
&& La double esperluette
|| La double barre
! Le point d'exclamation
.. Deux points successifs
. Le point
~ Le tilde
: Le double point
% Le pourcentage
%% Le duble pourcentage
> Le signe supérieur
< Le signe inférieur
>> Le double supérieur
^ La touche contrôle
$ Le signe du dollars
+ Le signe plus
@ arrowbase
English
space bar
tabulation
question mark
star, asterisk
diaresis, hash
comma
hyphen, dash
back quote
pipe
back slash
slash
opening parenthesis
closing parenthesis curly bracket left
curly bracket right
square bracket left
square bracket right
double quote
simple quote
semi­colon
ampersand
double ampersand
double pipe
exclamation mark
double dot, dot dot
full stop, period
tilde
colon
percentage
double percentage
right angle bracket
left angle bracket
concatenation
circumflex
dollar
plus sign
at sign
La Console !© par Patrick Hautrive !;~) 2010
208
Clavier
Exemple
SPACE
TAB
Altgr+3
Altgr+7
Altgr+6
Altgr+8
ls h?l?
cp * .
#! /bin/bash
ls [a,c]*
ls [a­z]*
cmd `cmd`
ls | less
echo \
rm ­rf /
Altgr+5
Altgr+°
alias ll=”ls ­l”
cmd ; cmd
cmd &
ls && cd
ls || cd
!cmd
cd ..
./configure
Altgr+2
Maj+<
/etc/passwd
fg %NUM
kill %%
>file
cat >> file
CTRL+^
echo $HOME
chmod u+x
Altgr+0 ssh user@host
DEFINITIONS
MAIL_DIR
MAIL_FILE FAIL_DELAY
/var/mail
.mail
3
#Définition obligatoire de la variable $MAIL
#Fichier contenant les mail de l'utilisateur
#Nombre de seconde d'attente après échec de la connexion
FAILLOG_ENAB
yes
#Acceptation des échecs et log dans “/var/log/faillog”
LOG_UNKFAIL_ENAB
no
#Acceptation des échec avec login inconnus (unknown)
LOG_OK_LOGINS
no
#Enregistrement dans les journaux des connexions réussies
QUOTAS_ENAB
yes
#Acceptation des quotas (umask, ulimit, nice) (Gecos)
SYSLOG_SU_ENAB
yes
#Log avec syslog de la commande “su”
SYSLOG_SG_ENAB
yes
#Log avec syslog des commandes “newgrp” et “sg”
SULOG_FILE
TTYTYPE_FILE
/var/log/sulog
/etc/tty
FTMP_FILE
/var/log/btmp
SU_NAME
su
HUSHLOGIN_FILE
NOLOGIN_STR
.hushlogin
nologin
ENV_TZ
/etc/timezone
ENV_HZ
HZ=100
ENV_SUPATH
#Log de la commande “su”
#Type de terminal
#Log des échecs de connexion “lastb”
#Affichage du “su” pour la commande “ps”
#Acceptation du hush mode
#Refus de connexion
#Définition de la variable d'environnement TZ
#Définition de la variable HZ
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/bin/X11:/usr/local/sbin:/usr/local/bin
ENV_PATH
PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
TTYGROUP
tty
#Le groupe propriétaire pour le périphérique terminal
TTYPERM
0
#Les permissions attribuées au périphérique terminal
ERASECHAR
177
#Caractère d'effacement (backslash) pour system V
KILLCHAR
25
#Caractère de suppression de ligne (Ctrl+U) pour system V
UMASK
22
#Définition du masque par défaut de création des fichiers
ULIMIT
0
#Les limites (file, size, process, user, cpu, memory)
PASS_MAX_DAYS
99999
#Nombre maximal de jours valide pour un mot de passe
PASS_MIN_DAYS
0
#Nombre minimal de jour entre deux changements
PASS_WARN_AGE
7
#Nombre de jour d'alerte avant l'expiration
UID_MIN
1000
#Numéro d'ordre minimal pour l'attribution des UID
UID_MAX
60000
#Numéro d'ordre maximal pour l'attribution des UID
GID_MIN
100
#Numéro d'ordre maximal pour l'attribution des GID
GID_MAX
60000
#Numéro d'ordre maximal pour l'attribution des GID
LOGIN_RETRIES
5
#Nombre maximal de tentative de connexion
LOGIN_TIMEOUT
60
#Nombre maximal de seconde pour se connecter
8
#Nombre de caractères pour le cryptage du mot de passe
PASS_MAX_LEN
CHFN_AUTH
yes
#Mot de passe pour les commandes “chfn” et chsh”
CHFN_RESTRICT
rwh
#Champ de “chfn” (full name, room#, work#, home#)
LOGIN_STRING
DEFAULT_HOME
USERDEL_CMD
NO_PASSWORD_CONSOLE GETPASS_ASTERISKS USERGROUPS_ENAB
FAKE_SHELL
CLOSE_SESSIONS
%s's password:
yes
/usr/sbin/userdel_local
tty1:tty2:tty3:tty4:tty5:tty6
#Prompt pour la demande de mot de passe
#Acceptation des connexions sans cd $HOME
#Commande automatique après “userdel”
#Login sans mot de passe
1
#Nombre d'astérix affiché à la place des caractères saisies
yes
#Acceptation de umask UID pour les GID égaux aux UID
/bin/fakeshell
no
#Lancement d'un script avant le lancement du shell
#Acceptation de pam_close_session() de pam_unix.so
Obsolètes: DIALUPS_CHECK_ENAB ENVIRON_FILE NOLOGINS_FILE LASTLOG_ENAB MOTD_FILE MAIL_CHECK_ENAB OBSCURE_CHECKS_ENAB PASS_MIN_LEN PORTTIME_CHECKS_ENAB PASS_CHANGE_TRIES PASS_ALWAYS_WARN MD5_CRYPT_ENAB ISSUE_FILE SU_WHEEL_ONLY CRACKLIB_DICTPATH CONSOLE_GROUPS
La Console !© par Patrick Hautrive !;~) 2010
209
FORMULES
La formulation d'une commande : cmd arg option source target
Commands
cmd
cmd ; cmd
cmd | cmd
cmd `cmd`
cmd $(cmd)
cmd &
cmd && cmd
cmd || cmd
cmd; \\n cmd
nohup cmd
type cmd
echo “text”
echo '$VAR'
echo \$HOME
echo '`cmd`'
echo ­e “\120”
batch (Ctrl+D)
at now (Ctrl+D)
crontab
cmd | tee > cmd
!!
!num
/usr/bin/cmd
Fonction
Validation (enter)
Traitement séquentiel (train)
Redirection (pipe)
Substitution en sous shell
Substitution POSIX
Background (jobs)
Conditionnement Vrai (AND)
Conditionnement Faux (OR)
Échappement Eol (Escape)
Détachement du terminal (tty)
Évaluation de la syntaxe (test)
Protection littérale (sauf `,\,$)
Annulation de toute expansion
Échappement d'un caractère
Protection de l'évaluation
Évaluation Escape Sequence
Execution séquentielle (FIFO)
Execution programmée (atd)
Execution régulière (crond)
Execution et duplication (fork)
Execution last command
Execution from history
Chemin absolu (Absolut Path)
Commands
Fonvtion
(cmd ; cmd)
{cmd ; cmd}
cmd > file.txt
cmd >> file.txt
cmd < file.txt
cmd 2> error.txt
cmd 1&2> ouput.txt
!cmd
alias cmd=”cmd ­option”
unalias cmd
time cmd
su root ­c “cmd”
sh ­c cmd
ssh ­v user@host cmd
ln ­s /bin/bash ~/myshell
echo $?
batch < script.txt
source script.sh
. script.sh
./script.sh
declare_function
bash ­c cmd
Sous shell (fils distincts)
Bloc (un seul processus)
Écrasement
Concaténation
Passage de paramètres
Déviation STDERR
Déviation des sorties
Inversion du code retour
Définition d'un alias
Suppression d'un alias
Minutage de l'exécution
Lancement en root
Lancement en sous shell
Lancement à distance
Lien symbolique (link)
Dernier code retour
Execution d'un script
Execution shell Bash
Execution shell Bash
Execution sub shell Bash
Execution d'une fonction
La Console !© par Patrick Hautrive !;~) 2010
210
Patrick Hautrive 2010
http://hautrive.free.fr
La Console !© par Patrick Hautrive !;~) 2010
211

Documents pareils