Aller au contenu

Le système d'exploitation GNU-Linux/Version imprimable

Un livre de Wikilivres.

Ceci est la version imprimable de Le système d'exploitation GNU-Linux.
  • Si vous imprimez cette page, choisissez « Aperçu avant impression » dans votre navigateur, ou cliquez sur le lien Version imprimable dans la boîte à outils, vous verrez cette page sans ce message, ni éléments de navigation sur la gauche ou en haut.
  • Cliquez sur Rafraîchir cette page pour obtenir la dernière version du wikilivre.
  • Pour plus d'informations sur les version imprimables, y compris la manière d'obtenir une version PDF, vous pouvez lire l'article Versions imprimables.


Le système d'exploitation GNU-Linux

Une version à jour et éditable de ce livre est disponible sur Wikilivres,
une bibliothèque de livres pédagogiques, à l'URL :
https://fr.wikibooks.org/wiki/Le_syst%C3%A8me_d%27exploitation_GNU-Linux

Vous avez la permission de copier, distribuer et/ou modifier ce document selon les termes de la Licence de documentation libre GNU, version 1.2 ou plus récente publiée par la Free Software Foundation ; sans sections inaltérables, sans texte de première page de couverture et sans Texte de dernière page de couverture. Une copie de cette licence est incluse dans l'annexe nommée « Licence de documentation libre GNU ».

Qu'est-ce qu'un système d'exploitation ?

Linux Is Not UniX.

À la fin de ce chapitre, le lecteur sera en mesure :

  • d’expliquer le rôle d’un système d’exploitation,
  • de nommer les principales couches de l’architecture d’un système d’exploitation,
  • d’associer les générations d’ordinateur aux différents types de systèmes d’exploitation,
  • d’expliquer les différentes versions de UNIX et Linux.

Un système informatique moderne est composé d’un ou plusieurs processeurs, d’une mémoire principale, de disques durs, d’imprimantes, d’un clavier, d’une souris, d’un écran, d’une carte réseau et de beaucoup d’autres périphériques d’entrée/sortie. En un mot un système complexe. Dans ce contexte, développer des programmes d’application qui doivent tenir compte correctement de toutes ces entrées/sorties n’est pas une mince tâche. C’est pour cette raison que les ordinateurs modernes sont équipés d’un « système d’exploitation ». Une des tâches du système d’exploitation est donc d’offrir aux utilisateurs une interface simple et conviviale avec le matériel.

Dans ce chapitre, nous allons d’abord présenter une brève définition et description des systèmes d’exploitation. Par la suite, nous expliquons l’architecture et les fonctions d’un système d’exploitation. Puis finalement, les différentes versions de Unix et de Linux sont présentées.

Qu'est-ce qu'un système d'exploitation

[modifier | modifier le wikicode]

Un système d'exploitation effectue deux tâches bien distinctes :

  • Présenter une machine virtuelle à l’utilisateur.
  • Gérer les ressources de l’ordinateur.

Machine virtuelle

[modifier | modifier le wikicode]

Être une machine virtuelle signifie transformer un ensemble de circuits électroniques en un outil moderne qui offre une abstraction simple au niveau des entrées/sorties, de l'utilisation de la mémoire, de la gestion des fichiers, de la protection et du contrôle des erreurs, de l'interaction des programmes entre eux et de leur contrôle.

En deux mots : éviter au programmeur d’avoir à connaître les détails électroniques de tel ou tel microprocesseur et permettre à l'utilisateur de sauvegarder ses fichiers sans se soucier du type de disque utilisé pour stocker les informations.

Gestionnaire de ressources

[modifier | modifier le wikicode]

L'autre fonction du système d'exploitation est le partage des ressources. Le système d’exploitation joue un rôle de policier afin d'éviter les conflits d'utilisation de la mémoire, des périphériques d'entrée/sortie, des interfaces réseau, … On peut facilement imaginer ce qui arriverait si trois programmes essayaient d'imprimer en même temps sans que des priorités aient été préalablement établies.

De plus, lorsque l'ordinateur est utilisé par plusieurs usagers, le partage de la mémoire et surtout sa protection demeurent une priorité absolue. À tout moment, tout bon système d'exploitation doit connaître l'utilisateur d'une ressource, ses droits d'accès et son niveau de priorité.

Architecture d’un système informatique

[modifier | modifier le wikicode]

Tous les systèmes informatiques sont segmentés en « couches » pour permettre un meilleur contrôle de l'ensemble de l'ordinateur. La Figure 1 illustre les différentes couches d’un tel système.

Figure 1 : Architecture d'un système informatique

Au plus bas niveau, on retrouve la première couche qui contient les composantes physiques constituées des circuits intégrés, des fils, des sources de courant, …

La couche suivante regroupe des outils logiciels primitifs qui permettent de contrôler directement les composantes physiques sous-jacentes, comme les registres internes du processeur et l’unité arithmétique et logique. Cette couche est appelée le microcode et réside bien souvent dans le processeur de l'ordinateur.

L'autre couche est celle du langage machine qui est interprété par le microcode. Ce langage de bas niveau regroupe 50 à 300 instructions pour permettre de déplacer des bits, de calculer ou de comparer des valeurs à l'aide des registres internes du processeur.

Système d’exploitation

[modifier | modifier le wikicode]

Le système d'exploitation qui se trouve juste au-dessus, offre aux programmeurs et aux utilisateurs un ensemble de fonctions du genre « lire le fichier » ou « afficher à l’écran ». Il s'agit ici d'un niveau d'abstraction élevé qui évite ainsi au programmeur de devoir écrire, par exemple, du code pour déplacer les têtes de lecture d'un disque rigide. Il s'agit du niveau d'exécution des pilotes de périphériques (contrôleurs d'interruptions, de disques, de carte graphique, ...).

En haut de la hiérarchie, il y a la couche où l'on retrouve les interpréteurs de commandes, les compilateurs et les logiciels d’application. Il est clair que ces programmes ne font pas partie du système d'exploitation, même s'ils sont livrés avec celui-ci dans bien des cas.

Logiciels d’application

[modifier | modifier le wikicode]

Finalement, au-dessus de toutes ces couches se trouvent les logiciels d’application qui permettent à un utilisateur d’effectuer des tâches particulières sans qu'il ait à tenir compte des couches inférieures.

Fonctions d'un système d'exploitation

[modifier | modifier le wikicode]

Aujourd'hui, l'informatique, aussi bien dans les entreprises que dans l'enseignement, utilise des machines plus petites fonctionnant avec des systèmes d'exploitation à caractère universel. Parmi ces systèmes d'exploitation, deux se distinguent particulièrement, un système mono-utilisateur, Windows, et un autre multi-utilisateurs et multi-tâches, Unix. D'une manière contestable, on peut affirmer que le premier système est destiné à des ordinateurs individuels, tandis que l'autre est réservé au travail en groupe.

Parmi les nombreux systèmes d’exploitation, Unix/Linux est celui qui offre le plus de richesse, le plus d'homogénéité et le plus de souplesse. Pour cette raison, dans ce livre, Linux a été choisi comme système d'exploitation pour illustrer les concepts théoriques. Par ailleurs, le système MS-DOS puis Windows, en évoluant, ont incorporé beaucoup de caractéristiques de Unix/Linux.

On peut diviser les fonctions des systèmes d'exploitation classiques en quatre parties principales :

  1. La gestion des processus (programmes).
  2. La gestion de la mémoire.
  3. Le système de fichiers.
  4. La gestion des entrées/sorties.

Les systèmes d'exploitation modernes intègrent par ailleurs d'autres caractéristiques. Ces dernières concernent notamment deux évolutions majeures des systèmes informatiques. La première est l'interconnexion des différentes machines et des différents systèmes par des réseaux locaux ou étendus. La seconde est la disparition des écrans de texte et leur remplacement par des dispositifs à fenêtres multiples disposant de propriétés graphiques.

Historique des systèmes d'exploitation

[modifier | modifier le wikicode]

L’histoire de l’informatique est très brève – les ordinateurs sont nés avec la seconde guerre mondiale – et pourtant, elle a connu de grandes évolutions. L'historique des systèmes d'exploitation est intimement liée à l'évolution de l’informatique. Cette évolution est séparée en 4 grandes étapes :

  1. Première génération (1945-55) : les tubes à vide.
  2. Deuxième génération (1955-65) : les transistors et le traitement par lots.
  3. Troisième génération (1965-80) : les circuits intégrés et la multiprogrammation.
  4. Quatrième génération (1980-aujourd’hui) : les micro-ordinateurs.
  5. Cinquième génération (compléter-compléter) : l'informatique quantique.

Première génération (1945-55) : les tubes à vide

[modifier | modifier le wikicode]

En 1946, le premier ordinateur ne comportant plus de pièces mécaniques est créé grâce à J. Mauchly et J. Presper Eckert : l’ENIAC (Electronic Numerical Integrator And Computer). Il est composé de 180 000 tubes à vide et occupe 1500 m². Son principal inconvénient est sa programmation : il était uniquement programmable manuellement avec des commutateurs ou des câbles à enficher.

Note : La première erreur informatique est due à un insecte qui, attiré par la chaleur, était venu se loger dans les tubes à vide et avait créé un court-circuit. Le mot « bug » (insecte en anglais), est donc resté pour nommer une erreur informatique.

Deuxième génération (1955-65) : les transistors et le traitement par lots

[modifier | modifier le wikicode]

En 1948, le transistor est créé par la firme Bell Labs grâce aux ingénieurs John Bardeen, Walter Brattain et William Shockley. Le transistor permet de rendre les ordinateurs moins encombrants et moins gourmands en énergie électrique : c’est la révolution dans l’histoire de l’informatique. Ce n’est qu’en 1960 qu’IBM commercialise l’un des premiers ordinateurs à base de transistors, l’IBM 7000.

C’est aussi à cette époque que les premiers systèmes d’exploitation sont apparus tel FMS (the Fortran Monitor System) et IBSYS (IBM’s operating System), utilisant le traitement par lots pour gérer l’exécution des programmes qui se fait maintenant de façon autonome.

Troisième génération (1965-80) : les circuits intégrés et la multiprogrammation

[modifier | modifier le wikicode]

Le circuit intégré est mis au point en 1958 par Texas Instrument. Il permet de réduire encore la taille des ordinateurs en intégrant plusieurs transistors dans le même composant électronique. Avec cette nouvelle génération d’ordinateurs, une nouvelle génération de systèmes d’exploitation mettant en application le concept de multiprogrammation fait son apparition.

Les premiers travaux sur MULTICS, l'ancêtre d'Unix, sont dus à Ken Thompson pour le compte de Bell Laboratories, AT&T, General Electric et le Massachusetts Institute for Technology.

En 1970, une première version d'Unix voit le jour. Elle fonctionne sur une machine PDP-7 de Digital Equipment. Les principales caractéristiques de ce système sont les suivantes :

  • Gestion de fichiers sous forme d'une hiérarchie de répertoires.
  • Entrées/sorties gérées de la même façon pour les fichiers, les processus (ou programmes) et les périphériques.
  • Gestion multi-tâches de processus indépendants.
  • Systèmes à base de commandes pouvant accepter de multiples interpréteurs de commandes, selon les besoins de l'utilisateur.
  • Présence d'utilitaires et de compilateurs intégrés dans le système.
  • Un système aussi portable que possible pouvant s'adapter à de nombreux types d'ordinateurs. C'est justement pour accroître la portabilité du système que Denis Ritchie inventa le langage de programmation C.

Une grande partie du système Unix fut réécrite en langage C. Le reste du système, en assembleur, dépend du type de machines sur lequel on installe le système. En 1976, la version 6 d'Unix, fut la première version complète. En 1979, ce fut le succès commercial avec la version 7. Cette version a été adoptée par Hewlett Packard et Digital Equipment.

Chaque constructeur eut le droit d'adapter Unix à ses machines. De même, des universités pouvaient travailler à son amélioration. Mais comme le nom d'Unix lui-même était protégé, chacun dut aussi choisir un nom différent. L'Université de Berkeley en Californie proposa ainsi les versions BSD (Berkeley Software Distribution). Face à cette diversité des versions d'Unix, AT&T proposa, dès 1983, le standard System V. Aujourd'hui, l'X/OPEN group a obtenu le droit de diffuser la marque Unix à tous les systèmes qui se soumettent à un contrôle approprié. Aujourd'hui encore, HP propose HP-UX, IBM propose sa version d'Unix appelée AIX et Sun propose Solaris.

Quatrième génération (1980-aujourd’hui) : les micro-ordinateurs

[modifier | modifier le wikicode]

En 1979, Microsoft prend une licence Unix et développe le système d'exploitation XENIX, disponible jusqu'en 1984. Au moment où le PC fit son apparition, Unix était déjà un système mûr. En 1981, lorsque IBM lança le PC, il choisit le système d'exploitation MS-DOS de Microsoft. MS-DOS, inspiré d'Unix, comportait dès le départ des contraintes liées à son architecture : insuffisance de la mémoire adressable, pas de gestion multi-tâches ou multi-utilisateurs, pas de protection de la mémoire.

Des particuliers eux aussi se sont attelés aux développements d'une version d'Unix : Andrew Tanenbaum, professeur à l'Université d'Amsterdam, développa avec ses élèves une version d'Unix pour PC, appelée Minix, qui vit le jour en 1987. Partant de Minix, Linus Torvalds développa Linux, un Unix pour PC dont la première version, appelée version 0.99, sortit en 1991. Aujourd'hui, Linux est devenu un système d'exploitation stable pour PC. Ce système constitue un logiciel libre, dont chaque utilisateur a le droit de modifier le code source.


Unix et Linux

Unix est un système d'exploitation très populaire parce qu'il est présent sur un grand nombre de plates-formes, du micro-ordinateur à l’ordinateur central (mainframe). L'avantage de cela, c'est que les programmes développés sous Unix peuvent être transférés d'une plate-forme à une autre avec un minimum de modifications.

Ce système est multitâche, c'est-à-dire qu'il est capable de gérer et d'exécuter plusieurs programmes simultanément. De plus, il est multi-utilisateurs, c'est-à-dire que plusieurs personnes peuvent s'y connecter en même temps et travailler ; le système partage alors toutes les ressources logicielles et matérielles de l'ordinateur entre les différents usagers.

L'histoire d'Unix est unique dans le monde des systèmes d'exploitation. En effet, alors que la plupart des systèmes d'exploitation ont été conçus par des fabricants d'ordinateurs pour vendre leurs machines, Unix n'a pas été conçu dans un but commercial. Il l'est devenu parce qu'il constitue une norme en matière de système d'exploitation.

Historique

Contrairement à un système d'exploitation commercial complètement contrôlé par son fabricant, le système Unix est aujourd'hui distribué par plusieurs intervenants dont voici les principaux :

  • AT&T, à qui on attribue la paternité de Unix ;
  • l'université de Berkeley, qui a fait évoluer Unix dans plusieurs domaines ;
  • SUN Microsystems, à qui l’on doit les améliorations importantes de l'interface graphique ;
  • Santa Cruz Operation et Microsoft, le XENIX/UNIX fut la première version pour PC de Unix.

À cause de cette situation de développement, le système d'exploitation Unix a mis plusieurs années à être standardisé. Actuellement, il en existe deux principales variantes, incompatibles entre elles :

  • Unix SYSTEM V,
  • Unix BSD.

Il existe aussi une multitude de variations mineures dérivées d'une des deux ou des deux principales variantes ; on a ainsi, en les regroupant :

  • les systèmes Unix-Based ;
  • les systèmes Unix-Like.

Systèmes Unix-Based

[modifier | modifier le wikicode]

Les systèmes étant "descendants" du système Unix original.

  • XENIX/UNIX provenant de SCOMicrosoft ;
  • AIX provenant d'IBM ;
  • Mac OS X provenant d'APPLE ;
  • SunOS/Solaris provenant de SUN MicroSystems ;
  • IRIX provenant de Silicon Graphics ;
  • ULTRIX provenant de DIGITAL ;
  • HP-UX (Hewlett Packard UniX) provenant Hewlett-Packard.
  • FreeBSD ;
  • OpenBSD ;
  • NetBSD ;

Systèmes Unix-Like

[modifier | modifier le wikicode]

Les systèmes Unix-Like reproduisent les mêmes fonctionnalités que la version AT&T, mais le noyau du système est incompatible parce qu'il a été réécrit pour éviter le versement de droit d'auteurs à AT&T. On retrouve dans cette catégorie :

  • Minix ;
  • GNU/Linux ;
  • QNX.

Cette prolifération de produits a fait apparaître un certain nombre de différences entre les systèmes, dont les principales sont :

  • les communications inter-programmes ;
  • la gestion de la mémoire (segmentation ou pagination) ;
  • divers paramètres du système ;
  • divers outils qui peuvent être intégrés dans un produit et absents dans un autre.

Principales distributions de Linux

[modifier | modifier le wikicode]

Celui qui s'intéresse aux différentes versions de Linux doit faire la différence entre le noyau du système d'exploitation proprement dit (le kernel, en anglais) et la combinaison d'utilitaires qui l'accompagnent. Les distributions se différencient par le choix du noyau et le choix des différents utilitaires disponibles.

Au moment de la rédaction de ce texte, la version actuelle du noyau de Linux porte le numéro 4.2.x, mais les versions suivantes sont probablement prêtes. Vérifiez donc la version du noyau que vous vous procurez. Cette version figure dans de nombreuses distributions et constitue un élément commun.

De nombreux utilitaires sont également communs à toutes les distributions. (Exemples : Bourne Again Shell ou l'interface graphique Xfree86).

Voici une liste non exhaustive des distributions disponibles :

Consultez également ces pages dans d’autres projets Wikimedia :

Article encyclopédique sur Wikipédia.
Ressources éducatives sur Wikiversité.


Partitionnement du disque

À la fin de ce chapitre, le lecteur sera en mesure :

  • d’expliquer le rôle des partitions,
  • d’utiliser un outil de partitionnement,
  • de créer un système de fichiers.

L’utilisation d’une unité de stockage (par exemple un disque dur) soit pour l’installation d’un système d’exploitation ou le stockage de données nécessite que celle-ci soit préalablement préparée d’abord par le partitionnement puis par le formatage logique. Dans ce chapitre, le concept de partition est expliqué avant de présenter un outil de partitionnement. Finalement, le formatage logique est présenté.

Qu'est-ce qu'une partition?

[modifier | modifier le wikicode]

Le partitionnement consiste à créer des zones sur le disque dont les données ne seront pas mélangées. Cela sert donc si l'on veut, par exemple, installer des systèmes d'exploitation différents n'utilisant pas le même système de fichiers. Il y aura donc au minimum autant de partitions que de systèmes d'exploitation utilisant des systèmes de fichiers différents. Dans le cas d'un utilisateur d'un système d'exploitation unique, il y aura une seule partition recouvrant tout le disque, sauf si l'utilisateur désire en créer plusieurs pour, par exemple, séparer les données et les programmes.

Il y a trois sortes de partitions: les partitions principales, la partition étendue et les partitions logiques. Un disque peut contenir jusqu'à quatre partitions principales (dont une seule peut être active), ou trois partitions principales et une partition étendue. Dans la partition étendue, l'utilisateur peut créer des partitions logiques (c'est-à-dire faire en sorte que l'on ait l'impression qu'il y a plusieurs disques durs de taille moindre).

Voyons voir un exemple dans lequel le disque contient une partition principale et une partition étendue composée de trois partitions logiques (nous verrons par la suite les partitions principales multiples):

Figure 1: Exemple de partition

Pour les systèmes Windows, seule la partition principale est amorçable, c'est donc la seule sur laquelle on peut démarrer le système d'exploitation. Sous Linux, toutes les partitions peuvent être amorçables.

On appelle partitionnement le processus qui consiste à écrire les secteurs qui constitueront la table de partitions. La table de partitions est une base de données contenant les informations sur les partitions: taille de celle-ci en terme de nombre de secteurs, position par rapport à la partition principale, types de partitions présentes, systèmes d'exploitation installés, ...

Partition principale

[modifier | modifier le wikicode]

Une partition principale doit être formatée logiquement, puis contenir un système de fichiers correspondant au système d'exploitation installé sur celle-ci. Si jamais vous avez plusieurs partitions principales sur votre disque, une seule sera active et visible à la fois; cela dépendra du système d'exploitation sur lequel vous avez démarré l'ordinateur. En choisissant le système d'exploitation que vous lancez au démarrage, vous déterminez la partition qui sera visible. La partition active est la partition sur laquelle un des systèmes d'exploitation est démarré au lancement de l'ordinateur. Sous Windows, les partitions autres que celle sur laquelle vous démarrez seront alors cachées, ce qui empêchera d'accéder à leurs données. Sous Linux, toutes les partitions sont accessibles.

Partition étendue

[modifier | modifier le wikicode]

La partition étendue a été mise au point pour outrepasser la limite des quatre partitions principales, en ayant la possibilité de créer autant de partitions logiques que vous désirez dans celle-ci. Au moins une partition logique est nécessaire dans une partition étendue, car vous ne pouvez pas y stocker de données directement.

Beaucoup de disques durs d’ordinateur sont formatés en une seule grande partition utilisant l'intégralité de l'espace disponible. Ce n'est pourtant pas la solution la plus avantageuse en terme de performances et de capacité. La solution est de créer plusieurs partitions, ce qui va vous permettre:

  • d'installer plusieurs systèmes d'exploitation sur votre disque,
  • d'économiser de l'espace disque,
  • d'augmenter la sécurité de vos fichiers,
  • d'organiser vos données plus facilement.

Secteur de démarrage

[modifier | modifier le wikicode]

Le secteur de démarrage (appelé Master Boot Record ou MBR en anglais) est le premier secteur d'un disque dur (cylindre 0, tête 0 et secteur 1). Il contient la table de partition principale et le code qui, une fois chargé en mémoire, va permettre d'amorcer le système d’exploitation.

Ce programme, une fois en mémoire, va déterminer sur quelle partition le système va s'amorcer, et il va démarrer le programme (appelé « bootstrap ») qui va amorcer le système d'exploitation présent sur cette partition.

D'autre part, c'est ce secteur du disque qui contient toutes les informations relatives au disque dur (fabricant, numéro de série, nombre d'octets par secteur, nombre de secteurs par « cluster », nombre de secteurs,...). Ce secteur est donc le secteur le plus important du disque dur. Il permet aussi au BIOS de reconnaître le disque dur. Ainsi, sans celui-ci, votre disque dur est inutilisable, c'est donc une des cibles préférées des virus.

Outil de partitionnement

[modifier | modifier le wikicode]

Sous Linux, il existe de nombreux outils de partitionnement. L'utilitaire fdisk est disponible sur la majorité des distributions de Linux. Il permet de créer, d’éditer et de détruire des partitions sur un disque. Le partitionnement avec fdisk entraînera la perte de toutes les données présentes sur le disque sur lequel vous effectuez les opérations.

Syntaxe :

fdisk [périphérique]

Sans argument fdisk utilisera le premier disque dur qu'il trouve. Il est possible de préciser à fdisk le disque à partitionner, en lui donnant comme paramètre le nom du périphérique.

Exemple :

Partitionner le second disque dur IDE.

fdisk /dev/hdb

Une fois lancé, le menu suivant apparaît :

# fdisk /dev/hda

Commande (m pour aide): 

Le tableau suivant présente la liste des principales options de la commande fdisk:

Commande Description
d Destruction d'une partition
l Liste des types de partitions
m impression du Menu en cours
n création d'une Nouvelle partition
p affichage des Partitions
q Sortie de fdisk sans sauvegarde des paramètres (Quitter)
t Modification du Type de partition
v Vérification de la table des partitions
w sauvegarde des modifications et sortie de fdisk (Write & exit)

Création des partitions

[modifier | modifier le wikicode]

Voici les étapes pour créer une partition :

  1. Démarrer fdisk
  2. Taper n pour créer une nouvelle partition.
  3. Choisir le type de partition (primaire ou étendu).
  4. Choisir le numéro de la partition
  5. Ensuite fdisk vous demande l'emplacement du premier cylindre. Par défaut, fdisk affichera toujours le premier cylindre libre trouvé.
  6. fdisk vous demande alors l'espace à attribuer à cette partition. Cette taille peut être indiquée en nombre de cylindres, en Octets, en Kilo-octets ou en Mégaoctets.

Afficher les partitions

[modifier | modifier le wikicode]

La commande p du menu principal permet d’afficher les partitions du disque dur sélectionné.

Disk /dev/hda : 128 heads, 63 sectors, 623 cylinders
Units = cylinders of 8064 * 512 bytes
Device     Boot  Start  End     Blocks  Id     System
/dev/hda1  1     254    102400+   83    Linux  native
/dev/hda2  255   309    221760    83    Linux  native
/dev/hda3  310   253    862848    83    Linux  native

Formatage logique

[modifier | modifier le wikicode]

Le formatage logique crée un système de fichiers sur le disque, qui va permettre à un système d'exploitation (DOS, Windows 11, Linux, OS X, Windows 10 ...) d'utiliser l'espace disque pour stocker et utiliser des fichiers. Les systèmes d'exploitation utilisent des systèmes de fichiers différents, ainsi le type de formatage logique dépend du système d'exploitation que vous utilisez.

mkfs, création d’un système de fichiers

[modifier | modifier le wikicode]

Syntaxe :

mkfs [-t type] partition

Description :

L’utilitaire mkfs permet de créer un système de fichiers sur un disque ou une partition. Ce système de fichiers est de type ext2, ext3 ou msdos.

Exemple 1:

Formater une disquette dos.

mkfs –t msdos /dev/fd0

Exemple 2:

Formater une disquette Linux.

mkfs –t ext2 /dev/fd0

Exemple 3 :

Formater la partition /dev/hda3 en ext3.

mkfs –t ext3 /dev/hda3

e2label, étiquetage d’une partition

[modifier | modifier le wikicode]

Syntaxe :

e2label [partition]

Description :

La commande e2label affiche ou modifie le nom du système de fichiers spécifié.

Exemple :

Afficher l’étiquette de la partition /dev/hda2

e2label /dev/hda2
  1. Nommez trois sortes de partitions?
  2. Qu’est-ce qu’une partition?
  3. Combien, au maximum, peut-il y avoir de partitions principales?
  4. Qu’est-ce qu’un secteur de démarrage?
  5. Qu’est-ce que le formatage logique?
  6. Formatez une disquette Linux. Écrivez au complet la commande utilisé.


Installation

Installer une distribution Debian

[modifier | modifier le wikicode]

Cette installation a été effectuée à partir du CD-ROM d'installation via le réseau (Net install) Debian - branche stable.

La première étape a été de vérifier via les paramètres du BIOS que l'ordinateur démarrait par défaut sur la clef USB. Si tel est le cas, on doit voir le logo Debian apparaître à l'écran avec un invite "boot :".

En appuyant sur les touches de fonction (de F1 à F10), on peut consulter des paramètres optionnels à indiquer au noyau. Ces paramètres sont utiles dans certains cas pour la détection de matériel particulier.

Dans le cas d'une installation normale, on appuie juste sur la touche Entrée pour démarrer l'installation.

Le noyau d'installation se charge et détecte le matériel intégré à l'ordinateur.

La première étape du configurateur nous demande de choisir notre langue, notre localisation géographique et la disposition du clavier.

L'étape suivante concerne la détection des paramètres réseaux. Utilisant le protocole DHCP, cette étape s'est déroulée automatiquement. À noter que si cela n'avait pas été le cas, nous aurions du renseigner les paramètres réseaux manuellement : adresse IP, masque de réseau, adresse réseau, passerelle et serveur de noms.

Le processus d'installation détecte automatiquement les périphériques de stockage.

Vient ensuite le partitionnement du disque dur. Nous avons choisi le partitionnement manuel afin de configurer précisément les partitions désirées et leur taille.

Notre disque dur fait 80 Go. Nous avons créé 6 partitions :

  • /boot (100Mo) : contient le(s) noyau(x) Linux
  • / (20 Go) : la racine du système de fichiers
  • /var (20 Go) : les données variables (dont notamment les logs)
  • SWAP (2 Go) : la mémoire virtuelle
  • /tmp (2 Go) : les fichiers temporaires
  • /home (le reste, soit environ 36 Go) : les répertoires utilisateurs

Il est conseillé de créer plusieurs partitions pour des raisons de sécurité. Effectivement, les systèmes d'exploitation ne fonctionnent pas correctement si la partition système est pleine (la racine / sous Unix, ou C: dans le monde Microsoft). Étant donné que l'on fonctionne sur un système multi-utilisateurs, il est donc préférable de créer des partitions dédiées pour /home, /tmp et /var. Effectivement, les utilisateurs peuvent écrire des fichiers dans ces répertoires, et de ce fait les remplir. Si on a prévu une partition dédiée pour ces répertoires, le système va continuer à fonctionner même si ces partitions sont pleines.

L'installateur Debian a ensuite formaté les partitions et installé les paquets essentiels.

Le système nous a ensuite demandé de renseigner les paramètres du compte utilisateur (nom complet, login et mot de passe) et le mot de passe du compte root.

Le système nous a demandé ensuite de choisir un miroir Debian afin d'aller télécharger des paquets supplémentaires. Nous avons choisi un miroir en France.

Nous avons eu ensuite la possibilité de configurer un serveur mandataire (un proxy). Nous ne l'avons pas renseigné car notre réseau dispose d'un proxy transparent.

L'installateur Debian a ensuite téléchargé un très grand nombre de paquets supplémentaires.

Une fois le téléchargement terminé (prévoir un certain temps selon le type de connexion à Internet), le système a installé les paquets et nous a demandé de spécifier la résolution d'affichage de l'environnement graphique. Nous avons laissé les paramètres par défaut : 1024x768, 800x600 et 640x480. Il faudra bien entendu choisir la résolution en fonction de l'écran.

Le système nous demande ensuite si on désire installer le programme de boot GRUB. Ce programme est effectivement indispensable au bon démarrage du PC. Si GRUB détecte une partition Windows, il va automatiquement la rajouter au multi-boot.

À la suite de ces étapes, l'installation est terminée. Le système nous propose ensuite de redémarrer. Si tout s'est bien passé, l'ordinateur va redémarrer sur le nouveau système fraîchement installé.

Procédure de récupération du boot

[modifier | modifier le wikicode]

Dans certaines circonstances le boot de Linux peut avoir été supprimé par Windows, il devient alors impossible de démarrer Linux, il est néanmoins possible de le restituer en utilisant la procédure suivante:

En premier lieu il faut démarrer à partir du support d'installation de Linux (CD-ROM ou clef USB, assurez-vous que le CD-ROM soit bien en premier dans l'ordre de démarrage des périphériques dans le Bios)

À l'étape ou vous devez donner un nom à la machine, passez en mode console (ALT + F2 )

Faites un fdisk -l /dev/sda puis fdisk -l /dev/sdb pour examiner le contenu de vos partitions et vous assurer de l'emplacement de vos deux systèmes.

Si vous changez le disque dur de place Il faut monter la partition racine contenant le fichier /etc/fstab de façon à pouvoir le modifier ;

 # mkdir /target
 # mount /dev/sdb2 /target
 # nano /target/etc/fstab
 > remplacer sda par sdb

Restitution du boot GRUB

 # mount /dev/sbd1 /target/boot

Faire ensuite :

- Alt+F1 : retour au menu Debian - revenir en arrière (2 fois) - dans le menu choisir installation Grub - revenir en arrière (2 fois) - et continuer: OUI (2 fois)

Redémarrer et normalement c'est OK, le boot GRUB est de nouveau opérationnel !

Installer une distribution Red Hat

[modifier | modifier le wikicode]

Les sources sont sur https://access.redhat.com/downloads/.

CD d'installation
CD d'installation
À faire...link={{{link}}}

procédure d'installation d'une distribution Red Hat

Installer une distribution Manjaro

[modifier | modifier le wikicode]

Les sources sont sur https://manjaro.org/products.

À faire...link={{{link}}}

procédure d'installation d'une distribution Manjaro


Installer Debian via le réseau

Installation de Debian par le réseau

[modifier | modifier le wikicode]

packets nécessaire

  1. dhcp
  2. tftp
  3. pxe


#apt-get install dhcp-server atftpd pxe syslinux

Copiez ensuite le fichier /usr/lib/syslinux/pxelinux.0 dans /tftpboot


Configuration du dhcp

/etc/dhcp3/dhcpd.conf


ddns-update-style none;

option domain-name "diskless.net";

'#'option domain-name-servers gw.diskless.net;

default-lease-time 600; max-lease-time 7200;

log-facility local7;

subnet 192.168.30.0 netmask 255.255.255.0 { range 192.168.30.100 192.168.30.110; '#'option routers rtr-239-0-2.example.org; } next-server 192.168.30.224; option root-path "192.168.30.224:/tftpboot/pxelinux.0";

filename "/tftpboot/pxelinux.0";

#redémarer le service /etc/init.d/dchp3-serveur restart  

tftp

/etc/inetd.conf

tftp dgram udp nowait root /usr/sbin/tcpd /usr/sbin/in.tftpd /tftpboot

configuration pxe

/etc/pxe.conf 


.# which interface to use

interface=eth0

default_address=192.168.30.210

.# the multicast ip address to listen on

multicast_address=224.0.1.2

.# mtftp info

mtftp_address=192.168.30.210

mtftp_client_port=1758 mtftp_server_port=1759

.# the port to listen on

listen_port=4011

.# enable multicast?

use_multicast=1

.# enable broadcast? use_broadcast=1

.# user prompt

prompt=Press F8 to view menu ... prompt_timeout=10

.# what services to provide, priority in ordering .# CSA = Client System Architecture .# service=<CSA>,<min layer>,<max layer>,<basename>,<menu entry>

service=X86PC,0,0,local,Local boot service=X86PC,0,0,pxelinux,PXELinux

.# tftpd base dir

tftpdbase=/tftpboot

.# domain name .# domain=bla.com

redemarer le service

#/etc/init.d/pxe restart

Mettre la machine que vous voulez installer en boot pxe et vous devriez avoir l'interface d'installation de debian


Le login

Les systèmes compatibles Unix sont par définition multi-tâches et multi-utilisateurs, c'est à dire que plusieurs personnes peuvent travailler simultanément sur le même système.

Chaque utilisateur est identifié par un nom d'utilisateur (login) et un mot de passe (password).

Le login est associé à un numéro unique (le UID : User IDentifiant) et permet d'identifier chaque utilisateur. Il ne contient ni espace, ni caractères spéciaux.

Le mot de passe doit être choisi judicieusement : il doit mélanger des caractères en minuscule et majuscule, des chiffres et des caractères spéciaux.

Chaque utilisateur dispose d'un répertoire de travail (le Home Directory) dans lequel il a le droit de créer ses propres fichiers et répertoires. Ce répertoire de travail se situe généralement dans le répertoire home et porte le nom du login. Exemple : le répertoire de travail de l'utilisateur alex est /home/alex.

Il existe un utilisateur particulier : le root. Le root est l'administrateur du système, il dispose de tous les droits et s'occupe de la gestion du système : ajout et suppression des utilisateurs, installation et configuration du système et des logiciels ...

Le root a tous les pouvoirs sur le système, il peut tout faire, y compris tout casser. De ce fait, il faut donc choisir un mot de passe très sécurisé, et toujours bien vérifier à deux fois avant d'exécuter une opération avec l'utilisateur root.

Le root n'est pas une personne à proprement parler, il s'agit d'une fonction. Ainsi, il ne faut jamais travailler en permanence avec le compte root, mais utiliser son compte habituel, et ne passer root (via les commandes su ou sudo) que si l'on a besoin de réaliser une opération d'administration.

Contrairement aux autres utilisateurs, le répertoire de travail du root se situe à la racine du système (/root). L'explication est simple : en cas de problème avec la partition /home, l'utilisateur root pourra quand même accéder à son répertoire de travail.

Pour voir les sessions ouvertes sur la machine :

w

Pour en tuer une :

sudo pkill -9 -u nom_du_login

À chaque connexion, l'en-tête situé dans /etc/motd s'affiche automatiquement. Ce nom correspond aux initiales de Message of the Day. Par exemple sur Ubuntu, il contient des informations sur la version, mais on peut aussi l'éditer pour y placer des instructions.


Variables d'environnement

La liste des variables d'environnement est accessible par la commande printenv. Elles sont toutes nommées en capitales.

Pour en afficher une seule : echo $variable.

Pour en modifier une : export variable="valeur".

Pour la supprimer : unset variable.

Chemin du répertoire personnel de l'utilisateur courant. Il s'agit d'un répertoire associé à l'utilisateur lors de la création du compte, qui lui est réservé pour mettre ses documents personnels, ses scripts de personnalisation et ses fichiers de configuration. Cependant, l'exception est celui de l'utilisateur root où il correspond en général à la racine du système de fichiers (/).

Souvent, il s'agit du répertoire courant initial à l'ouverture d'une fenêtre de terminal (shell).

Langue du système.

Liste de chemins contenant les binaires accessibles globalement séparés par des caractères deux-points ":". Cette liste est utilisée quand le chemin complet d'un programme exécutable n'est pas spécifié.

Chemin absolu du répertoire courant permettant de résoudre les chemins relatifs (incluant les nom de fichiers sans chemin). La commande cd ou chdir (change directory) depuis un terminal permet de changer de répertoire courant.

Version du shell. Ex :

$SHELL --version

Time zone : fuseau horaire.


Commandes de base

Éléments de syntaxe

[modifier | modifier le wikicode]

Les commandes présentées dans les sections qui suivent sont introduites juste après un message d'invite qui dépend de la configuration du shell utilisé. Celui-ci est représenté par un signe dollar $. Il ne doit donc pas être tapé.

Le caractère dièse # marque le début d'un commentaire qui se termine en fin de ligne. Il n'est pas nécessaire de le recopier pour exécuter la commande.

Exemple :

$ pwd   # affiche le répertoire courant

Pour tester cette commande, il suffit d'entrer p w d .

Les lignes qui ne sont pas marquées du signe dollar indiquent ce que la commande précédente doit/peut afficher.

Par ailleurs, il existe deux opérateurs de concaténation des commandes :

  • ";" : qui enchaine les commandes quelques soient leurs résultats. Exemple : pwd ; pwd.
  • "&" : qui stoppe l'enchainement si une commande renvoie une erreur. Exemple : pwd & pwd. De plus, si aucune commande ne figure après le "&", le terminal redonne le focus avant la fin de la première commande, de sorte que l'on peut en taper d'autres si elle est longue (en asynchrone).
    • "&&" : idem sans les informations sur les processus.

pwd (print working directory)

[modifier | modifier le wikicode]

Affiche le répertoire courant.

 $ pwd
 /home/alex

Affiche les informations relatives à l'utilisateur connecté.

 $ id
 uid=1000(alex) gid=1000(alex) groupes=20(dialout), 24(cdrom), 25(floppy), 29(audio), 44(video), 46(plugdev), 106(netdev), 109(powerdev), 1000(alex)
 

Permet de changer son mot de passe

  $ passwd
  Changing password for alex
  (current) UNIX password:
  Enter new UNIX password:
  Retype new UNIX password:
  passwd : le mot de passe a été mis à jour avec succès

Logo

Ne pas utiliser le symbole euros () dans les mots de passe, car il est potentiellement mal géré par Linux et pourrait se voir systématiquement refusé.

cd (change directory)

[modifier | modifier le wikicode]

Pour se placer dans un répertoire

 $ cd .                    # . désigne le répertoire courant
 $ cd ..                   # .. désigne le répertoire parent
 $ cd /                    # / désigne le répertoire racine
 $ cd /tmp                 # désigne le répertoire tmp appartenant à la racine
 $ cd tmp                  # désigne le répertoire tmp du répertoire courant
 $ cd ../tmp               # désigne le répertoire tmp du répertoire parent du répertoire courant
 $ cd ~                    # permet de revenir dans son répertoire de travail (home directory)
 $ cd                      # idem

Connecté en root, la commande cd m'amène au répertoire /root qui est le répertoire de travail de l'utilisateur root.

Connecté avec l'utilisateur alex, cd m'amène au répertoire de travail de l'utilisateur alex, à savoir /home/alex.

ls (list sorting)

[modifier | modifier le wikicode]

Liste les fichiers d'un répertoire

 $ ls                      # liste les fichiers non cachés du répertoire courant  
 $ ls -l                   # (l : long) : liste détaillée des fichiers du répertoire courant 
 $ ls -a                   # (a : all) : liste tous les fichiers, y compris les fichiers cachés

On peut combiner plusieurs options, l'ordre n'est pas important. Les quatre commandes suivantes sont identiques :

 $ ls -a -l
 $ ls -l -a
 $ ls -la
 $ ls -al

Lister de façon détaillée (-l) tous les fichiers, même cachés (-a), les plus récents (-t) en derniers (-r), avec leur taille en kilo-octets (-k) lisible facilement avec les unités K pour Kilo, M pour Mega, G pour Giga(-h).

$ ls -lartkh

Pour ne lister que les sous-dossiers :

ls -d */

Pour compter les éléments de la liste :

ls |wc -l

cat (concatenate)

[modifier | modifier le wikicode]

Affiche le contenu d'un fichier ou de plusieurs fichiers concaténés sur la sortie standard (l'écran)

 $ cat /etc/crontab                      # affiche le contenu du fichier /etc/crontab
 $ cat /etc/cron.daily /etc/cron.weekly  # concatène les deux fichiers et affiche leur contenu

Pour que les modifications de fichiers s'ajoutent en temps réel sur la sortie standard, utiliser :

tail -f /etc/crontab

mkdir (make directory)

[modifier | modifier le wikicode]

Permet de créer un répertoire

 $ mkdir rep1              # crée un répertoire rep1 dans le répertoire courant
 $ mkdir /rep1             # tente de créer un répertoire rep1 à la racine,
                           # le système refuse car je ne suis pas connecté en root

Exercice : je suis dans le répertoire /var/log, je souhaite créer un répertoire rep2 dans le répertoire /home/alex, comment faire ?

J'ai trois possibilités :

 $ mkdir ../../home/alex/rep2    # on utilise un adressage relatif à la position où je suis : 
                                 # on remonte dans l'arborescence jusqu'à la racine puis 
                                 # on redescend jusqu'au répertoire alex)
 $ mkdir /home/alex/rep2         # on utilise un adressage absolu en partant de la racine
 $ mkdir ~/rep2                  # on utilise ~ pour désigner le répertoire de travail

l'option -p permet de créer le(s) répertoire(s) parent(s).

 $ mkdir  -p rep1/rep2           # crée un répertoire parent rep1 si il n'existe pas,
                                 # et crée dans rep1 un répertoire rep2

rmdir (remove directory)

[modifier | modifier le wikicode]

Supprimer un répertoire vide

 $ rmdir rep1

Copier un fichier

 $ cp /etc/passwd /tmp                # copie le fichier /etc/passwd dans le répertoire /tmp
 $ cp /etc/passwd /tmp/nouveaunom     # copie le fichier /etc/passwd dans le répertoire /tmp 
                                      # et le renomme en nouveaunom

Attention, si le fichier destination existe déjà, il sera remplacé sans demande de confirmation !

Options courantes :

 -i : si le fichier destination existe, demande confirmation avant de remplacer le fichier

Copier un dossier (avec son contenu)

[modifier | modifier le wikicode]
cp -Rf mondossier /tmp

Effacer un fichier

 $ rm lefichier                      # efface le fichier lefichier

Attention, le fichier est effacé et sans demander confirmation !

Options courantes :

 -i : demande confirmation avant d'effacer le fichier
 -f : ne demande pas de confirmation (annule -i)
 -r : supprime les répertoires récursivement
  • Pour supprimer le répertoire "tmp" et son contenu :
rm -rf tmp
  • Pour supprimer les fichiers de log de plus de deux jours :
find /var/log* -mtime +2 -exec rm {} \;

Déplacer ou renommer des fichiers

  $ mv [Option] Source Destination(répertoire)
  $ mv [Option] Répertoire Source

  $ mv fichier_source fichier_cible   # déplacer fichier_source dans fichier_cible
  
  $ mv fichier1 fichier2    # renomme le fichier fichier1 en fichier2
                            # Attention si fichier2 existe, son contenu sera écrasé et 
                            # remplacé par celui de fichier1

Par précaution, on utilise l'option -i qui permet d'être averti par le système avant l'écrasement du fichier destination si celui-ci existe.

  $ mv -i fichier1 fichier2 # demande la confirmation avant d'effacer la destination

  $ mv rep1/fic1 rep2/fic2  # déplace le fichier fic1 situé dans le répertoire ''rep1''
                            # sous le nouveau nom fic2 situé dans le répertoire rep2

  $ mv rep1 rep2            # déplace le répertoire rep1 dans le répertoire rep2
                            # si rep2 n'existe pas, renomme rep1 en rep2

Logo

Si le dossier n'est pas vide, utiliser "-f" pour forcer l'écrasement.

Logo

Pour inclure les fichiers cachés dans les déplacements *, exécuter avant shopt -s dotglob.

La commande ln permet de créer des liens, c'est à dire des raccourcis vers des fichiers ou des répertoires.

 ln -s destination nom_du_lien

Exemple

 $ ln -s prog1.0 monprogramme

Cette commande crée le lien suivant :

 lrwxrwxrwx 1 alex alex   7 2007-10-26 14:25 monprogramme -> prog1.0

find : recherche par nom de fichier

[modifier | modifier le wikicode]

Par exemple pour trouver tous les fichiers .log dans le dossier courant récursivement :

find . -name "*.log"

grep : recherche par contenu de fichier

[modifier | modifier le wikicode]

Par exemple pour trouver tous les fichiers qui contiennent "mon texte" dans le dossier courant récursivement :

grep -r "mon texte" .

En regex en ignorant la casse :

grep -rPi "[a-z_]+" .

clear et reset

[modifier | modifier le wikicode]
  • clear masque les données affichées en console, et on peut les retrouver en remontant l'ascenseur.
  • reset efface complètement les données affichées en console.


L'aide en ligne man

Chaque commande dispose d'une page de manuel en ligne (appelée manpages).

Cette aide en ligne est très utile pour savoir comment utiliser les commandes et connaître la liste exhaustive de toutes les options disponibles.

Ligne de commande

[modifier | modifier le wikicode]

Pour accéder à cette aide en ligne, il suffit de taper man <le_sujet>. Le sujet peut être le nom d'une commande (section 1) :

 $ man ls

Il peut être un nom de fonction C (section 2 ou section 3) :

 $ man 3 printf

L'exemple précédent donne explicitement le numéro de section où chercher le sujet pour éviter la confusion avec la commande shell printf (section 1).

Les pages de manuel sont réparties en section. Pour connaître l'ensemble des sections, il suffit de consulter la page de manuel de la commande man :

 $ man man
 ...
 1  Programmes exécutables ou commandes de l’interpréteur de  commandes (shell)
 2  Appels système (Fonctions fournies par le noyau)
 3  Appels  de  bibliothèque  (fonctions  fournies  par  les  bibliothèques des programmes)
 4  Fichiers spéciaux (situés généralement dans /dev)
 5  Formats des fichiers et conventions. Par exemple /etc/passwd
 6  Jeux
 7  Divers (y compris les macro-paquets et les conventions). Par exemple, man(7), groff(7)
 8  Commandes  de  gestion  du  système (généralement réservées au  super utilisateur) 
 9  Sous-programmes du noyau [hors standard]

Certaines commandes sont à la fois des commandes systèmes, des appels systèmes ou des fichiers de configuration (exemple : passwd). Il est possible d'indiquer la section que l'on désire consulter :

 $ man passwd             # la page de man de la commande passwd
 $ man 5 passwd           # la page de man du fichier de configuration /etc/passwd

Les pages de man sont découpées en différents chapitres (extrait de man 7 man) :

Les chapitres des pages de man
Chapitre Descriptif
SYNOPSIS Indique brièvement l'interface de la commande ou de la fonction. Pour les commandes, ce paragraphe montre sa syntaxe et ses arguments. Les caractères gras marquent le texte invariable et l'italique indique les arguments remplaçables. Les crochets encadrent les arguments optionnels, les barres verticales (caractère pipe) séparent les alternatives, et les ellipses ... signalent les répétitions. Pour les fonctions, on trouve toutes les déclarations et directives #include, suivies de la déclaration de fonction.
DESCRIPTION Fournit une explication sur ce que la commande, la fonction ou le format représente. Décrit les interactions avec les fichiers et l'entrée standard, ou ce qui est produit sur la sortie standard ou d'erreur. Ne contient pas les détails d'implémentation internes, sauf s'ils sont critique pour comprendre l'interface. Décrit le cas principal, pour les détails sur les options, on utilise le paragraphe OPTIONS. S'il y a une sorte de grammaire d'entrée, ou un jeu de sous-commandes, on peut les placer dans une section UTILISATION supplémentaire (et placer un bref aperçu dans la section DESCRIPTION).
RETURN VALUE (VALEUR RENVOYÉE) Donne une liste des valeurs qu'une routine de bibliothèque renverra à l'appelant et les conditions qui provoquent ces retours.
EXIT STATUS (CODE DE RETOUR) Indique les codes de retour d'un programme et les conditions associées.
OPTIONS Décrit les options acceptées par le programme et leur influence sur son son comportement.
USAGE (UTILISATION) Décrit la grammaire de tout sous-langage implémenté.
EXAMPLES (EXEMPLES) Donne un ou plusieurs exemples d'utilisation de la fonction, du fichier ou de la commande.
FILES (FICHIERS) Liste les fichiers utilisés par le programme ou la fonction, tels que fichiers de configuration, de démarrage, et les fichiers manipulés directement par le programme. Il faut donner le chemin d'accès complet des fichiers et utiliser le mécanisme d'installation pour modifier le préfixe. Pour la plupart des programmes, l'installation par défaut se fait dans /usr/local, aussi, votre page de manuel de base devrait utiliser /usr/local comme base.
ENVIRONMENT (ENVIRONNEMENT) Décrit toutes les variables d'environnement qui affectent le programme ou la fonction, ainsi que leurs effets.
DIAGNOSTICS (DIAGNOSTIQUE) Fournit un survol des messages d'erreurs usuels et comment les considérer. Il n'est pas nécessaire d'indiquer les messages d'erreur système ou les signaux fatals qui peuvent apparaître durant l'exécution du programme, sauf s'ils sont traités spécialement.
SECURITY (SÉCURITÉ) Décrit les problèmes de sécurité et leurs implications. Doit contenir les avertissements à propos des configurations ou des environnements à éviter, les commandes ayant des répercussions au niveau sécurité, etc. surtout s'ils ne sont pas évidents. Il n'est pas obligatoire de faire un paragraphe spécifique sur la sécurité. Si l'intelligibilité est améliorée, on peut placer ces informations dans les autres sections (telles que DESCRIPTION ou USAGE (UTILISATION)). Néanmoins, il est important de placer les informations de sécurité quelque part.
CONFORMING TO (CONFORMITÉ) Décrit les standards ou les conventions suivis par l'implémentation.
NOTES Contient des notes diverses.
BUGS (BOGUES) Liste les limitations ou les défauts recensés, ainsi que les sujets à débat.
AUTHOR (AUTEUR) Liste les auteurs de la documentation ou du programme afin de pouvoir leur envoyer les rapports de bogue.
SEE ALSO (VOIR AUSSI) Fournit une liste des pages de manuel ayant un rapport, dans l'ordre alphabétique, suivies des autres documents éventuels. Il s'agit d'habitude de la dernière section.

Recherche par mot-clé

[modifier | modifier le wikicode]

Si le sujet exact n'est pas déterminé, l'option -k permet une recherche par mot-clé :

man -k <mot_cle>

Commandes interactives

[modifier | modifier le wikicode]

Une fois la commande man entrée, si le sujet est trouvé, la console présente la documentation page par page avec une interface similaire à la commande less ou more : l'appui d'une touche déclenche une commande immédiate.

Les terminaux récents permettent l'utilisation des touches de navigation : flèches, page suivante, page précédente...

  • Défilement par lignes :
Ligne suivante : ou
Ligne précédente :
  • Défilement par pages :
Page suivante :   ou
Page précédente : B (back) ou
  • Début / fin du document :
Début du document G
Fin du document g

Recherche dans le texte

[modifier | modifier le wikicode]

/ puis entrez le terme rechercher

L'écran défile directement sur la première occurrence trouvée ou bien affiche un message d'erreur. La commande met en valeur toutes les occurrences du terme.

Pour passer à l'occurrence suivante, il s'agit de la même commande mais sans entrer de terme à chercher : /

La touche n permet de se placer sur l'occurrence suivante, la touche N sur la précédente.

Pour quitter, appuyez la touche Q (quit). Le contenu de l'écran du terminal est restauré.


L'éditeur de texte vi

L'éditeur de textes vi

vi' (connu sous ses abréviations anglaises, prononcer vie-ail) est un éditeur de texte présent d'office sur la majorité des systèmes Unix actuels depuis 1976, souvent sous la forme d'un clone du logiciel vi originel.

vi est un éditeur modal, c'est-à-dire que la signification des boutons et des touches change selon le mode dans lequel il se trouve. L'un de ses intérêts a longtemps été de ne pas nécessiter de souris et de fonctionner avec un nombre réduit de touches. En effet, la présence de deux modes permet d'avoir un mode où les touches lettres servent à la saisie des caractères, en mode commande aux déplacements et autres commandes. De ce fait l'ensemble des nouvelles touches (flèches, clavier numérique et touches de fonction notamment) est totalement superflus. L'interface est donc la même pour tout ordinateur qu'il soit équipé d'un clavier de minitel ou d'un clavier avec d'innombrables touches.

Vi fut écrit par Bill Joy en 1976, « et ben ça ne nous rajeunit pas les enfants.»

 « Tu connais Notepad ? Ben Vi c'est bien mieux, c'est même super ! »
 « Avec vi, tu vas frimer devant tes potes, et te la jouer hackeur. »

Derrière un aspect rustique qui nécessites une familiarisation, se cache des fonctionnalités d'édition qui ne sont pas présentes dans d'autres éditeurs de texte. Le minimum à savoir pour utiliser vi est de connaître les deux touches permettant de basculer entre ces deux modes principaux.

 Alors tape dans un Shell avec tes doigts musclés vi et Entrée.
 Là t'as une page blanche, comme pour un nouveau roman d'amitié qui commence entre toi et Linux.
 Tu peux faire plusieurs commandes :
 - Tape i : là par miracle tu peux taper des bêtises dans ta page.
 - Tape < ESC >  : là tu ne peux plus rien écrire, mais ... tu peux exécuter des commandes.
 Et vice versa

Il y a donc 2 modes : insertion et commande.

 En mode insertion ----> "tu peux écrire tout ce que tu veux."
 En mode commande ----> "tu peux enregistrer, effacer, quitter, etc."
  • Pour passer du mode insertion au mode commande : touche < ESC >
  • Pour passer du mode commande au mode insertion : touche i. (insert)
  • En mode commande, on peut passer en un 3ème mode "mode Execution" en tapant ":'"(la ligne de commande est en bas de l'écran)


Les commandes de base de vi
Commande Fonction de la commande
x effacer une lettre (xterminator)
dd effacer la ligne courante (delete)
yy copier la ligne courante (yank)
p coller la ligne copiée précédement lors de la commande yy ou de la commande dd
:x aller à la ligne x (go to line) - Ex. :152 met le curseur à la ligne 152
r remplace un caractère (replace)
u annule la dernière commande (undo)
:w sauvegarder le fichier (write)
:q! quitter vi sans sauvegarder (quit)
:wq sauvegarder et quitter (write quit)
:help pour afficher l'aide dans vi
:q pour quitter la fenêtre d'aide si elle est ouverte ou l'éditeur
:w nom_fichier enregistre ce qui est saisi dans le fichier nom_fichier
/toto chercher la chaîne toto en avant
?toto chercher la chaîne toto en arrière
n permet de chercher l'occurrence suivante de la chaîne
:s/alex/toto remplace l'occurrence suivante de la chaîne alex par toto
:%s/alex/toto/gic remplace la chaîne alex par toto dans tout le fichier

"%" pour tout le fichier, "s" search, "g" global, "i" ignore la casse, "c" confirmation

Il est difficile de savoir si on est en mode insertion ou en mode commande, le plus simple est d'appuyer plusieurs fois sur <ESC> pour être sûr d'être en mode commande.

vi est rustique, on le trouve sur tous les systèmes UNIX, même les plus vieux. Il est préférable d'utiliser vim (VI iMproved) quand c'est possible, c'est un éditeur vi amélioré

Après l'installation de vim, lancez le programme en tapant indifféremment vi ou vim

Vim est plus convivial, il prend en compte les flèches et d'autres fonctions du clavier récent.

Il existe bien entendu d'autres éditeurs de texte dans Linux, du plus perfectionné au plus basique, mais vi est celui qu'on trouve partout (même sur notre vieux minitel). Il est donc impératif d'en connaître les commandes de base.

Quelques autres éditeurs :

 1. Ed
 2. Nano
 3. Emacs (editor macro)
 4. Joe
 5. Pico
 6. XEmacs (anciennement Lucid Emacs) est un éditeur de texte pour X-Window, basé sur GNU Emacs.


Les shells

Shell veut dire Coquille, qui entoure le noyau. C'est un interpréteur de commandes qu'on utilise pour lancer des commandes ou programmer une suite de commandes. L'utilisateur discute avec le Shell, qui discute avec le noyau, qui à son tour discute avec le matériel. Originellement le shell est utilisé sous Unix, il s'est répandu depuis avec différentes versions, la forme la plus simple est sh.

Les versions connues :

  • sh : shell Bourne
  • ksh : korn shell
  • Csh : Shell syntaxe du C
  • Tcsh : Csh amélioré
  • Bash : Bourne Again Shell
  • Zsh : le petit dernier

Le shell est constitué de petits shells spécifiques à chaque travail, chacun ayant un fichier de configuration stocké dans le répertoire /home de chaque utilisateur, lequel peut les modifier à sa convenance :

  • .profile : exécuté automatiquement lors d'un shell de connexion (à chaque login), quel que soit le shell

Fichiers de configuration spécifiques au shell Bash :

  • .bash_profile : exécuté automatiquement lors d'un shell de connexion (à chaque login)
  • .bashrc : chargé automatiquement lors d'un shell interactif
  • .bash_logout : chargé lors de la fermeture du shell (à la déconnexion)
À faire...link={{{link}}}

extraits des fichiers

À faire...link={{{link}}}

les fichiers communs : /etc/profile et /etc/bash.bashrc

Autres fichiers liés au Bash

  • .bash_history : c'est un fichier texte contenant l'historique des commandes tapées.


La complétion

« L'art de la saisie des commandes ultra rapide ».

À chaque fois que vous tapez une commande, Linux vous aide à compléter votre commande en appuyant sur la touche TAB .

Tapez le début de votre commande et en appuyant sur la touche TAB , Linux vous la complète ou vous propose les différentes possibilités pour la compléter, à défaut vous aurez droit à un petit bip, s'il existe un trop grand nombre de propositions, Linux vous affiche ce nombre.

exemple :

  • $ cd /h en tapant TAB Linux complète la commande en cd /home
  • $ cd / en tapant TAB Linux me donne la liste de tous les répertoires de la racine afin que j'en choisisse un en tapant ses premiers caractères et que je complète encore par TAB si besoin est.


Les jokers

Dans une commande sur les fichiers, on peut remplacer une partie d'un nom (un ou plusieurs caractères) de fichier par * ou un seul caractère par ?

Exemple

$ ls *.c                          # liste tous les fichiers du répertoire courant dont 
                                  # l'extension est .c
$ ls fic*.c                       # liste tous les fichiers du répertoire commençant par fic 
                                  # et dont l'extension est .c 
                                  # ex : fichier1.c fichier2.c fichierprojet.c ...
$ ls fichier?.c                   # liste tous les fichiers dont le nom est "fichier"
                                  # + un caractère quelconque
                                  # et dont l'extension est .c 
                                  # fichier1.c fichier2.c fichier3.c fichier4.c ...
$ ls fichier.[ch]                 # liste tous les fichiers commençant par fichier
                                  # et dont l'extension est "." et est suivie de c ou h
                                  # liste : fichier.c fichier.h

La commande zenity : man zenity


Les répertoires importants

Une des premières difficultés pour les débutants Unix est de se repérer dans l'arborescence. Contrairement à un environnement Windows qui regroupe toutes les ressources nécessaires à un programme dans un même répertoire, les ressources dans un système unix (et dans une moindre mesure MacOS) sont réparties dans une hiérarchie générale. Ainsi si le code exécutable d'un programme se trouve dans le répertoire /bin, ses libraries se trouveront dans le répertoire /lib et ses fichiers de configuration dans le répertoire /etc.

La hiérarchie des systèmes unix est normalisée, la spécification étant accessible sur http://www.pathname.com/fhs/

Voici une liste des répertoires à connaître.

Les programmes exécutables

[modifier | modifier le wikicode]
  • /bin : les commandes indispensables
  • /usr/bin : les autres commandes
  • /usr/local/bin : les commandes installées à la main

Les programmes exécutables du super-utilisateur root

[modifier | modifier le wikicode]
  • /sbin : les programmes indispensables d'administration
  • /usr/sbin : les autres programmes d'administration
  • /usr/local/sbin : les programmes d'administration installées à la main

Les fichiers de configuration

[modifier | modifier le wikicode]
  • /etc

En particulier, /etc contient les fichiers:

/etc/passwd               liste des comptes utilisateurs et leurs répertoires associés.
/etc/shadow               liste des comptes utilisateurs et leurs mots de passe chiffrés.
/etc/X11/xorg.conf        fichier de configuration du serveur graphique.

Le(s) noyau(x) Linux

[modifier | modifier le wikicode]
  • /boot

Les répertoires de travail des utilisateurs

[modifier | modifier le wikicode]
  • /home

Chaque utilisateur du système aura un répertoire dans /home portant son nom.

Par exemple le bureau de l'utilisateur "wiki" se trouve dans :

/home/wiki/Bureau

NB : si le bureau montre des icônes qui ne figure pas dans "/home/wiki/Bureau", on peut les retirer par exemple sur Gnome avec :

gsettings set org.gnome.shell.extensions.ding show-home false
gsettings set org.gnome.shell.extensions.ding show-trash false

Le répertoire de travail du super-utilisateur root

[modifier | modifier le wikicode]
  • /root

Les librairies partagées

[modifier | modifier le wikicode]
  • /lib : les librairies indispensables
  • /usr/lib : les autres librairies
  • /usr/local/lib : les librairies des programmes installés à la main

Les points de montage

[modifier | modifier le wikicode]
  • /mnt : Répertoire dans lequel on pourra créer des points de montage pour des systèmes de fichiers temporaires, destiné à un usage d'appoint. Les composants vitaux du système ne doivent pas dépendre de ce répertoire.
  • /media : Répertoire dans lequel des points de montage seront créés automatiquement pour accéder aux supports de stockage amovibles (cdrom, clé usb...)

Les périphériques

[modifier | modifier le wikicode]
  • /dev

En particulier, on trouve les fichiers :

/dev/hda  ou hdb ou sda etc. qui correspondent aux disques dur. Les disques durs IDE sont notés hd et les SATA ou SCSI sont notés sd
/dev/hda1 ou hda2 etc. qui correspondent aux partitions des disques. hda1 est la 1ere partition du premier disque IDE (hda).
/dev/eth0 qui correspond à la première carte réseau. Pour plus d'une carte réseau, on verra apparaître d'autres fichiers /dev/eth.
/dev/audio qui correspond au périphérique son.

Les autres programmes et leurs fichiers annexes

[modifier | modifier le wikicode]
  • /usr

Ce répertoire est en lecture-seule et est destiné à être partagé. Les programmes installés par le système d'exploitation se trouvent dans /usr/bin. Les programmes installés manuellement par les utilisateurs se trouvent dans /usr/local.

« usr » veut dire Unix System Ressources et non pas user. Les fichiers relatifs aux utilisateurs du système se trouvent dans le répertoire « /home ».

Le système de fichier virtuel

[modifier | modifier le wikicode]

Donne les infos de la machine

  • /proc
sur le processeur
[modifier | modifier le wikicode]

Ex:/proc/cpuinfo

sur la mémoire
[modifier | modifier le wikicode]

Ex:/proc/meminfo

sur les modules
[modifier | modifier le wikicode]

Ex:/proc/modules

sur les montages du systeme
[modifier | modifier le wikicode]

Ex:/proc/mount

Ex:/proc/swaps

Les fichiers temporaires

[modifier | modifier le wikicode]
  • /tmp
  • /var/tmp

Les données variables

[modifier | modifier le wikicode]
  • /var

Ce répertoire contient les données variables. En particulier:

les logs sont stockés dans /var/log
les mails en attente de livraison sont stockées dans /var/mail
les travaux d'impression seront dans /var/spool ou /var/mail selon le serveur d'impression utilisé.
  • /var/log, ce répertoire contient les journaux (fichiers détaillant les historiques de programmes).
  • /var/mail, ce répertoire contient les emails des utilisateurs du système. Un utilisateur du système peut voir ses emails via la commande « mail ».
  • /var/spool, ce répertoire contient les données en attente de traitement (par un programme), et sont en générale supprimé après avoir été traité.
  • /var/lib, ce répertoire contient les données des bases de données (Mysql, Postgresql) et les bases de données dpkg (rpm sur RedHat)
  • /var/www : les sites Web

Les programmes et ressources installés à la main

[modifier | modifier le wikicode]
  • /usr/local

Ce répertoire contient des données mis en place par l'administrateur du système, comme « /usr » mais dans un contexte plus « isolé » car ces ressources sont géré par ce même administrateur système, et contient des sous-répertoire tel que:

/usr/local
├── bin/                   : où se trouvent les programmes.
│   ├── monprogramme       : exemple de programme nommé « monprogramme ».
├── etc/                   : où se trouvent les fichiers de configurations des programmes, comme « /etc ».
│   ├── monprogramme.conf  : exemple de configuration de « monprogramme ».
├── lib/                   : où se trouvent les bibliothèques logiciel.
├── lib64/                 : où se trouvent les bibliothèques logiciel, compilé pour les processeurs à architecture 64 bits.
├── sbin/                  : où se trouvent les programmes utilisable par "root".


Redirection des entrées/sorties

Les entrées/sorties des processus

[modifier | modifier le wikicode]

Chaque processus possède 3 flux standards qu'il utilise pour communiquer en général avec l'utilisateur :

  • l'entrée standard nommée stdin (identifiant 0) : il s'agit par défaut du clavier,
  • la sortie standard nommée stdout (identifiant 1) : il s'agit par défaut de l'écran,
  • la sortie d'erreur standard nommée stderr (identifiant 2) : il s'agit par défaut de l'écran.

Ces flux peuvent être redirigés afin que le processus interagisse avec un autre au lieu d'interagir avec l'utilisateur.

Rediriger la sortie standard

[modifier | modifier le wikicode]

Quand on exécute une commande, le shell affiche le résultat sur la console de sortie (l'écran par défaut). On peut rediriger cette sortie vers un fichier en utilisant le signe >.

Exemple

~$ ls > resultat_ls

Si le fichier existe déjà, il est écrasé.

Concaténation

[modifier | modifier le wikicode]

Au lieu de créer un fichier, il est possible d'ajouter les sorties d'un processus à un fichier existant en utilisant le double signe >>.

Exemple

~$ ls >> resultat

Si le fichier résultat existe déjà, les affichages sont concaténés.

Syntaxe complète

[modifier | modifier le wikicode]

En fait, les signes > peuvent être précédés de l'identifiant du flux à rediriger. Pour la sortie standard, on peut donc utiliser les syntaxes suivantes :

~$ ls 1> resultat
~$ ls 1>> resultat

Ce qui revient au même que les deux premiers exemples ci-dessus (redirection et concaténation).

Rediriger la sortie d'erreur standard

[modifier | modifier le wikicode]

La redirection du flux de sortie d'erreur standard utilise les mêmes signes, mais précédés de l'identifiant du flux : 2.

Exemples

~$ ls 2> erreurs_ls
~$ ls 2>> erreurs_ls

Rediriger l'entrée standard

[modifier | modifier le wikicode]

Rediriger l'entrée standard permet d'entrer des données provenant d'un fichier au lieu du clavier.

Exemple

~$ cat < mon_fichier.txt

Rediriger un flux vers un autre

[modifier | modifier le wikicode]

Il est possible de rediriger un flux vers la sortie standard ou la sortie d'erreur en donnant l'identifiant du flux précédé du caractère & à la place du nom de fichier.

Exemple

~$ ls 1> stdout_stderr.txt 2>&1

Le fichier stdout_stderr.txt contient ce qui a été affiché à la fois sur le flux de sortie standard et le flux de sortie d'erreur.

Échange des deux flux de sortie

[modifier | modifier le wikicode]

L'échange des deux flux de sortie s'effectue en utilisant la syntaxe pour rediriger un flux vers un autre à trois reprises, en utilisant un identifiant de flux fictif comme intermédiaire (3).

Exemple

~$ ls 2>&3 1>&2 3>&1

Le pipe (un tube)

[modifier | modifier le wikicode]

Redirige la sortie d'une commande vers l'entrée d'une autre commande. Il s'agit donc d'une chaîne de redirection entre deux processus qui ne passe pas par un fichier, mais par une zone mémoire du système.

Exemples

  • Afficher la taille des fichiers et répertoires, et les trier du plus grand au plus petit :
 $ du | sort -rn 
  • Même résultat, mais affiché page par page :
 $ du | sort -rn | more
  • Connaître le nombre de fichiers du répertoire /usr/bin :
 $ ls -1 /usr/bin | wc -l

Explications : L'option -1 de la commande ls affiche un fichier ou répertoire par ligne. La commande wc (word count) avec l'option -l (line) compte le nombre de lignes.

  • Connaître tous les périphériques IDE détectés par le noyau Linux et les afficher page par page :
 $ dmesg | grep hd | more

Explications : la commande dmesg affiche les messages du noyau Linux détectés durant le boot. La commande grep n'affiche que les lignes contenant le mot hd. La commande more affiche ces résultats page par page.

Autre exemple : extraire l'adresse IP de la carte réseau eth0 :

 $ ifconfig eth0 | grep 'inet adr' | cut -f2 -d':' | cut -f1 -d' '
 192.168.30.50


Invoquer un programme en tâche de fond

Invoquer un programme en tâche de fond

[modifier | modifier le wikicode]

Certains programmes ne rendent pas la main immédiatement (exemple : la compilation d'un gros programme).

Pour récupérer la main, il suffit de rajouter un & (ET commercial ou Esperluette) à la fin de la commande :

 $ xeyes &

Si on a lancé une commande qui ne rend pas la main et que l'on a oublié de rajouter le &, on peut utiliser la méthode suivante :

 $ xeyes
 <CTRL Z>
 [1]+  Stopped                 xeyes

Le programme est alors stoppé. Il suffit de taper ensuite la commande bg (background) pour qu'il s'exécute en tâche de fond :

 $ xeyes
 <CTRL Z>
 [1]+  Stopped                 xeyes
 $ bg
 [1]+ xeyes &
 $

La commande fg (foreground) permet de refaire passer le programme en premier plan :

 $ xeyes
 <CTRL Z>
 [1]+  Stopped                 xeyes
 $ bg
 [1]+ xeyes &
 $ fg
 xeyes

La commande jobs affiche les tâches en cours.

 $ jobs
[1]+  Running                 xeyes &


Propriétaires et droits d'accès

Les droits d'accès

[modifier | modifier le wikicode]

Fonctionnement

[modifier | modifier le wikicode]

Chaque fichier du système est associé à des droits d'accès. Ceux-ci sont affichés par la commande ls en utilisant le format long : ls -l.

Ces droits d'accès sont résumés en 10 caractères de la forme suivante :

type u_read u_write u_exec g_read g_write g_exec o_read o_write o_exec

Exemple :

drwxr-xr-x

Le premier caractère représente le type de fichier :


Types de fichier
Type Description
- Regular file : fichier normal
d Directory : répertoire
l Link : lien
b Block device : périphérique bloc (périphérique à accès direct)
c Character device : périphérique caractère (périphérique à accès séquentiel)
s Socket
p Pipe (tube nommé)

Le reste de la chaîne est scindé en 3 blocs de 3 caractères qui représentent les différents niveaux de droit :

  • user(u) : droits concernant le propriétaire du fichier,
  • group(g) : droits concernant les autres membres du même groupe que le propriétaire du fichier,
  • other(o) : droits concernant tous les autres utilisateurs.

Les trois caractères d'un bloc sont les suivants, dans l'ordre :

  • r (read) : droit de lire le fichier / lister le contenu du répertoire
  • w (write) : droit d'écrire dans le fichier / modifier le répertoire (créer/supprimer des fichiers)
  • x (execute) : droit d'exécuter le fichier (programme ou script) / ou de traverser le répertoire (changer le répertoire courant).

Si l'un des droits n'est pas accordé, un tiret est affiché à sa place.

Exemple :

-rwxrw-r--  ...  script.sh

Le fichier script.sh est un fichier normal (-) et est associé aux droits suivants :

  • Le propriétaire peut lire, écrire et exécuter ce fichier (rwx),
  • Les membres du même groupe que le propriétaire peuvent lire et écrire, mais pas exécuter ce fichier (rw-),
  • Les autres utilisateurs peuvent seulement lire ce fichier (r--).


Pour plus de détails voir : w:Permissions_Unix#Droits étendus.

Modifier les droits d'accès

[modifier | modifier le wikicode]

La commande chmod permet de modifier les droits associés à un fichier.

Enlever le droit de lecture (r) aux autres (o)

~$ chmod o-r nom_de_fichier

Ajouter un droit d'écriture (w) au groupe (g)

~$ chmod g+w nom_de_fichier

Combinaison des deux commandes :

~$ chmod o-r,g+w nom_de_fichier

Spécifier tous les droits avec une valeur numérique :

~$ chmod 0754 nom_de_fichier

Les droits par défaut et la commande umask

[modifier | modifier le wikicode]

Les droits par défaut d'un nouveau fichier sont définis par rapport à un masque des droits défini pour chaque utilisateur avec la commande umask.

Afficher le masque courant :

~$ umask
0022

Exemples :

  • Un fichier est créé avec les droits par défaut 666 (rw-rw-rw-) filtré par le masque 022 :
666 & ~022 = 644  rw- r-- r--
  • Un >répertoire est créé avec les droits par défaut 777 (rwxrwxrwx) filtré par le masque 022 :
777 & ~022 = 755  rwx r-x r-x


Les propriétaires et les groupes

[modifier | modifier le wikicode]

La commande chown

[modifier | modifier le wikicode]

La commande chown permet de changer le propriétaire d'un fichier ou d'un répertoire. Il faut être propriétaire du fichier ou répertoire, ou root selon la ressource que l'on souhaite modifier.

La commande chown est suivie du nouveau propriétaire puis du nom du fichier ou du répertoire:
$ chown alex toto  => donne la propriété du fichier toto à alex.

La commande chgrp

[modifier | modifier le wikicode]

Comme la commande chown, la commande chgrp change le groupe propriétaire d'un fichier ou d'un répertoire.

La commande chgrp est suivie du nom du groupe puis du nom du fichier ou du répertoire :
$ chgrp etudiant toto  => donne la propriété du fichier toto au groupe etudiant.


On peut aussi changer le propriétaire et le groupe en une seule commande :

$ chown suivit du nom du propriétaire.nom du groupe suivit du nom du fichier
$ chown alex.prof toto  => donne la propriété du fichier toto à alex et au groupe prof.


Le raccourci suivant existe également :

$ chown alex. toto  => donne la propriété du fichier toto à alex et au groupe alex.

Les Access Control List (ACL)

[modifier | modifier le wikicode]
À faire...link={{{link}}}

chapitre à écrire

Afficher les ACL

[modifier | modifier le wikicode]

afficher tous les droits, y compris dans les sous-répertoires : $ getfacl -R *

afficher tous les droits sauf les droits de base : $ getfacl --skip-base -R *

Ajouter une ACL

[modifier | modifier le wikicode]

Modifier une ACL

[modifier | modifier le wikicode]
À faire...link={{{link}}}

manipulation de la commande setfacl

Supprimer une ACL

[modifier | modifier le wikicode]

Sauvegarder les ACL

[modifier | modifier le wikicode]
À faire...link={{{link}}}

manipulation de la commande star

Pour les systèmes de fichier XFS, il convient également de sauvegarde les ACLs. La sauvegarde des ACLs doit être effectuée dans un fichier avant la sauvegarde sur bande.

$ getfacl --skip-base -R /home/acl.sauv

ou

$ getfacl --skip-base -absolute_name -R /home > /home/acl.sauv 

si la sauvegarde se fait en chemin absolu.

Le fichier /home/acl.sauv sera également sauvegardé sur bande.


Processus

Définition d'un processus

[modifier | modifier le wikicode]

Un processus est un programme en cours d'exécution. Par exemple, chaque fois que l'on lance la commande ls, un processus est créé durant l'exécution de la commande.

Un processus est identifié par un numéro unique que l'on appelle le PID (Process IDentifiant).

Un processus dispose d'un processus père que l'on appelle le PPID (Parent PID).

La particularité d'un processus est de s'exécuter avec les droits accordés à l'utilisateur qui a lancé la commande. Ceci participe fortement à la sécurité du système. Ainsi, si un utilisateur contracte un programme malveillant (un virus par exemple), le processus sera soumis au droit d'accès de cet utilisateur, et ne pourra pas effectuer des opérations non autorisées (comme par exemple modifier le fichier de mots de passe).

Au démarrage de l'ordinateur, le système charge le noyau Linux qui se charge de l'initialisation du matériel et de la détection des périphériques. Ceci fait, il démarre ensuite le processus init qui a comme particularité d'être le premier processus et de toujours utiliser le PID 1. Ce processus démarre ensuite des processus noyaux (dont le nom est noté entre crochets), et les premiers processus systèmes.

Chaque processus a ainsi un père (sauf init), et peut être à son tour le père d'autres processus, etc.

La commande pstree permet de visualiser l'arbre des processus. L'option -p permet de visualiser les PID de chaque processus.

Exemple :

 $ pstree -p
 init(1)─┬─atd(2861)
         ├─avahi-daemon(2647)───avahi-daemon(2648)
         ├─cron(2873)
         ├─cupsd(2571)
         ├─dbus-daemon(2579)
         ├─dbus-daemon(3023)
         ├─dbus-launch(3022)
         ├─dcopserver(3054)
         ├─dhcdbd(2628)
         ├─dirmngr(3221)
         ├─events/0(4)
         ├─exim4(2739)
         ├─gconfd-2(3576)
         ├─gdm(2796)───gdm(2802)─┬─Xorg(2805)
         │                       └─startkde(2971)─┬─kwrapper(3063)
         │                                        └─ssh-agent(3019)
         ├─getty(2902)
         ├─getty(2903)
         ├─getty(2904)
         ├─getty(2905)
         ├─getty(2906)
         ├─getty(2907)
         ├─hald(2587)───hald-runner(2588)─┬─hald-addon-keyb(2594)
         │                                └─hald-addon-stor(2621)
         ├─hpiod(2464)
         ├─inetd(2756)
         ├─kaccess(3073)
         ├─kded(3058)
         ├─kdeinit(3051)─┬─artsd(3077)
         │               ├─firefox-bin(3572)─┬─{firefox-bin}(3573)
         │               │                   ├─{firefox-bin}(3574)
         │               │                   ├─{firefox-bin}(3581)
         │               │                   ├─{firefox-bin}(3586)
         │               │                   ├─{firefox-bin}(3587)
         │               │                   └─{firefox-bin}(3588)
         │               ├─kio_file(3071)
         │               ├─klauncher(3056)
         │               ├─konsole(3308)───bash(3309)───pstree(4518)
         │               ├─konsole(3907)───bash(3908)───su(3925)───bash(3926)
         │               └─kwin(3066)
         ├─kdesktop(3068)
         ├─kdesud(3357)
         ├─khelper(5)
         ├─kicker(3070)
         ├─klipper(3085)
         ├─klogd(2446)
         ├─knotify(3082)
         ├─korgac(3086)
         ├─ksmserver(3065)
         ├─ksoftirqd/0(3)
         ├─kthread(6)─┬─aio/0(76)
         │            ├─ata/0(594)
         │            ├─ata_aux(595)
         │            ├─hda_codec(1575)
         │            ├─kblockd/0(9)
         │            ├─khubd(529)
         │            ├─kjournald(1012)
         │            ├─kjournald(1916)
         │            ├─kjournald(1918)
         │            ├─kjournald(1920)
         │            ├─kjournald(1922)
         │            ├─kmirrord(1874)
         │            ├─kpsmoused(1551)
         │            ├─kseriod(12)
         │            ├─kswapd0(75)
         │            ├─pdflush(73)
         │            ├─pdflush(74)
         │            ├─scsi_eh_0(653)
         │            └─scsi_eh_1(655)
         ├─migration/0(2)
         ├─portmap(2192)
         ├─python(2491)
         ├─rpc.statd(2810)
         ├─soffice(4472)───soffice.bin(4492)─┬─{soffice.bin}(4493)
         │                                   ├─{soffice.bin}(4494)
         │                                   ├─{soffice.bin}(4495)
         │                                   ├─{soffice.bin}(4496)
         │                                   └─{soffice.bin}(4497)
         ├─start_kdeinit(3050)
         ├─syslogd(2440)
         └─udevd(1192)

Dans cette arborescence, on constate que le processus init est bien le père de tous les processus.

Afficher la liste des processus

[modifier | modifier le wikicode]

La commande ps permet d'afficher les processus. Utilisée sans option, la commande ps affiche les processus de l'utilisateur courant associé au terminal courant.

Pour connaître tous les processus, y compris ceux qui ne sont pas associés au terminal courant, on utilise les options aux (notation BSD) et -ef (notation Unix). Pour connaître la totalité des options, consulter la page de manuel de la commande ps (man ps).

Exemples :

 $ ps aux
 pixl@nitroglycerine:~$ ps aux
 USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
 root         1  0.0  0.0   1944   644 ?        Ss   11:36   0:00 init [2]
 root         2  0.0  0.0      0     0 ?        S    11:36   0:00 [migration/0]
 root         3  0.0  0.0      0     0 ?        SN   11:36   0:00 [ksoftirqd/0]
 root         4  0.0  0.0      0     0 ?        S<   11:36   0:00 [events/0]
 root         5  0.0  0.0      0     0 ?        S<   11:36   0:00 [khelper]
 ...
 daemon    2192  0.0  0.0   1684   376 ?        Ss   11:36   0:00 /sbin/portmap
 root      2440  0.0  0.0   1628   640 ?        Ss   11:36   0:00 /sbin/syslogd
 root      2446  0.0  0.0   1576   376 ?        Ss   11:36   0:00 /sbin/klogd -x
 root      2464  0.0  0.0   4884   916 ?        Ss   11:36   0:00 /usr/sbin/hpiod
 ...
 $ ps -ef
 UID        PID  PPID  C STIME TTY          TIME CMD
 root         1     0  0 11:36 ?        00:00:00 init [2]
 root         2     1  0 11:36 ?        00:00:00 [migration/0]
 root         3     1  0 11:36 ?        00:00:00 [ksoftirqd/0]
 root         4     1  0 11:36 ?        00:00:00 [events/0]
 root         5     1  0 11:36 ?        00:00:00 [khelper]
 ...
 daemon    2192     1  0 11:36 ?        00:00:00 /sbin/portmap
 root      2440     1  0 11:36 ?        00:00:00 /sbin/syslogd
 root      2446     1  0 11:36 ?        00:00:00 /sbin/klogd -x
 root      2464     1  0 11:36 ?        00:00:00 /usr/sbin/hpiod
 ...

Au final, on obtient les mêmes résultats.

Les signaux offrent un mécanisme permettant d'envoyer un message à un processus en cours d'exécution. On se sert généralement des signaux pour terminer un processus, lui indiquer de relire sa configuration, etc.

Les différents signaux

[modifier | modifier le wikicode]

Pour connaître la liste des signaux, il suffit de consulter la page de manuel de signal (section 7) :

 $ man 7 signal
 ...
 Signal     Valeur    Action   Commentaire
 ---------------------------------------------------------------------
 SIGHUP        1       Term    Déconnexion détectée sur le terminal
                               de contrôle ou mort du processus de
                               contrôle.
 SIGINT        2       Term    Interruption depuis le clavier.
 SIGQUIT       3       Core    Demande « Quitter » depuis le clavier.
 SIGILL        4       Core    Instruction illégale.
 SIGABRT       6       Core    Signal d’arrêt depuis abort(3).
 SIGFPE        8       Core    Erreur mathématique virgule flottante.
 SIGKILL       9       Term    Signal « KILL ».
 SIGSEGV      11       Core    Référence mémoire invalide.
 SIGPIPE      13       Term    Écriture dans un tube sans lecteur.
 SIGALRM      14       Term    Temporisation alarm(2) écoulée.
 SIGTERM      15       Term    Signal de fin.
 SIGUSR1   30,10,16    Term    Signal utilisateur 1.
 SIGUSR2   31,12,17    Term    Signal utilisateur 2.
 SIGCHLD   20,17,18    Ign     Fils arrêté ou terminé.
 SIGCONT   19,18,25    Cont    Continuer si arrêté.
 SIGSTOP   17,19,23    Stop    Arrêt du processus.
 SIGTSTP   18,20,24    Stop    Stop invoqué depuis tty.
 SIGTTIN   21,21,26    Stop    Lecture sur tty en arrière-plan.
 SIGTTOU   22,22,27    Stop    Écriture sur tty en arrière-plan.

Les signaux les plus connus sont les trois suivants :

  • SIGHUP (signal n°1) : pour beaucoup de services réseaux, la réception du signal n°1 lui indique de lire sa configuration. Par exemple, cela permet d'indiquer au processus apache (serveur web) de relire sa configuration, sans avoir a arrêter et redémarrer le processus.
  • SIGKILL (signal n°9) : termine un processus (arrêt brutal). Utile lorsque le SIGTERM ne marche pas (processus planté).
  • SIGTERM (signal n°15) : demande au processus de s'arrêter (arrêt propre).


Envoyer un signal à un processus

[modifier | modifier le wikicode]

La commande kill permet d'envoyer un signal au processus. Syntaxe :

 $ kill -<numéro du signal ou nom du signal> <PID du processus>

Exemples :

  $ kill -1 12345
  $ kill -SIGTERM 12345
 On peut connaitre le PID du processus à partir de son nom, en utilisant la commande ps, ou bien pidof.

Exemple :

  $ pidof cupsd
  2571
  $ kill -15 2571

ou directement :

  $ kill `pidof java`

(ce qui fonctionne aussi s'il y a plusieurs processus du même nom)

La commande killall permet d'indiquer le nom du processus plutôt que son PID, et va envoyer le signal à tous les processus possédant ce nom. Exemple :

 $ xeyes & ; xeyes & ; xeyes &
 $ killall xeyes

Utilisé sans option, les commandes kill et killall envoient le signal n°15 (arrêt propre).

Pour tuer un processus par son nom.

Par exemple pour killer une session bloquée :

$ w
USER    TTY
my_user pts/0
my_user pts/1

$ pkill -9 -t pts/0

Autres commandes affichant les processus

[modifier | modifier le wikicode]

La commande top permet d'afficher (entre autres) la liste des processus de manière dynamique (rafraîchit la liste toutes les 3 secondes).

Lorsque la commande top fonctionne, les lettres suivantes permettent de changer son fonctionnement :

  • h : affiche l'aide
  • q : quitte la commande top
  • M : tri les processus par utilisation de la mémoire (du plus gourmand au plus sobre)
  • P : tri les processus par utilisation du processeur (du plus gourmand au plus sobre)
  • s : permet de changer la durée de rafraîchissement de top
  • k : permet d'envoyer un signal à un processus

Les processus légers

[modifier | modifier le wikicode]
À faire...link={{{link}}}

description des processus légers (light weight process, or thread)

Les Thread ID (TID ou SPID)

[modifier | modifier le wikicode]

Les processus légers SPID connus aussi sous le nom de TID (Threads ID) sont les numéros des threads. Explication par l'exemple :

Voir aussi : Processus léger sur Wikipédia



Limiter un processus

[modifier | modifier le wikicode]

CPULimit est un utilitaire qui permet de limiter la ressource CPU utilisée par un processus

 apt-get install cpulimit

La syntaxe est la suivante : cpulimit --pid <pid> --limit <limit>

<pid> est le pid du processus cible, et <limit> la limitation effective en pourcentage (maximum 100% sur un simple cœur, 200 pour un double ...)


Exemple :

 cpulimit --pid 2960 --limit 55

Exemple avec le nom de processus (au lieu du pid) :

 cpulimit --exe bigloop --limit 40
À faire...link={{{link}}}

Parler de la commande nice

Conserver un processus en activité

[modifier | modifier le wikicode]

Il est possible de laisser tourner un processus lancé depuis la console même sans être connecté. On utilise la fonction nohup qui permet d'ignorer le signal SIGHUP lors de la déconnexion.

 $ nohup application &

La sortie standard est automatiquement redirigée vers nohup.out dans le répertoire courant, sauf si une redirection est spécifiée.

 $ nohup application & > application.log


Locale

Cette page est considérée comme une ébauche à compléter . Si vous possédez quelques connaissances sur le sujet, vous pouvez les partager en éditant dès à présent cette page (en cliquant sur le lien « modifier »).

Ressources suggérées : Aucune (vous pouvez indiquer les ressources que vous suggérez qui pourraient aider d'autres personnes à compléter cette page dans le paramètre « ressources » du modèle? engendrant ce cadre)

Sous Linux, les locale sont des variables d'environnement qui ont un impact essentiel sur le bon fonctionnement des logiciels.

Une de ces variable permet notamment de configurer le codage de caractère utilisé par un logiciel. Aujourd'hui, les systèmes utilisent massivement utf-8 depuis le début du siècle. Ceci permet de manipuler des textes ou des fichiers comportant les caractères unicode[1]

Configuration du réseau

Quelques définitions

[modifier | modifier le wikicode]

Nous avons trois grands axes pour configurer un réseau.

Tout d'abord, une adresse IP est unique sur un réseau. C'est une suite de 4 nombres allant de 0 à 255 (inclus) séparés par des points (par exemple 192.168.1.32). Cette adresse IP appartient à une classe réseau. Il existe 5 classes d'IP :

  • Classe A -> de 0.0.0.0 à 127.255.255.255
  • Classe B -> de 128.0.0.0 à 191.255.255.255
  • Classe C -> de 192.0.0.0 à 223.255.255.255
  • Classe D -> Réservée à un usage multicast.
  • Classe E -> Utilisée à titre expérimental.

De l'adresse IP et de sa classe, on peut déduire trois grandes adresses:

  • Le masque réseau (netmask) qui serait dans notre cas 255.255.255.0 (classe C) sert à identifier le réseau associé à une adresse IP.
  • L'adresse réseau (network address) : 192.168.1.0, cette adresse ne peut être attribuée à aucun ordinateur sur le réseau.
  • L'adresse de diffusion (broadcast address) : permettant d'envoyer un message à toutes les machines situées sur le réseau (ici 192.168.1.255).

Il existe la notation CIDR(Classless Inter-Domain Routing) (/24). Sous Linux, on a l'outil ipcalc qui permet de voir cette notation.

Exemple :

  ipcalc 192.168.30.0/24
  ipcalc 192.168.30.0/16   (classe B)
  ipcalc 192.168.30.0/8    (Classe A)

La passerelle ou GATEWAY permet de relier deux réseaux informatiques différents. Dans notre cas, elle est du type : 192.168.1.1.

Le serveur DNS

[modifier | modifier le wikicode]

Le serveur DNS ou Domain Name System établit la liaison entre un nom de domaine et une adresse IP. Grâce au serveur DNS nous pouvons retrouver une machine sur un réseau via son adresse IP ou bien sous sa forme canonique (par exemple www.domaine.fr).

Les fichiers de configuration

[modifier | modifier le wikicode]

/etc/network/interfaces

[modifier | modifier le wikicode]

Sur la distribution Debian, les paramètres réseaux vont être stockés à cet emplacement: /etc/network/interfaces. Éditons ce fichier avec vim. Nous retrouvons l'adresse Loopback (127.0.0.1) autrement appelé le localhost qui boucle sur notre propre machine.

Nous allons maintenant attribuer les adresses nécessaires au bon fonctionnement de notre serveur, car celles-ci avaient été attribuées automatiquement lors de l'installation. Nous allons donc enlever la configuration DHCP en nous attribuant une adresse spécifique pour notre serveur (192.168.30.219), ce qui nous donne :

AVANT :

  allow-hotplug eth0
  iface eth0 inet dhcp

APRES :

  auto eth0
  iface eth0 inet static
        address 192.168.30.219
        netmask 255.255.255.0
        network 192.168.30.0
        broadcast 192.168.30.255
        gateway 192.168.30.1

Il faut maintenant relancer le fichier et vérifier que la configuration a bien été prise en compte.

  # /etc/init.d/networking restart
  # ifconfig

/etc/resolv.conf

[modifier | modifier le wikicode]

Ce fichier contient les adresses IP des serveurs de noms :

 $ cat /etc/resolv.conf
 search mondomaine.fr autredomaine.fr
 nameserver 192.168.30.1

Les options search et domain permettent de spécifier un nom de domaine à rajouter à toute requête portant sur un nom qui ne contient pas de point. Ce qui signifie ici qu'une recherche sur pc235 sera tentée en utilisant pc235.mondomaine.fr. Si aucune correspondance n'est trouvée, une autre recherche sera alors tentée avec pc235.autredomaine.fr, etc.

 $ ping pc235
 PING pc235.mondomaine.fr (192.168.30.235) 56(84) bytes of data.
 ...

L'option domain permet d'utiliser un nom (mais un seul) comprenant éventuellement un sous-domaine:

 $ cat /etc/resolv.conf
 domain truc.mondomaine.fr 
 nameserver 192.168.30.1

Dans ce cas, une recherche sera d'abord tentée avec pc235.truc.mondomaine.fr, puis, en cas d'échec, avec pc235.mondomaine.fr.

Ces deux options ne doivent pas figurer en même temps dans le fichier resolv.conf.

L'option nameserver permet d'indiquer l'adresse IP du serveur de noms. On peut mettre plusieurs lignes nameserver pour indiquer plusieurs serveurs de noms, mais attention, l'ordre à une importance : lors de la résolution d'un nom, le système va contacter le premier serveur DNS, et si il n'a pas obtenu de réponse au bout d'un certain temps (temps généralement limité à 30s), il contactera le deuxième.

Ce fichier contient le nom de la machine (hostname). Il est utilisé lors du démarrage de la machine pour positionner le nom de la machine.

Le fichier /etc/hosts est l'ancêtre du DNS. À la création de l'Internet, il y avait très peu d'ordinateurs connectés, et ce fichier contenait la liste de ces ordinateurs et de leurs adresses IP. Chaque fois que de nouveaux ordinateurs étaient connectés à Internet, il fallait mettre à jour ce fichier pour accéder à ces nouveaux ordinateurs. Vu le nombre croissant d'ordinateurs connectés à Internet, ce fonctionnement n'était plus adapté et a donné lieu à l'invention du DNS.

Désormais, ce fichier permet de connaître les adresses IP d'ordinateurs non présents dans le DNS.

Ce fichier contient une ligne pour l'entrée loopback :

 127.0.0.1       localhost

Ce fichier doit aussi contenir une ligne indiquant le nom de l'ordinateur et son adresse IP; ceci est utile en cas de défaillance du serveur DNS :

 192.168.30.230  pc230.mondomaine.fr pc230 pcalex

À la fin de ce fichier, on trouve désormais des entrées pour IPv6 :

 ::1     ip6-localhost ip6-loopback
 fe00::0 ip6-localnet
 ff00::0 ip6-mcastprefix
 ff02::1 ip6-allnodes
 ff02::2 ip6-allrouters
 ff02::3 ip6-allhosts

On peut y ajouter :

2620:0:862:ed1a::1 pc230.mondomaine.fr pc230 pcalex

Puis tester immédiatement en local :

$ host pc230.mondomaine.fr
pc230.mondomaine.fr has address 192.168.30.230
pc230.mondomaine.fr has IPv6 address 2620:0:862:ed1a::1

/etc/host.conf

[modifier | modifier le wikicode]

Historiquement, ce fichier contenait l'ordre de recherche pour la résolution des noms : d'abord la consultation du fichier /etc/hosts, et ensuite l'interrogation du DNS :

 order hosts,bind

Désormais, ces préférences d'ordre de recherche sont indiquées dans le fichier /etc/nsswitch.conf (voir ci-dessous).

/etc/nsswitch.conf

[modifier | modifier le wikicode]

Ce fichier remplace désormais le fichier /etc/host.conf et permet d'indiquer au système l'ordre de recherche pour la résolution des noms :

 more /etc/nsswitch.conf
 ...
 hosts:          files dns
 networks:       files
 ...

L'option files indique au système de consulter d'abord les fichiers (/etc/hosts pour les noms d’hôtes et /etc/networks pour les noms de domaines) avant d'aller interroger le DNS.


Ce fichier contient le nom des réseaux et leur adresse réseau :

 default         0.0.0.0
 loopback        127.0.0.0
 link-local      169.254.0.0
 mondomaine.fr   192.168.30.0


La commande hostname permet de connaître le nom de l'ordinateur :

 # hostname
 pc230

L'option -f (-f ou --fqdn) permet de connaître le nom de l'ordinateur avec son nom de domaine (Full Qualified Domain Name) :

 # hostname -f
 pc230.mondomaine.fr

La commande hostname permet aussi de changer dynamiquement nom de machine, mais attention, cette modification est temporaire et ne sera plus active après un reboot. Pour changer de manière permanente le nom de la machine, il faut modifier le fichier /etc/hostname et le fichier /etc/hosts (voir ci-dessus) :

 # hostname
 pc230
 # hostname pcalex
 # hostname
 pcalex

Logo

Cette commande est de plus en plus souvent remplacée par ip depuis 2015[2].

Utilisé sans argument, la commande ifconfig affiche les interfaces réseau actives :

 # ifconfig
 eth0    Lien encap:Ethernet  HWaddr 00:05:5D:E1:F6:11
         inet adr:192.168.30.230  Bcast:192.168.30.255 Masque:255.255.255.0
         adr inet6: fe80::205:5dff:fee1:f611/64 Scope:Lien
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:16383 errors:0 dropped:0 overruns:0 frame:0
         TX packets:5998 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 lg file transmission:1000
         RX bytes:8467107 (8.0 MiB)  TX bytes:810927 (791.9 KiB)
         Interruption:10 Adresse de base:0xc800
 lo      Lien encap:Boucle locale
         inet adr:127.0.0.1  Masque:255.0.0.0
         adr inet6: ::1/128 Scope:Hôte
         UP LOOPBACK RUNNING  MTU:16436  Metric:1
         RX packets:24 errors:0 dropped:0 overruns:0 frame:0
         TX packets:24 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 lg file transmission:0
         RX bytes:2352 (2.2 KiB)  TX bytes:2352 (2.2 KiB)

L'option -a permet d'afficher toutes les interfaces, y compris celles qui ne sont pas activées.

On peut aussi spécifier à ifconfig l'interface à afficher :

 # ifconfig eth0
 ...

La commande ifconfig permet également de configurer une interface réseau. Attention, cette modification est faite dynamiquement et ne sera plus active après un redémarrage.

 # ifconfig eth0 10.0.0.1 netmask 255.0.0.0


La commande ifconfig peut aussi créer des alias d'interface réseau. On peut ainsi affecter plusieurs adresses à une seule interface réseau.

 # ifconfig eth0:0 192.168.0.100 netmask 255.255.255.0

 # ifconfig
 # eth0      Link encap:Ethernet  HWaddr 00:1e:8c:26:af:c5  
             UP BROADCAST MULTICAST  MTU:1500  Metric:1
             Packets reçus:0 erreurs:0 :0 overruns:0 frame:0
             TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
             collisions:0 lg file transmission:1000 
             Octets reçus:0 (0.0 B) Octets transmis:0 (0.0 B)

   eth0:0    Link encap:Ethernet  HWaddr 00:1e:8c:26:af:c5  
             inet adr:192.168.0.100  Bcast:192.168.0.255  Masque:255.255.255.0
             UP BROADCAST MULTICAST  MTU:1500  Metric:1

Logo

Si vous supprimez l'interface principale (ici : eth0), tous les alias qui en dépendent seront supprimés.

La commande ip fait partie du projet LARTC : Linux Avanced Routing and Traffic Control. L'objectif est de fournir des fonctionnalités avancées réseaux qui ne sont pas disponibles dans la pile réseau standard Unix / Linux.

La commande ip remplace les commandes arp, ifconfig et route. Pour afficher la table arp :

ip neighbour show

On peut également écrire la forme abrégée en indiquant uniquement la première lettre :

ip n s

Pour afficher les interfaces réseaux :

ip address show

ou la forme abrégée :

ip a s

Pour visualiser la table de routage :

ip route show

ou la forme abrégée :

ip r s

La commande ip permet également de modifier les informations : rajouter / supprimer une entrée ARP, rajouter / supprimer des adresses IP, rajouter / supprimer des routes ...

Pour renouveler son adresse auprès du serveur DHCP :

sudo dhclient -r
sudo dhclient

Le protocole ARP permet de trouver l'adresse MAC d'un ordinateur de mon réseau en fonction de son adresse IP.

La commande arp permet d'afficher la table de correspondance adresses IP => adresses MAC :

 # arp -an
 fw.mondomaine.fr (192.168.30.1) at 00:10:5A:DC:2B:4B [ether] on eth0
 pc235.mondomaine.fr (192.168.30.235) at 00:11:95:DD:FD:F3 on eth0

Attention, cette table de correspondance est régulièrement vidée.

La commande route permet d'afficher la table de routage réseau :

 # route
 Table de routage IP du noyau
 Destination       Passerelle       Genmask         Indic Metric Ref    Use Iface
 d12.mondomaine.fr *                255.255.255.0   U     0      0        0 eth0
 default           fw.mondomaine.fr 0.0.0.0         UG    0      0        0 eth0

L'option -n affiche la table de routage réseau sans remplacer les adresses IP par leurs noms canoniques :

 # route -n
 Table de routage IP du noyau
 Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
 192.168.30.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
 0.0.0.0         192.168.30.1    0.0.0.0         UG    0      0        0 eth0

On peut obtenir le même résultat en utilisant la commande netstat :

 # netstat -rn
 Table de routage IP du noyau
 Destination     Passerelle      Genmask         Indic   MSS Fenêtre irtt Iface
 192.168.30.0    0.0.0.0         255.255.255.0   U         0 0          0 eth0
 0.0.0.0         192.168.30.1    0.0.0.0         UG        0 0          0 eth0

La commande route permet de modifier la table de routage. On peut ainsi rajouter une route pour contacter un réseau ou une machine particulière.

Exemple : joindre le réseau 10.0.0.0/8

 pc210:~# route -n
 Table de routage IP du noyau
 Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
 192.168.30.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
 0.0.0.0         192.168.30.1    0.0.0.0         UG    0      0        0 eth0
 pc210:~#
 pc210:~# route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.30.99 dev eth0
 pc210:~#
 pc210:~# route -n
 Table de routage IP du noyau
 Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
 192.168.30.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
 10.0.0.0        192.168.30.99   255.0.0.0       UG    0      0        0 eth0
 0.0.0.0         192.168.30.1    0.0.0.0         UG    0      0        0 eth0

Exemple : joindre la machine 1.2.3.4 :

 pc210:~# route -n
 Table de routage IP du noyau
 Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
 192.168.30.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
 0.0.0.0         192.168.30.1    0.0.0.0         UG    0      0        0 eth0
 pc210:~#
 pc210:~# route add -host 1.2.3.4 gw 192.168.30.98 dev eth0
 pc210:~#
 pc210:~# route -n
 Table de routage IP du noyau
 Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
 1.2.3.4         192.168.30.98   255.255.255.255 UGH   0      0        0 eth0
 192.168.30.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
 0.0.0.0         192.168.30.1    0.0.0.0         UG    0      0        0 eth0


À faire...link={{{link}}}

parler de comment rendre une route permanente (modif de /etc/network/interfaces)

La commande ping permet de tester si on arrive à joindre un serveur donné. Cette commande utilise le protocole ICMP et envoi des paquets ICMP de type echo-request. Si l'ordinateur distant est joignable, il répondra à ce message par un paquet ICMP echo-reply.

 $ ping google.fr
 PING google.fr (216.239.59.104) 56(84) bytes of data.
 64 bytes from 216.239.59.104: icmp_seq=1 ttl=236 time=43.2 ms
 64 bytes from 216.239.59.104: icmp_seq=2 ttl=236 time=44.3 ms
 64 bytes from 216.239.59.104: icmp_seq=3 ttl=236 time=43.1 ms
 64 bytes from 216.239.59.104: icmp_seq=4 ttl=236 time=72.2 ms
 ... 
 CTRL-c pour arreter

Si l'ordinateur est injoignable, on n'obtiendra pas de réponse à nos paquets ICMP :

 $ ping pc235
 PING pc235.mondomaine.fr (192.168.30.235) 56(84) bytes of data.
 From pc230.mondomaine.fr (192.168.30.230) icmp_seq=2 Destination Host Unreachable
 From pc230.mondomaine.fr (192.168.30.230) icmp_seq=3 Destination Host Unreachable


Attention, si l'ordinateur distant ne répond pas, cela ne signifie pas obligatoirement qu'il est indisponible. Le problème peut venir du réseau (la commande traceroute permettra de déterminer l'endroit qui bloque), ou il peut être paramétré pour ne pas répondre au protocole ICMP, ou un firewall sur la route peut bloquer le protocole ICMP.

L'option -c de la commande ping permet d'indiquer le nombre de paquets à envoyer :

 $ ping -c 2 google.fr
 PING google.fr (216.239.59.104) 56(84) bytes of data.
 64 bytes from 216.239.59.104: icmp_seq=1 ttl=236 time=43.6 ms
 64 bytes from 216.239.59.104: icmp_seq=2 ttl=236 time=44.6 ms

 --- google.fr ping statistics ---
 2 packets transmitted, 2 received, 0% packet loss, time 5104ms
 rtt min/avg/max/mdev = 43.643/44.164/44.685/0.521 ms

La commande traceroute permet d'afficher la route empruntée pour atteindre un ordinateur donné :

 # traceroute www.google.fr
 traceroute: Warning: www.google.fr has multiple addresses; using 209.85.135.103
 traceroute to www.l.google.com (209.85.135.103), 30 hops max, 40 byte packets
 1  fw.mondomaine.fr (192.168.30.1)  1.854 ms  0.323 ms  0.281 ms
 2  192.168.10.1 (192.168.10.1)  0.658 ms  0.594 ms  0.522 ms
 ...


La commande mtr (my traceroute) permet aussi d'afficher la route empruntée pour atteindre un ordinateur donné, mais ré-actualise la liste en permanence :

                       My traceroute  [v0.71]
 pc230 (0.0.0.0)                              Tue Dec  4 13:13:23 2007
                          Packets               Pings
 Host                      Loss%   Snt   Last   Avg  Best  Wrst StDev
 1. fw.mondomaine.fr       0.0%    39    0.7   0.6   0.4   7.4   1.1
 2. 192.168.10.1           0.0%    39    0.6   0.8   0.6   7.2   1.1
 ...


La commande nslookup permet d'interroger un serveur DNS :

 $ nslookup
 > set type=any
 > google.fr
 Server:         192.168.30.1
 Address:        192.168.30.1#53
 
 Non-authoritative answer:
 Name:   google.fr
 Address: 216.239.59.104
 Name:   google.fr
 Address: 66.249.93.104
 Name:   google.fr
 Address: 72.14.221.104
 google.fr       nameserver = ns4.google.com.
 google.fr       nameserver = ns1.google.com.
 google.fr       nameserver = ns2.google.com.
 google.fr       nameserver = ns3.google.com.
 
 Authoritative answers can be found from:
 google.fr       nameserver = ns2.google.com.
 google.fr       nameserver = ns3.google.com.
 google.fr       nameserver = ns4.google.com.
 google.fr       nameserver = ns1.google.com.
 ns1.google.com  internet address = 216.239.32.10
 >
 CTRL-d pour sortir

Cette commande est interactive, elle nécessite l'intervention de l'utilisateur. On utilise désormais les commandes host et dig pour effectuer les mêmes opérations (voir ci-dessous).


La commande host permet d'effectuer une résolution DNS :

 $ host pc235
 pc235.mondomaine.fr has address 192.168.30.235
 pc235.mondomaine.fr mail is handled by 0 pc235.mondomaine.fr.

Elle permet aussi d'effectuer une résolution DNS inverse (quel nom canonique est associé à une adresse IP donnée ?) :

 $ host 192.168.30.235
 235.30.168.192.in-addr.arpa domain name pointer pc235.mondomaine.fr.


La commande dig permet d'interroger les enregistrements DNS (appellé aussi Ressources Records ou RR) d'un nom de domaine donné :

 $ dig google.fr
 ....
 ;; QUESTION SECTION:
 ;google.fr.                     IN      A
 
 ;; ANSWER SECTION:
 google.fr.              205     IN      A       66.249.93.104
 google.fr.              205     IN      A       72.14.221.104
 ...

On peut indiquer à la commande dig le Ressource Record que l'on désire connaitre :

 $ dig google.fr MX
 ...
 ;; ANSWER SECTION:
 google.fr.              10800   IN      MX      10 smtp1.google.com.
 google.fr.              10800   IN      MX      10 smtp2.google.com.
 google.fr.              10800   IN      MX      10 smtp3.google.com.
 ...

On peut indiquer à la commande dig le serveur DNS à interroger :

 $ dig @ns1.google.com google.fr
 ...
 ;; ANSWER SECTION:
 google.fr.              1800    IN      A       66.249.93.104
 google.fr.              1800    IN      A       216.239.59.104
 ...


La commande whois permet d'interroger la base de données whois contenant les informations sur le propriétaire du domaine et les personnes responsables pour les aspects administratif et technique :

 $ whois google.fr
 ...
 domain:      google.fr
 address:     GOOGLE INC
 address:     28, rue Juliette Lamber
 address:     75017 Paris
 address:     FR
 admin-c:     VB2334-FRNIC
 tech-c:      NA25-FRNIC
 zone-c:      NFC1-FRNIC
 nserver:     ns1.google.com
 ...


À faire...link={{{link}}}

parler du routage avancé + rajouter lien vers LARTC


Les utilisateurs et groupes

Les fichiers de configuration

[modifier | modifier le wikicode]
  • contient la liste des utilisateurs, un par ligne
  • contient d'autres informations relatives aux utilisateurs, dont notamment les UID (User IDentifiant) et GID (Group IDentifiant)
  • contenait autrefois les mots de passe chiffrés de chaque utilisateur, mais désormais ces mots de passe sont stockés dans le fichier /etc/shadow

Le format de ce fichier est indiqué dans la page de manuel du fichier de configuration passwd (section 5) :

 $ man 5 passwd
 ...
 - nom de connexion de l’utilisateur (« login »)
 - un mot de passe chiffré optionnel
 - l’identifiant numérique de l’utilisateur (UID)
 - l’identifiant numérique du groupe de l’utilisateur (GID)
 - le nom complet de l’utilisateur (champ GECOS)
 - le répertoire personnel de l’utilisateur
 - l’interpréteur de commandes de l’utilisateur 

La majorité des comptes définis dans ce fichier sont des comptes administratifs ne servant uniquement à l'exécution de certaines applications (daemons). Ainsi, les processus fonctionnant avec ces comptes sont limités par les droits d'accés de ces derniers.


  • contient les mots de passe chiffrés
  • ne peut être lu uniquement par le root ou les membres du groupe shadow
  • contient des informations relatives à l'expiration des mots de passe

Le format de ce fichier est indiqué dans la page de manuel du fichier de configuration shadow (section 5) :

 $ man 5 shadow
 ...
 - nom de connexion de l’utilisateur (« login »)
 - mot de passe chiffré
 - nombre de jours, comptés à partir du 1er janvier 1970, depuis le dernier changement de mot de passe
 - nombre de jours à attendre avant de pouvoir changer le mot de passe
 - nombre de jours après lesquels le mot de passe doit être changé
 - nombre de jours avant la fin de validité du mot de passe et pendant lesquels l’utilisateur est averti
 - nombre de jours après la fin de validité provoquant la
désactivation du compte
 - nombre de jours, comptés à partir du 1er janvier 1970, depuis que le compte est désactivé
 - champ réservé

La commande chage permet de changer les informations relatives à l'expiration des mots de passe (man chage).

À faire...link={{{link}}}
parler du SALT
  • contient la liste des groupes, un par ligne
  • pour chaque groupe, le numéro du groupe (GID)
  • les membres du groupe

Le format de ce fichier est indiqué dans la page de manuel du fichier de configuration group (section 5) :

 $ man 5 group
 ...
 - nom du groupe
 - mot  de passe chiffré du groupe. Si ce champ est vide, aucun mot de passe n’est nécessaire
 - GID : identifiant numérique du groupe
 - tous les noms des membres du groupe, séparés  par  des  virgules

Contient les informations cachées sur les groupes. Il contient des lignes avec les champs suivant séparés par des deux-points :

  • nom du groupe
  • mot de passe chiffré
  • liste d' administrateur du groupe séparés par des virgules
  • liste des membres du groupe séparés par des virgules

La commande gpasswd administre le fichier /etc/group. Elle permet d' affecter un mot de passe à un groupe.

# addgroup testgrp
# Ajout du groupe "testgrp" (identifiant 1001)...
# Terminé.

# gpasswd testgrp
# Changement du mot de passe pour le groupe test
# Nouveau mot de passe : 'mdp'
# Nouveau mot de passe (pour vérification) : 'mdp'
#

Newgrp change l´identifiant de groupe réel actuel à la valeur du groupe indiqué, ou au groupe par défaut défini dans /etc/passwd si aucun nom de groupe n´est fourni.


La commande groups permet de connaitre les groupes dont je fais partie :

 $ groups
 alex dialout cdrom floppy audio video plugdev netdev powerdev

On peut aussi obtenir la liste des groupes (et leurs GID) avec la commande id :

 $ id
 uid=1000(alex) gid=1000(grpalex) groupes=20(dialout),24(cdrom),25(floppy),29(audio),44(video),46(plugdev),106(netdev),109(powerdev),1000(grpalex)


Conversion avec ou sans shadow

[modifier | modifier le wikicode]
À faire...link={{{link}}}

parler des commandes pwconv et grpconv

Vérification de passwd et group

[modifier | modifier le wikicode]
À faire...link={{{link}}}

parler des commandes pwck et grpck

Gérer les utilisateurs

[modifier | modifier le wikicode]

Ajouter un utilisateur

[modifier | modifier le wikicode]

La commande useradd permet d'ajouter des utilisateurs. Le fichier /etc/default/useradd contient les paramètres par défaut de la commande.

Invoqué sans option, cette commande crée l'utilisateur, mais le compte n'est pas activé. De plus, elle n'a pas crée le répertoire de travail de l'utilisateur.

 # useradd paul
 # grep paul /etc/passwd
 paul:x:1002:1002::/home/paul:/bin/sh
 # grep paul /etc/shadow
 paul:!:13823:0:99999:7:::
 # grep paul /etc/group
 paul:x:1002:
 # ls -al /home/paul
 ls: /home/paul: Aucun fichier ou répertoire de ce type

Sous Debian, on utilisera plutôt la commande adduser qui offre plus d'options (positionnement du mot de passe et du champ GECOS à la création du compte, et création du répertoire de travail).

 # adduser jacques
 Ajout de l'utilisateur « jacques »...
 Ajout du nouveau groupe « jacques » (1003)...
 Ajout du nouvel utilisateur « jacques » (1003) avec le groupe « jacques »...
 Création du répertoire personnel « /home/jacques »...
 Copie des fichiers depuis « /etc/skel »...
 Enter new UNIX password:
 Retype new UNIX password:
 passwd : le mot de passe a été mis à jour avec succès
 Modification des informations relatives à l'utilisateur jacques
 Entrez la nouvelle valeur ou « Entrée » pour conserver la valeur proposée
       Nom complet []: Jacques
       N° de bureau []: 123
       Téléphone professionnel []: 01 02 03 04 05
       Téléphone personnel []: 01 06 07 08 09
       Autre []: Chef de projet
 Ces informations sont-elles correctes ? [o/N] o
 # grep jacques /etc/passwd
 jacques:x:1003:1003:Jacques,123,01 02 03 04 05,01 06 07 08 09,Chef de projet:/home/jacques:/bin/bash
 # grep jacques /etc/shadow
 jacques:$1$OWMPkUFD$XnXmTUUJBGoLehbznyXUM/:13823:0:99999:7:::
 # grep jacques /etc/group
 jacques:x:1003:
 # ls -al /home/jacques
 total 20
 drwxr-xr-x 2 jacques jacques 4096 2007-11-06 11:05 .
 drwxr-xr-x 6 root    root    4096 2007-11-06 11:05 ..
 -rw-r--r-- 1 jacques jacques  220 2007-11-06 11:05 .bash_logout
 -rw-r--r-- 1 jacques jacques  414 2007-11-06 11:05 .bash_profile
 -rw-r--r-- 1 jacques jacques 2227 2007-11-06 11:05 .bashrc

La commande adduser dispose du fichier de configuration /etc/adduser.conf qui permet de positionner les valeurs par défaut de la commande. La commande adduser offrira plus d'options que la commande useradd.

À faire...link={{{link}}}

Controler et compléter la description du fichier de configuration adduser.conf

Le fichier /etc/adduser.conf permet de configurer les options par défaut de la commande adduser

Extrait de adduser.conf

 # La variable DSHELL spécifie le shell par défaut de la session sur le système.
 DSHELL=/bin/bash
 
 # La varible DHOME spécifie le répertoire par défaut contenant le dossier HOME de l'utilisateur.
 DHOME=/home
 
 # Si GROUPHOMES est à "yes", alors le dossier home sera créé avec le schéma suivant : /home/"nom du groupe"/" nom de l'utilisateur"
 GROUPHOMES=no
 
 # Si LETTERHOMES est à "yes", le dossier home sera créé dans un dossier ayant comme nom la première lettre du nom d'utilisateur
 # Par exemple : /home/u/user
 LETTERHOMES=no
 
 # La variable SKEL spécifie le dossier contenant le squelette du fichier utilisateur
 # En d'autre terme, elle indique le chemin du fichier d'exemple .profile qui sera copier dans le nouveau dossier home de l'utilisateur lors de sa création.
 SKEL=/etc/skel
 
 # FIRST_SYSTEM_[GU]ID to LAST_SYSTEM_[GU]ID inclusive is the range for UIDs for dynamically allocated administrative and system accounts/groups.
 # Please note that system software, such as the users allocated by the base-passwd package, may assume that UIDs less than 100 are unallocated.
 FIRST_SYSTEM_UID=100
 LAST_SYSTEM_UID=999
 
 # FIRST_[GU]ID to LAST_[GU]ID inclusive is the range of UIDs of dynamically allocated user accounts/groups.
 FIRST_UID=1000
 LAST_UID=29999
 
 # The USERGROUPS variable can be either "yes" or "no".  If "yes" each created user will be given their own group to use as a default.  If "no", each created user will be placed in the group whose gid is USERS_GID (see below).
 USERGROUPS=yes


La commande adduser permet aussi de rajouter facilement un utilisateur à un groupe donné :

Syntaxe : adduser <le login> <le groupe>

Exemple :

 # adduser pierre audio

Pour vérifier, on dispose de 3 possibilités : - grep audio /etc/group - id pierre - groups pierre

Le répertoire /etc/skel (skeleton : squelette) contient les fichiers par défaut à copier dans les répertoires de travail des utilisateurs nouvellement créés.

Modifier un utilisateur

[modifier | modifier le wikicode]

La commande usermod permet de modifier les informations relatives à un utilisateur donné.

Dans certains cas, il sera plus simple de modifier directement les fichiers /etc/passwd et /etc/group plutôt que d'utiliser cette commande.


Supprimer un utilisateur

[modifier | modifier le wikicode]

La commande userdel permet de supprimer des utilisateurs.

Sous Debian, on utilisera plutot la commande deluser qui offre plus d'options (notamment la possibilité de créer une archive de tous les fichiers de l'utilisateur avant de supprimer son répertoire de travail).

De la même manière que adduser, la commande deluser dispose du fichier de configuration /etc/deluser.conf qui permet de spécifier son comportement par défaut.

À faire...link={{{link}}}

description du fichier deluser.conf

Extrait de deluser.conf

 REMOVE_HOME = 0 
 REMOVE_ALL_FILES = 0
 
 # Backup files before removing them. This options has only an effect if REMOVE_HOME or REMOVE_ALL_FILES is set.
 BACKUP = 0
 BACKUP_TO = "."
 
 # delete a group even there are still users in this group
 ONLY_IF_EMPTY = 0
 
 # exclude these filesystem types when searching for files of a user to backup
 EXCLUDE_FSTYPES = "(proc|sysfs|usbfs|devpts|tmpfs)"

Gérer les groupes

[modifier | modifier le wikicode]

Ajouter un groupe

[modifier | modifier le wikicode]

La commande groupadd permet d'ajouter un groupe.

 # groupadd compta

Sous Debian, on dispose de la commande addgroup, qui est en réalité un lien vers la commande adduser.

 # which addgroup
 /usr/sbin/addgroup
 # ls -l /usr/sbin/addgroup
 lrwxrwxrwx 1 root root 7 2007-10-24 12:53 /usr/sbin/addgroup -> adduser
 # addgroup compta
 Ajout du groupe « compta » (identifiant 1004)...
 Terminé.


Modifier un groupe

[modifier | modifier le wikicode]

La commande groupmod permet de modifier les informations relatives à un groupe donné.

Pour ajouter un utilisateur à un groupe :

usermod -g group_name user_name

Dans certains cas, il sera plus simple de modifier directement le fichier /etc/group plutôt que d'utiliser cette commande.

Supprimer un groupe

[modifier | modifier le wikicode]

La commande groupdel permet de supprimer des groupes.

Sous Debian, on dispose de la commande delgroup, qui est en réalité un lien vers la commande deluser.

 # which delgroup
 /usr/sbin/delgroup
 # ls -l /usr/sbin/delgroup
 lrwxrwxrwx 1 root root 7 2007-10-24 12:53 /usr/sbin/delgroup -> deluser


Modifier manuellement les fichiers /etc/passwd, /etc/shadow, /etc/group et /etc/gshadow

[modifier | modifier le wikicode]

Dans certains cas, il est plus simple d'éditer manuellement les fichiers de configuration /etc/passwd, /etc/shadow, /etc/group et /etc/gshadow plutôt que d'utiliser les commandes précédement évoquées.

Les commandes suivantes permettent de garantir qu'un seul root est en train de modifier un de ces fichiers :

  1. vipw : modification du fichier /etc/passwd
  2. vipw -s : modification du fichier /etc/shadow
  3. vigr : modification du fichier /etc/group
  4. vigr -s : modification du fichier /etc/gshadow

Pour plus d'information, se reporter aux pages de manuel (man vipw et man vigr).


Le processus d'initialisation

Le chargement du noyau Linux

[modifier | modifier le wikicode]

Lorsque l'on allume son ordinateur, la carte mère effectue un test automatique qui se charge de tester le bon fonctionnement des composants de la carte mère (processeur, mémoire, etc.). Ce test s'appelle le POST (Power-On Self Test). Si tout est OK, ce test se termine par un (et un seul) bip.

Ceci fait, le BIOS charge ensuite le programme stocké dans le boot secteur du disque dur.

Sur architecture PC, il existe deux programmes permettant de charger le noyau Linux, ou un autre système d'exploitation.

LILO (LInux LOader) a été le premier logiciel permettant d'effectuer cette opération.

Exemple de fichier de configuration de Lilo (/etc/lilo.conf) :

 boot=/dev/hda
 map=/boot/map
 install=/boot/boot.b
 default=linux
 prompt
 timeout=50
 message=/boot/message
 # Premiere section : boot Windows
 other=/dev/hda1
       label=windows
       table=/dev/hda
 # Deuxieme section: boot Linux
 image=/boot/vmlinuz
       label=linux
       root=/dev/hda4
       append="acpi=off"
       read-only
 # Troisieme section: boot Linux - mode mono-utilisateur
 image=/boot/vmlinuz
       label=linux_single_user
       root=/dev/hda4
       append="single acpi=off"
       read-only

Ce fichier se compose de paramêtres communs (disque dur de boot, timeout ...) et de sections pour chaque système d'exploitation à booter.

Chaque fois que l'on modifie ce fichier, il faut exécuter la commande lilo afin de re-écrire dans le boot secteur l'emplacement exact du noyau sur le disque dur.

 # lilo
 Added windows
 Added linux
 Added linux_single_user


Aujourd'hui, on utilise le programme GRUB (GRand Unified Bootloader) car il offre des possibilités supplémentaires.

Contrairement à Lilo, Grub sait lire une partition Linux (ext2/3, XFS, reiserFS ...) afin de charger son fichier de configuration (/boot/grub/menu.lst) et le(s) noyau(x) Linux.

Exemple de fichier de configuration de Grub (/boot/grub/menu.lst)

 default         0
 timeout         30
 color cyan/blue white/blue
 # Premiere section : Linux
 title           Debian GNU/Linux, kernel 2.6.18-5-686
      root       (hd1,0)
      kernel     /vmlinuz-2.6.18-5-686 root=/dev/sdb2 ro acpi=off
      initrd     /initrd.img-2.6.18-5-686
      savedefault
 # Deuxieme section : Linux mode mono-utilisateur
 title           Debian GNU/Linux, kernel 2.6.18-5-686 (single-user mode)
      root       (hd1,0)
      kernel      /vmlinuz-2.6.18-5-686 root=/dev/sdb2 ro acpi=off single
      initrd      /initrd.img-2.6.18-5-686
      savedefault
 # Troisieme section : Windows
 title           Windows NT/2000/XP (loader)
 root            (hd0,0)
 savedefault
 makeactive
 chainloader     +1

À la différence de Lilo, il n'est pas nécessaire d'exécuter une commande particulière lorsque l'on modifie ce fichier.

À faire...link={{{link}}}

parler du initrd

Messages du noyau Linux

[modifier | modifier le wikicode]

Une fois chargé en mémoire, le noyau va se charger de détecter et d'initialiser les composants de la carte mère et les périphériques présents.

Ces messages sont affichés sur l'écran lors du démarrage.

La commande dmesg permet de consulter ces messages ultérieurement. Exemples :

 # dmesg
 Linux version 2.6.18-5-686 (Debian 2.6.18.dfsg.1-13) (dannf@debian.org) (gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)) #1 SMP Fri Jun 1 00: 47:00 UTC 2007
 BIOS-provided physical RAM map:
 BIOS-e820: 0000000000000000 - 000000000008f000 (usable)
 ...

À noter que la commande dmesg affiche tous les messages détectés durant le boot, ainsi que les messages du noyau affichés par la suite (c.a.d. durant le fonctionnement du système).

Dans certains cas, l'affichage de la commande dmesg peut être tronqué (notamment les messages affichés durant le boot). Dans ce cas, on peut consulter le fichier /var/log/dmesg qui ne contient que les messages du boot.

Le processus init

[modifier | modifier le wikicode]

Une fois que le noyau a détecté l'ensemble des composants de l'ordinateur, il lance le processus du système : init.

Le processus init a comme particularité d'avoir le PID (Process IDentifiant) no 1 (c'est le premier processus), et de fait, il est le père de tous les autres.

Le processus init est lancé par le noyau pour démarrer les autres processus internes à ce dernier (noté entre crochet lorsque l'on fait ps aux), comme par exemple les processus kjournald qui gère les journaux des systèmes de fichiers journalisés. }}[1]

Le processus dispose d'un fichier de configuration, c'est le fichier /etc/inittab, contenant entre autres les runlevel, paramètres de init.

La syntaxe de ce fichier est la suivante :

code:niveau:action:commande

Exemple de fichier /etc/inittab[2] :

  # Indique le runlevel par défaut (ici le 2)
  id:2:initdefault:

  # Script d'initiation du boot du système
  si::sysinit:/etc/init.d/rcS

  # mode mono-utilisateur
  ~~:S:wait:/sbin/sulogin
 
  # runlevel 0 : arret du système
  l0:0:wait:/etc/init.d/rc 0

  # runlevel 1 : mono-utilisateur
  l1:1:wait:/etc/init.d/rc 1

  # runlevel 2 : multitâche sans réseau (runlevel par défaut sur Debian)
  l2:2:wait:/etc/init.d/rc 2

  # runlevel 3 : multitâche en réseau sans interface graphique
  l3:3:wait:/etc/init.d/rc 3

  # runlevel 4 : idem 3 mais pour la recherche
  l4:4:wait:/etc/init.d/rc 4

  # runlevel 5 : multitâche en réseau avec interface graphique et son
  l5:5:wait:/etc/init.d/rc 5

  # runlevel 6 : redémarrage du système
  l6:6:wait:/etc/init.d/rc 6

  # mode emergency
  z6:6:respawn:/sbin/sulogin

  # lance le reboot quand on appuie sur CTRL-ALT-DEL
  ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
 
  # Pour les onduleurs
  pf::powerwait:/etc/init.d/powerfail start
  pn::powerfailnow:/etc/init.d/powerfail now
  po::powerokwait:/etc/init.d/powerfail stop

  # Démarre les ttys en mode console
  1:2345:respawn:/sbin/getty 38400 tty1
  2:23:respawn:/sbin/getty 38400 tty2
  3:23:respawn:/sbin/getty 38400 tty3
  4:23:respawn:/sbin/getty 38400 tty4
  5:23:respawn:/sbin/getty 38400 tty5
  6:23:respawn:/sbin/getty 38400 tty6

Les runlevels et les scripts de démarrage

[modifier | modifier le wikicode]

Une fois que le système a effectué le runlevel S (initialisation minimale, comme par exemple vérifier l'intégrité des systèmes de fichiers), il va dans le runlevel 2 (Debian).

Les niveaux de Runlevel

  • S : Initialisation commune à tous les runlevels
  • 0 : Arrêt de la machine
  • 1 : Single-User
  • 2,3,4,5 : Fonctionnement normal
  • 6 : Reboot de la machine


Les principe de fonctionnement est le suivant :

  • tous les scripts de démarrage et d'arrêt sont stockés dans le répertoire /etc/init.d/.
  • les répertoires rc0.d, rc1.d ... rc6.d contiennent des liens qui vont appeler les scripts d'initialisation.
  • Si le lien commence par un S, le script va être appelé avec l'option start
  • Si le lien commence par un K, le script va être appelé avec l'option stop
  • le numéro qui suit le S ou le K indique l'ordre de démarrage ou d'arrêt.

Exemple, le serveur d'impression cupsys :

Le script de démarrage et d'arrêt est situé dans /etc/init.d :

 $ ls -l /etc/init.d/cupsys
 -rwxr-xr-x 1 root root 1977 2007-02-02 14:18 /etc/init.d/cupsys

Le lien suivant indique qu'il faut appeller ce script avec l'option start dans le runlevel 2 (runlevel par défaut sous Debian) :

 $ ls -l /etc/rc2.d/S20cupsys
 lrwxrwxrwx 1 root root 16 2007-10-24 15:40 /etc/rc2.d/S20cupsys -> ../init.d/cupsys

Le lien suivant indique qu'il faut appeller ce script avec l'option stop dans le runlevel 0 (arrêt de la machine) :

 $ ls -l /etc/rc0.d/K20cupsys
 lrwxrwxrwx 1 root root 16 2007-10-24 15:40 /etc/rc0.d/K20cupsys -> ../init.d/cupsys

Pour lister les daemons (actifs et inactifs) :

service --status-all

La commande update-rc.d

[modifier | modifier le wikicode]

Sous Debian, la commande update-rc.d permet de gérer les liens des runlevels.

Par exemple, pour enlever le démarrage automatique du serveur web apache :

  # update-rc.d -f apache remove
  Removing any system startup links for /etc/init.d/apache ...
   /etc/rc0.d/K91apache
   /etc/rc1.d/K91apache
   /etc/rc2.d/S91apache
   /etc/rc3.d/S91apache
   /etc/rc4.d/S91apache
   /etc/rc5.d/S91apache
   /etc/rc6.d/K91apache

Pour re-activer le démarrage automatique du serveur web apache :

  # update-rc.d apache defaults 91
  Adding system startup for /etc/init.d/apache ...
   /etc/rc0.d/K91apache -> ../init.d/apache
   /etc/rc1.d/K91apache -> ../init.d/apache
   /etc/rc6.d/K91apache -> ../init.d/apache
   /etc/rc2.d/S91apache -> ../init.d/apache
   /etc/rc3.d/S91apache -> ../init.d/apache
   /etc/rc4.d/S91apache -> ../init.d/apache
   /etc/rc5.d/S91apache -> ../init.d/apache

Pour connaitre la liste des options de la commande update-rc.d, il suffit de l’appeler sans argument :

  # update-rc.d
  usage: update-rc.d [-n] [-f] <basename> remove
         update-rc.d [-n] <basename> defaults [NN | sNN kNN]
         update-rc.d [-n] <basename> start|stop NN runlvl [runlvl] [...] .
                  -n: not really
                  -f: force

Pour activer Nginx :

 sudo update-rc.d nginx enable

La commande chkconfig

[modifier | modifier le wikicode]

attention : spécifique à REDHAT

Pour savoir en quel(s) runlevel est lancé un service (ie. postgresql)

# chkconfig --list postgresql

Pour positionner le lancement d'un service à un runlevel donné (ie. 3, 4 et 5)

# chkconfig --level 345 postgresql


À faire...link={{{link}}}

parler du modèle de script d'initialisation /etc/init.d/skeleton

Commandes pour manipuler les runlevel

[modifier | modifier le wikicode]

La commande runlevel permet de connaître le runlevel dans lequel on est :

 # runlevel
 N 2

Dans cet exemple, on est dans le runlevel n°2 (fonctionnement sous Debian). Le N nous indique le runlevel précédent (N (No) : pas de runlevel précédent)

La commande init ou la commande telinit permet de changer de runlevel. Exemple :

 # init 6

Arrêter ou redémarrer le système

[modifier | modifier le wikicode]

Pour arrêter le système :

  • Commun à tous les UNIX : shutdown
  • Spécifique Linux et systèmes récents : halt et reboot


 # shutdown -h now "changement de noyau" & 

NB : on rajoute un & pour garder la main

Il existe différentes options telles que :

  • -h (h pour halt) : arrêt immédiat
  • -r now (r pour reboot) : redémarrage immédiat
  • -h +10 : arrêt différé dans 10 minutes
  • -h 10:30 : arrêt à 10h30
  • -c : annule l'arrêt
  1. (en) Dr. Sam Liles, ICCWS2014- 9th International Conference on Cyber Warfare & Security: ICCWS 2014, Academic Conferences Limited, (lire en ligne)
  2. https://linuxonfire.wordpress.com/2012/10/19/what-are-init-0-init-1-init-2-init-3-init-4-init-5-init-6-2/


Les systèmes de fichiers

Les systèmes de fichiers Unix

[modifier | modifier le wikicode]

UNIX gère les i-nodes (data structure) dans une table qui contient des informations telles que :

  • le propriétaire ;
  • le groupe de fichiers ;
  • les droits d'accès ;
  • la date de modification ;
  • le type de fichier.

Sous UNIX et LINUX on trouve des partitions, ex. : boot, var, tmp, home qui permettent d'organiser le système de fichiers. Au départ EXT2 sous UNIX, aujourd'hui EXT3 par défaut correspond à EXT2 plus le journal, qui a l'avantage de consigner tout ce que fait le système, et qui en cas de crash lui permet de démarrer plus rapidement sans erreurs. Les deux formats sont compatibles. Il existe toutes sortes de systèmes de fichiers.

Non journalisés

[modifier | modifier le wikicode]
  • Ext et Ext2 : Extented FS version 2 (Linux, BSD)
  • FAT : File Allocation Table (DOS/Windows, Linux, BSD, OS/2, Mac OS X). Se décompose en plusieurs catégories :
    • FAT12 ;
    • FAT16 ;
    • FAT32 ;
    • VFAT.
  • FFS : Fast File System (BSD, Linux expérimental)
  • HFS : Hierarchical File System (Mac OS, Mac OS X, Linux)
  • HPFS : High Performance FileSystem (OS/2, Linux)
  • minix fs (minix, Linux)
  • S5 (UNIX System V, Linux)
  • UFS : Unix File System (BSD, Linux en lecture seule)
  • BFS (BeOS, Haiku, Linux en lecture seule et expérimental)
  • Ext3 : Extented FS version 3 - notamment pour l'ajout de la journalisation (Linux, BSD)
  • Ext4 : Extented FS version 4 - notamment pour étendre sa capacité à 1024 péta-octets (Linux expérimental)
  • HFS+ (Mac OS X, Linux)
  • JFS (AIX, OS/2, Linux)
  • JFS2 AIX5
  • LFS : (Linux)
  • NSS : Novell Storage Services (Netware et Suse Linux)
  • NTFS : New Technology FileSystem (Windows NT/2000/XP, Linux (écriture disponible grâce au pilote NTFS-3G), Mac OS X en lecture seule)
  • ReiserFS (Linux, BSD en lecture seule)
  • Reiser4 (Linux expérimental)
  • Spufs : Synergistic processing unit filesystem
  • UFS+ : Unix FS + journal (BSD, Linux en lecture seule)
  • XFS (Irix, Linux, BSD en lecture seule)
  • ZFS : Zettabyte FileSystem (Solaris10, FreeBSD 8.0)
  • AFS Andrew File System : (Aix, Linux)
  • Coda (Systèmes de fichiers informatique) (Linux)
  • NFS (tous les Unix, Linux, Mac OS X) (Windows pour la 4)
  • NCP NetWare Core Protocol (Novell NetWare, Linux en client seul)
  • SSHFS (tous les Unix ?, Linux)
  • SMB ou Server message block (Windows) (Linux, BSD et Mac OS X via Samba)
  • CIFS (Évolution de SMB, supporté par Samba ainsi que par Windows 2000 et XP)
  • GPFS, General Parallel File Sytem : Linux, AIX
  • LustreFS, Compression de Linux et de Cluster : Linux
  • OCFS2, développé par Oracle : Linux
  • PVFS2, Parallel Virtual FileSystem version 2 : Linux, Unix
  • CFS Cryptographic File System : FS chiffré (BSD, Linux)
  • cramfs : FS compressé (Linux en lecture seule)
  • EFS Encrypting File System : FS chiffré au dessus de NTFS (Windows)
  • ISO 9660 : en lecture seule sur tous les systèmes lisant les CDROM/DVDROM de données
  • JFFS et JFFS2 : FS pour support physique sans block, typiquement des cartes flash. Il est compressé et journalisé (Linux)
  • QNX4fs : FS utilisé pour le temps réel (QNX, Linux en lecture seule)
  • UDF : le format de disque universel (système de fichiers des DVD-ROM et des disques optiques réinscriptibles tels les CD-RW, DVD±RW, etc.)

Cette commande indique tous les systèmes de fichiers qui sont montés. On l'utilise pour accéder à une partition (en root pour accéder au CD-ROM ou au lecteur disquette).

Exemple : pour brancher une clé USB il faut la monter. On édite le fichier log par la commande tail -f /var/log/messages afin de savoir sur quel système de fichiers se trouve la clé. Puis on utilise mount pour accéder au contenu de la clé.

Exemple :

 # mount /dev/sdc1 /mnt   # le répertoire de son choix

Il est possible de préciser le système de fichier s'il ne le détecte pas

Syntaxe :

 # mount -t système de fichiers périphériques point de montage

Exemple :

 # mount -t vfat /dev/sdc1 /mnt

Lorsque l'on a fini d'utiliser la clé il faut la démonter à cause du cache.

Pour sauvegarder des montages réguliers, on utilise le fichier "fstab" détaillé ci-après, et sudo mount -a monte tous ceux qui sont dedans.

La commande umount permet de démonter une partition. Cette opération est indispensable si on veut être sûr que les données soient correctement écrites sur la partition. Exemples :

# umount /dev/sdc1

ou

# umount /mnt

Si la partition est en cours d'utilisation, on ne pourra pas la démonter et la commande umount va retourner un message d'erreur :

# umount /home
umount: /home: device is busy
umount: /home: device is busy

Deux commandes permettent de connaître les fichiers ouverts et les processus qui sont en train d'utiliser la partition et qui empêchent le démontage.

La commande lsof (list open files) permet de connaître les fichiers ouverts :

 # lsof /home
 COMMAND    PID   USER   FD   TYPE DEVICE    SIZE   NODE NAME
 gdm       2751   root    9w   REG  22,71     761 964774 /home/alex/.xsession-errors
 startkde  2882   alex  cwd    DIR  22,71    4096 964769 /home/alex
 ...

La commande fuser permet aussi de connaître les processus qui ont des fichiers ouverts sur la partition.

# fuser -m /home
/home:                2751  2882c  2961c  2962c  2965c  2967c  2969c
2971c  2976c  2978c  2979c  2981c  2983c  2984c  2986c  2990c  2992c
2993c  2995c  2997c  2999c  3002c  3037c  3683c  3684c  4102c  4161c

Le fichier /etc/fstab

[modifier | modifier le wikicode]

Le fichier /etc/fstab contient la liste des partitions montées automatiquement au démarrage du système.

Extrait d'un fichier fstab :

 # /etc/fstab: static file system information.
 #
 # <file system> <mount point>   <type>  <options>       <dump>  <pass>
 proc            /proc           proc    defaults        0       0
 /dev/sdb1       /               ext3    defaults,errors=remount-ro 0       1
 /dev/sdb6       /home           ext3    defaults        0       2
 /dev/sdb5       none            swap    sw              0       0
 /dev/hda        /media/cdrom0   udf,iso9660 user,noauto     0       0
 /dev/fd0        /media/floppy0  auto    rw,user,noauto  0       0

Pour monter automatiquement une partition au démarrage, il suffit de rajouter une ligne dans le fichier /etc/fstab, comme par exemple :

 /dev/hdc1       /media/winnt    ntfs    defaults        0       0

Pour chaque partition, on peut spécifier des options dans le fichier /etc/fstab. Options les plus courantes :

  • user : permet aux utilisateurs d'effectuer les opérations de montage / démontage
  • noauto : ne monte pas automatiquement la partition au boot

La commande sync force le noyau à écrire le cache. Pour savoir la taille qu'il reste sur la clé on utilisera la commande df (disk free) -h (human readable) pour avoir les informations en kilo,mega,giga. df -i affiche le pourcentage d'occupation de la table des i-nodes.

Pour les partages NFS, on peut lancer sudo apt install nfs-common.

Formater un système de fichiers

[modifier | modifier le wikicode]

La commande mkfs (make filesystem) permet de formater un système de fichiers. Exemple :

 # mkfs -t ext3 /dev/sdc1
À faire...link={{{link}}}

parler des inodes et superblocks

ATTENTION LE SYSTÈME DE FICHIER NE DOIT PAS ÊTRE MONTÉ

mkfs est un wrapper (aiguillage)

Afin de simuler le formatage, nous allons créer un disque dur virtuel. Pour simuler ceci avec un disque dur virtuel, on utilisera le pseudo périphérique loop.

 # modprobe loop
 # dd if=/dev/zero of=hd1 bs=1K count=100000

Ceci crée un fichier vide hd1 qui aura une taille de 100 Mo.

 # losetup /dev/loop0 hd1

On attache le pseudo-pérphérique /dev/loop0 à notre fichier hd1.

Une fois le disque dur virtuel crée on peut le formater :

 # mkfs -t ext3 /dev/loop0
 # mount /dev/loop0 /media/cleusb

Pour le démonter :

 # umount /media/cleusb

CAS PARTICULIER : pour les disquettes, on effectue en général un formatage de bas niveau :

 # fdformat /dev/fd0        # vérifie l'intégrité de la disquette
 # mkfs -t ext3 /dev/fd0    # formate la disquette

ATTENTION À BIEN DÉMONTER AU PRÉALABLE LE PÉRIPHÉRIQUE

La commande suivante permet de vérifier l'intégrité du système de fichiers :

 # fsck -t ext3 /dev/loop0 

L'option -c de fsck permet de vérifier les bad blocks (en lecture seule par défaut). L'option -v (verbose, soit verbeux) pour voir ce qu'il fait.

À faire...link={{{link}}}

parler des commandes : badblocks, tune2fs, dumpe2fs

Partition de swap

[modifier | modifier le wikicode]

Le SWAP signifie échange, il s'agit d'une mémoire virtuelle en effet lorsque la mémoire de l'ordinateur arrive à saturation, le système écrit sur une partition SWAP de façon à libérer de la mémoire.

Il est possible de créer une partition SWAP grâce à la commande mkswap :

 # mkswap /dev/sdb5

On utilisera la commande swapon /dev/sdb5 pour l'activer :

 # swapon /dev/sdb5

Avec la commande 'free,' il est possible de vérifier si le swap est activé :

 # free
 ...
 Swap:      1951856      65080    1886776

Pour lister les partitions SWAP :


 # cat /proc/swaps
 ...				     Type      Size	Used	Priority
 /dev/hda3                           partition	979956	307284	-1

Fichier de swap

[modifier | modifier le wikicode]

Il est possible de créer un fichier swap en complément d'une partition SWAP, pour faire ceci nous allons commencer par créer un fichier de huit gigaoctets :

  # dd if=/dev/zero of=/ficswap bs=1M count=8000

On initialise ensuite le fichier en swap :

  # mkswap /ficswap

On active le swap :

  # swapon /ficswap

Pour désactiver la partition de SWAP :

  # swapoff /ficswap

Si l'on tape la commande free on constate que la taille du swap a augmenté.

 $ free
               total       utilisé      libre     partagé tamp/cache   disponible
Mem:         7910624     5539632      294096      564916     2076896     1493484
Échange:    8388604     1252608     7135996

Pour visualiser son utilisation autrement :

  $ cat /proc/swaps
Filename				Type		Size		Used		Priority
/swapfile                               file		8388604		1225472		-2

Utilitaires disques-durs

[modifier | modifier le wikicode]

Technologie S.M.A.R.T.

[modifier | modifier le wikicode]

SMART est une technologie de monitoring des disques dur.

Nom du package apt : smartmontools

 # smartctl -d ata -a /dev/sda
 smartctl version 5.36 [i686-pc-linux-gnu] Copyright (C) 2002-6 Bruce Allen
 Home page is http://smartmontools.sourceforge.net/
 
 === START OF INFORMATION SECTION ===
 Model Family:     Western Digital Caviar SE (Serial ATA) family
 Device Model:     WDC WD800JD-22MSA1
 Serial Number:    WD-WMAM9TZ26746
 Firmware Version: 10.01E01
 User Capacity:    80 026 361 856 bytes
 Device is:        In smartctl database [for details use: -P show]
 ATA Version is:   7
 ATA Standard is:  Exact ATA specification draft version not indicated
 Local Time is:    Wed Dec  5 15:16:10 2007 CET
 SMART support is: Available - device has SMART capability.
 SMART support is: Enabled
 
 === START OF READ SMART DATA SECTION ===
 SMART overall-health self-assessment test result: PASSED
 
 General SMART Values:
 
 (...)
 
 Short self-test routine
 recommended polling time:        (   2) minutes.
 Extended self-test routine
 recommended polling time:        (  33) minutes.
 Conveyance self-test routine
 recommended polling time:        (   6) minutes.
 
 SMART Attributes Data Structure revision number: 16
 Vendor Specific SMART Attributes with Thresholds:
 ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
   1 Raw_Read_Error_Rate     0x000f   200   200   051    Pre-fail  Always       -       0
 
 (...)

Le fichier /etc/smartd.conf permet de programmer des tests, et l'envoie de messages d'alertes.

hdparm permet de configurer les paramètres d'accès au disque dur.

 #hdparm /dev/sdb
 
 /dev/sdb:
  IO_support   =  0 (default 16-bit)
  readonly     =  0 (off)
  readahead    = 256 (on)
  geometry     = 9729/255/63, sectors = 156301488, start = 0

Pour tester les performances on utilise l'option -tT

 # hdparm -tT /dev/sdb
 
 /dev/sdb:
  Timing cached reads:   888 MB in  2.00 seconds = 443.99 MB/sec
  Timing buffered disk reads:  174 MB in  3.00 seconds =  57.91 MB/sec

hddtemp utilise les données SMART du disque dur spécifié et retourne sa température.

 #hddtemp /dev/sda
 /dev/sda: WDC WD800JD-22MSA1: 31°C

L'option -n permet de ne renvoyer que la valeur de la température (utile pour les scripts)

 # hddtemp -n /dev/sda
 31


Le système virtuel /proc

Le système de fichiers virtuel /proc

[modifier | modifier le wikicode]

/proc n'existe pas sur le disque dur, il est fournit dynamiquement par le noyau, d'où le nom de virtuel.

Il permet de fournir des informations sur ce que voit le noyau.

En outre pour accéder à certains renseignements il sera nécessaire de monter obligatoirement /proc (définit dans /etc/fstab et fait automatiquement au boot).

 # cat /proc/cpuinfo

Les commandes ps, top, uptime (et bien d'autres) utilisent /proc pour récupérer des informations.

Quelques exemples d'informations :

 # cat /proc/partitions
 major minor  #blocks  name
 8     0    312571224  sda
 8     1        96358  sda1
 8     2    107418622  sda2
 8     3    117186142  sda3
 # cat /proc/swaps
 Filename               Type         Size     Used      Priority
 /dev/sd4          partition      5017592  1694624      -1
 # cat /proc/cpuinfo
 processor     : 0
 vendor_id     : GenuineIntel
 cpu family    : 6
 model         : 15
 model name    : Intel(R) Core(TM)2 CPU          6600  @ 2.40GHz
 stepping      : 6
 cpu MHz       : 2402.051
 cache size    : 4096 KB
 ...
 processor     : 1
 vendor_id     : GenuineIntel
 cpu family    : 6
 model         : 15
 model name    : Intel(R) Core(TM)2 CPU          6600  @ 2.40GHz
 stepping      : 6
 cpu MHz       : 2402.051
 cache size    : 4096 KB
 ...

Certains répertoires commencent par des numéros, il s'agit des PID (Process IDentifier) des processus en cours d'exécution. À l'intérieur, on peut obtenir des renseignements sur le processus et sur son contexte d'exécution. Exemples :

 # cat /proc/8595/cmdline
 scribus
 # cat /proc/8595/environ
 SSH_AGENT_PID=4687
 DM_CONTROL=/var/run/xdmctl
 SHELL=/bin/bash
 ...
 # cat /proc/8595/maps
 08048000-08945000 r-xp 00000000 fd:00 1519957    /usr/bin/scribus
 ...
 b4ecb000-b4f9e000 r-xp 00000000 fd:00 92595256   /usr/lib/libBLT.2.4.so.8.4
 ...
 # cat /proc/8595/status
 Name:   scribus
 State:  S (sleeping)
 SleepAVG:     78%
 Tgid:   8595
 Pid:    8595
 PPid:   4720
 TracerPid:    0
 Uid:    1000  1000      1000    1000
 Gid:    1000  1000      1000    1000
 FDSize: 32
 Groups: 4 20 24 25 29 44 46 107 109 111 1000 1001
 VmPeak:   892432 kB
 VmSize:    84236 kB
 VmLck:         0 kB
À faire...link={{{link}}}

Parler de /proc pour modifier dynamiquement le comportement du noyau

À faire...link={{{link}}}

Parler de /sys et des sysctl


Les périphériques /dev

Les fichiers spéciaux

[modifier | modifier le wikicode]

Nous allons nous intéresser plus particulièrement au répertoire /dev :

Ce dossier contient tous les périphériques matériels, par exemple : un lecteur CD-ROM, une carte son, une carte réseau, etc.

Il contient également les pseudo-périphériques. Quelques exemples :

  • /dev/zero génére des zéros
  • /dev/random génère de l'aléatoire
  • /dev/null constitue un trou noir à octets, et notamment utilisé pour se débarrasser des fichiers et des affichages
  • /dev/loop0 permet de créer de faux périphériques de type block (stockage) à partir de fichiers créés avec la commande dd

Si on liste le contenu de /dev

# ls -l /dev | more

On s'aperçoit que certains périphériques sont de type c (de l'anglais character) dans ce cas ils communiquent octet par octet. Ex : un port série.

Alors que d'autres sont de types b (blocks) ils communiquent par blocs de données (ex: un disque dur).

Par ailleurs le noyau identifie chaque périphérique au moyen de deux numéros, le majeur (en vert) et le mineur (en rouge), exemple :

# ls -l /dev/sda*
brw-rw---- 1 root disk 8, 0 2007-09-22 18:08 /dev/sda
brw-rw---- 1 root disk 8, 1 2007-09-22 18:08 /dev/sda1
brw-rw---- 1 root disk 8, 2 2007-09-22 18:08 /dev/sda2
brw-rw---- 1 root disk 8, 3 2007-09-22 18:08 /dev/sda3
brw-rw---- 1 root disk 8, 4 2007-09-22 18:08 /dev/sda4

Les partitions sda1 à sda4 ont le même majeur. Le majeur correspond au premier disque dur SCSI ou SATA.

Le noyau identifie ensuite chaque partition grâce au numéro mineur.

Les majeurs et les mineurs sont définis dans la documentation accompagnant le noyau Linux dans le fichier /usr/src/linux/Documentation/devices.txt ... et oui! comme vous pouvez vous en douter, le noyau Linux est livré avec une documentation très fournie disponible dans le répertoire Documentation/ livré avec le noyau, voir chapitre Le noyau Linux et les modules.

Extrait de /usr/src/linux/Documentation/devices.txt :

 ...
 8 block     SCSI disk devices (0-15)
               0 = /dev/sda            First SCSI disk whole disk
              16 = /dev/sdb            Second SCSI disk whole disk
              32 = /dev/sdc            Third SCSI disk whole disk
              ...
             240 = /dev/sdp            Sixteenth SCSI disk whole disk
              ...
             Partitions are handled in the same way as for IDE
             disks (see major number 3) except that the limit on
             partitions is 15.
 ...

La commande mknod sert à créer de nouveaux périphériques :

# mknod /dev/bidon b 42 0

On peut également directement lui affecter les droits d'accès :

# mknod -m 660 /dev/bidon b 42 0

Cette commande affiche les informations sur les périphériques hardware. Par exemple pour déterminer la version et puissance de la RAM :

sudo dmidecode --type 17

 Getting SMBIOS data from sysfs.
 SMBIOS 3.0 present.

 Handle 0x0019, DMI type 17, 40 bytes
 Memory Device
        Array Handle: 0x0018
        Error Information Handle: Not Provided
        Total Width: 64 bits
        Data Width: 64 bits
        Size: 4096 MB
        Form Factor: SODIMM
        Set: None
        Locator: ChannelA-DIMM0
        Bank Locator: BANK 0
        Type: DDR3
        Type Detail: Synchronous
        Speed: 1600 MHz
        Manufacturer: 0215
        Serial Number: 00000000
        Asset Tag: 9876543210
        Part Number: CMSO8GX3M2C1600C11
        Rank: 2
        Configured Clock Speed: 1600 MHz
        Minimum Voltage: Unknown
        Maximum Voltage: Unknown
        Configured Voltage: 1.35 V


L'ordonnanceur de travaux cron

cron est un daemon qui permet de programmer des tâches répétitives.

Configuration de cron

[modifier | modifier le wikicode]

Le fichier de configuration de cron est /etc/crontab, éditable uniquement par le root. Exemple :

  # /etc/crontab: system-wide crontab
  # Unlike any other crontab you don't have to run the `crontab'
  # command to install the new version when you edit this file
  # and files in /etc/cron.d. These files also have username fields,
  # that none of the other crontabs do.
  
  SHELL=/bin/sh
  PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
  
  # m h dom mon dow user  command
  17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
  25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
  47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
  52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
  #

Si on veut recevoir un mail à chaque échec d'une tâche, ajouter :

MAILTO=Mon@Email.com

Voici la syntaxe de la programmation de la fréquence de répétition :

m h dom mon dow user command
code signification valeur ou note
m minutes 0 à 60
h heure 0 à 23
dom day of month / jour du mois 1 à 31
mon month / mois 1 à 12
dow day of week / jour de la semaine 0 à 7, 0= dimanche, 7= dimanche, on peut aussi mettre les trois premières lettres du jour en anglais
user user / utilisateur utilisateur appelant la commande
command command / commande commande appelée par l'évènement

Tous les champs peuvent être remplacés par "*" si on souhaite toutes les valeurs correspondantes.

Notation avancée :

On peut définir des valeurs multiples ou des plages de valeurs pour les heures, les jours etc... :

Par exemple, au lieu de faire plusieurs lignes de cron pour plusieurs fois le même évènement, on peut mettre plusieurs valeurs séparées par ","

On peut aussi indiquer une plage de valeur dont les limites sont séparées par "-".

De même, on peut définir des fréquences avec "/". Par exemple, toutes les 2h s'écrira */2 dans la deuxième colonne.

  0 * 7 3 * root beep

L'utilisateur root appelle la commande beep, toutes les heures à 0 minute le 7 mars.

  15,45 8 * * * root beep

L'utilisateur root appelle la commande beep, à 8h15 et 8h45 tous les jours.

  0 8-18 * * * toto beep

L'utilisateur toto appelle la commande beep toutes les heures de 8h à 18h tous les jours.

  0 12 * * mon,wed,fri titi beep

L'utilisateur titi appelle la commande beep à midi tous les lundi, mercredi et vendredi.

  0 */2 * * 1-5 tata beep

L'utilisateur tata appelle la commande beep toutes les 2h du lundi au vendredi.

Répertoires de cron

[modifier | modifier le wikicode]

En plus de la commande cron, il existe des répertoires spécifiques pour définir des commandes cron à fréquences précises. Ces répertoires particuliers sont localisés dans le repertoire /etc

Titre du tableau
cron.hourly toutes les heures
cron.daily tous les jours
cron.weekly toutes les semaines
cron.monthly tous les mois

Il suffit de mettre un fichier script exécutable dans le répertoire choisi pour qu'il s'exécute.

Dans le même ordre d'idée, on peut rajouter des répertoires particuliers reliés à des fonctions spécifiques d'une entreprise ou d'une personne, pour exécuter des cron. Il suffit de mettre des fichiers contenants des lignes cron dans le répertoire /etc/cron.d/.

exemple : /etc/cron.d/comptabilite


Une fois le crontab modifié, il faut lui faire prendre en compte les modifications. Pour cela, on dispose de trois méthodes :

 # kill -1 <PID du processus cron>

ou

 # killall -1 cron

ou

 # /etc/init.d/cron restart

Les crontabs utilisateurs

[modifier | modifier le wikicode]

Un utilisateur peut programmer ses propres crontabs. Ces crontabs sont stockés dans /var/spool/cron/crontabs/<login>

Titre du tableau
crontab -l donne la liste des crontabs actifs
crontab -e permet d'éditer son propre crontab

En utilisant la commande crontab , il n'est pas nécessaire de relancer le daemon cron pour que les modifications soient prises en compte.

Droits d'accès

[modifier | modifier le wikicode]
À faire...link={{{link}}}

parler de cron.allow et cron.deny



L'horloge Linux

[modifier | modifier le wikicode]

Avant de planifier ses opérations il est primordial de bien s'assurer que les informations de temps système sont correctes.

Réglage manuel

[modifier | modifier le wikicode]

Pour connaître la date actuelle on utilise la commande date :

 # date
 mer aoû 19 12:31:00 CEST 2009

Cette même commande accepte des arguments pour forcer la mise à jour de l'horloge système au format "MMJJHHmmYYYY". Il faut disposer des droits super utilisateur pour cette action.

 # date 081912372009
 Wed Aug 19 12:37:00 CEST 2009

Enfin, il existe deux horloges dans le système, l'horloge matérielle et l'horloge logicielle. Pour synchroniser ces deux horloges utilisez la commande hwclock.

 # hwclock --systohc  //initialise l'heure matérielle à partir de l'horloge système
 # hwclock --hctosys  //initialise l'heure système à partir de l'horloge matérielle

Réglage automatique (NTP)

[modifier | modifier le wikicode]

Network Time Protocol (NTP) est un protocole de synchronisation de l'heure courante. Pour que l'heure de la machine soit récupérée du réseau :

date
sudo apt-get install ntp
sudo service ntp stop
sudo ntpd -gq
sudo service ntp start
date

Logo

Lors du changement d'heure hiver/été où on passe de 2 h à 3 h, les tâches programmées entre 2 h 00 et 2 h 59 ne seront donc pas exécutées. À l'inverse, lors du changement d'heure été/hiver, ces mêmes tâches seront exécutées deux fois (à 3 h, il est encore 2 h). Afin d'éviter ce désagrément, la plupart des systèmes Unix sont configurés pour utiliser le temps universel coordonné (UTC), qui n'est pas sujet à ces règles de changement d'heure.


Le backup : tar et gzip

Régulièrement, il vous faudra archiver des informations, en particulier des données utilisateurs. Pour cela, le système GNU/Linux intègre 2 outils: TAR et GZIP. Comme vous allez le voir, ces 2 outils sont complémentaires dans le procéssus d'archivage des données, ou backup.

Archiver des données avec tar

[modifier | modifier le wikicode]

Le nom de cette commande vient du système de sauvegarde sur bande : Tape ARchive. Le principe est simple : prendre un grand nombre de fichiers (et/ou de répertoires) et les regrouper en un seul gros. tar est une commande récursive. Elle va archiver toute l'arborescence en partant du répertoire que vous lui spécifiez.


Syntaxe :

 $ tar cf <nom du fichier tar> <nom du répertoire à archiver>

Si vous rajoutez v après c, la commande va afficher à l'écran toutes ses actions.

Exemple :

  # tar cvf etc.tar /etc
  tar: Removing leading `/' from member names /etc
  # ls -l etc.tar
  -rw-r--r-- 1 root root 2829320 Nov 12 18:41 etc.tar

Note: Comme vous le voyez sur notre exemple, la commande tar retire le / du répertoire parent. En faisant cela, elle évite les écrasements de fichiers dans le cas ou vous restituez votre fichier au même endroit.

Test de l'archive

[modifier | modifier le wikicode]

Une fois l'archivage effectué, vous pouvez vérifier votre archive avec la commande :

  $ tar tf ''<nom du fichier tar>''
  # tar xf ''<nom du fichier tar>''

De même, si vous rajoutez v après x, la commande affichera les informations.

Exemple :

  # tar xvf etc.tar
  etc/
  etc/GNUstep/
  etc/GNUstep/Defaults/
  etc/GNUstep/Defaults/WMGLOBAL
  etc/GNUstep/Defaults/WMRootMenu
  etc/GNUstep/Defaults/WMState
  ...

La commande gzip est un compresseur de données. Il va partir d'un fichier et compresser l'information pour en diminuer la taille.

Compresser un fichier

[modifier | modifier le wikicode]
  $ gzip ''<nom du fichier à compresser>''

Exemple :

  # ls -l images.tar*
  -rw-r--r-- 1 root      root      10240 Nov  8 20:00 images.tar
  # gzip images.tar
  # ls -l images.tar*
  -rw-r--r-- 1 root      root       4662 Nov  8 20:00 images.tar.gz

En utilisant ls -l , on voit très bien la taille du fichier images non compressé, qui est passé de 10240 octets à 4662 octets.

Pour compresser chaque fichier d'un dossier, utiliser l'option "recursive" : gzip -r. Par contre gzip ne permet pas de compresser tout le dossier dans un seul fichier .gz (d'où l’intérêt de le combiner avec tar).

Pour compresser sous un autre nom, deux solutions :

  • -S (suffixe)
  • -c (sortie standard). Ex : gzip -c test.log > $(date +"%y_%m_%d")_test.log.gz

Décompresser un fichier

[modifier | modifier le wikicode]
  $ gzip -d ''<nom du fichier gzip>''

Exemple :

  # ls -l images.tar*
  -rw-r--r-- 1 root      root       4662 Nov  8 20:00 images.tar.gz
  # gzip -d images.tar.gz
  # ls -l images.tar*
  -rw-r--r-- 1 root      root      10240 Nov  8 20:00 images.tar
 On peut aussi utiliser gunzip.

Il existe la commande zgrep pour filtrer le contenu des fichiers gzippés, évitant ainsi de les décompresser, grepper, puis recompresser. Ex :

zgrep 'ma chaine' *.gz

Combiner tar et gzip

[modifier | modifier le wikicode]

On peut combiner tar et gzip pour archiver et compresser en une action (option z) :

 # tar cvzf <nom du fichier archivé compressé>.tar.gz <nom du répertoire à archiver et compresser>
À faire...link={{{link}}}

parler des autres outils : dump/restore, compress, cpio ...

Les alternatives à gzip

[modifier | modifier le wikicode]

bzip2 est un autre algorithme de compression. Il est plus performant mais beaucoup moins rapide que gzip.

Pour compresser un fichier avec bzip2 :

 # bzip2 unfichier

Pour le décompresser :

 # bzip2 -d unfichier.bz2


Tout comme gzip, on peut indiquer à tar d'utiliser bzip2 pour compresser l'archive (option j):

 # tar cjf cible.tar.bz2 /repasauver

Comparaison des logiciels de compression

[modifier | modifier le wikicode]

Comparaison des logiciels de compression

Un shell script de sauvegarde journalière de /etc

[modifier | modifier le wikicode]

Voici un shell script qui permet de sauvegarder quotidiennement le répertoire /etc :

 #!/bin/bash
 #
 # Ne pas oublier : 
 # - de creer le repertoire /backup : mkdir /backup
 # - de rendre ce script executable : chmod +x backup_etc
 #
 # Tester le script une fois manuellement : ./backup_etc
 #
 # Le rajouter dans la crontab
 DATEJOUR=$(date +"%Y-%m-%d-%H-%M-%S")
 REPABACKUPER="/etc"
 REPBACKUP="/backup"
 NOMFIC=$REPBACKUP/etc-$DATEJOUR.tgz
 tar czf $NOMFIC $REPABACKUPER


Les sauvegardes incrémentales

[modifier | modifier le wikicode]

La commande find permet de trouver des fichiers correspondants à des critères donnés. On peut par exemple connaître la liste des fichiers modifiés depuis 1 jour :

 # find / -mtime -1 -type f

En combinant la commande find et la commande tar, on peut ainsi facilement sauvegarder les fichiers modifiés depuis la veille, et ainsi réaliser une sauvegarde incrémentale.

La commande suivante retourne la liste de tous les fichiers du système modifiés depuis hier (en excluant les fichiers contenus dans /proc, /dev et /sys), et stocke la liste de ces fichiers dans le fichier /tmp/fic_du_jour:

 # find / \( -path /proc -o -path /dev -o -path /sys -o -path /run \) -prune -o 
   -mtime -1 -type f -print > /tmp/fic_du_jour

On peut ensuite appeler la commande tar avec l'option -T qui permet d'indiquer la liste des fichiers à archiver :

 # tar cz -T /tmp/fic_du_jour -f backup.tgz

Grâce aux tubes (pipe), on peut s'affranchir de passer par un fichier temporaire et directement enchaîner les deux commandes :

 # find / \( -path /proc -o -path /dev -o -path /sys \) -prune -o 
   -mtime -1 -type f -print | tar cz -T - -f backup.tgz

Toujours grâce aux tubes, on peut découper le fichier obtenu en plusieurs fichiers d'une taille donnée :

 # find / \( -path /proc -o -path /dev -o -path /sys \) -prune -o 
   -mtime -1 -type f -print | tar cz -T - | split - -b 5m backup_
 
 # ls -lh backup_*
 -rw-r--r-- 1 root root 5,0M 2007-12-06 14:30 backup_aa
 -rw-r--r-- 1 root root 5,0M 2007-12-06 14:30 backup_ab
 -rw-r--r-- 1 root root 5,0M 2007-12-06 14:30 backup_ac
 -rw-r--r-- 1 root root 3,5M 2007-12-06 14:30 backup_ad

Pour re-assembler les fichiers découpés, on utilise la commande cat :

 # cat backup_* > backup.tgz

Les logiciels spécialisés

[modifier | modifier le wikicode]
À faire...link={{{link}}}

parler de rsync, amanda, bacula, mondorescue et partimage


ghost avec partimage

installation d'un serveur d'images

[modifier | modifier le wikicode]

sur le serveur

  apt-get install partimage partimage-server
  apt-get install ssh

ensuite il faut faire plusieurs modifications.

Allez dans le répertoire partimaged et modifier le fichier partimagedusers afin de donner l'autorisation de se connecter a votre utilisateur.

  cd /etc/partimaged/
  echo "mon user">>partimagedusers ou vi partimagedusers

il faut créer un dossier qui contiendra les images.

  mkdir /opt/img

partimage fonctionnant avec l'utilisateur partimag il faut lui donner les droits.

  chown -R partimag:partimag /opt

redemmarer le service

  /etc/init.d/partimaged restart

installation de partimage

   #apt-get install partimage ssh

avec l'utilisateur root on lance partimage

   #partimage

la vous tombez sur un interface graphique


  1. sélectionner la partition à sauvegarder.
  2. saisissez le nom de l'image ici: /opt/img/mondebian.
  3. cocher la case connexion au serveur entrer l'adresse ip puis F5.

il devrait vous demander un login et un mot de passe défini dans /etc/partimaged/partimagedusers.

On donne une description de l'image On sélectionne le type de compression et ensuite " OK ".

sauvegarder une partition NTFS

[modifier | modifier le wikicode]

telechargement de KNOPPIX ici.

rebooter votre machine avec knoppix une fois démarré si il n'y a pas de DHCP sur le réseaux il faut attribuer un adresse IP.

  # ifconfig eth0 192.168.30.210 255.255.255.0

et lancer partimage

 # partimage


restauration

  À faire


sauvegarde de fichiers avec rsync

Serveur de sauvegardes avec rsync ssh

[modifier | modifier le wikicode]

sur le serveur

  #apt-get install rsync ssh

sur le client

  #apt-get install rsync ssh


Il est nécessaire de générer une paire de clés se reporter à la partie ssh-keygen ici

sauvegarder des fichiers

  rsync -P -av /répertoire_à_sauver/  utilisateur@192.168.30.210:/répertoire_de_destination_sur_le_serveur/

options rsync

  1. -a : permet de copier tous les fichiers, y compris les fichiers et dossiers cachés (fichiers commençant par .)
  2. -c : active la compression de type gzip pendant le transfert.
  3. -t Conserver la date
  4. -p Conserver les permissions
  5. -o Conserver le propriétaire
  6. -g Conserver les groupes
  7. --delete Effacer sur la destination
  8. -v affiche les opérations avant de les effectuer
  9. --ignore-existing Ignorer les fichiers existants
  10. -x Ne pas quitter le système de fichier
  11. --progress Montrer la progression
  12. --size-only Taille seulement
  13. --delete : si le fichier « linux » existe dans « destination » et pas dans « source », il sera supprimé.


Les fichiers journaux syslog

syslog est un daemon dédié à l'enregistrement des journaux (log) Les journaux log sont stockés dans le répertoire /var/log/

Voici le contenu du répertoire /var/log



un journal log est un fichier texte dont les évènements sont enregistrés, un par ligne.


« Extrait de fichier syslog - les messages sont enregistrés avec la date et l'heure de l'évènement »


Dans chaque ligne d'évènement on distingue :

  • La date à laquelle l'évènement a été déclenché
  • Le processus déclencheur de l'évènement
  • Le processus ayant demandé l'ajout du message correspondant au log
  • Le niveau de gravité du message (priority)

TP : afficher les dernières procédures de login, l'heure des tentatives, si elles ont échoué ou réussi.

 #tail -f /var/log/auth.log

le fichier log /var/log/auth.log est le journal des authentifications.

 Important : l'heure du système doit être à la bonne heure et à la bonne date, sinon la datation   
 des messages est éronnée, ce qui complique, si besoin est, la recherche d'anomalies de fonction-
 nement du système dans les messages enregistrés dans les fichiers log.     

syslog possède un fichier de configuration syslog.conf, il est stocké dans le répertoire /etc . On peut modifier ce fichier pour l'adapter à nos besoins en messages d'évènements survenus sur le système : envoi de mail, authentification, etc...

Ce fichier est un fichier texte, dont chaque ligne est séparée en deux parties :

  • 1ère partie : (le ou) les processus demandeurs (séparés par un point virgule) suivi d'un point et de leur niveau de priorité : <dispositif>.<niveau>

<dispositif> est appelé facility <niveau> est appelé priority, c'est le niveau de criticité du log. Exemple : panic, error, warning, debug, info...

  • 2ème partie : le fichier log correspondant (qui reçoit le message et l'ajoute à la liste de ses messages) : <fichier de log>


« Voici un exemple de fichier /etc/syslog.conf »
À faire...link={{{link}}}

expliquer en détail la syntaxe du fichier

À faire...link={{{link}}}

lister les différents fichiers de log et leur utilité

À faire...link={{{link}}}

parler des outils de surveillance et d'analyse des logs : swatch, logwatch, logreport ...

L'utilitaire swatch peut surveiller un fichier de log et réaliser une action s'il voit passer un mot-clé.

Exemple de fichier de configuration /root/.swatchrc :

#
# À appeler avec la ligne suivante :
#
# swatch --config-file=/root/.swatchrc --tail-file=/var/log/auth.log
#

watchfor        /FAILED/
               echo red
               #mail addresses=alex\@localhost,subject=Alerte AUTH
               exec /usr/bin/zenity --error --text "$_"

watchfor        /Successful/
               echo green

Le Serveur de log

[modifier | modifier le wikicode]

On peut être amené à créer un serveur de log si on possède plusieurs serveurs dont on souhaite centraliser les log, par mesure de sécurité ou par commodité (facilité de consultation, d'archivage, etc...)

Si on monte un serveur de log, il suffit d'ajouter :

  • côté serveurs envoyant les messages de log :----> une ligne dans le fichier syslog.conf de chaque serveur en mentionnant les processus envoyant les messages (exemple : *.* pour tous) et le nom du serveur de log ou son adresse IP précédée de @, comme ainsi :
 *.*         @log_server ou           
 *.*         @192.168.30.221  ou      
 mail.inf    @log_server   (stocke les log d'envoi de mail)
  • côté serveur de log :----> l'option SYSLOGD ="-r" dans le fichier /etc/default/syslogd


Schéma de réseau avec Serveur de log
Extrait du fichier syslogd d'un serveur non dédié au log - la commande SYSLOGD n'est pas activée

La commande logger

[modifier | modifier le wikicode]

La commande logger permet d'envoyer un message à syslog même connecté en utilisateur

 $ logger -p auth.info -t unnom "mon message à envoyer"

-t permet d'ajouter unnom, un tag c'est un mot quelconque pour signer le message

Le programme logrotate

[modifier | modifier le wikicode]

logrotate est un fichier texte situé dans etc/, il sert à configurer 'la politique des rotations' des logs. Effectivement, il faut supprimer les anciens fichiers log, sinon on risque une saturation du disque. Pour cela on peut programmer des rotations de logs qui se traduisent par l'archivage des fichiers log assez récents et la suppression des anciens, et ceci avec une périodicité bien définie.

La page man de logrotate donne toute la syntaxe et les mots clé.

Les lignes importantes à configurer du fichier /etc/logrotate.conf:

  • monthly : tourner les logs tous les mois (enlever le weekly existant dans le fichier de configuration par défaut Debian)
  • rotate n : conserver n fichiers (ici un fichier par mois [mettre 60, soit 5 ans])
  • create : créer un nouveau fichier de log
  • compress : compresser le fichier tourné

Pour tester vos fichiers de configuration logrotate.conf (et donc de logrotate.d/*) taper : /usr/sbin/logrotate -dv /etc/logrotate.conf.

À faire...link={{{link}}}

extrait du fichier logrotate.conf

À faire...link={{{link}}}

parler du répertoire /etc/logrotate.d


Installation de nouveaux logiciels

Au début de linux, installer un logiciel libre nécessitait de récupérer les sources et de les compiler. Cette étape de compilation pouvait être fastidieuse car il fallait disposer de toutes les librairies utilisées par le logiciel.

Redhat a énormément simplifié ce processus en inventant le format RPM (Redhat Package Manager), format qui propose les logiciels open-source pré-compilés.

Debian s'en est inspiré pour créer le format DEB.

  • REDHAT = logiciel.x.y.rpm
  • DEBIAN = logiciel.x.y.deb

x et y correspondent aux numéros de version du logiciel.

dpkg est le programme qui permet d'installer, mettre à jour et supprimer un logiciel en format DEB. Sur Redhat, la commande rpm fait la même chose.

Installer un fichier DEB

[modifier | modifier le wikicode]

L'option -i (i: install) de dpkg (debian package) permet d'installer un fichier DEB :

 # dpkg -i logiciel-x.y.deb

Connaitre la liste de tous les logiciels installés

[modifier | modifier le wikicode]

L'option -l (l : list) permet de connaitre la liste de tous les logiciels installés :

 # dpkg -l
 ii  iamerican                         	3.1.20.0-4.3              	An American English dictionary for ispell
 ii  ibritish                          	3.1.20.0-4.3                	A British English dictionary for ispell
 ii  icedax                            	1.1.2-1                       	Creates WAV files from audio CDs
 ii  iceweasel                         	2.0.0.6-0etch1             	lightweight web browser based on Mozilla
 ii  iceweasel-gnome-support 	2.0.0.6-0etch1             	Support for Gnome in Iceweasel
 ...

Savoir quel package a installé tel fichier

[modifier | modifier le wikicode]

L'option -S permet de savoir quel package a installé tel fichier :

 # dpkg -S /etc/crontab
 cron: /etc/crontab

Connaitre le descriptif d'un package installé

[modifier | modifier le wikicode]

L'option --status permet de consulter le descriptif d'un package installé :

 # dpkg --status dosfstools
 Package: dosfstools
 Status: install ok installed
 Priority: optional
 Section: otherosfs
 Installed-Size: 144
 Maintainer: Roman Hodek <roman@hodek.net>
 Architecture: i386
 Source: dosfstools (2.11-2.1)
 Version: 2.11-2.1+b1
 Replaces: mkdosfs
 Depends: libc6 (>= 2.3.6-6)
 Conflicts: mkdosfs
 Description: Utilities to create and check MS-DOS FAT filesystems
 Inside of this package there are two utilities (mkdosfs alias
 mkfs.dos, and dosfsck alias fsck.msdos) to create and to check MS-DOS
 FAT filesystems on either hard disks or floppies under Linux. This
 version uses the enhanced boot sector/superblock format of DOS 3.3+
 as well as provides a default dummy boot sector code.

On apprend notamment :

  • la priorité : s'agit-il d'un package indispensable ou optionnel ?
  • la taille disque occupée par le package installé
  • le nom et l'email du mainteneur Debian
  • l'architecture
  • le numéro de verstion
  • les dépendances
  • une description courte et longue

Autres options de dpkg

[modifier | modifier le wikicode]

La commande dpkg dispose d'une page de manuel détaillant toutes les options disponibles :

 # man dpkg

La commande apt-get permet d'installer, mettre à jour et supprimer les logiciels. Le principal avantage d'apt-get par rapport à dpkg est sa capacité à télécharger les packages sur les mirroirs Debian et de résoudre les dépendances nécessaires au logiciel, et ceci de façon récursive.

Installer un logiciel

[modifier | modifier le wikicode]

L'option install de la commande apt-get permet d'installer un logiciel :

 # apt-get install scribus
 Lecture des listes de paquets... Fait
 Construction de l'arbre des dépendances... Fait
 Les paquets supplémentaires suivants seront installés :
 blt python-imaging python-imaging-tk python-tk tk8.4
 Paquets suggérés :
 blt-demo python-imaging-doc tix scribus-template scribus-doc
 ttf-bitstream-vera
 Les NOUVEAUX paquets suivants seront installés :
 blt python-imaging python-imaging-tk python-tk scribus tk8.4
 0 mis à jour, 6 nouvellement installés, 0 à enlever et 3 non mis à jour.
 Il est nécessaire de prendre 8467ko dans les archives.
 Après dépaquetage, 24,2Mo d'espace disque supplémentaires seront utilisés.
 Souhaitez-vous continuer [O/n] ?       

Note: apt-get install va télécharger tous les packages nécessaires au bon fonctionnement du logiciel, et apeller dpkg -i sur chaque fichier DEB téléchargés.

Il existe plus de 300 miroirs DEBIAN

Rajouter des mirroirs

[modifier | modifier le wikicode]

On peut rajouter des miroirs à apt-get en modifiant le fichier /etc/apt/sources.list. Ce fichier contient la liste des mirroirs officiels DEBIAN, et on peut rajouter d'autres mirroirs.

 # cat /etc/apt/sources.list
 deb cdrom:[Debian GNU/Linux 4.0 r1 _Etch_ - Official i386 NETINST Binary-1 2007$
 deb http://ftp.fr.debian.org/debian/ etch main contrib non-free
 deb-src http://ftp.fr.debian.org/debian/ etch main contrib non-free
 deb http://security.debian.org/ etch/updates main contrib
 deb-src http://security.debian.org/ etch/updates main contrib

On peut rajouter à ce fichier un miroir contenant des fichiers DEB non-intégrés dans les miroirs officiels Debian :

 deb http://www.virtualbox.org/debian etch non-free

Mettre à jour la liste des logiciels disponibles

[modifier | modifier le wikicode]

Chaque fois que l'on modifie le fichier /etc/apt/sources.list, il faut lancer la commande apt-get update pour récupérer la liste des nouveaux logiciels :

 # apt-get update
 # apt-get install virtualbox

Note: apt-get utilise la commande wget pour télécharger les fichiers.

Mettre à jour tous les logiciels installés

[modifier | modifier le wikicode]

L'option upgrade de apt-get prend la liste des paquets installés, regarde sur le dépôt si ces logiciels sont disponibles dans une version plus récentes. Si c'est le cas, cette commande va mettre à jour ces logiciels.

Effacer les fichiers DEB installés

[modifier | modifier le wikicode]

Par défaut, la commande apt-get conserve tous les fichiers DEB installés dans le répertoire /var/cache/apt/archives.

L'option clean permet d'effacer les fichiers DEB que l'on a installé :

 # apt-get clean
 # ls -l /var/cache/apt/archives
 total 0

Autres options de apt-get

[modifier | modifier le wikicode]

La commande apt-get dispose d'une page de manuel détaillant toutes les options disponibles :

 # man apt-get

Chercher un package

[modifier | modifier le wikicode]

L'option search de la commande apt-cache permet de rechercher un terme sur les paquets installés et non-installés.

 # apt-cache search vob
 gaupol - subtitle editor for text-based subtitle files
 gopchop - Fast, lossless cuts-only editor for MPEG2 video files
 gstreamer0.8-mpeg2dec - MPEG1 and MPEG2 video decoder plugin for GStreamer
 libogg-vorbis-header-pureperl-perl - A pure Perl interface to Ogg Vorbis information fields
 livemedia-utils - multimedia RTSP streaming tools
 mplayer - The Movie Player
 python-vobject - parse iCalendar and VCards in python
 vobcopy - A tool to copy DvD VOBs to hard disk

Voir les informations d'un package

[modifier | modifier le wikicode]

L'option show de la commande apt-cache permet de voir les informations d'un paquet (installé ou non).

 # apt-cache show k3b
 ...

Autres options de apt-cache

[modifier | modifier le wikicode]

La commande apt-cache dispose d'une page de manuel détaillant toutes les options disponibles :

 # man apt-cache

La commande aptitude est un remplaçant d'apt-get, son principal avantage est de désinstaller les dépendances.

Si la distribution est basée sur Alpine Linux, elle renvoie :

apt-get: not found
dpkg: not found

Il faut alors utiliser apk update et apk add. Ex :

sudo apk add --update telnet

Le programme synaptic permet d'effectuer les mêmes opérations que la commande apt-get depuis l'interface graphique.

Les documentations des packages

[modifier | modifier le wikicode]

Chaque package Debian est accompagné d'une documentation. Ces documentations se trouvent dans le répertoire /usr/share/doc :

/usr/share/doc/<nom du package>/

Certaines documentations sont compressées en gzip afin d'économiser de la place disque. On peut utiliser les commandes zcat, zmore ou zless pour visualiser ces fichiers sans avoir à les décompresser :

 # zmore /usr/share/doc/python/python-policy.txt.gz

Installer un logiciel à partir des sources

[modifier | modifier le wikicode]

Dans certains cas, on peut être amené à devoir installer un logiciel à partir des fichiers sources :

  • le logiciel n'est pas disponible sous Debian en .DEB
  • on a besoin d'une version plus récente du logiciel
  • on a besoin d'une option uniquement activable durant la compilation
  • ...

Pour faire ceci, on télécharge les sources du logiciel et on va les compiler.

Debian fournit un répertoire particulier destiné à accueillir les programmes installés à la main : /usr/local.

Si on regarde le contenu de ce répertoire, on constate qu'il contient des sous-répertoires déjà présents à la racine :

 # ls /usr/local/
 bin  etc  games  include  lib  man  sbin  share  src

Ces répertoires vont accueillir tous les fichiers des programmes installés à la main :

  • les exécutables : /usr/local/bin ou /usr/local/sbin
  • les fichiers de configuration : /usr/local/etc
  • les librairies : /usr/local/lib
  • les pages de man : /usr/local/man
  • les fichiers communs (icones, traductions ...) : /usr/local/share
  • ...

Pour illustrer cette méthodologie, nous allons installer pidgin.

Tout d'abord, on télécharge les fichiers sources du logiciel dans le répertoire /usr/local/src :

 # cd /usr/local/src
 # wget http://downloads.sourceforge.net/pidgin/pidgin-2.3.0.tar.bz2
 # tar xjf pidgin-2.3.0.tar.bz2
 # cd pidgin-2.3.0

La première chose à faire est de lire le fichier README :

 # more README

On apprend dans ce fichier qu'il faut lire le fichier INSTALL pour connaître les dépendances et la procédure pour compiler le logiciel :

 # more INSTALL

Comme dans la majorité des logiciels écrits en langage C, il faut effectuer la procédure standard : ./configure; make; make install .

On lance donc la première commande :

 # ./configure

Cette étape se solde par une erreur : pidgin a besoin de la librairie perl XML parser. On cherche donc le paquet Debian contenant cette librairie :

 # apt-cache search perl xml parser
 ...
 libxml-parser-perl - Perl module for parsing XML files
 ...

On installe donc le packet libxml-parser-perl :

 # apt-get install libxml-parser-perl

On relance le ./configure :

 # ./configure

Cette étape se solde à nouveau par une erreur : pidgin a besoin de la librairie de développement glib2. On cherche donc le paquet Debian contenant cette librairie et on l'installe :

 # apt-cache search glib 2 dev
 ...
 libglib2.0-dev - Development files for the GLib library
 ...
 # apt-get install libglib2.0-dev

On relance le ./configure :

 # ./configure

Cette étape se solde à nouveau par une erreur : pidgin a besoin de la librairie de développement xml2. On cherche donc le paquet Debian contenant cette librairie et on l'installe :

 # apt-cache search lib xml2 dev
 ...
 libxml2-dev - Development files for the GNOME XML library
 ...
 # apt-get install libxml2-dev

On relance le ./configure :

 # ./configure
 ...
 Pidgin will be installed in /usr/local/bin.
 configure complete, now type 'make'

Cette fois-ci, l'étape s'est terminée sans erreur et on peut lancer la compilation :

 # make
 ...
 # make install
 ...

Ca y est (enfin!), le logiciel s'est correctement installé, et l'exécutable a été copié dans le répertoire /usr/local/bin :

 # ls -l /usr/local/bin
 total 2280
 -rwxr-xr-x 1 root staff 2329930 2007-12-07 10:06 pidgin

On peut désormais lancer le logiciel et l'utiliser :

 $ pidgin


À faire...link={{{link}}}

parler de checkinstall


Le noyau Linux et les modules

Dans certains cas, on peut être amené à recompiler un noyau Linux :

  • support d'un périphérique (driver)
  • activation d'une option
  • ...

Les sources du noyau Linux sont disponibles sur kernel.org dans le répertoire /pub/linux/kernel/v2.6/.

Les sources doivent être installées dans le répertoire /usr/src et il faut un lien linux vers la version du noyau que l'on désire compiler :

 # cd /usr/src
 # wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.9.tar.bz2
 ...
 # tar xjf linux-2.6.23.9.tar.bz2
 # ln -s linux-2.6.23.9 linux
 # cd linux

Si on désire utiliser les mêmes options de compilation du noyau actuel, on copie le fichier /boot/config-2.6.18-5-686 dans le répertoire /usr/src/linux sous le nom .config :

 # cp /boot/config-2.6.18-5-686 .config

Pour lancer la configuration (en mode texte) du noyau, on tape ensuite make menuconfig. Il faut avoir précédement installé la librairie de développement ncurses et tous les outils de compilation :

 # apt-get install libncurses5-dev build-essential

On installe ensuite kernel-package qui contient les outils Debian permettant de fabriquer un packet .deb contenant le noyau Linux, les modules, le initrd et un script configurant Grub pour booter sur le nouveau noyau (cf explications ci-dessous) :

 # apt-get install kernel-package

On lance ensuite la configuration du noyau via make menuconfig :

 # make menuconfig

On configure le noyau, on quitte en enregistrant la configuration.

Debian fournit une méthode particulière pour lancer la compilation du noyau. il faut auparavant installer le packet kernel-package.

La procédure Debian consiste à fabriquer un fichier .DEB contenant le noyau et les modules compilés. L'avantage de cette méthode est de faciliter la mise à jour du noyau. De même, elle va automatiquement mettre à jour GRUB ou LILO pour démarrer sur le nouveau noyau.

Si on veut que Debian fabrique le fichier initrd automatiquement, il suffit de l'indiquer avec l'option --initrd de make-kpkg.

On lance la compilation du noyau et des modules avec la commande make-kpkg :

 # make-kpkg clean

 # make-kpkg --initrd --rev custom.1 kernel_image
 ...
 # dpkg -i ../linux-image-2.6.23.9_custom.1_i386.deb


On peut également fabriquer un initrd manuellement, voici la procédure :

 # mkinitramfs -o /boot/initrd.img-2.6.23.9 2.6.23.9

On le rajoute dans /boot/grub/menu.lst :

 title           Debian GNU/Linux, kernel 2.6.23.9
 root            (hd1,0)
 kernel          /vmlinuz-2.6.23.9 root=/dev/hdd2 ro
 initrd          /initrd.img-2.6.23.9
 savedefault


Il ne reste plus qu'à rebooter pour démarrer sur le nouveau noyau.

Si tout c'est bien passé, le système va démarrer sur le nouveau noyau. Sinon, le noyau va s'arrêter sur un kernel panic et il faudra rebooter sur le noyau précédent, reprendre la configuration du noyau, le recompiler (avec un numéro de version différent, comme par exemple custom.2).

On vérifie que l'on a bien démarré sur notre nouveau noyau avec la commande uname :

 # uname -r
 2.6.23.9

Pour plus d'informations sur la compilation d'un noyau selon Debian, on peut consulter le Debian Linux Kernel Handbook.

Cette commande permet de visualiser les modules chargés en mémoire.

Syntaxe:

lsmod

Cette commande permet de visualiser les informations du module comme le nom du créateur, et les options de chargements.

Syntaxe:

modinfo chemin_du_module
À faire...link={{{link}}}

mettre un exemple

insmod et modprobe

[modifier | modifier le wikicode]

Bien que ces deux commandes permettent de charger un module, la différence tient du fait que certains modules ont besoins que d'autres modules soient chargés.

insmod tente de charger le module demandé et si celui-ci a besoin d'un autre module pour se charger et que ce dernier ne l'est pas, insmod renvoie un message d'erreur et ne charge pas le module.

Syntaxe:

insmod chemin_du_module

modprobe, lui, charge les modules dépendant au modules avant de lancer celui-ci.

Syntaxe:

modprobe chemin_du_module

Cette commande décharge le module dont le nom est indiqué. Contrairement aux autres commandes, il ne faut pas lui indiquer le chemin du module, mais son nom tel qu'il apparaît listé par la commande lsmod.

Syntaxe:

rmmod nom_du_module

rmmod décharge le module nom_du_module

À faire...link={{{link}}}

À faire...

À faire...link={{{link}}}

/etc/modules


Autres commandes utiles

Manipulation des flux et des fichiers textes

[modifier | modifier le wikicode]

Wikipédia propose un article sur : « awk ».

La commande awk permet d'effectuer des manipulations sur des fichiers texte (ou un flux redirigé en entrée), dont notamment afficher une colonne particulière. Exemple :

 $ dpkg -l | awk '{print $2}'

Cette commande dit à dpkg que l'on ne veut que la deuxième colonne.

Wikipédia propose un article sur : « Stream Editor ».

sed est un utilitaire de traitement de données capable d'utiliser les expressions régulières.

Exemples :

  • Pour remplacer toute « chaine1 » avec « chaine2 » dans le fichier « chemin1.txt » :
sed -i 's/chaine1/chaine2/g' chemin1.txt
  • Pour substituer toute « chaine1 » dans le fichier « chemin1.txt » avec « chaine2 » et envoyer le résultat dans le fichier « chemin2.txt » :
 sed 's/chaine1/chaine2/g' chemin1.txt > chemin2.txt
  • Exemple de changement de format de date :
 echo "03/11/2015 23:54:03" | sed -r "s/([0-9]+)\/([0-9]+)\/([0-9]+)/\3-\2-\1/g"

donne :

2015-11-03 23:54:03
  • Si erreur d’édition sous Windows : ^M, convertir avec :
sed -i 's/\r//' chemin1.txt

Pour le stocker en variable :

result=$(echo "chaine_a_tronquer" | sed -r 's/_a_tronquer//g')
echo $result # chaine

Pour que le regex soit interprété, lancer sed -E.

Trouver les commandes et les programmes

[modifier | modifier le wikicode]

Wikipédia propose un article sur : « which ».

La commande which permet de connaitre dans quel répertoire se situe une commande (présente dans le PATH) :

 $ which ls
 /bin/ls

updatedb et locate

[modifier | modifier le wikicode]

Wikipédia propose un article sur : « locate ».

La commande locate (ou slocate) permet une recherche rapide sur le système de fichier (suite à une indexation réalisée par updatedb).

$ locate maillog
warning: locate: warning: database /var/lib/slocate/slocate.db' is more than 8 days old
/etc/log.d/conf/logfiles/maillog.conf
/var/log/maillog

Lorsque l'indexation a eu lieu il y a plus de 8 jours, la commande locate l'indique par un message.

Pour réindexer le système de fichier :

$ sudo updatedb
ou
# updatedb

Note sur les droits : updatedb utilise par défaut une base d'indexation globale. Il faut donc avoir les droits super-utilisateur pour mettre à jour l'indexation globale.

Wikipédia propose un article sur : « file (Unix) ».

La commande "file" permet de connaître le type du fichier indiqué en paramètre.

  # file TmDedicatedServer_2006-05-30.tgz
  TmDedicatedServer_2006-05-30.tgz: gzip compressed data, was "fr.22968.0.TmDedicatedServer_20",
  from Unix, last modified: Tue May 30 13:41:35 2006

Wikipédia propose un article sur : « du (Unix) ».

La commande "du" sert à afficher la taille des grandes espaces (partitions de disque et répertoires)

 # du -sh /var/temp

L'option "s" affiche seulement un total pour chaque type d'argument.

L'option "h" permet l'affichage automatique de l'unité adaptée (Ko, Mo, Go...).

Wikipédia propose un article sur : « df (Unix) ».

La commande df affiche l'espace occupé par les systèmes de fichiers.

 # df -h

L'option "h" permet l'affichage automatique de l'unité adaptée (Ko, Mo, Go...).

Pour les inodes :

 # df -hi

Wikipédia propose un article sur : « Eval ».

Ajoute une couche d'évaluation, par exemple pour les variables variables. Ex :

hello="world"
var_name="hello"

echo \$$var_name # $hello
eval echo \$$var_name # world

Permet de lancer une commande qui se stoppera au plus tard après le temps défini. Ex :

timeout 60 test.sh


Installation RAID1 logiciel + LVM + XFS

Voici la configuration à obtenir lors de l'installation de Debian :


Scripts de surveillance

Ce chapitre contient différents scripts de surveillance de l'activité d'un serveur Linux

En langage Python

[modifier | modifier le wikicode]

alimon.py (A LInux MONitor)

[modifier | modifier le wikicode]

Lien direct : alimon.py.

#!/usr/bin/python
# -*- coding: utf-8 -*-
# 
##############################################################################
#
# ALiMon.py : A LInux MONitor
#
##############################################################################
#
# Ce script réalise différentes opérations de monitoring et met en évidence 
# certains points importants comme une partition disque bientôt pleine ou une
# charge processeur trop élevée.
#
# Ce script a été réalisé durant une scéance de travaux pratiques et a des fins
# didactiques. Il est issu du travail collectif des personnes citées ci-dessous
# en auteurs et a nécessité uniquement deux heures de développement.
# 
##############################################################################
# 
# Auteurs :
#
# David BISPO, Christophe CARLIER, Jonathan DUHAIL, Jonathan GAULUPEAU,
# Lahoucine HAMOUCHE, Hicham OUHNA, Manuel PIRES, Yann VAITILINGOM,
# Jérémy PELLAUMAIL et Alexandre GUY
#
# Nous remercions également les connectés du canal #afpy du réseau Freenode
# pour leur aide concernant l'unicode et l'encodage utf-8.
#
# Version : 0.3
#
##############################################################################
#
# Ce script est diffusé sous la licence EUPL v1.1
#
# This script is released under EUPL v1.1
#
# http://ec.europa.eu/idabc/eupl
#
##############################################################################
#
# Ce programme est un logiciel libre ; vous pouvez le re-distribuer et/ou le
# modifier au titre des clauses de la European Union Public Licence (EUPL) 
# version 1.1, telle que publiée par l'Union Européenne.
#
# Ce programme est distribué dans l'espoir qu'il sera utile, 
# mais SANS AUCUNE GARANTIE ; sans même une garantie implicite de 
# COMMERCIABILITÉ ou DE CONFORMITÉ À UNE UTILISATION PARTICULIÈRE. 
# Voir la EUPL version 1.1 pour plus de détails.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the European Union Public Licence (EUPL) version 1.1 
# as published by the European Union.
#
# This program is distributed in the hope that it will be useful, but 
# WITHOUT ANY WARRANTY; without even the implied warranty of 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the EUPL version 1.1 for more details.
#
##############################################################################
#
# Utilisation manuelle : ./alimon.py
#
# Utilisation automatisée : Rajouter dans le cron :
# 55 23 * * * root alimon.py
#
##############################################################################


#########################################
#### Configuration & pré-traitements ####
#########################################


#### Modules importés ####
import commands, unicodedata, os, sys, getopt


#### Fonction Affichage du titre formaté ####
def titre(message):
  message = unicode(message,'utf-8')
  print "\n", "#" * 59
  print "######", message.center(45).encode('utf-8'), "######"
  print "#" * 59, "\n"


#### Fonction affichant l'aide ####
def usage():
  print "###### Aide de alimon ######"
  print "./alimon.py [-f] [-d] [-h]"
  print "   -f	Lance le programme en mode dégradé. Utile si certaines commandes"
  print "	ne sont pas installées sur le serveur."
  print "   -d	Lance le programme en mode debug."
  print "   -h	Affiche l'aide du programme."


#### Variables globables ####
# Active / désactive le mode debug
debug = 0
# Active / désactive le mode dégradé
force = 0
# Seuil maxi du loadavg
seuil_maxi_loadavg = 1.0
# Température maxi des disques durs
temperature_hdd_maxi = 45
# Taux d'occupation maxi des disques durs
taux_occupation_maxi = 80
# Logins autorisés
loginsok = ['alex', 'jo']
# Liste des daemons qui doivent être en cours d'exécution
proclist = ['sshd', 'apache2', 'mysqld', 'named', 'master', 'murmurd', 'pop3-login', 'teamspeak-serve', 'couriertcpd']
# Pourcentage maxi de swap
pourcentage_mem_maxi = 10
# Mémoire mini disponible en Mo
mem_mini = 200
# Liste des sites à 'pinguer'
url_ping = ['www.google.fr']
# Liste des périphériques RAID (exemple : ['md0', 'md1'])
raidlist = []


#### Récupère les arguments ####
# Récupère la liste des arguments
try:
    optlist, list = getopt.getopt(sys.argv[1:], 'dhf')
# Si un argument ne figure pas dans la liste prédéfinie, affiche la fonction 'usage' (aide) puis quitte
except getopt.GetoptError:
    usage()
    sys.exit(1)
# Traite les arguments donnés
for opt in optlist:
  if opt[0] == '-h':
    usage()
    sys.exit(0)
  if opt[0] == '-d':
    debug = 1
  if opt[0] == '-f':
    force = 1


#### Test de présence des commandes shell et récupération de leur chemin ####
commandes_utilisees = ['cat','hostname','last','hddtemp','df','ps','free','ping','grep','uniq','who','uname']
# Contrôle la commande 'mdadm' uniquement si une liste de disques raid est définie
if raidlist:
  commandes_utilisees.append('mdadm')
commandes = {}
for comm in commandes_utilisees:
  (res,commande) = commands.getstatusoutput("/usr/bin/which %s" % comm)
  # Si une commande n'existe pas mais que le mode Force est activé
  if res and force:
    print "La commande", comm, "n'est pas présente sur votre système, fonctionnement en mode dégradé."
    commandes[comm] = ""
  # Si une commande n'exite pas
  elif res:
    print "La commande", comm, "n'est pas présente sur votre système. Arrêt du programme."
    print "Tapez './alimon.py -h' pour en savoir plus."
    sys.exit(1)
  else:
    commandes[comm] = commande


#### Récupération de la liste des disques durs ####
result = commands.getoutput("%s /proc/partitions" % commandes['cat']).split("\n")
result.pop(0)
hddlist = []
for ligne in result:
  if debug: print "debug> Ligne du fichier '/proc/partitions' en cours de traitement :", ligne
  hdd = ''.join(ligne.split()[-1:])[:3]
  if debug: print "debug> Disque dur à ajouter à la liste :", hdd
  if hdd and hdd not in hddlist:
    hddlist.append(hdd)



#############################
#### Programme principal ####
#############################


#### INFOS SERVEUR ####
if commandes['hostname'] and commandes['uname'] and commandes['cat'] and commandes['grep'] and commandes['uniq']:
  titre("Informations sur le serveur")
  # On récupère la première ligne du fichier /etc/issue qui contient généralement le nom et la version de la distribution Linux
  version = open("/etc/issue", "r").readlines()[0][:-1]
  if debug: print "debug> Version de la distribution :", version
  # On récupère le nom du serveur
  hostname = commands.getoutput(commandes['hostname'])
  if debug: print "debug> Hostname :", hostname
  print "Serveur %s sous %s" % (hostname, version)
  print
  # On récupère et affiche la version du noyau par la commande 'uname -r'
  print "Noyau Linux   :", commands.getoutput("%s -r" % commandes['uname'])
  # On récupère et affiche le(s) processeur(s) installé(s) sur le serveur
  cpu = commands.getoutput("%s /proc/cpuinfo | %s \"model name\" | %s" % (commandes['cat'], commandes['grep'], commandes['uniq']))
  if debug: print "debug> Liste des processeurs non post-traitée :", cpu
  print "Processeur(s) :", cpu.split(': ')[1]
  # On récupère et affiche la quantité de mémoire installée sur le serveur
  mem = commands.getoutput("%s /proc/meminfo | %s \"MemTotal\"" % (commandes['cat'], commandes['grep']))
  if debug: print "debug> Quantité de mémoire non post-traitée :", mem
  print "Mémoire vive  :", ' '.join(mem.split()[1:])


#### DUREE DE FONCTIONNEMENT DU SERVEUR ####
if commandes['cat']:
  titre("Durée de fonctionnement")
  # On récupère la durée de fonctionnement en secondes dans /proc/uptime
  result = commands.getoutput("%s /proc/uptime" % (commandes['cat'])).split()[0]
  duree = float(result)
  if debug: print "debug> Résultat de cat '/proc/uptime' :", duree
  # On calcule le reste en secondes
  secondes = duree%60
  if debug: print "debug> Secondes :", secondes
  # On calcule le reste en minutes
  minutes = duree/60%60
  if debug: print "debug> Minutes :", minutes
  # On calcule le reste en heures
  heures = duree/60/60%24
  if debug: print "debug> Heures :", heures
  # On calcule le nombre de jours
  jours = int(duree/60/60/24)
  if debug: print "debug> Jours :", jours
  print "Serveur lancé depuis %i jour(s), %i heure(s), %i minute(s) et %i seconde(s)." % (jours, heures, minutes, secondes)


#### VERIFICATION DU LOAD AVERAGE ####
if commandes['cat']:
  titre("Vérification du load average")
  # On appelle une commande Unix et on récupère le résultat dans la variable result
  result = commands.getoutput("%s /proc/loadavg" % (commandes['cat']))
  if debug: print "debug> Résultat de 'cat /proc/loadavg' :", result
  # On découpe la chaine de caractères en une liste selon le caractère espace
  liste_result = result.split()
  if debug: print "debug> La liste découpée :", liste_result
  if debug: print "debug> La première valeur de la liste :", liste_result[0]
  # On compare le load avg de la dernière minute avec le seuil maxi
  # Attention, on converti la chaine de caractère liste_result[0] en nombre flottant via float()
  if float(liste_result[0]) > seuil_maxi_loadavg:
    print "Alerte ! charge CPU supérieure à", seuil_maxi_loadavg, "!!!"
  else:
    print "Charge CPU %s normale car inférieure à %.2f" % (liste_result[0],seuil_maxi_loadavg)


#### CONNECTIONS DU JOUR ####
if commandes['last'] and commandes['grep']:
  titre("Connections du jour")
  # On récupère les dernières connections avec la commande 'last', on filtre avec 'grep'
  login = commands.getoutput("%s | %s \"$(LANG=C date +\"%%a %%b %%-d\")\"" % (commandes['last'], commandes['grep']))
  if login == "":
    login = commands.getoutput("%s | %s \"$(LANG=C date +\"%%a %%b  %%-d\")\"" % (commandes['last'], commandes['grep']))
  print login


#### TEMPERATURE DES HDD ####
if commandes['hddtemp']:
  titre("Températures des disques durs")
  # On vérifie la température pour chaque disque dans la liste 'hddlist' avec la commande 'hddtemp'
  for disque in hddlist:
    if debug: print "debug> Disque en cours de contrôle :", disque
    # On récupère la température du disque
    temperature = commands.getoutput("%s -n /dev/%s" % (commandes['hddtemp'], disque))
    if debug: print "debug> Température du disque en cours :", temperature
    # On vérifie que la température du disque n'est pas supérieure au seuil de tolérance, sinon on imprime un message d'alerte
    # S'il y a une erreur (disque non compatible SMART), on passe au disque suivant
    try:
      if int(temperature) > temperature_hdd_maxi:
	print "Alerte ! Le disque dur /dev/%s a dépassé %s°C, il est actuellement à %s°C !!!" % \
	  (disque, temperature_hdd_maxi, temperature)
      else:
	print "Le disque dur /dev/%s est à %s°C et inférieur au seuil de %s°C" % \
	  (disque, temperature, temperature_hdd_maxi)
    except:
      pass


#### VERIFICATION DE L'ESPACE DISQUE ####
if commandes['df'] and commandes['grep']:
  titre("Vérification de l'espace disque")
  # On récupère le pourcentage d'espace libre sur toutes les partitions dont le périphérique commence par '/dev' avec la commande 'df'
  result = commands.getoutput("%s -P | %s -e '^/dev'" %(commandes['df'], commandes['grep']))
  if debug: print "debug> Résultat du 'df' :", result
  # On fait un contrôle sur chaque ligne du résultat du 'df'
  for disque in result.split('\n'):
    taux_occupation = disque.split()[4][:-1]
    if debug: print "debug> Disque en cours de contrôle :", disque
    if debug: print "debug> Taux d'occupation du disque en cours :", taux_occupation
    # On vérifie que le taux d'occupation n'est pas supérieur au seuil de tolérance, sinon on imprime un message d'alerte
    if int(taux_occupation) > taux_occupation_maxi: 
      print "Attention la partition %s est rempli à %s !!!" %(disque.split()[0], disque.split()[4])
    else:
      print "La partition %s est pleine à %s." %(disque.split()[0], disque.split()[4])


#### VERIFICATION ETAT RAID ####
# Se lance si une liste de périphériques a été définie
if raidlist:
  if commandes['mdadm']:
    titre("Vérification de l'état du RAID")
    # On teste chaque périphérique de la liste
    for hddraid in raidlist:
      # On récupère le status de la commande qui vérifie l'état d'un RAID
      (raidstatus, raid) = commands.getstatusoutput("%s --detail -t /dev/%s" %(commandes['mdadm'], hddraid))
      # On teste si le status est différent de 0 (donc status en erreur)
      if raidstatus!=0:
	print "Attention, le périphérique RAID /dev/%s a au moins un disque en dysfonctionnement !" % hddraid
      else:
	print "Le périphérique RAID /dev/%s fonctionne normalement." % hddraid


#### VERIFICATION CONNECTIONS EN COURS ####
if commandes['who']:
  titre("Vérification des logins actuellement connectés")
  # On récupère les noms des utilisateurs actuellement connectés avec la commande 'who'
  wholiste = commands.getoutput(commandes['who']).split('\n')
  if debug: print "debug> Liste des utilisateurs connectés :", wholiste
  liste_logins_connectes = []
  # On récupère uniquement la première colonne de chaque ligne
  for ligne in wholiste: 
    if ligne:
      if debug: print "debug> Ligne en cours de traitement :", ligne
      user = ligne.split()[0]
      if debug: print "debug> Utilisateur en cours de traitement :", user
      # On ajoute l'utilisateur à une liste s'il n'y est pas déjà (évite les doublons)
      if user not in liste_logins_connectes:
	liste_logins_connectes.append(user)
  # On vérifie que les utilisateurs précédemment récupérés sont bien dans la liste des utilisateurs autorisés, sinon on imprime un message d'alerte
  for user in liste_logins_connectes:
    if user in loginsok:
      print "utilisateur", user, "OK"
    else:
      print "ATTENTION L'utilisateur", user, "est connecte MAIS n'est pas dans la liste"


#### VERIFICATION DES PROCESSUS ####
if commandes['ps']:
  titre("Vérification des processus")
  # On récupère les processus lancés avec la commande 'ps'
  result = commands.getoutput("%s -e" % (commandes['ps'])).split('\n')
  # On supprime la première ligne
  result.pop(0)
  if debug: print "debug> Résultat de la commande 'ps' :", result
  # On récupère uniquement le nom de chaque processus (dernière colonne)
  psliste=[]
  for processus in result:
    if debug: print "debug> Processus à ajouter :", processus
    psliste.append(processus.split()[-1])
  if debug: print "debug> Contenu de la liste des processus :", psliste
  # On vérifie que chaque processus de la liste définie au début du script est présent dans la liste récupérée précedemment
  for processus in proclist:
    if debug: print "debug> Processus en cours de vérification :", processus
    if not processus in psliste:
      print "Attention : le process %s n'est pas lancé actuellement !!!" %(processus)
    else:
      print "Le processus", processus, "est bien en cours d'exécution."


#### VERIFICATION DE LA MEMOIRE ####
if commandes['free']:
  titre("Vérification de la mémoire")
  # On récupère la quantité de mémoire libre avec la commande 'free'
  result = commands.getoutput(commandes['free'])
  if debug: print "debug> Résultat de la commande 'free' :", result
  listefree = result.split("\n")
  if debug: 
    print "debug> On truque le résultat de la commande free pour tester"
    listefree = ['             total       used       free     shared    buffers     cached', 'Mem:       2066032     850780    1215252          0     114496     368584', '-/+ buffers/cache:     367700    1698332', 'Swap:      2048276          350500    2048276']
    print "debug> Free truqué :", listefree
  # On récupère la quantité de mémoire totale
  ligne1=listefree[1].split()
  memoire=float(ligne1[1])
  if debug: print "debug> Mémoire totale :", memoire
  # On récupère la quantité de swap totale
  ligne3=listefree[3].split()
  swap=float(ligne3[2])
  if debug: print "debug> Swap total :", swap
  # On calcule le rapport de swap par rapport à la mémoire installée
  pourcentage = (swap/memoire)*100.0
  if debug: print "debug> Pourcentage de Swap :", pourcentage
  # On vérifie que le rapport ne dépasse pas le seuil limite autorisé, sinon on imprime un message d'alerte
  if pourcentage > pourcentage_mem_maxi:
    print "Alerte ! memoire swap supérieur a %d%% de la mémoire (utilisation %.2f%%) !!!" % (pourcentage_mem_maxi, pourcentage)
  else:
    print "Mémoire swap inférieure à %d%% (utilisation %.2f%%)" % (pourcentage_mem_maxi, pourcentage)
  # On récupère la quantité de mémoire libre en Mo avec la commande 'free -m'
  result = commands.getoutput("%s -m" % (commandes['free']))
  result = result.split('\n')
  if debug: print "debug> Résultat de la commande 'free -m' :", result
  mem = result[2].split()[3]
  if debug: print "debug> Quantité de mémoire libre en Mo :", mem
  # On vérifie que la quantité de mémoire libre ne soit pas inférieure au seuil limite, sinon on imprime un message d'alerte
  if int(mem) < mem_mini:
    print "Attention !! il reste moins de %sMo de mémoire libre !!! (%sMo)" %(mem_mini, mem)
  else:
    print "Il y a", mem, "Mo de mémoire libre."


#### TEMPS DE REPONSE SERVEUR WEB ####
if commandes['ping']:
  titre("Temps de réponse du serveur")
  # On lance la commande 'ping' sur chaque url définie dans 'url_ping'
  for url in url_ping:
    print "Résultat de la commande ping sur %s" % (url)
    print commands.getoutput("%s -c 1 %s" % (commandes['ping'], url)).split("\n")[-1]

print


Réseaux sans fil

Théorie des réseaux sans fil

[modifier | modifier le wikicode]

Réseaux sans fil de type PAN, LAN, MAN et WAN

[modifier | modifier le wikicode]

Distances et débits

[modifier | modifier le wikicode]

Les réseaux sans fil PAN

[modifier | modifier le wikicode]

PAN : Personal Area Network

  • Norme 802.15.4
  • Consomme très peu d'énergie
  • Bas débit (maximum 250 Kbit/s)
  • Idéal pour les applications de type domotique et automatisme
  • Faible coûts de fabrication du composant (1$)

La norme définit trois débits différents :

  • 250 Kbit/s en 2.4 GHz (international)
  • 20 Kbit/s en 868 MHz (Europe)
  • 40 Kbit/s en 915 MHz (USA)

La norme Wireless USB

[modifier | modifier le wikicode]

Objectif : remplacer l'USB

Autres noms : W-USB (Wireless USB), UWB (Ultra-Wide Band), Wimedia

  • Norme 802.15.3
  • Très haut débit (jusqu'à 480 Mbit/s)
  • Idéal pour les applications multimédia (audio, vidéo) et pour le transfert de données
  • Possibilité de fonctionner en réseau ou en mode ad-hoc
  • Authentification et chiffrement possible

Débits théoriques :

  • 54 Mbit/s à 2.4 GHz
  • jusqu'à 480 Mbit/s de 3.1 à 10.7 GHz

La norme Bluetooth

[modifier | modifier le wikicode]
  • Norme 802.15.1
  • Inventé par Ericsson, aujourd'hui groupement de 2500 sociétés
  • Technologie peu onéreuse (composant à partir de 3$) et fortement intégré (puce de 9 mm x 9 mm)
  • Débits théoriques : de 1 à 3 Mbit/s selon la version de la norme

La norme Bluetooth utilise la fréquence 2.4 GHz et définit trois puissances d'émission :

  • 1 mW : portée de quelques mètres
  • 2.5 mW : portée de 10 à 20 mètres
  • 100 mW : portée de 100 mètres

Un réseau Bluetooth, un piconet, est composé d'un maître et de 7 esclaves maximum. Le débit sera partagé entre les différents membres du piconet.

On peut interconnecter des piconets pour former un scatternet (scatter : dispersion)

Les communications peuvent être symétrique (vitesses d'émission et de réception identiques) ou asymétrique (vitesses d'émission et de réception différentes).

Les réseaux sans fil LAN

[modifier | modifier le wikicode]

LAN : Local Area Network

Principales normes 802.11 :

  • 802.11a : fréquence d'émission à 5 GHz, débit jusqu'à 54 Mbit/s
  • 802.11b : fréquence d'émission à 2.4 GHz, débit jusqu'à 11 Mbit/s
  • 802.11g : fréquence d'émission à 2.4 GHz, débit jusqu'à 54 Mbit/s
  • 802.11n : fréquence d'émission à 2.4 GHz ou 5 GHz, débit jusqu'à 300 Mbit/s en utilisant les technologies MIMO (Multiple-Input Multiple-Output) et OFDM (Orthogonal Frequency Division Multiplexing)

Très proche de l'ethernet câblé (802.3), utilise la sous-couche LLC générique de la couche 2, et ré-implémente la sous-couche MAC.

Contrairement à ethernet câble qui est basé sur la technique d'accès CSMA/CD, la norme Wi-Fi utilise le CSMA/CA (Carrier Sense Multiple Access / Collision Avoidance).

Il y a plusieurs modes de fonctionnement, dont voici les principaux :

  • mode Ad-Hoc permet d'établir des connexions sans passer par un point d'accès
  • mode Infrastructure permet d'établir des connexions en passant par un point d'accès, et également de gérer un système de distribution basé sur plusieurs points d'accès utilisant le même ESSID.
  • mode monitor permet de passer la carte Wi-Fi en mode promiscuous, c'est à dire qu'elle voit passer toutes les trames, et pas seulement celles qui lui sont destinées.

Le Wi-Fi utilise des trames de synchronisation temporelle, appelée les beacon frames. Ces trames contiennent l'heure du point d'accès.



Sécurité WEP

[modifier | modifier le wikicode]
  • Premier protocole d'authentification et de chiffrement
  • Signifie : Wired Equivalent Privacy
  • Aujourd'hui totalement obsolète car non sécurisé
  • Utilise des clés de 64 bits (clé secrète de 40 bits + vecteur d'initialisation -IV- de 24 bits) ou des clés de 128 bits (clé secrète de 104 bits + vecteur d'initialisation -IV- de 24 bits)
  • Définit deux techniques d'authentification : Open System Authentication (diffusion du ESSID) et Shared Key Authentication (pas de diffusion d'informations avant l'authentification)

Sécurité WPA

[modifier | modifier le wikicode]
  • Inventé pour pallier les failles de sécurité du WEP
  • Signifie : Wi-Fi Protected Access
  • La norme WPA1 fonctionne sur du matériel existant (mais est cassable). La norme WPA2 nécessite du matériel plus puissant (authentification et chiffrement plus complexe) et est la méthode la plus sécurisée à l'heure actuelle
  • Utilise le standard 802.1x qui se charge de l'authentification et de la génération de la clé
  • Le modèle 802.11i assure la sécurité au niveau de la sous-couche MAC via le protocole TKIP (Temporal Key Integrity Protocol) ou via le protocole CCMP (Counter with Cipher Block Chaining Message Authentication Code Protocol) (plus sécurisé)

Les réseaux sans fil MAN

[modifier | modifier le wikicode]

MAN : Metropolitan Area Network

La norme Wimax

[modifier | modifier le wikicode]

Les réseaux sans fil WAN

[modifier | modifier le wikicode]

WAN : Wide Area Network

La norme 802.20

[modifier | modifier le wikicode]

Mise en pratique

[modifier | modifier le wikicode]

Les commandes Wi-Fi

[modifier | modifier le wikicode]

Utilisateurs de Gnome, Attention ! les commandes ci-dessous ne fonctionneront que si vous avez désactivé au préalable Network Manager :

Ubuntu 9.10 et supérieur :

# service network-manager stop

Ubuntu 9.04 :

# service NetworkManager stop

Invoquée seule, la commande iwconfig affiche toutes les interfaces réseaux :

# iwconfig 
lo        no wireless extensions.

eth0      no wireless extensions.

wmaster0  no wireless extensions.

wlan0     IEEE 802.11bg  ESSID:""  
         Mode:Managed  Frequency:2.412 GHz  Access Point: Not-Associated   
         Tx-Power=20 dBm   
         Retry  long limit:7   RTS thr:off   Fragment thr:off
         Encryption key:off
         Power Management:off
         Link Quality:0  Signal level:0  Noise level:0
         Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
         Tx excessive retries:0  Invalid misc:0   Missed beacon:0

On peut indiquer à la commande iwconfig l'interface à afficher :

# iwconfig wlan0
wlan0     IEEE 802.11bg  ESSID:""  
         Mode:Managed  Frequency:2.412 GHz  Access Point: Not-Associated   
         Tx-Power=20 dBm   
         Retry  long limit:7   RTS thr:off   Fragment thr:off
         Encryption key:off
         Power Management:off
         Link Quality:0  Signal level:0  Noise level:0
         Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
         Tx excessive retries:0  Invalid misc:0   Missed beacon:0

On peut également utiliser la commande iwconfig pour configurer les paramètres du réseau sans fil :

  • Pour définir le nom du réseau :
# iwconfig wlan0 essid "MON RESEAU"
  • Pour définir le canal à utiliser :
# iwconfig wlan0 channel 3

on peut également spécifier la fréquence avec l'option freq :

# iwconfig wlan0 freq 2.412G
  • pour définir le débit
# iwconfig wlan0 rate auto
  • pour fixer le débit :
# iwconfig wlan0 rate 11M

Le 802.11b définit les débits suivants : 1, 2, 5.5 et 11 Mbit/s.

Le 802.11g définit en plus les débits suivants : 6, 9, 12, 18, 24, 36, 48 et 54 Mbit/s.

  • Pour activer ou non le chiffrement WEP :
# iwconfig wlan0 key off
  • pour spécifier la clé WEP :
# iwconfig wlan0 key 1234567890

on peut gérer de trousseau de quatre clés. On indique le numéro de clé entre crochets :

# iwconfig wlan0 key [1] 1234567890
  • pour changer le mode (ad-hoc, managed, monitor ...) de la carte :

Attention, il faut que la configuration côté IP soit arrêtée :

# ifconfig wlan0 down
# iwconfig wlan0 mode Ad-Hoc
# ifconfig wlan0 up
  • pour changer la puissance d'émission (si la carte le permet) :
# iwconfig eth0 txpower 60mW

On peut également spécifier plusieurs paramètres sur la même ligne :

# iwconfig wlan0 channel 11 key off essid NETGEAR

La commande iwlist permet d'obtenir des informations complémentaires. Invoquée seule, elle affiche la liste des options disponibles :

# iwlist
Usage: iwlist [interface] scanning [essid NNN] [last]
              [interface] frequency 
              [interface] channel 
              [interface] bitrate 
              [interface] rate 
              [interface] encryption 
              [interface] keys 
              [interface] power 
              [interface] txpower 
              [interface] retry 
              [interface] ap 
              [interface] accesspoints 
              [interface] peers 
              [interface] event 
              [interface] auth 
              [interface] wpakeys 
              [interface] genie 
              [interface] modulation

On peut optionnellement spécifier l'interface réseau (inutile si il n'y en a qu'une).

  • Afficher la liste des réseaux détectés :
# iwlist scan
...
wlan0     Scan completed :
         Cell 01 - Address: 00:09:5B:6F:3C:38
                   Channel:11
                   Frequency:2.462 GHz (Channel 11)
                   Quality=57/70  Signal level=-53 dBm  
                   Encryption key:off
                   ESSID:"NETGEAR"
                   Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s
                   Mode:Master
                   Extra:tsf=0000001241f8f0da
                   Extra: Last beacon: 192ms ago
                   IE: Unknown: 00074E455447454152
                   IE: Unknown: 010482840B16
                   IE: Unknown: 03010B
  • afficher les canaux et fréquences disponibles, et également le canal/fréquence actuellement utilisé :
# iwlist freq        # OU iwlist channel
...
wlan0    13 channels in total; available frequencies :
         Channel 01 : 2.412 GHz
         Channel 02 : 2.417 GHz
         Channel 03 : 2.422 GHz
         Channel 04 : 2.427 GHz
         Channel 05 : 2.432 GHz
         Channel 06 : 2.437 GHz
         Channel 07 : 2.442 GHz
         Channel 08 : 2.447 GHz
         Channel 09 : 2.452 GHz
         Channel 10 : 2.457 GHz
         Channel 11 : 2.462 GHz
         Channel 12 : 2.467 GHz
         Channel 13 : 2.472 GHz
         Current Frequency:2.447 GHz (Channel 8)
  • afficher la liste des clés WEP :
# iwlist encryption        # OU iwlist keys
...
wlan0    2 key sizes : 40, 104bits
         4 keys available :
		[1]: 1234-5678-90 (40 bits)
		[2]: off
		[3]: off
		[4]: off
         Current Transmit Key: [1]
  • afficher les possiblités d'authentification du driver de la carte :
# iwlist auth
...
wlan0     Authentication capabilities :
		WPA
		WPA2
		CIPHER-TKIP
		CIPHER-CCMP
          Current Authentication algorithm :
		open
		shared-key


  • afficher la liste des points d'accés détectés :
# iwlist ap        # OU iwlist accesspoints
ath0      Peers/Access-Points in range:
    5A:1D:14:86:97:BC : Quality=34/70  Signal level=-61 dBm  Noise level=-95 dBm
    5A:1D:14:86:97:BE : Quality=34/70  Signal level=-61 dBm  Noise level=-95 dBm
    5A:1D:14:86:97:BF : Quality=33/70  Signal level=-62 dBm  Noise level=-95 dBm
...


À faire...link={{{link}}}

autres options

La commande iwevent permet d'afficher en temps réel les évènements Wi-Fi de la carte.

On lance iwevent sur une console, et sur une autre, on passe des commandes iwconfig. On constate que iwevent affiche les évènements générés :

# iwevent
...
09:15:01.261767   wlan0    New Access Point/Cell address:Not-Associated
09:15:01.261858   wlan0    Set Frequency=2.412 GHz (Channel 1)
...
09:15:40.112202   wlan0    Set Frequency=2.462 GHz (Channel 11)
09:16:01.762209   wlan0    Custom driver  event:ASSOCINFO(ReqIEs=00074e455447454152010402040b16 RespIEs=010482840b16)
09:16:01.762247   wlan0    New Access Point/Cell address:00:09:5B:6F:3C:38

La commande iwpriv permet de configurer des paramêtres propres à la carte Wi-Fi.

# iwpriv wlan0
wlan0     no private ioctls.

Par exemple, le driver de cette carte ne fournit de paramêtres spécifiques à configurer.

Avec un autre driver, on obtient la liste des ioctl configurables :

# iwpriv ath0
ath0     Available private ioctls :
         setoptie         (8BEE) : set 256 byte  & get   0      
         getoptie         (8BEF) : set   0       & get 256 byte 
         setkey           (8BF2) : set  64 byte  & get   0      
         delkey           (8BF4) : set   7 byte  & get   0      
         setmlme          (8BF0) : set  42 byte  & get   0      

Certaines cartes ethernet câble permettent également de configurer des paramêtres internes :

# iwpriv eth0
eth0      Available private ioctl :
                setqualthr (89F0) : set   1 byte & get   0
                gethisto (89F7) : set   0      & get  16 int

# iwpriv eth0 setqualthr 20
# iwpriv eth0 gethisto

Si la carte et le driver le permettent, la commande iwspy permet d'afficher des statistiques en temps réel sur la liaison Wi-Fi :

# iwspy ath0
ath0      Statistics collected:
   00:15:6D:D0:E3:E0 : Quality=22/70  Signal level=-74 dBm  Noise level=-96 dBm
   Link/Cell/AP      : Quality=22/70  Signal level=-74 dBm  Noise level=-96 dBm
   Typical/Reference : Quality:0  Signal level:0  Noise level:0


Par exemple, la carte (et/ou driver) ci-dessous ne permet pas de collecter des informations.

# iwspy wlan0
wlan0     Interface doesn't support wireless statistic collection

Autres commandes utiles

[modifier | modifier le wikicode]
# lspci
...
00:1f.1 IDE interface: Intel Corporation 82801G (ICH7 Family) IDE Controller (rev 01)
00:1f.2 IDE interface: Intel Corporation 82801GB/GR/GH (ICH7 Family) SATA IDE Controller (rev 01)
00:1f.3 SMBus: Intel Corporation 82801G (ICH7 Family) SMBus Controller (rev 01)
04:04.0 Ethernet controller: Atheros Communications Inc. Atheros AR5001X+ Wireless Network Adapter (rev 01)
04:08.0 Ethernet controller: Intel Corporation PRO/100 VE Network Connection (rev 01)
# lsusb
...
BUS 005 Device 003: ID 0846:6a00 Netgear, Inc. WG111 WiFi (v2)
# lshw -class network
...
 *-network:0             
      description: Wireless interface
      product: Atheros AR5001X+ Wireless Network Adapter
      vendor: Atheros Communications Inc.
      physical id: 4
      bus info: pci@0000:04:04.0
      logical name: wmaster0
      version: 01
      serial: 00:24:01:13:fe:de
      width: 32 bits
      clock: 33MHz
      capabilities: pm bus_master cap_list logical ethernet physical wireless
      configuration: broadcast=yes driver=ath5k latency=168 maxlatency=28 mingnt=10 multicast=yes wireless=IEEE 802.11bg
      resources: irq:18 memory:50000000-5000ffff


Test du réseau Ad-Hoc

[modifier | modifier le wikicode]

Il faut tout d'abord passer la carte en mode Ad-Hoc :

# ifconfig wlan0 down
# iwconfig wlan0 mode Ad-Hoc
# ifconfig wlan0 up

On ajuste ensuite les paramêtres Wifi :

# iwconfig wlan0 essid "UPVD" channel 3 key off

On spécifie ensuite une adresse MAC commune à tout le réseau Ad-Hoc :

# iwconfig wlan0 ap 00:11:22:33:44:55

On spécifie les paramêtres IP :

# ifconfig wlan0 10.0.0.1 netmask 255.255.255.0

Désormais, les différents membres du réseau Ad-Hoc doivent pouvoir se pinguer.

Si ce n'est pas le cas, on peut essayer de changer la fréquence et de la remettre pour forcer une ré-detection / re-configuration.


Connexion à un réseau sans chiffrement

[modifier | modifier le wikicode]
# iwconfig wlan0 essid "NETGEAR" channel 11 key off
# dhclient wlan0


Connexion à un réseau WEP

[modifier | modifier le wikicode]
# iwconfig wlan0 essid "NETGEAR" channel 11 key CAFECAFECA
# dhclient wlan0


Connexion à un réseau WPA

[modifier | modifier le wikicode]

Pour se connecter à un réseau WPA depuis Linux, il faut avoir installé le package wpasupplicant :

# apt-get install wpasupplicant

On crée le fichier de configuration suivant :

# cat /etc/wpa_supplicant.conf 
network={
   ssid="RESEAUWPA"
   scan_ssid=1
   proto=WPA
   key_mgmt=WPA-PSK
   psk="supermotdepassetressecure"
}

On lance la commande wpa_supplicant :

# wpa_supplicant -D wext -i wlan0 -c /etc/wpa_supplicant.conf

Cette commande ne rend pas la main, donc soit on la lance en tâche de fond avec &, soit on la laisse tourner et on ouvre une nouvelle fenêtre.

On lance ensuite le client DHCP pour obtenir une adresse IP :

# dhclient wlan0


L'outil d'administration Webmin

Installation de Webmin

[modifier | modifier le wikicode]

Webmin est un logiciel qui permet de configurer un serveur Unix / Linux via une interface Web[1].

Webmin est disponible sur de nombreuses plateformes[2] : Windows, Redhat, Fedora, CentOS, SuSE, Mandrake, Debian, et Ubuntu[3].

Il est supporté par Debian[4], mais on peut aussi télécharger sur leur site un fichier .deb.

On installe les dépendances de Webmin, puis on télécharge l'archive de Webmin et on l'installe en root :

apt-get -f install libnet-ssleay-perl libauthen-pam-perl libio-pty-perl libmd5-perl
wget http://prdownloads.sourceforge.net/webadmin/webmin_1.780_all.deb
dpkg -i webmin_1.780_all.deb

# anciennement :
apt-get install libnet-ssleay-perl libauthen-pam-perl libio-pty-perl libmd5-perl
wget http://prdownloads.sourceforge.net/webadmin/webmin_1.400_all.deb
dpkg -i webmin_1.400_all.deb

Quelques secondes après l'interface web doit être accessible (ex : https://localhost:10000/).

Configuration de Webmin

[modifier | modifier le wikicode]

Changement du mot de passe

[modifier | modifier le wikicode]
/usr/libexec/webmin/changepass.pl /etc/webmin root nouveau_pass

Cela changera le mot de passe de root dans Webmin et ne modifie en aucun cas le mot de passe root du système.

 Pensez à supprimer ensuite la ligne de votre historique (.bash_history par exemple) afin que le mot de passe n'y reste pas enregistré en clair.

Changement du port

[modifier | modifier le wikicode]

Éventuellement on peut changer le port par défaut pour limiter les risques d'attaque :

vim /etc/webmin/miniserv.conf

Envoi des alertes

[modifier | modifier le wikicode]

Pour recevoir les alertes détectées par Webmin par email, il faut se rendre sur /webmin/edit_sendmail.cgi[5].

Accueil de Webmin

[modifier | modifier le wikicode]

Gestion des utilisateurs de Webmin

[modifier | modifier le wikicode]

Webmin permet aux utilisateurs Unix de se connecter au portail Webmin, et à certaines bases de données.

Gestion des serveurs HTTP

[modifier | modifier le wikicode]

Gestion des serveurs BDD

[modifier | modifier le wikicode]

Il est possible de créer des bases MySQL, des tables et d'exécuter du code SQL via l'interface. Elle se révèle être moins développée que phpMyAdmin.

Gestion des serveurs DNS

[modifier | modifier le wikicode]

Gestion des serveurs Mail

[modifier | modifier le wikicode]

Il est possible d'utiliser les boites emails des utilisateurs depuis l'interface Webmin, pour envoyer et recevoir (du moins théoriquement via send_mail.cgi) :

Leurs logs étant :

 tail /var/webmin/webmin.log

Si les envois ne partent pas, tester en shell :

 cd /usr/share/webmin/mailboxes
 ./send_mail.cgi

S'il y a une erreur sur les variables d'environnements :

 printenv
 export WEBMIN_CONFIG="/etc/webmin"
 export PERLLIB="/usr/lib/x86_64-linux-gnu/perl5"

Gestion des sauvegardes

[modifier | modifier le wikicode]

Des backups peuvent être planifiés ou effectués en live travers l'interface :


telnet

Telnet est un protocole conçu pour accéder aux ordinateurs à distance, en mode client-serveur. Il est moins sûr que SSH car non crypté. Son port par défaut est 23 mais on peut le spécifier en paramètre.

Tester si le port HTTP est ouvert et que son service écoute

[modifier | modifier le wikicode]
telnet localhost 80

Logo

Une fois connecté avec telnet, si on ne peut pas quitter avec CTRL + C, taper en azerty : CTRL + ALT GR + ), puis "quit" et entrée.

Envoyer un email sur un serveur SMTP

[modifier | modifier le wikicode]
telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 smtp.mydomain.com
mail from:<superman@mydomain.com>
250 2.1.0 <superman@mydomain.com>... Sender ok
rcpt to:<wonderwoman@herdomain.com>
250 2.1.5 <wonderwoman@herdomain.com>... Recipient ok
data
354 Enter mail, end with "." on a line by itself
Let's meet
.
250 2.0.0 n514OvkN019941 Message accepted for delivery
quit
221 2.0.0 smtp.mydomain.com closing connection
Connection closed by foreign host.


cURL

cURL est une commande pour appeler une page web (port 80 ou 443) en GET (par défaut) ou en POST.

Aide :

 curl -h

Ignorer les erreurs HTTPS

[modifier | modifier le wikicode]

Pour ne pas vérifier le certificat SSL/TLS, utiliser "-k" (ou "--insecure") :

 curl -k "https://fr.wikibooks.org/wiki/Accueil"

Le verbe HTTP est précisable avec "-X". Exemple de création de page MediaWiki :

 curl -X POST https://fr.wikibooks.org/w/rest.php/v1/page -H "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" --data '{"source": "Hello, world!", "title": "User:<my username>/Sandbox", "comment": "Creating a test page with the REST API"}'

Télécharger un fichier

[modifier | modifier le wikicode]

Il faut préciser le nom du fichier avec "-o" (ou "--output").

 curl -X GET "https://upload.wikimedia.org/wikipedia/commons/5/53/Le_syst%C3%A8me_d%27exploitation_GNU-Linux-fr.pdf" -o Linux.pdf

Mesurer le temps de réponse

[modifier | modifier le wikicode]

On peut aussi mesurer le temps de réponse d'un site avec le paramètre "-w"[1]. Ex :

 curl -X GET "https://fr.wikibooks.org/wiki/Accueil" -w  "\n%{time_starttransfer}\n%{time_total}\n"

Cela affiche le code HTML de la page suivi du temps de la requête : 0,103497 s, puis le temps en total après téléchargement : 0,137093.


wget

La commande wget permet de télécharger un fichier depuis la ligne de commande :

  $ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2
  --13:16:02--  http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2
             => `linux-2.6.23.tar.bz2'
  Résolution de www.kernel.org... 204.152.191.5, 204.152.191.37
  Connexion vers www.kernel.org[204.152.191.5]:80...connecté.
  requête HTTP transmise, en attente de la réponse...200 OK
  Longueur: 45,488,158 [application/x-bzip2]
 
  9% [===>                                          ] 4,245,225    630.29K/s    ETA 01:28

Pour utiliser un proxy, il faut définir la variable d'environnement http_proxy. Exemple :

http_proxy=monproxy:3128 wget http://apache.cict.fr/ant/source/apache-ant-1.7.0-src.tar.gz

wget sur ftp

wget est également compatible avec le protocole ftp. Il est ainsi capable de télécharger un fichier ou un ensemble de fichier depuis un ftp distant.

 # wget ftp://login:passwd@ftp.host.net/thedir/* 

Pour télécharger les sous-répertoire et fichiers on utilise l'option "-r".

L'option "-nH" permet de ne pas sauvegarder le nom d'hôte, autrement wget fera la copie vers un nouveau dossier créé portant le nom de l'hôte du serveur ftp.

Utilisation de base

[modifier | modifier le wikicode]

Typiquement Wget s'utilise par la ligne de commande, avec un ou plusieurs URLs passés en paramètres. De nombreuses options permettent d'affiner le comportement souhaité (téléchargement multiple, suivre les liens...).

# Télécharge la page à la racine du site exemple.fr dans un ficher
# nommé "index.html".
wget http://www.exemple.fr/
# Télécharger les sources de Wget depuis le serveur FTP de GNU.
wget ftp://ftp.gnu.org/pub/gnu/wget/wget-latest.tar.gz

Il est possible de télécharger automatiquement plusieurs URLs dans une hiérarchie de dossiers.

# Télécharge tous les fichiers *.gif d'un serveur web
# (Les syntaxes de type glob, comme "wget http://www.serveur.com/dir/*.gif", ne marche que avec FTP)
wget -e robots=off -r -l1 --no-parent -A.gif http://www.serveur.com/dir/
# Télécharge la page racine de exemple.fr, avec les images et les 
# feuilles de styles utilisées pour afficher la page, et convertit les 
# URLs internes pour fonctionner avec les copies locales.
wget -p -k http://www.exemple.fr/
# Télécharge le contenu entier de exemple.fr
wget -r -l 0 http://www.exemple.fr/


Le serveur de noms BIND

À la création d'Internet, chaque ordinateur du réseau contenait un fichier /etc/hosts qui listait le nom de toutes les machines du réseau et leurs adresses IP. À chaque fois que l'on rajoutait une machine sur Internet, il fallait mettre à jour ce fichier.

Le nombre de machines connecté à Internet s'étant rapidement accru, cette solution de fichier /etc/hosts communs est devenu ingérable, et il a fallu inventer un procédé capable de palier ce problème.

La solution qui s'est imposée fut la création d'une base de données distribuée, et ainsi est né le principe de serveur DNS.

Un serveur DNS permet de faire la correspondance entre un nom canonique (ex : www.google.fr) et son adresse IP.

Le premier serveur DNS fut créé par l'université de Berkeley et s'appelle BIND (Berkeley Internet Name Domain). BIND est le serveur DNS le plus utilisé et le plus populaire, environ 79 % d'Internet fonctionne avec ce logiciel[1].

Configuration du client DNS

[modifier | modifier le wikicode]

Sur un serveur Unix, la liste des serveurs DNS est définie dans le fichier /etc/resolv.conf.

 $ cat /etc/resolv.conf
 search mondomaine.fr
 nameserver 192.168.30.1

Principe de fonctionnement du DNS

[modifier | modifier le wikicode]

Schéma : l'arbre à l'envers

                    .("point")
     _______________|_______________...________
     |     |     |     |    |    |             |
    com   net   org   fr   ru   edu ...       arpa 
     |          |                              | 
   google       wikibooks                   in-addr
   |            |   |   |                  |  | ... | 
 ug-in-f104    fr  ru  uk ...              0  1     255 
                                        ___|___    ...                                     
                                       | | ... |
                                       0 1     255
                                    ___|___        ...                                 
                                   | | ... |
                                   0 1     255 
                                ___|___            ...                             
                               | | ... |
                               0 1     255 


Au sommet de l'arbre on trouve des serveurs root qui aiguille vers les top level domain (com, net, org, fr, etc.) Il existe une branche spéciale ARPA avec un sous domaine in-addr qui sert à gérer le reverse DNS.

La commande host

[modifier | modifier le wikicode]

La commande host permet d'obtenir l'adresse IP d'un ordinateur :

 $ host www.google.com
 www.google.com is an alias for www.l.google.com.
 www.l.google.com has address 209.85.135.147
 www.l.google.com has address 209.85.135.99
 www.l.google.com has address 209.85.135.103
 www.l.google.com has address 209.85.135.104

La commande host permet également de consulter le DNS inverse, c'est à dire quel nom canonique est associé à une adresse IP donnée :

 $ host 66.249.93.104
 104.93.249.66.in-addr.arpa domain name pointer ug-in-f104.google.com.

La commande dig

[modifier | modifier le wikicode]

La commande dig permet d'interroger un serveur DNS.

Voici quelques exemples :

En interrogeant le sommet de l'arbre ., on obtient la liste des serveurs racines du DNS, appelés les root-servers[2] :

 $ dig . NS
 ...
 ;; ANSWER SECTION:
 .                       419748  IN      NS      a.root-servers.net.
 .                       419748  IN      NS      b.root-servers.net.
 .                       419748  IN      NS      c.root-servers.net.
 .                       419748  IN      NS      d.root-servers.net.
 ...

En interrogeant la branche com, on obtient la liste des serveurs DNS gérant les noms de domaines en .com :

 $ dig com. NS
 ...
 ;; ANSWER SECTION:
 com.                    172800  IN      NS      i.gtld-servers.net.
 com.                    172800  IN      NS      j.gtld-servers.net.
 com.                    172800  IN      NS      k.gtld-servers.net.
 com.                    172800  IN      NS      l.gtld-servers.net.
 ...

Si on interroge la branche fr, on obtient la liste des serveurs DNS gérant les noms de domaines en .fr. On constate que les extensions nationales sont gérés par des organismes nationaux (dans le cas de la France, le NIC France) :

 $ dig fr. NS
 ...
 ;; ANSWER SECTION:
 fr.                     172800  IN      NS      f.ext.nic.fr.
 fr.                     172800  IN      NS      a.ext.nic.fr.
 fr.                     172800  IN      NS      a.nic.fr.
 fr.                     172800  IN      NS      b.ext.nic.fr.
 ...

En indiquant un nom de domaine, dig permet de connaitre différentes informations, comme par exemple :

La liste des serveurs DNS gérant le nom de domaine :

 $ dig google.fr NS
 ...
 ;; ANSWER SECTION:
 google.fr.              175462  IN      NS      ns3.google.com.
 google.fr.              175462  IN      NS      ns4.google.com.
 google.fr.              175462  IN      NS      ns1.google.com.
 google.fr.              175462  IN      NS      ns2.google.com.
 ...

La liste des serveurs de mails :

 $ dig google.fr MX
 ...
 ;; ANSWER SECTION:
 google.fr.              10800   IN      MX      10 smtp4.google.com.
 google.fr.              10800   IN      MX      10 smtp1.google.com.
 google.fr.              10800   IN      MX      10 smtp2.google.com.
 google.fr.              10800   IN      MX      10 smtp3.google.com.
 ...

Les Ressources Records (RR)

[modifier | modifier le wikicode]

Les informations stockées dans un serveur DNS sont classifiées à l'aide des Ressources Records (RR).

Il existe de nombreux Ressources Records, voici les plus courants :

  • NS (Name Server) indique les serveurs DNS gérant le nom de domaine. Exemple : dig google.com NS donne les name server de google.com
  • A (Adresse IPv4) indique l'adresse IPv4 associée à un FQDN (Full Qualified Domain Name). Exemple : dig www.google.com A donne les adresses IPv4 de www.google.com
  • AAAA (Adresse IPv6) indique l'adresse IPv6 associée à un FQDN (Full Qualified Domain Name). Exemple : dig www.google.com AAAA donne les adresses IPv6 de www.google.com
  • MX (Mail eXchanger) indique le(s) serveur(s) de mail à contacter pour délivrer les emails du domaine. Exemple : dig google.fr MX donne les serveurs de mails acceptant des emails destinés à <un nom>@google.fr.
  • CNAME (Canonical NAME) permet de créer des Alias (des noms étant des raccourcis vers d'autres noms). Exemple : host www.google.fr nous indique que www.google.fr est alias vers www.google.com.
  • PTR (PoinTeuR) est utilisé par le reverse DNS pour effectuer la résolution d'une adresse IP vers un nom (FQDN). Exemple : host 72.14.207.99 nous indique que l'adresse IP 72.14.207.99 est associé au nom eh-in-f99.google.com

Installation de BIND

[modifier | modifier le wikicode]

Pour installer le serveur BIND sous Debian, on utilise la commande suivante :

 # apt-get install bind

À partir de Debian Lenny, le package contenant le serveur BIND s'appelle bind9

Configuration de BIND

[modifier | modifier le wikicode]

Les fichiers de configuration de BIND sont situés dans le répertoire /etc/bind.

Le fichier principal de configuration de BIND est /etc/bind/named.conf. Debian a choisit de découper ce fichier en 3 fichiers afin de faciliter les mises à jour.

À noter que dans ces fichiers, les lignes en commentaire commencent par // et non le # habituel des .conf, que l'on retrouve dans la syntaxe Apache.

/etc/bind/named.conf

[modifier | modifier le wikicode]
# cat /etc/bind/named.conf
 // Documentation : /usr/share/doc/bind/README.Debian
 
 // Inclusion du fichier /etc/bind/named.conf.options
 include "/etc/bind/named.conf.options";
 
 // Configuration des logs
 logging {
       category lame-servers { null; };
       category cname { null; };
 };
 
 // La zone définissant les root servers
 zone "." {
       type hint;
       file "/etc/bind/db.root";
 };
 
 // La zone localhost
 zone "localhost" {
       type master;
       file "/etc/bind/db.local";
 };
 
 // La zone inverse localhost
 zone "127.in-addr.arpa" {
       type master;
       file "/etc/bind/db.127";
 };
 
 // La zone inverse réseau
 zone "0.in-addr.arpa" {
       type master;
       file "/etc/bind/db.0";
 };
 
 // La zone inverse broadcast
 zone "255.in-addr.arpa" {
       type master;
       file "/etc/bind/db.255";
 };
 
 // Inclusion du fichier /etc/bind/named.conf.local
 include "/etc/bind/named.conf.local";

/etc/bind/named.conf.options

[modifier | modifier le wikicode]
 # cat /etc/bind/named.conf.options
 options {
       // Emplacement des zones si on ne spéficie pas de chemin absolu
       directory "/var/cache/bind";
 
       // Option désormais obsolète depuis BIND 8
       fetch-glue no;
 
       // Option pour changer le port par défaut
       // query-source address * port 53;
 
       // Option pour indiquer un DNS à qui on va renvoyer
       // les demandes de résolution
       // forwarders {
       //      0.0.0.0;
       // };
 };

Dans ce fichier, il est possible de préciser dans la section forwarders l'adresse IP du DNS à qui l'on souhaite renvoyer les demandes de résolutions de noms. Par exemple, ceci est utile lorsque notre serveur DNS ne peut pas accéder directement à Internet.

Par défaut BIND écoute sur le port 53 en UDP. On peut également changer ce port dans ce fichier, mais ceci est délicat car il faudra accorder la configuration des clients en conséquence. À noter que le dossier /etc/services contient le numéro par défaut des ports de tous les services.


/etc/bind/named.conf.local

[modifier | modifier le wikicode]

On va définir dans ce fichier nos zones locales.

  # cat /etc/bind/named.conf.local
  zone "mondomaine.fr" {
        type master;
        file "/etc/bind/db.mondomaine.fr";
  };

  zone "mondomaine2.fr" {
        type master;
        file "/etc/bind/db.mondomaine2.fr";
  };

Le fichier définissant la zone

[modifier | modifier le wikicode]

On crée ensuite le fichier de zone /etc/bind/db.mondomaine.fr

 # cat /etc/bind/db.mondomaine.fr
 ;
 ; BIND data file for mondomaine.fr
 ;
 $TTL    604800
 @       IN      SOA     dns.mondomaine.fr. root.mondomaine.fr. (
                             1         ; Serial
                        604800         ; Refresh
                         86400         ; Retry
                       2419200         ; Expire
                        604800 )       ; Negative Cache TTL
 ;
 @       IN      NS      dns.mondomaine.fr.
 dns     IN      A       192.168.30.210
 ;
 srv1    IN      A       192.168.30.211
 ;
 @       IN      MX      0       mail.mondomaine.fr.
 ;
 mail    IN      A       192.168.30.210
 alex    IN      CNAME   mail
 guillaume       IN      CNAME   srv1

À noter que dans les fichiers de zone, les lignes en commentaire commencent par ; et non le # habituel.


Points importants de ce fichier :

Le caractère @ (arobas) remplace le nom de la zone.

Lorsque l'on définit un nom canonique, on a deux possibilités :

  • soit on donne le nom en entier (ex: pc210.mondomaine.fr.) . Dans ce cas-là, il ne faut pas oublier le point final, sinon le système rajoute automatiquement le nom de la zone (mondomaine.fr).
  • soit on ne donne que le nom "court" (ex: alex). Dans ce cas-là, il ne met pas le point final afin que le système rajoute le nom de la zone.

Test de fonctionnement

[modifier | modifier le wikicode]

Une fois que l'on a modifié ces fichiers, on relance le serveur DNS :

 # /etc/init.d/bind restart

On modifie ensuite le fichier /etc/resolv.conf pour lui indiquer d'utiliser le DNS que l'on vient de configurer :

 # vi /etc/resolv.conf
 search mondomaine.fr
 nameserver 127.0.0.1

Pour tester, on essaye de pinguer un nom définit dans le DNS :

 # ping pc210.mondomaine.fr

Si tout se passe bien, le DNS doit effectuer la résolution.

On peut aussi utiliser les commandes host et dig pour vérifier :

 # host pc210.mondomaine.fr
 ...
 # host guillaume.mondomaine.fr
 ...
 # dig mondomaine.fr MX
 ...

Le fichier définissant la zone inverse

[modifier | modifier le wikicode]

Maintenant que l'on a configuré le DNS de la zone mondomaine.fr, on va créer la zone inverse qui va permettre d'associer un nom à une adresse IP.

On rajoute tout d'abord la zone inverse dans le fichier named.conf.local :

 // La zone reverse DNS
 zone "30.168.192.in-addr.arpa" {
       type master;
       file "/etc/bind/db.192.168.30";
 };

Le nom de la zone est composé de l'adresse réseau (à l'envers) associé à in-addr.arpa.

On crée ensuite le fichier /etc/bind/db.192.168.30 :

 # cat /etc/bind/db.192.168.30
 ;
 ; BIND data file for 192.168.30
 ;
 $TTL    604800
 @       IN      SOA     dns.mondomaine.fr. root.mondomaine.fr. (
                             1         ; Serial
                        604800         ; Refresh
                         86400         ; Retry
                       2419200         ; Expire
                        604800 )       ; Negative Cache TTL
 ;
 @       IN      NS      dns.mondomaine.fr.
 210     IN      PTR     pc210.mondomaine.fr.
 211     IN      PTR     srv1.mondomaine.fr.


Le ressource record PTR permet de définir le nom associé à l'adresse IP.

Pour vérifier, on relance le DNS et on lui demande quelle nom est associé à une adresse IP donnée :

  # /etc/init.d/bind restart

  # host 192.168.30.210
  ...

Gestion des zones

[modifier | modifier le wikicode]
Ajout d'un enregistrement IN A dans Webmin.

Pour modifier les redirections DNS d'un domaine, il faut modifier sa zone :

 vim /etc/bind/db.mondomaine.fr
 vim /var/lib/bind/example.com.hosts

Après modification des zones DNS, il s'avère nécessaire de demander sa propagation en cliquant tout en haut à droite sur Apply Configuration. Cela équivaut à la commande RNDC pour "Remote Name Daemon Control" :

rndc reload

Et éventuellement vérifier qu'il n'y a pas eu d'erreur :

tail -300 /var/log/syslog

Cela permet par exemple de s'apercevoir que le numéro de série de la version de la zone doit être changé à chaque modification :

zone serial (999) unchanged. zone may fail to transfer to slaves.

Ce que L'interface graphique Webmin, plus ergonomique pour mettre à jour les zones DNS, incrémente automatiquement.

Problèmes connus

[modifier | modifier le wikicode]

SERVFAIL

[modifier |