Social Icons

linux

Présentation de Linux

Linux est un système d’exploitation libre, réalisant un sous-ensemble de la norme POSIX. Initialement, le terme "Linux" désigne uniquement le noyau. Par extension, on donne également ce nom aux distributions basées sur ce noyau et un ensemble d’outils du projet GNU.

Linux est un système Unix, mais n’utilise aucun code propriétaire et est fourni sous licence GPL, ce qui implique la disponibilité des sources. Comme tout autre système Unix, il est multi-tâches, multi-utilisateurs. Il est également extrêmement portable, puisqu’il est aujourd’hui disponible officiellement sur des processeurs Intel (i386 à Pentium III), Alpha, Motorola (680x0 et PowerPC), Sparc, StrongArm, Mips. Sans compter les portages opérationnels ou en cours sur PalmPilot, Itanium (ex-Merced), PA-Risc, Crusoe ...

Les version du noyau Linux sont de la forme "x.y.z". Si "y" est un nombre pair, la version est stable et seules des corrections d’anomalies y sont en général appliquée lors de l’incrément de "z". Si "y" est un nombre impair, il s’agit d’une version de développement et donc instable.

Caractéristiques

  • Système multi-tâche, multi-utilisateur
  • Arborescence de fichiers et système de fichiers (FS)
  • Processus et noyau, fichiers périphériques
  • Shell et commandes, scripts pour l'automatisation des tâches d'administration
  • Double origine : conception par AT&T et dérivé de Berkeley BSD
  • Système ouvert : normalisation par l'Open Group, systèmes ouverts.
  • Plusieurs Unix disponibles : HP-UX, Solaris, AIX, SCO, Linux, ...

Rôle de l'administrateur

  • Créer, modifier, supprimer un utilisateur : y compris la modification de l’environnement de travail, avec la modification des droits, stratégie des mots de passe...
  • Gérer les fichiers et les disques : intégrité du système de fichiers, organisation de l'arborescence, protection avec les droits, gestion des systèmes de fichiers (création, montage, démontage), gestion des disques physiques (installation, partitionnement, ...)
  • Surveiller l’espace disque : taux d'occupation des disques, swapping, quotas, ...
  • Organiser les sauvegardes : commandes, support, intervalles, stratégies, ...
  • Ajouter des périphériques : nouveaux disques, cartes réseau, fichiers spéciaux, ...
  • Améliorer les performances du système : gestion des ressources, mémoire, optimisation des paramètres du noyau, ...
  • Gérer les services et installer les nouveaux produits : services au démarrage, crontab, procédures d'installation standard, impression, ...
  • Sécuriser le système : sécurité de connexion, discipline des utilisateurs, éventuellement sécurité réseau.
  • Arrêter et démarrer le système : connaître le processus d'arrêt/relance.

 Se déplacer dans les répertoires (Change Directory)

cd.. : Remonte d'un niveau
cd/ : Retourne à la racine
cd- : Retourne au répertoire précédent

Lister les fichiers d'un répertoire: (List Sorted)

ls -l : Permet de lister les attributs des fichiers
ls -d: Affiche uniquement les répertoires
ls -a : Liste tous les fichiers du répertoire y compris les fichiers cachés.
ls -m : Affiche les fichiers en les séparant par une virgule.
ls -t : Affiche les fichiers par date.
ls -lu : Affiche les fichiers par date du dernier accès et indique la date.
ls -F : Affiche les fichiers par type
ls -S : Affiche les fichiers trié s par ordre de taille décroissante.
ls -X : Affiche les fichiers par type d'extension
ls -r : Affiche les fichier en ordre alphabétique inverse
ls -alR / : Affiche tous les fichiers d'un système
ls -alR |grep doc : Affiche tous les fichiers contenant doc

Copier un fichier ou un répertoire: (copy)

cp : Demande s'il peut écraser le nom de fichier : répondre par Oui(y) ou Non (n)
cp -i : Avertit de l'existence d'un fichier du même nom et demande s'il peut ou non le remplacer.
cp -l : Permet de faire un lien en "dur" entre le fichier source et sa copie
cp -s : Permet de faire un lien "symbolique" entre le fichier source et sa copie
cp -p : Permet lors de la copie de préserver toutes les informations concernant le fichier.
cp -r : Permet de copier de manière récursive l'ensemble d'un répertoire et de ses sous répertoires
cp -b : Permet comme l'option -i de s'assurer que la copie n'écrase pas un fichier existant : le fichier écrasé est sauvegardé, seul le nom du fichier est modifié et cp ajoute un tilde(~) à la fin du nom de fichier

Supprimer des fichiers et répertoires: (remove & remove directory)

rm -d : Permet de supprimer un répertoire qu'il soit plein ou non
rm -r : Permet de supprimer un répertoire et ses sous répertoires
rm -f : Permet de supprimer les fichiers protégés en écriture et répertoires sans confirmation
rmdir : Supprime un répertoire
rmdir -p rep1/rep2/rep :Supprime le répertoire et ses sous répertoire associés

Créer des répertoire: (make directory)

mkdir : Crée un répertoire
mkdir -p rep1/rep2/rep3 :Crée un répertoire et ses sous répertoires associés

Déplacer ou renommer un fichier: (move)

mv -b : Va effectuer une sauvegarde des fichiers avant de les déplacer
mv - i : Demande pour chaque fichier et chaque répertoire s'il peut ou non le déplacer
mv - u : Demande a "mv" de ne pas supprimer le fichier si la date de modification est la même ou plus récente que son remplaçant.

Recherche, analyse, modification de contenus

find / : Chercher a partir de la racine du fichier en court
find -name : Spécifier un nom de fichier
find -print : Afficher le résultat a l'écran
find, locate et which :Retrouver un fichier
diff : Affichage des différences entre fichiers
cmp : Comparaison binaire
cat et more : Voir un fichier
sort : Tri des lignes
df : Emplacement du montage des systèmes de fichiers (partitions) et l'espace restant sur chacun d'eux
Sed : Permet d'appliquer des commandes sur un fichier et d'afficher le résultat (sans modification du fichier)
du : Donne la place du disque utilisée par le répertoire courant
wc : Comptage des mots, lignes ou caractères
file : Donne le type de fichier
grep -c : Trouver une expression rationnelle dans un fichier: (grep) donne le nombre de fois ou l'expression rationnelle a été trouvée dans le fichier:
grep -n : Pour rechercher des expressions rationnelles commencent par un tiret 

Autres Commandes

pwd : Où suis-je ?
man (et nom de la commande): Rechercher des informations sur une commande.
which : Permet de connaître le chemin d'un exécutable
mdir : Affiche la liste des fichiers d'une disquette MS-Dos
mkmode : Crée un nom de fichier temporaire unique
emacs, joe : Éditer un fichier
ln : UNIX permet de créer plusieurs liens sur un même fichier avec la commande
who : Liste les utilisateurs connectés sur la station
free : Mémoire utilisée
clear : Efface l'écran
touch : Met à jour les dates d'accès des fichiers
logout : Permet de fermer son compte utilisateur
logname : Permet de savoir sous quel nom on est logué
tar : Archivage de données : la commande
q : quitte

Démarrage, Redémarrage & Arrêt

startx : demarrer Xwindows sous linux
reboot : redémarre de la machine
shutdown -r : arrête et redémarrer (rebooter).
shutdown -h : arrêter proprement linux.
exit : Déconnexion de l'utilisateur courant

Gestion des utilisateurs

Quand un utilisateur se connecte, il fournit un nom de connexion (login name) et un mot de passe (password). Si la connexion réussit, un shell est lancé et l'utilisateur se retrouve dans son répertoire de travail (working directory) qui est initialement son répertoire de connexion (login directory). Ces informations sont placées dans les fichiers /etc/passwd et /etc/group.

/etc/passwd

Les utilisateurs sont définis au sein du fichier /etc/passwd. En voici sa structure.
user:passwd:UID:GID:commentaire:homedir:commande

/etc/group

Les groupes sont définis au sein du fichier /etc/group. Voici sa structure. group:passwd:GID:liste_utilisateurs

Commandes

La commande passwd permet de changer le mot de passe, et dispose de plusieurs options.
passwd nom_user : changement du mot de passe de l'utilisateur donné
passwd -d nom_user : supprime le mot de passe
passwd -l nom_user : verrouille le compte
passwd -f nom_user : force le changement de mot de passe à la prochaine connexion

Les autres commandes sont :

useradd :ajout d'un utilisateur (adduser parfois sous Linux)
usermod : modification d'un compte utilisateur
userdel : supprime l'utilisateur (deluser parfois sous Linux)
groupadd : ajout d'un groupe
groupmod : modification d'un groupe
groupdel : supprime un groupe
pwck : vérification de la cohérence de /etc/passwd
grpck : vérification de la cohérence de /etc/group
finger : informations sur un utilisateur
su : se connecter à un compte
id : connaître son identité
chsh (Linux) : changer de shell
On se reportera au manuel en ligne pour les options qui ne sont pas compliquées.

Sous Linux, la syntaxe de useradd est la suivante :

useradd [-c comment] [-d homedir] [-g initial_group] [-G group2,group3,...] [-m] [-s shell] [-u UID] [-o] [-r] [-e YYYY-MM-DD] [-f inactive_days]
-c : saisie du commentaire. Un commentaire détaillé peut être inséré avec la commande chfn.
-d : le répertoire personnel
-g : le groupe de base
-G : groupes supplémentaires pour utilisation avec la commande newgrp
-m : recopie du /etc/skel dans le répertoire personnel.
-s : le shell
-u : choix d'un UID spécifique > 99
-o : l'UID n'est pas unique
-r : UID privilégié système <= 99
-e : date d'expiration du login
-f : délai avant verrouillage si mot de passe non changé
-p : mot de passe déjà crypté avec crypt

On crée un utilisateur le plus simplement avec
useradd -m user
useradd -c "login de test" -d /home/logtest -s /bin/bash -g users -u 123 -m
logtest

La commande usermod modifie ces valeurs

(mêmes paramètres) mais permet aussi de verrouiller un compte :
-l login : modification du login
-L : lock password (verrouillage)
-U : unlock password (déverouillage)

La commande userdel supprime le compte, avec son répertoire personnel si -r.

userdel -r logtest

La commande chsh modifie le shell de login.

-s : spécifie le nouveau shell
-l : donne la liste
chsh -s /bin/sh logtest

La commande groupadd crée un groupe :

groupadd [-g GID] [-o] [-r] [-p password] group
-g : précise le GID > 99
-o : le GID n'est pas unique
-r : GID système <= 99
-p password déjà crypté
groupadd -g 123 grptest

La commande groupdel supprime le groupe.

groupdel grptest

La commande groupmod modifie le groupe, -n renomme le groupe.

On peut changer de groupe (groupe secondaire) avec la commande newgrp :

newgrp [-] groupe [-c commande]

Les fichiers

Le système de fichier d'un UNIX est hiérarchique et organisé sous forme d'arbre. Il existe trois principaux types de fichiers : standards (ou normaux), catalogues (les dossiers ou répertoires) et les fichiers spéciaux (périphériques, tubes, liens, ...). Tous les fichiers et systèmes de fichiers sont regroupés au sein d'un arbre unique.

Les principaux répertoires

/ ou root directory, le répertoire principal de tout Unix, généralement le premier monté juste après le chargement du noyau. Toute l'arborescence de base d'un Unix y est soit directement présente, soit reliée par montage. Cette partition étant la première accédée par le système elle doit contenir les fichiers de configuration, les binaires système et les bibliothèques de base, de manière à pouvoir démarrer correctement le système. La racine et son contenu de base prennent en général jusqu'à 200 Mo.
/sbin contient généralement les commandes Unix systèmes de base telles que les commandes de montage, que changement de runlevel, de création de swap, bref toutes les commandes utilisées par le système au démarrage ou par l'administration. Il doit rester dans le root directory.
/lib contient toutes les librairies (bibliothèques) de base, ainsi que parfois les modules du noyau. Comme /sbin il doit rester dans le root directory.
/etc est un répertoire important vital et stratégique car il contient toute la configuration de l'Unix : runlevels, règles de montage, utilisateurs, groupes, quotas, configuration réseau, ... Il doit donc rester dans le root directory.
/tmp contient les fichiers et répertoires temporaires créés par le système ou les services, les utilisateurs. Sa taille peut être variable. Un éditeur comme vi y stockera ses fichiers en cours, une messagerie POP aussi (avant de les envoyer ou durant sa composition). Ainsi sa taille conseillée de 100 Mo à la base peut monter à plusieurs gigaoctets. Il est conseillé de créer une partition spécifique.
/var est particulier car comme son nom l'indique sont contenu est variable. Il va contenir les traces et journaux du système (noyau) et des services, les spools d'impression, la crontab, les spools et fichiers de messagerie, ... Sa taille de base de 200 Mo peut évoluer, en cas de non archivage, à plusieurs gigaoctets (envisageons une centaine d'utilisateurs imprimant de fichiers d'une centaine de mégaoctets, recevant ou envoyant des messages avec de fichiers joints...). Une partition distincte est à envisager.
/dev contient l'ensemble des fichiers spéciaux représentant les périphériques. Il doit forcément rester dans le root directory.
/usr contient généralement les applications accessibles par les utilisateurs (dans bin) ou des outils système complémentaires (sbin) ou des composants optionnels et rajoutés (local). Dans le cadre d'un serveur au rôle délimité, sa taille peut être fixe et dans ce cas placé dans le root directory. Dans le cas d'un serveur de test ou de développement, sa taille peut énormément varier (installation d'outils et de kits de développement, multiples versions de tests d'un logiciel,...) et dans ce cas mieux vaut lui donner une partition distincte. Au minimum 600 Mo, pas de maximum.
/proc n'est pas un véritable répertoire. Son contenu est logique et pas physique, et donc ne prend aucune place sur le disque. Il contient en fait des informations liées au noyau, au réseau, aux pilotes et aux processus en cours.
/root est en principe le répertoire par défaut de l'administrateur. Il est préférable de la placer dans le root directory s’il contient par exemple des scripts de son cru, en cas de changement d’un runlevel.
/home contient l’ensemble des répertoires utilisateurs. On peut le laisser dans le root directory si le nombre d'utilisateurs est faible et la taille est limitée (quotas). Autrement il faudra envisager de le placer dans sa propre partition. Il faut compter 10 à 50 Mo par utilisateur.
/mnt contient par convention les points de montages autres que ceux cités ci-dessus, points de montage annexes comme les partitions non Unix, les disquettes, les cdroms, lecteurs Zip, ...

Les types de fichiers

On distingue trois types principaux de fichiers :
1. Ordinaires : fichiers de données, programmes (-)
2. Répertoires : appelés aussi catalogues, c'est en fait un fichier qui contient d'autres fichiers (en fait une table listant d'autres fichiers) (d)
3. Spéciaux : ni ordinaires ni répertoires, ce sont les périphériques (c : caractère, b : blocs), liens symboliques (l) , tubes nommés (p), sockets (s).
Un nom de fichier peut contenir sur les Unix récents 255 caractères. Les Unix plus anciens en ont
seulement 14. Tous les caractères sont généralement autorisés (sauf /), mais il vaux mieux éviter les
métacaractères ou caractères accentués et spéciaux. L'extension n'est pas gérée mais peut être
précisée pour plus de clarté.
La commande file permet de déterminer plus précisément, à partir d'une table spéciale /etc/magic et
le magic number dans l'en-tête du fichier, son type.

Les droits

L'accès aux fichier est contrôlé par les droits (voir ls -l).
On distingue trois catégories d'utilisateurs :
1. Le propriétaire (u)
2. Les membres du groupe associé au fichier (g)
3. Les autres (ni le propriétaire, ni les membres du groupe) (o)

Fondamentaux

Pour chacune de ces catégories il y a trois droits d'accès :
1. Lecture (r) : lire le fichier, lister le répertoire (u:400,g:40,o:4)
2. Écriture (w) : modifier le fichier (ajouter, retirer ou modifier le contenu), ajouter, renommer ou supprimer un fichier dans le répertoire (u:200,g:20,o:2)
3. Exécution (x) : exécuter le fichier (commande ou script), traverser ou verrouiller le répertoire (u:100,g:10,o:1)

Sticky bit

De valeur octale 1000 ou symbole t, il s'applique sur un exécutable ou un répertoire. Sur un
exécutable, celui-ci sera si possible conservé en mémoire ou swap pour un accès plus rapide. Sur
un répertoire, il limite la suppression des fichiers à leur propriétaire.

Droits étendus / endossement

On donne le droit d'accès à une commande plutôt qu'à un utilisateur. Quand la commande est
exécutée, elle l'est avec l'identité du propriétaire ou du groupe plutôt que celle de l'utilisateur l'ayant
lancé.
Un utilisateur a en fait deux UID et deux GID : réels et effectifs. Les UID et GID réels sont ceux qui
lui sont propres et invariables (sauf substitution), et les effectifs ceux attribués à la tâche qui
exécute la commande. Par défaut les réels et effectifs sont identiques, sauf quand un droit
d'endossement est précisé.
Le SUID : Set User Id : 4000 en octal, u+s en symbole, permet d'avoir comme EUID (UID effectif)
l'UID du propriétaire du fichier.
Le SGID : Set Group Id : 2000 en octal g+s en symbole, permet d'avoir comme EGID (GID
effectif) le GID du groupe d'appartenance du fichier.
Ce sont les droits effectifs qui servent pour le contrôle des droits d'accès.
Sur certains UNIX (BSD et autres) le SGID peut être appliqué à un répertoire et dans ce cas tous les
fichiers crées dans ce répertoire appartiennent au groupe. Sur un fichier de données, on obtient un
accès exclusif sur les données (un accès à la fois).

Principales commandes à connaître

ls : liste de l’arborescence
du : affiche une arborescence et sa taille
find : recherche de fichiers avec actions éventuelles
rm : suppression de fichiers et de répertoires
cp : copie de fichiers et de répertoires
chmod : change les droits d'accès
chgrp : change le groupe
chown : change le propriétaire

Les systèmes de fichiers

Arborescence


Comme vu dans le chapitre précédent, un système de fichier Unix est constitué par une arborescence qui forme apparemment un ensemble de fichiers et de répertoires unique. En fait une arborescence est constituée de plusieurs arbres. Un arbre peut être stocké sur un disque local (partitions d'un disque dur), un support amovible (cédérom, disquette, zip, ...) ou être distant (partage réseau). Un système de fichiers est la structure d'accueil des fichiers au sein d'un arbre. 
On appelle montage la manipulation permettant de rattacher les arbres entres eux (rattacher un nouveau système de fichiers à un répertoire d'un autre système de fichiers). Un montage permet d'organiser son arborescence en un ensemble cohérent selon des critères soit physiques (présence ou ajout de plusieurs disques/partitions, disques amovibles), soit liés à des choix de gestion (sécurité par répartition sur plusieurs FS des données, performances par diminution du temps d'accès, cloisonnement des divers espaces pour les applications et les utilisateurs, gestion de FS pour les sauvegardes,...)

Montage

Le montage permet de rattacher un FS (racine de l'arbre du système de fichiers) à un répertoire d'un FS déjà actif. On utilise la commande mount. Le démontage (suppression du lien entre le répertoire de montage et le FS) se fait par la commande umount. Le disque qui contient le système de fichiers principal doit être obligatoirement connu par le noyau et exister pour qu'Unix puisse démarrer. Il est rattaché à la racine / (root directory) et se nomme /dev/root.
la syntaxe de base est
mount [-t filesystem] [périphérique] [point de montage]
Sans option, la commande affiche les montages actifs.
Le périphérique représente le fichier périphérique correspondant au disque ou à la partition à
monter. Le point de montage est le répertoire ou sera lié le nouveau système de fichiers. l'option -t
permet de préciser le type de système de fichier à monter. Quelques Unix savent reconnaître
automatiquement le type de FS mais il est possible de le préciser.

Exemple sous Linux :
# montage du disque c de Windows 98 vers /mnt/win_c
mount -t vfat /dev/hda1 /mnt/win_c
# montage d'une disquette formatée sous DOS vers /mnt/floppy
mount -t vfat /dev/fd0 /mnt/floppy

Il est possible de définir des montages par défaut et 'automatiser ceux-ci au démarrage de la
machine au sein du fichier /etc/fstab, /etc/vfstab ou encore /etc/filesystems (AIX). Dans ce cas il
n'est plus nécessaire de préciser tous les paramètres de la commande, si le périphérique ou le point
de montage sont l'un ou l'autre présents dans ce fichier.
Syntaxe du fichier /etc/fstab sous Linux :
/dev/hda1 /mnt/win_c ntfs user,noauto,ro 0 0
/dev/hda1 : Le fichier de périphérique
/mnt/win_c : le point de montage
ntfs : le type de système de fichier, ici ntfs
user,noauto,ro : les options (user : montable par l'utilisateur, noauto pas monté au démarrage, ro en lecture seule)
0 0 : le premier définit la fréquence de backup (commande dump), la seconde l'ordre de passage pour la vérification par fsck (0 : pas de vérification).
Le fichier /etc/mtab ou /etc/mnttab contient la liste des montages actifs.
# démontage de /mnt/floppy
mount /mnt/floppy
Sous Linux : /etc/mtab

L’inode
Un inode est un descripteur de fichiers. Il contient les attributs du fichier et une table d'accès aux
blocs de données. Il existe une table d'inodes par disque créée lors de la mise en place du FS. Cette
table est généralement statique et son nombre d'entrées prédéfini et figé, mais certains FS lèvent
cette limitation par des tables d'inodes dynamiques et extensibles. On connaît le numéro d'inode
d'un fichier par la commande ls -i.

Tout fichier quelque soit son type, occupe un inode.

Exemple de contenu d’une table d’inodes :
  • Droits d'accès
  • Type de fichier
  • Nombre de liens physiques
  • UID du propriétaire
  • GID du groupe
  • Taille en octets
  • Date et heure du dernier accès
  • Date et heure de dernière modification
  • Date et heure de création
Adresse du 1er, 2eme, ... du bloc de données (adresses directes de blocs de données)
Adresse du bloc d'indirection de niveau 1, 2, ... (pointeurs vers des adresses directes ou vers
d'autres pointeurs).
Les deux dernières lignes permettent de retrouver les données physiquement sur les disques, et de déterminer la taille maximale d'un fichier sur le disque.
On voit bien que le nom du fichier n'apparaît pas dans l'inode. Celui-ci est contenu dans une entrée de répertoire, une autre table qui contient une paire d'informations inode/nom. Le nombre de liens (nombre d'entrées dans les tables de répertoires pour ce fichier) est inscrit dans la table d'inodes. Le fichier est détruit quand il n'existe plus de liens, c'est à dire quand il n'existe plus aucune entrée pour ce fichier dans les entrées de répertoire.

Divers types de systèmes de fichiers
Les divers types de FS sont propres à chaque système UNIX, y compris dans les conventions de
nommage pour des filesystems identiques. Par exemple pour un FS Microsoft (dos ou windows) on
trouvera dos, msdos, fat, fat12, fat16, fat32, vfat, ... Pour un cédérom ou dvd se sera cdrom,
iso9660, cdfs, UDF, ...
Chaque Unix arrive généralement avec son propre système de fichiers. Ce choix est déterminé par
l'administrateur durant l'installation du système ou l'ajout de disques ou de partitions selon des
critères de performances et de tailles. Certains FS seront plus rapides sur l'accès à un grand nombre
de fichiers de petites tailles, d'autres seront plus rapides sur de gros volumes de données (fichiers de
plusieurs centaines de Mo).
Les distributions Linux proposent généralement le choix entre ext2 (Extended FileSystem 2), ext3
(Extended FileSystem 3) ou ReiserFS.
Contrairement aux systèmes de fichiers hérités du monde Dos/Windows (95-Me), ceux du monde
Unix sont organisés de manière à éviter le phénomène de fragmentation. Si celle-ci se produit, la
recopie de l'ensemble de l'arborescence d'un FS vers un autre règle le problème;
Les dernières évolutions des FS est la journalisation, rajoutant une certaine forme de qualité de
service et de nouveaux moyens de contrôle et de réparation d'un système de fichiers. Le FS est doté
d'un journal de transactions d'écritures. Les écritures des données sont réalisées périodiquement.
Entre deux mises à jour, l'intégrité du système de fichiers est garantie et le journal permet de
réparer. Au pire seuls le contenu du journal et les toutes dernières transactions (quelques ko) sont
perdus.

Voici un tableau décrivant tous les principaux systèmes de fichiers connus de Linux .

ext2 : Second Extended Filesystem, le plus utilisé par défaut
msdos : le mode FAT de MS-DOS
vfat : les modes vfat et fat32 de Windows 95, 98, Me
hpfs : filesystem d’OS/2
sysv : filesystem AT&T System V et Xenix
minix : le premier filesystem utilisé à l'origine par Minix et Linux
iso9660 : aussi cdfs et udf, filesystem lecteurs cd et dvd
reiserfs : filesystem journalisé le plus utilisé
etx3 : Third Extended Filesystem, journalisé
xfs : extended Filesystem, journalisé
nfs : Networked Filesystem, filesystem réseau de Sun (V1 2 et 3)
smbfs : Filesystem basé sur le protocole SMB de Windows

Gestion de l’espace disque

Avec l'arrivée d'unités de stockages massives, y compris sur un simple ordinateur familial, la contrainte liée à la taille d'un disque se fait de moins en moins forte. Cependant l'administrateur doit pouvoir contrôler l'usage des espaces disques disponibles. Pour cela il utilisera trois commandes principales.
  • df : indique l'espace libres des systèmes de fichiers montés. Les options sont -k (affichage de la taille en ko au lieu de blocs de 512 octets), -t (informations sur l'espace et les inodes) et -v (résultats sous forme de pourcentages).
  • du : affiche le nombre de blocs de 512 octets utilisés par une arborescence. On retrouve l'option -k et l'option -s qui n'affiche que le total.
  • find : permet la recherche de fichiers en fonction de la date de dernier accès (pour supprimer les fichiers anciens) et de taille (voir ou sont les fichier consommateurs en ressources). Les fichiers log (traces) et temporaires souvent placés dans /var/log, /tmp, /var/tmp, /var/spool, (...),
    les core dumps (suite aux plantages applicatifs) prennent de la place et sont à surveiller.

Commandes relatives au Système de fichiers

mkfs : création d'un système de fichiers sur disque. La syntaxe est propre à chaque Unix.
mount : montage d'un système de fichiers
umount : démontage
fsck : réparation d'un système de fichiers corrompu
du et df : voir ci-dessus
fuser : affiche les PID des processus qui accèdent au disque et éventuellement de les tuer

quotas

Les quotas permettent à l'administrateur de limiter le nombre de fichiers et/ou le nombre de blocs d'un utilisateur sur un disque. Elle est rarement mise en oeuvre sur Unix car il s'agit d'un OS essentiellement serveur et non utilisateur. Cette situation évoluant rapidement, notamment dans le domaine du développement et du multimédia, il peut parfois être nécessaire d'imposer des limitations.
On distingue deux limites :
  • Limite « hard » : infranchissable. Si un utilisateur atteint la limite en taille ou nombre de fichiers, aucune action ne devient possible.
  • Limite « soft » : La limite peut être franchie un certain temps (en principe 7 jours). Si la situation n'est pas revenue à la normale, alors le point atteint devient la limite « hard ».
Pour installer les quotas sur un disque, il faut plusieurs étapes.
1. Créer un fichier vide « quotas » à la racine du système de fichiers visé : touch quotas
2. Modifier l'attribut de montage pour le système de fichiers dans /etc/vfstab (ou /etc/fstab sous
Linux) : rw et remplacé par rq.
3. Editer les quotas utilisateur avec la commande « edquota » : edquota pierre paul jacques. Cette
commande édite les fichiers quotas pour chacun des systèmes de fichiers.
4. Activer les quotas avec la commande quotaon, généralement au démarrage du système.
Les autres commandes sont « quota » (affichage des informations sur les quotas pour un
utilisateur), « repquota » qui donne la synthèse de l'utilisation des disques et quotas sur un système
de fichiers, et « quotacheck » qui vérifie la cohérence des tables de quotas. 
Linux permet d'appliquer des quotas étendus par groupes et non plus forcément par utilisateurs.

Gestion des processus

Signaux

Lorsqu’un utilisateur exécute une commande externe UNIX crée un processus qui exécute les
instructions de la commande. Un processus est identifié durant toute sa durée par un « PID »
« Process IDentifier » et passe par différents états : actif, prêt, en attente, ...
Un PID est unique à un instant donné. Une fois le processus terminé, il peut être réattribué.
Plusieurs instances d'un même binaire peuvent être exécutées au même moment, chaque processus
étant indépendant et possédant son propre PID.
Un processus est créé par la primitive fork de l'API Unix. Cette primitive crée un clone du
processus l'ayant exécuté, un processus fils, puis celui-ci exécute un autre programme avec la
commande exec. L'ensemble finit par créer un arbre de processus.
Le premier processus créé au démarrage du système se nomme init, et son PID est 1. Il est le père,
l'ancêtre, de tous les autres.

Il existe quatre manières d'exécuter un processus :
  • en avant-plan ou interactif (foreground) : c'est le mode par défaut, comme par exemple sous le shell. Le shell (sh) est le père des commandes (ls, rm, ...) lancées depuis son invite de commande. Il attend que le processus fils (la commande lancée) ait terminé pour rendre la main (apparition de l'invite de commande)
  • A l'arrière-plan (background) : lorsqu'on lance une commande suivie du signe « & ». Le shellva créer le processus fils et rendre tout de suite la main sans attendre que le fils ait terminé son exécution.
  • En mode détaché : le processus détaché n'a plus de terminal de contrôle. C'est le cas d'un processus lancé par la commande nohup. Un « ? » apparaît dans la colonne TTY de la commande ps.
  • Les démons (daemons) ou services : ce sont des processus détachés associés aux services du systèmes d'UNIX.
Contrairement aux processus en avant-plan qui peuvent être arrêtés avec un CTRL+C , les
processus détachés ne peuvent être arrêtés qu'avec des signaux. Le signal 1 « HUP » indique à un
démon de relire sa configuration. Le signal 15 « TERM » est utilisé pour dire à un démon de se
terminer. Enfin le signal 9 « KILL » tue le processus brutalement et sans quel celui-ci puisse
l'intercepter et réagir. C'est la dernière parade à utiliser avec modération, le système pouvant par la
suite se trouver dans un état instable. Les numéros de signaux ne sont pas standards, contrairement
aux libellés qui pour un certain nombre, le sont.
Dans certains cas un processus et ses descendants forment un groupe de processus identifié par le
PID du premier processus père, le « leader ». Dans ce cas les signaux peuvent être envoyés à tous
les membres du groupe en même temps.
Généralement, quand un processus crée un fils, il reste à l'écoute de sa terminaison, même s'il le
lance en arrière-plan. Quand le fils se termine (meurt) le signal « CHLD » est envoyé au père. Mais
la programmation autorise un processus à ne pas rester à l'écoute de certains signaux, notamment
celui-ci. Si un processus se termine avant que son père se soit mis en attente de sa fin, ou qu'il
n'attende pas sa fin, alors le système le descripteur du processus au cas où le père le réclamerait.
C'est ainsi que se forme un « zombie ». Il apparaît avec un ps sous le nom « defunct ». Si le père
meurt sans récupérer les signaux de ses fils, c'est init qui récupère les fils.

Un « zombie » compte pour un processus, bien qu'il n'existe plus réellement. Ne pouvant être
simplement éliminés s'ils sont lancés par root par exemple, il est possible que dans certains cas leur
nombre devienne tel que le nombre maximum de processus autorisés est atteint, ce qui peut
provoquer l'effondrement du système, ou même un crash.

L’environnement

Quand un processus créé un fils, ce dernier hérite de son père d'un ensemble d'éléments définis par ses ancêtres :
  • Le répertorie courant du père
  • Le umask
  • Le ulimit
  • Les variables d'environnement en copie
  • ...
Les variables d'environnement peuvent être modifiées ou définies dans /etc/profile, ~/.profile ou
tout autre endroit. Une variable importante est TERM, notamment pour vi.

Commandes de gestion de processus

Commandes externes

ps : la commande ps -ef affiche tous les processus avec un grand nombre d'informations (PID
UID, PPID, ...)
kill : contrairement à son nom, elle ne tue pas forcément mais envoie un signal à un ou des
processus.
kill -l : liste des signaux
kill -n PID : envoie le signal n au processus PID
kill -n 0 : envoie le signal à tous les processus du groupe du shell
kill -n -1 : envoie le signal n à tous les processus donc l'UID réel est identique à
l'UID effectif du propriétaire du shell émetteur. Autrement dit, le signal est envoyé
à tous les processus de l'utilisateur.
kill -n -PID : envoie le signal n à tous les processus du groupe PID.
su : permet de faire exécuter un processus avec une autre identité que la sienne, par défaut le
shell : su jean -c "id" : exécute id sous le login de jean.
fuser : informations sur les processus qui utilisent un périphérique ou le système de fichiers.
at : exécution de commandes en différé
crontab : exécution périodique de commandes
env : affiche l'environnement d'un shell

Commandes internes

& : exécute un processus en arrière-plan
wait : attend que les commandes exécutées en arrière-plan soit terminée pour poursuivre
l'exécution du shell.
exec : remplacement du code du shell par le code le la commande. Il n’y a pas de création de
processus, le nouveau code se substituant à l'ancien. Si la commande réussit, il n'y à pas de
retour au shell, mais au login, après exécution de la commande.
. script : c'est ici le point « . » qui nous intéresse : le script est exécuté par le shell courant et pas
par un shell fils.

Exécution différée

Le démon cron exécute des commandes pour un utilisateur, selon des critères temporels : date et
heure :
  • La périodicité (tou(te)s les) quand elles sont soumises par la commande crontab.
  • L'échéance (à telle heure) quand elles sont soumises par la commande at.
  • A leur tour et dès que possible quand elles sont soumises par la commande batch.
Il peut y avoir des contraintes d'utilisation.

1. L'utilisateur doit avoir l'autorisation de soumettre une requête. La liste des utilisateurs autorisés est située dans le fichier cron.allow, et la liste des utilisateurs interdits dans cron.deny, dans /usr/lib/cron. Pour les commandes at et batch les fichiers sont at.allow et at.deny. Si ces fichiers n'existent pas seul root est autorisé à utiliser ces commandes. Pour autoriser tout le monde, il suffit de créer un fichier deny vide (aucun utilisateur interdit).
2. Le démon cron exécute une commande dans un environnement réduit (seules les variables HOME, LOGNAME et SHELL sont initialisées avec des valeurs simples). Les autres variables doivent êtres initialisées ou récupérées par ou depuis un script. Dans le cas d'un lancement de script, celui-ci doit obligatoirement être précisé par le commentaire « #! ».
3. Il faut éviter les commandes interactives, c'est à dire nécessitant une entrée standard (clavier) ou sortant un résultat sur écran par la sortie standard. Il vaut mieux dans ces deux cas utiliser les redirections. Sans redirection les messages de sortie et d'erreurs sont envoyés dans la boite aux lettres de l'utilisateur.
4. Le démon cron mémorise l'historique des actions dans /usr/lib/cron/log. Il faut penser à purger régulièrement ces fichiers.
5. Les requêtes de cron et at sont placées dans /usr/spool/cron/crontabs et /usr/spool/cron/atjobs. Elles portent le nom de l'utilisateur Sous Linux, les autorisations cron sont dans les fichiers allow et deny du répertoire /var/spool/cron . Les mêmes pour at et batch sont dans le répertoire /etc. Les requêtes de cron sont dans /var/spool/cron/tabs et les traces dans /var/spool/cron/log.

Crontab

Le démon cron fonctionne à l'aide d'une table, appelée une « cron table ». C'est un fichier texte
simple, édité avec un simple éditeur, par défaut vi. Pour modifier sa cron table personnelle on
utilise la commande crontab -e. Le format est le suivant :

On utilise le format suivant pour les valeurs périodiques :
  • Une valeur pour indiquer quand il faut exécuter la commande. Ex : la valeur 15 dans le champ minute signifie la quinzième minute
  • Une liste de valeurs séparées par des virgules. Ex : 1,4,7,10 dans le champ Mois pour Janvier, Avril, Juillet, Octobre
  • Une intervalle de valeurs. Ex : 1-5 dans le champ Jour de la Semaine indique du lundi (1) au vendredi (5). Le 0 est le dimanche et le 6 le samedi.
  • Le caractère * pour toutes les valeurs possibles. Ex : * dans le champ Jour du mois indique tous les jours du ou des mois.
Exemples :
Exécution de df tous les jours, toute l'année, tous les quarts d'heure :
0,15,30,45 * * * * df > /tmp/libre
Exécution d'une commande tous les jours ouvrables à 17 heures :
0 17 * * 1-5 fin_travail.sh
  • Pour lister les crontabs actives : crontab -l
  • Pour supprimer la crontab active : crontab -r
  • Pour éditer la crontab d'un utilisateur particulier : crontab -u user
at
La commande at exécute une commande à une date et une heure données. La commande est lue depuis l'entrée standard. Si celle-ci est stockée dans un fichier, il faudra rediriger celui-ci vers la commande.

$ at heure [date] < fichier_commandes
Exemples :
Exécution de fic_commandes à 15 heures
at 1500 < fic_commandes
Exécution à minuit
at midnight < fic_commandes :
Exécution dans trois heures
at now + 3 hours < fic_commandes
  • La liste des travaux est visible avec at -l. La liste apparaît sous forme de fichiers xxxxxxxx.a
  • On supprimer un travail avec at -r xxxxxxxx.a

batch

La commande batch fonctionne comme at mais on ne précise pas d'heure ni de date. La travail est placé dans un file d'attente (FIFO) et est exécutée quand c'est son tour.

Les IPC
Les « IPC » (Inter Process Communication) sont des mécanismes de synchronisation et de
communication implémentés dans le noyau UNIX, auxquels les processus applicatifs sont appel
pour échanger des données ou régler des problèmes de concurrence d'accès à des ressources.
Bien qu'étant principalement un problème ou un travail pour les développeurs, l'administrateur est
concerné car il acquiert une meilleure connaissance de son système, et il doit être capable
d'identifier les IPC utilisés par les processus et de les supprimer à la main en cas de plantage du
processus. Éventuellement ce sera à l'administrateur de modifier les paramètres système si les
ressources IPC viennent à manquer.
On distingue trois catégories d'IPC :
1. Les files d'attente de message FIFO («Message Queue ») que les processus utilisent pour
échanger les données, avec une notion de priorité et de présence de messages (sans les lire).
2. Les zones de mémoire partagées (« Shared Memory ») par plusieurs processus pour lire et
écrire des données dans une zone commune,
3. Les sémaphores pour permettre aux processus de se synchroniser afin d'éviter des conflits
d'accès à des ressources partagées, par exemple les Shared Memory.
La commande « ipcs » permet de lister les sémaphores.
  • ipcs : liste les informations des trois catégories
  • ipcs -q : uniquement les message queue
  • ipcs -m : uniquement les shared memory
  • ipcs -s : uniquement les sémaphores

Les informations retournées sont les suivantes :

  • T : type d'IPC (q, m, s)
  • ID : Identifiant de l'IPC (fourni par le noyau)
  • KEY : le nom de l'IPC, choisi ou généré par son créateur
  • MODE (1) : les attributs
                    ♣ R : un processus attend une réception de message
                    ♣ S : un processus attend de pouvoir envoyer un message
                    ♣ D : une zone de mémoire partagée a été supprimée et disparaîtra quand le dernier processus   s'en détachera
                    ♣ C : La zone de mémoire partagée sera initialisée à 0 quand le premier processus s'y attachera
                    ♣- : aucun attribut n'est positionné
  • MODE (2) : les droits
                    ♣ r : droits de lecture
                    ♣ w : droits en écriture pour les messages et la mémoire partagée
                    ♣ a : droit de modification du sémaphore
                    ♣ - : pas de drois
  • OWNER : le nom du propriétaire de l'IPC
  • GROUP : le nom du groupe propriétaire de l'IPC
La commande « ipcrm » permet de supprimer une ressource IPC. Il y a deux syntaxes :
  • ipcrm -x ID (q, m ou s)
  • ipcrm -X CLE (X : Q, M ou S)

Un éditeur de texte : vi

Vi est un éditeur de texte en mode écran qu’il faut absolument connaître en tant qu’administrateur car c’est souvent le seul disponible sur les machines. Il est peu convivial mais extrêmement puissant de part la rapidité de ses commandes.
Le lancement de l’éditeur s’effectue par :
            vi [fichier]
L’éditeur fonctionne avec deux modes principaux
  • un mode commande pour se déplacer dans le texte et passer les commandes de type ex.
  • un mode saisie de texte dont on sort en appuyant sur <ESC>.
Les commandes de déplacement sur le texte sont nombreuses :
Commande                                                    Fonction
h                           déplace le curseur d’un caractère vers la gauche
l                           déplace le curseur d’un caractère vers la droite
k                          déplace le curseur d’une ligne vers le haut
j                           déplace le curseur d’une ligne vers le bas
w                         déplace le curseur au début du mot suivant
b                          déplace le curseur au début du mot précédent
W                        déplace le curseur au début du mot suivant séparé par des blancs
B                         déplace le curseur au début du mot précédent séparé par des blancs
e                          déplace le curseur à la fin du mot

Commande Fonction
E                        déplace le curseur à la fin du mot séparé par des blancs
<CTRL>-f        affiche la page suivante
<CTRL>-b        affiche la page précédente
<CTRL>-d        affiche la demi-page suivante
<CTRL>-u        affiche la demi-page précédente

Voici les quelques commandes nécessaires pour saisir et modifier du texte :
Commande                                           Fonction
i                      passe en mode insertion avant le caractère courant
a                     passe en mode ajout après le caractère courant
o                     ajoute une ligne après la ligne courante et passe en insertion en début de ligne
O                    ajoute une ligne avant la ligne courante et passe en insertion en début de ligne

Les commandes d’effacement de texte placent le texte détruit dans un tampon en mémoire. Ceci permet d’effectuer des annulations de modifications ainsi que des déplacements de texte.

Commande                                      Fonction
x                       détruit le caractère courant
dd                     détruit la ligne courante
y                       place le caractère courant dans le tampon
yy ou Y            copie la ligne entière dans le tampon
P                      copie le contenu du tampon avant le curseur
p                       copie le contenu du tampon après le curseur
u                       annule la dernière modification apportée au texte

Les commandes de manipulation de fichiers permettent la lecture, l’écriture et la concaténation de fichiers :

Commande                           Fonction
:w                         écrit dans le fichier en cours
:w                         nom écrit dans le fichier “ nom ”
:q                          quitte l’éditeur
:wq                       sauve et quitte
:e                          nom lit le fichier “ nom ”
:e                          # lit le fichier précédent
:n                          lit le fichier suivant sur la ligne de commande

Abonnez-vous par e-mail

Pour recevoire les nouvelles article