Initiation aux syst`emes de type Unix - Jean-Matthieu

Transcription

Initiation aux syst`emes de type Unix - Jean-Matthieu
Initiation aux systèmes de type Unix
Labo-Unix - http://www.labo-unix.net
2001-2002
1
Initiation aux systèmes de type Unix
Table des matières
Introduction
3
1 L’organisation du système de fichier
4
2 Apprehender le système
2.1 Les terminaux . . . . . . . . . . . . . . . .
2.2 Le SHELL . . . . . . . . . . . . . . . . . .
2.3 Où trouver de l’aide . . . . . . . . . . . .
2.3.1 Au niveau des commandes utilisées
2.3.2 Les pages de manuel . . . . . . . .
2.3.3 Les fichiers “info” . . . . . . . . . .
2.3.4 Resources sur le “Net” . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6
6
6
6
6
7
8
10
3 Découverte de quelques commandes de bases
11
4 “Pipes” et Redirections
4.1 Les flux standards . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.1 Redirections . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.2 “Pipes” . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
12
12
13
5 Gestion des droits des fichiers
5.1 Comment sont organisés les droits d’un fichier/répertoire ?
5.2 Mise en place . . . . . . . . . . . . . . . . . . . . . . . . .
5.3 Changement de propriétaire et de groupe . . . . . . . . . .
5.4 Gestion des comptes utilisateurs et groupes . . . . . . . . .
5.4.1 Ajouter/Modifier/Effacer un utilisateur . . . . . . .
5.4.2 Ajouter/Modifier/Effacer un groupe . . . . . . . . .
5.4.3 Le fichier login.defs . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
13
13
14
17
17
18
19
20
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6 Gestion des disques
6.1 Partitionnement . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.1 Organisation de quelques périphèriques dans le “/dev/” .
6.1.2 Edition de la table des partitions . . . . . . . . . . . . .
6.1.3 Formatage de la partition au système de fichier souhaité
6.2 Association periphérique / point de montage . . . . . . . . . . .
6.2.1 Utilisation de la commande “mount” . . . . . . . . . . .
6.2.2 Le fichier “/etc/fstab” . . . . . . . . . . . . . . . . . . .
6.2.3 Gestion de l’espace . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
21
21
21
22
24
24
25
25
27
7 Gestion des processus
7.1 Lister les processus . . . . . . . . . . . .
7.2 Envoi de signaux aux processus . . . . .
7.3 Arrière plan / Avant plan / Detachement
7.4 Modification des priorités du “Scheduler”
.
.
.
.
.
.
.
.
27
28
31
32
32
2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
8 Approche élémentaire du reseau
8.1 Configurer son adresse IP dynamiquement
8.2 Configurer son adresse IP manuellement .
8.3 Selection du routeur par defaut . . . . . .
8.4 Selection des DNS (Domain Name Server)
.
.
.
.
32
32
32
33
33
9 Envirronnement graphique
9.1 Configuration de XFree86 . . . . . . . . . . . . . . . . . . . . . . .
33
34
10 Recompiler son noyau
10.1 Le noyau GNU/Linux
. . . . . . . . . . . . . . . . . . . . . . . . .
35
35
11 Le “boot loader”
11.1 Lilo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.2 “GRUB” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
36
37
12 Phases du “boot”
38
Références
41
3
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
Introduction
Nés de la volonté de Ken Thompson et Dennis Ritchie tous deux de Bell Labs, de
faire un système d’exploitation à la fois multitâches et multi-utilisateurs, UNIX a vu
le jour dans les années 1970, alors que le projet MULTICS auquel ils avaient participé
au début, piétine. Dans la philosophie qui a accompagné la création d’UNIX, il était
question de concevoir de petits programmes ne faisant qu’un nombre limités de
tâches, mais le faisant bien. S’est posé ensuite rapidement le moyen de les combiner,
d’où la naissance des “pipes” et redirections. Pour ces utilitaires de l’époque, il était
fastidieux de réecrire les programmes en assembleur lors de l’achat de nouvelles
machines. C’est dans ce but qu’est né le B puis le C qui offrait plus d’avantages.
Depuis cette période, une quantité astronomique d’Unix ont vu le jour dont, parmi
eux des Unix gratuits, comme celui de l’université de Berkeley dont sont dérivés
les célèbres OpenBSD[1], NetBSD[2], FreeBSD[3], TrustedBSD[4], BSDi[5]. . . Pour
ce qui est de GNU/Linux[6], il a vu le jour dans les années 1990 par un étudiant
de l’époque en reste mainteneur officiel, Linus Torvald. Paralèllement à celà s’est
développé une philosophie nouvelle, pour le partage des connaissances et ce, protègé
par une license qui garantirait l’ouverture des fichiers sources et la possibilités des
les modifier (c’était tous le contraire de la philosophie informatique de l’époque)
sans devoir des droits à qui que se soit. C’est la naissance de la GPL (“Gnu Public
License”) et de la FSF (“Free Software Foundation”) tous deux fondés par Richard
Stallman. Depuis cette période, les Unix “conventionnels”, ont fait leurs preuves et
leur temps, et sont mort de leur manque d’ouverture vers le monde et les nouvelle
technologies. En effet, la plupart des Unix étaient vendus avec les machines dont
ils etait ultra-propriétaires. Désormais, la machine a fait marche arrière grâce aux
biens faits de l’ouverture des sources qui est en partie à l’origine de l’engouement
de plus en plus prononcé qui se fait á leur égard, mais qui est surtout à l’origine
de leur support exceptionnel par des milliers de passionnés. Nous allons tenter de
vous initier à ce monde qui peut paraı̂tre un peu hardu au départ, mais dévoile
rapidement tous ses charmes.
Si vous vous retrouvez nez à nez avec des erreurs absoluments inacceptables,
que vous pensez que tout ou partie de ce cours n’est pas bon, envoyez un e-mail à
[email protected].
Bien sûr nous restons ouvert à toute remarque constructive ou non.
4
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
1
L’organisation du système de fichier
Sur quelqu’Unix (sauf peut-être Darwin) que ce soit, vous ne devriez pas avoir de
problèmes pour vous retrouver, puisqu’utilisant sensiblement la même arborescence
de fichiers. La plupart du temps, les Unix essaient de se conformer au FHS [7] (“File
Hierarchy Standard”). Le principe général est de regroupement par type de fichier ou
par type d’utilisation au sein d’un même répertoire. Par exemple, les fichiers d’aide
de type man seront regroupés dans les répertoires “/usr/man”, “/usr/local/man”.
Voici comment s’organise un système de fichiers de type Unix en général :
5
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
/
|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+-
bin/
commandes de bases pour tous les utilisateurs
boot/
fichiers concernant le "bootloader"
dev/
peripheriques
etc/
configuration generale du systeme
home/
repertoires d’arrivee des utilisateurs
lib/
bibliotheques
mnt/
points de montages
root/
repertoire d’arrivee pour le root
sbin/
executables systemes
tmp/
fichiers temporaires
usr/
|
+- bin
|
+- sbin
|
+- lib
|
+- share
|
+- include
|
+- X11R6
|
+- local
var
|
+|
+|
+|
+|
+|
+|
+|
+|
+-
executables specifiques aux utilisateurs
executalbes systemes dispensables
bibliotheques necessaires au developpement
Donnees independantes de l’architecture
Contient les fichiers header.
Tous ce qui concerne X Window
arborescence locale
lock
fichiers blockes
log
fichiers de log
cache
caches d’applications
lib
informations concernant l’etat de certains executables
mail
boite aux lettre utilisateurs
opt
donnees variables pour /opt
run
donnees sur des executables en cours d’execution
spool
files d’attentes
tmp
donnees temporaires sauvegardees meme apres un reboot
6
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
Suivant les UNIX sur lesquels nous pouvons nous retrouver, certains autres
répertoire peuvent apparaı̂tre, comme “/proc” qui contient quantités d’informations sur le noyau GNU/Linux remises à jour en temps réel.
Dans les chapitres qui vont suivre, nous allons nous déplacer dans les diffèrentes
parties de notre arborescence mettant ainsi le doigt sur l’utilité de chacune d’elle.
2
2.1
Apprehender le système
Les terminaux
En général, lorsqu’on arrive sur un système Unix, la première chose que l’on
voit est une invite de commande demandant d’entrer un nom d’utilisateur et un
mot de passe. C’est ce que l’on appelle un terminal. Dans des temps désormais immemoriaux, il y avait un terminal par utilisateur connecté à un serveur au moins
équivalent à votre pire 386 SX 33. Maintenant, vous pouvez avoir plusieurs terminaux virtuel sur une machine, permettant ainsi de faire plusieurs choses en même
temps. En général on y accède par la combinaison de touche “Alt+Fn” où Fn est
une touche de fonction. Nous n’allons pas détailler dans ce qui va suivre comment
faire, mais il est possible d’avoir un terminal sur le port série, le réseau, avec des
“emulateurs” de terminaux . . . Imaginez que par ce biais, vous pouvez administrer un super-calculateur avec un simple minitel. Celà n’a de prime abord que peu
d’intérêt, mais peut s’avèrer particulièrment pratique dans certains cas.
2.2
Le SHELL
Le SHELL est un interprèteur de commandes. C’est lui qui va nous permettre
d’exécuter les diffèrents utilitaires que nous allons utiliser dans ce qui va suivre.
C’est sur lui qu’on arrive lorsqu’on s’est authentifié. Il en existe beaucoup dont bash
(faisant partie de la norme POSIX), zsh, ksh, csh, tcsh, ash . . .L’intérêt d’avoir un
shell plutôt qu’un autre dépends des fonctionnalités offertes par chacun, et donc de
l’utilisation que l’on peut en avoir. Il est interressant de savoir, qu’il dispose d’une
syntaxe utile pour la génération de scripts.
– http ://www.gnu.org/software/bash/bash.html
– http ://www.zsh.org
– http ://www.kornshell.com
– http ://www.tcsh.org
2.3
Où trouver de l’aide
Voici une des nombreuses forces des systèmes UNIX ; la gestion de l’aide. Elle
est disponible á la fois sur le système dans des versions plus ou moins détaillées et
bien sûr sur Internet.
2.3.1
Au niveau des commandes utilisées
Pratiquement chaque commande dispose d’une aide indiquant son fonctionnement général ainsi q’un résumé des diverses options qu’il est possible de lui passer.
7
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
Elle est accessible par les options “-h” ou “–help”.
Exemple :
<prompt_shell> man --help
man, version 1.5h
usage: man [-adfhktwW] [section] [-M path] [-P pager] [-S list]
[-m system] [-p string] name ...
a
c
d
D
f
h
k
K
t
w
:
:
:
:
:
:
:
:
:
:
find all matching entries
do not use cat file
print gobs of debugging information
as for -d, but also display the pages
same as whatis(1)
print this help message
same as apropos(1)
search for a string in all pages
use troff to format pages for printing
print location of man page(s) that would be displayed
(if no name given: print directories that would be searched)
W : as for -w, but display filenames only
C
M
P
S
m
p
file
path
pager
list
system
string
use file’ as configuration file
set search path for manual pages to path’
use program pager’ to display pages
colon separated section list
search for alternate system’s man pages
string tells which preprocessors to run
e - [n]eqn(1)
p - pic(1)
t - tbl(1)
g - grap(1)
r - refer(1) v - vgrind(1)
<prompt_shell>
2.3.2
:
:
:
:
:
:
Les pages de manuel
Les pages de manuel, autrement dit, les “man pages”. Elles sont organisées en
catégories classées de 1 à 8 dont voici la représentation :
1. Commandes utilisateurs (Ex : “man”)
2. Appels systèmes (Ex : “socket”)
3. Fonctions de la libc (Ex : “printf”)
4. Organisation de certains fichiers et protocoles (Ex : “nfs”)
5. Jeux et utilitaires sympas sur le système
6. Divers (Ex : “socket”)
7. Commandes d’administration
Nous pouvons constater, que les manuels font non seulement réference à des utilitaires et commandes, mais aussi à des fonctions de la libc, des et même d’autres
bibliothèques de programmation et des appels systèmes. C’est un aspect très pratique lorsqu’on développe, pour obtenir les prototypes des fonctions, leur valeurs de
retour, le détail de ce qu’elles fonts. . .
L’utilisation des manuels est très simple ; “man fonction ou commande”. La
première chose à faire afin de bien se servir des manuels à notre disposition est
“man man”. La disposition des informations au sein des manuels restera la même
8
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
d’une commande à l’autre, et d’une fonction à láutre. Il peut arriver que plusieurs
manuels utilisent le même nom pour y accèder, il suffit alors de préciser en paramètre
de la commande “man” dans quelle section rechercher. C’est le cas notamment de
la fonction “socket” disponible à la fois dans la section 2 et la section 7 des manuels. Il suffit alors de faire soit “man 2 socket” ou “man 7 socket” pour avoir l’aide
souhaitée. Biensûr cette démarche n’est faisable que lorsquón connait le nom des
commandes ou des fonctions. Comment faire lorsque ce n’est pas le cas ? Tout simplement en faisant “man -k mot clé”, “apropos mot clé” ou bien “whatis mot clé”.
Vous obtiendrez ainsi la liste des manuels contenant le mot clé désigné.
<prompt_shell> man -k socket
QSocketNotifier (3qt) - Support for socket callbacks
accept (2)
- accept a connection on a socket
bind (2)
- bind a name to a socket
connect (2)
- initiate a connection on a socket
fuser (1)
- identify processes using files or sockets
getpeername (1)
- get information about this or that end of the socket’s connection
getsockname (2)
- get socket name
getsockopt, setsockopt (2) - get and set options on sockets
listen (2)
- listen for connections on a socket
netpipes (1)
- a package to manipulate BSD TCP/IP stream sockets
perlipc (1)
- Perl interprocess communication (signals, fifos, pipes, safe subprocesses, sockets, a
recv, recvfrom, recvmsg (2) - receive a message from a socket
send, sendto, sendmsg (2) - send a message from a socket
sockdown (1)
- shutdown(2) a socket
socket (2)
- create an endpoint for communication
socket (n)
- Open a TCP network connection
socketcall (2)
- socket system calls
socketpair (2)
- create a pair of connected sockets
socklist (8)
- display list of open sockets
<prompt_shell> whatis socket
socket (2)
- create an endpoint for communication
socket (n)
- Open a TCP network connection
<prompt_shell>
Lorsque vous êtes dans un “man”, diverses commandes sont accessibles dont voici
les plus interressantes :
– <espace >- Avance dans le manuel d’une page entière.
– <entrée >- Avance dans le manuel d’une ligne.
– b - Recule dans le manuel d’une page
– / <mot ou regexp >- Recherche l’occurence d’un mot ou d’une expression regulière1 .
– q - Quitte le manuel
Pour avoir la liste complètes des commandes accessibles dans un manuel, allez
voir dans le manuel de “less” qui est une des commandes que “man” utilise pour
éditer le fichier d’aide.
2.3.3
Les fichiers “info”
Il existe encore une autre méthode pour accèder à une aide plus détaillée que les
“man pages” ; ce sont les “info files”. Ils se trouvent généralement dans les répertoires
“/usr/info”, “/usr/share/info” ou “/usr/local/info” et sont accessibles par le biais
1 C’est
le motif d’une chaı̂ne de caractère
9
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
de la commande “info nom fichier info”. De même que pour “man” il est possible de
retrouver dans quels fichiers “info” trouver les informations souhaitées en utilisant
“info –apropos mot cle”.
<prompt_shell> info -k socket
"(libc)Socket Addresses" -- address of socket
"(libc)Socket Addresses" -- binding a socket address
"(libc)Byte Order" -- byte order conversion, for socket
"(libc)Closing a Socket" -- closing a socket
"(libc)Socket Concepts" -- communication style (of a socket)
"(libc)Connecting" -- connecting a socket
"(libc)Creating a Socket" -- creating a socket
"(libc)Socket Pairs" -- creating a socket pair
"(libc)Socket Concepts" -- data loss on sockets
"(libc)Datagrams" -- datagram socket
"(libc)Socket Concepts" -- domain (of socket)
"(libc)Internet Namespace" -- Internet namespace, for sockets
"(libc)Sockets" -- interprocess communication, with sockets
"(libc)Socket Options" -- level, for socket options
"(libc)Listening" -- listening (sockets)
"(libc)Local Namespace" -- local namespace, for sockets
"(libc)Socket Concepts" -- loss of data on sockets
"(libc)Socket Addresses" -- name of socket
"(libc)Socket Concepts" -- namespace (of socket)
"(libc)Creating a Socket" -- opening a socket
"(libc)Socket Pairs" -- opening a socket pair
"(libc)Socket Concepts" -- protocol (of socket)
"(libc)Transferring Data" -- reading from a socket
"(libc)Closing a Socket" -- shutting down a socket
"(libc)Sockets" -- socket
"(libc)Socket Addresses" -- socket address (name) binding
"(libc)Socket Concepts" -- socket domain
"(libc)Socket Concepts" -- socket namespace
"(libc)Socket Options" -- socket option level
"(libc)Socket Options" -- socket options
"(libc)Socket Pairs" -- socket pair
"(libc)Socket Concepts" -- socket protocol
"(libc)Closing a Socket" -- socket shutdown
"(libc)Connecting" -- socket, client actions
"(libc)Closing a Socket" -- socket, closing
"(libc)Connecting" -- socket, connecting
"(libc)Creating a Socket" -- socket, creating
"(libc)Connecting" -- socket, initiating a connection
"(libc)Accepting Connections" -- sockets, accepting connections
"(libc)Listening" -- sockets, listening
"(libc)Listening" -- sockets, server actions
"(libc)Socket Concepts" -- stream (sockets)
"(libc)Socket Concepts" -- style of communication (of a socket)
"(libc)Out-of-Band Data" -- urgent socket condition
"(libc)Transferring Data" -- writing to a socket
"(libc)Creating a Socket" -- socket
"(libc)Socket Pairs" -- socketpair
"(libc)Constants for Sysconf" -- _SC_PII_SOCKET
"(libc)Socket-Level Options" -- SOL_SOCKET
"(libc)Socket-Level Options" -- sys/socket.h <1>
"(libc)Socket Option Functions" -- sys/socket.h <2>
"(libc)Sending Datagrams" -- sys/socket.h <3>
"(libc)Socket Data Options" -- sys/socket.h <4>
"(libc)Receiving Data" -- sys/socket.h <5>
10
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
"(libc)Sending Data" -- sys/socket.h <6>
"(libc)Socket Pairs" -- sys/socket.h <7>
"(libc)Constants for Sysconf" -- _SC_PII_SOCKET
"(libc)Socket-Level Options" -- SOL_SOCKET
"(libc)Socket-Level Options" -- sys/socket.h <1>
"(libc)Socket Option Functions" -- sys/socket.h <2>
"(libc)Sending Datagrams" -- sys/socket.h <3>
"(libc)Socket Data Options" -- sys/socket.h <4>
"(libc)Receiving Data" -- sys/socket.h <5>
"(libc)Sending Data" -- sys/socket.h <6>
"(libc)Socket Pairs" -- sys/socket.h <7>
"(libc)Closing a Socket" -- sys/socket.h <8>
"(libc)Creating a Socket" -- sys/socket.h <9>
"(libc)Internet Namespace" -- sys/socket.h <10>
"(libc)Local Namespace Details" -- sys/socket.h <11>
"(libc)Reading Address" -- sys/socket.h <12>
"(libc)Setting Address" -- sys/socket.h <13>
"(libc)Address Formats" -- sys/socket.h <14>
"(libc)Communication Styles" -- sys/socket.h
<prompt_shell>
Le déplacement au sein d’un fichier info est diffèrent de celui d’un “man”. Les
fichiers info se composent de noeuds (titres de parties) et de pages relatives à ces
noeuds. Voici une petite liste de commande utiles pour se déplacer dans les fichiers
info :
– n - Se déplacer au noeud suivant.
– p - Se déplacer au noeud précédent.
– u - Remonter d’un noeud
– <entrée >sur un titre avec une étoile - Se déplace dans ce noeud
– <espace >- Descend d’une page dans la page courante
2.3.4
Resources sur le “Net”
Les “HOW-TO”
Cette fois nous entrons dans le monde plus spécifique de GNU/Linux. Les “Howto” sont des guides et didactitiel sur des domaines bien particuliers (Ex : Comment
enregistrer des CD sous Linux). Ils sont disponibles sous plusieurs formats et sont
accessible sur le site [8] dédié qui est le site officiel du projet LDP (“Linux Documentation Project”). Vous retrouverez notamment sur ce site, les “man-pages” à jour
traduits dans diverses langues, pour ceux qui náiment pas la langue de Shakespeare.
Le “Handbook” de FreeBSD
Pour ceux qui utilisent FreeBSD, à sur leur site dans la section “Handbook”[9],
vous trouverez, un peu à la manière des “How-To” des didactitiels sur comment
faire telles ou telles tâches.
Documentation pour NetBSD
NetBSD, dont le but essentiel est d’être portable sur un maximum d’architec11
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
tures dispose également d’un bonne documentation sur leur site dans la partie
“documentation”[10].
3
Découverte de quelques commandes de bases
Nous allons lister ici, une suite de commandes indispensables à l’administration
de votre machine sous UNIX :
Operations sur fichiers et répertoires
ls rep Liste le contenu d’un repertoire (-R pour lister les autres repertoires rencontrés.
cp source destination Copie un fichier source vers un fichier destination (-R pour
un repertoire).
mv source destination Bouge le contenu de d’un fichier ou repertoire source vers
fichier ou repertoire de destination (Utilisé aussi pour renommer un fichier ou
repertoire).
mkdir rep Créé un repertoire.
rm fichier Efface un fichier (-r pour effacer un repertoire en entier).
ln source destination Crèe un lien destination qui va pointer sur source (pour un
lien symbolique, il suffit d’ajouter l’option “-s”)
touch fichier ou repertoire Met à jour la date de modification du fichier.
Lecture de fichier
cat fichier Lit le contenu du fichier.
more fichier Lit le contenu d’un fichier page par page. (Il doit lire l’intègralité du
fichier avant de l’afficher).
less fichier Comme “more” sauf qu’il n’est pas obligé de lire l’intègralité du fichier.
tail fichier N’affiche que les dernières lignes d’un fichier (d’autres options permettent de spécifier combien de lignes afficher).
find répertoire options Permet de rechercher des fichiers suivant une quantité incroyable de critères.
grep ”” fichier Re
Il y en a bien d’autres, mais à ce stade, il n’est pas encore nécessaire de les voirs.
Nous les découvrirons au fur et à mesure des thèmes qui vont suivre.
Lorsqu’on liste le contenu d’un répertoire, la diffèrence entre un fichier ne saute
pas aux yeux. Pour ce faire, nous allons ajouter l’options -l à la commande ls.
<prompt_shell> cd /tmp
<prompt_shell> mkdir un_repertoire
<prompt_shell> touch un_fichier
<prompt_shell> ln -s un_fichier un_lien
<prompt_shell> ls
un_fichier un_lien un_repertoire
<prompt_shell> ls -l
total 4
-rw-r--r-1 ualc
galc
0 Dec
12
3 00:42 un_fichier
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
lrwxrwxrwx
1 ualc
drwxr-xr-x
2 ualc
<prompt_shell>
galc
galc
10 Dec
4096 Dec
3 00:42 un_lien -> un_fichier
3 00:42 un_repertoire
Il suffit de regarder la partie à l’extrême gauche du terminal. Un fichier ordinaire
est symbolisé par un “-”, un répertoire par un “d” et un lien symbolique par un “l”.
Pour les autres champs :
|-> Type de fichier
|
|
|-> Droits sur le fichier
| __________________________
|/
\
-rw-r--r-1 ualc
galc
0 Dec 3 00:42 un_fichier
|
| \__________/
|-> Nombre de liens
|-> Date de modification
|
|-> Taille du fichier
4
“Pipes” et Redirections
Nous voici confronté à une des choses qui a contribué à l’engouement de beaucoup
de personnes pour le monde Unix. Les “Pipes” et “Redirections”.
4.1
Les flux standards
Les flux standards sont au nombre de trois ; STDIN (0), STDOUT(1) et STDERR
(2). STDIN n’est ni plus ni moins que l’entrée au clavier (dite “entrée standard”),
STDOUT la sortie à l’écran (dite “sortie standard”) et STDERR la sortie standard
des erreurs.
4.1.1
Redirections
Ainsi, si nous exécutons un programme comme “ls”, il va afficher le résultat à
l’écran, donc sur la sortie standard. Il est possible de rediriger ces diffèrents flux
vers des fichiers, d’autres flux. . . Ceci se fait par le biais des signes “<” et “>”. Une
commande “commande >un fichier” va crèer un fichier “un fichier” contenant le
résultat de la commande “commande”. De même, avec le signe “<” au lieu de “>”
aurait utilisé le contenu du fichier “un fichier” en entrée de la commande “commande”. Ca n’est pas très clair, regardez l’exemples :
<prompt_shell>
<prompt_shell>
total 4872
drwxr-xr-x
2
drwxr-xr-x 22
-rwxr-xr-x
1
-rwxr-xr-x
1
-rwxr-xr-x
1
-rwxr-xr-x
1
lrwxrwxrwx
1
-rwxr-xr-x
1
-rwxr-xr-x
1
cd /tmp
ls -la /bin
root
root
root
root
root
root
root
root
root
bin
root
root
root
bin
bin
root
bin
bin
4096
4096
3180
54905
477692
295012
5
27380
6708
Nov
Nov
Jan
May
Mar
Sep
Nov
May
May
13
27 19:40 .
27 19:40 ..
22 2001 arch
22 2001 attr
22 2000 bash
3 1999 bash1
10 2000 bunzip2 -> bzip2
18 2000 bzip2
18 2000 bzip2recover
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
-rwxr-xr-x
1
-rwxr-xr-x
1
-rwxr-xr-x
1
-rwxr-xr-x
1
...
<prompt_shell>
<prompt_shell>
total 4872
drwxr-xr-x
2
drwxr-xr-x 22
-rwxr-xr-x
1
-rwxr-xr-x
1
-rwxr-xr-x
1
-rwxr-xr-x
1
lrwxrwxrwx
1
-rwxr-xr-x
1
-rwxr-xr-x
1
-rwxr-xr-x
1
-rwxr-xr-x
1
-rwxr-xr-x
1
-rwxr-xr-x
1
...
<prompt_shell>
root
root
root
root
bin
root
root
bin
10332
3366
61019
11200
May 13
Feb 8
May 22
Sep 27
2000
2001
2001
1999
cat
catchsegv
chacl
chgrp
ls -la /bin > un_fichier
cat un_fichier
root
root
root
root
root
root
root
root
root
root
root
root
root
bin
root
root
root
bin
bin
root
bin
bin
bin
root
root
bin
4096
4096
3180
54905
477692
295012
5
27380
6708
10332
3366
61019
11200
Nov
Nov
Jan
May
Mar
Sep
Nov
May
May
May
Feb
May
Sep
27 19:40 .
27 19:40 ..
22 2001 arch
22 2001 attr
22 2000 bash
3 1999 bash1
10 2000 bunzip2 -> bzip2
18 2000 bzip2
18 2000 bzip2recover
13 2000 cat
8 2001 catchsegv
22 2001 chacl
27 1999 chgrp
Si on utilise plusieurs fois des redirections sur un même fichier avec ce que l’on a
vu, le fichier est écrasé à chaque fois. Pour éviter celà il est possible d’utiliser “<<” à
la place de “<” et “>>” à la place de “>” ; auquel cas les données seront concaténées
dans le fichier.
4.1.2
“Pipes”
Les “pipes” (“—”) quand à eux sont “des voies de communication” d’un processus vers un autre. Par exemple si nous faisons “commande 1 — commande 2”,
le résultat de la commande “commande 1” va être utilisé en entrée de la commande
“commande 2”. Il est possible de chaı̂ner ce type de commande autant que l’on
veut. Comme au-dessus, rien de tel qu’un exemple :
<prompt_shell>
<prompt_shell>
lrwxrwxrwx
1
-rwxr-xr-x
1
-rwxr-xr-x
1
<prompt_shell>
lrwxrwxrwx
1
-rwxr-xr-x
1
-rwxr-xr-x
1
<promp_shell>
5
ls -la /bin > un_fichier
grep "bzip" un_fichier
root
root
5
root
bin
27380
root
bin
6708
ls -la /bin | grep "bzip"
root
root
5
root
bin
27380
root
bin
6708
Feb 12
May 18
May 18
2001 bunzip2 -> bzip2
2000 bzip2
2000 bzip2recover
Feb 12
May 18
May 18
2001 bunzip2 -> bzip2
2000 bzip2
2000 bzip2recover
Gestion des droits des fichiers
Comment se gèrent sous Unix les politiques de droits des fichiers ? Pour ce faire,
nous avons à notre disposition une liste d’outils dont “chmod”, “chown” et “chgrp”.
5.1
Comment sont organisés les droits d’un fichier/répertoire ?
-rw-r--r--
1 ualc
galc
0 Dec
14
3 00:42 un_fichier
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
(1)(2)(3)
1.
2.
3.
4.
5.
(4)
(5)
Droits pour le propriétaire du fichier ou répertoire
Droits pour le groupe spécifié
Droits pour le reste du monde
Propriétaire du fichier ou répertoire
Groupe auquel s’affectent les droits spécifiés en (2)
Les trois premières valeurs citées sont elles-mêmes divisées en trois parties (la
signification sur un fichier et sur un répertoire ne sera pas toujours la même) :
Fichier
r - Accès en lecture (4)
w - Accès en écriture (2)
x - Permet l’exécution (1)
Repertoire
r - Permet de lister le contenu du répertoire (4)
w - Droits d’écriture dans le repertoire (2)
x - Permet de traverser le repertoire (1).
A la place des “flags” d’exécution, il est possible d’avoir soit un “t” soit un
“s”. Appliqué sur un répertoire “t” indique que seul les propriétaires du répertoire
et les créateurs des fichiers dans celui-ci pourront les effacer. Pour le “s”, si il est
présent pour les droits du propriétaire, il est appelé “suid bit” ou “set uid bit”. Lorsqu’un utilisateur va exécuter ce fichier il va hériter des droits du propriétaire pour
l’exécution. C’est particulièrement utile pour permettre à certaines fonctionnalités
normalement accessible qu’au “root” de l’être également pour d’autres utilisateurs.
Si le “s” est fixé sur le groupe, les propriétés sont les mêmes qu’au dessus, mais
s’appliquent sur le groupe.
5.2
Mise en place
Pour mettre en place les droits, nous allons utiliser “chmod droits fichier ou repertoire”
où les droits peuvent s’exprimer là encore, de deux façons diffèrentes.
– Soit par une suite de valeurs octales.
– Soit par une suite de signes de type “r”, “w”, “x” plus explicites.
Dans le premier cas, nous aurons 3 ou 4 valeurs octales qui corresponderont à
l’addition des valeurs (entre parenthèse dans la liste de droits ci-dessus) de chaque
droits souhaités pour respectivement, le propriétaire, le groupe et le reste du monde.
Imaginons que nous souhaitions affecter les droits de lecture, écriture et exécution
au propriétaire, lecture et exécution pour le groupe, et exécution seule pour le reste
du monde. Nous devrons procéder comme suit : lecture, écriture, exécution : 4 + 2
+1=7
lecture, exécution : 4 + 1 = 5
lecture : 1 = 1
Nous devrons alors faire la commande “chmod 754 fichier ou répertoire”. Ce n’est
toujours pas très clair ? Pas de problème regardez l’exemple suivant :
15
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
<prompt_shell> cd /tmp
<prompt_shell> mkdir repalc
<prompt_shell> ls -l
total 4
drwxr-xr-x
2 ualc galc
4096 Dec 4
<prompt_shell> chmod 751 repalc
<prompt_shell> ls -l
total 4
drwxr-x--x
2 ualc galc
4096 Dec 4
<prompt_shell> chmod 111 repalc
<prompt_shell> ls -l
total 4
d--x--x--x
2 ualc galc
4096 Dec 4
<prompt_shell> chmod 222 repalc
<prompt_shell> ls -l
total 4
d-w--w--w2 ualc galc
4096 Dec 4
<prompt_shell> chmod 444 repalc
<prompt_shell> ls -l
total 4
dr--r--r-2 ualc galc
4096 Dec 4
<prompt_shell> touch repalc/un_fichier
touch: repalc/un_fichier: Permission denied
<prompt_shell> chmod 300 repalc
<prompt_shell> ls -l
total 4
d-wx-----2 ualc galc
4096 Dec 4
<prompt_shell> touch repalc/un_fichier
<prompt_shell> cd repalc
<prompt_shell> ls
ls: .: Permission denied
<prompt_shell>
00:34 repalc
00:34 repalc
00:34 repalc
00:34 repalc
00:34 repalc
00:49 repalc
Voici comment faire pour la seconde méthode. Le principe est très simple ; il
suffit de préfixer d’un identifiant “o” (le reste du monde), “u” (propriétaire) ou “g”
(groupe) pour indiquer sur qui les droits vont prendre effet, puis on préfixe d’un
“+” ou d’un “-” aux expressions “r”, “w”, “x” pour dire que l’on souhaite activer ou
désactiver ces droits. Toujours aussi peu clair, reprenons le cas d’étude précédent :
lecture, écriture, exécution : u+rwx
lecture, exécution : g+rx-w
lecture : o+r-wx
Nous devrons alors appliquer la commande suivante “chmod u+rwx,g+rx-w,o+rwx fichier ou répertoire”. Si nous voulons faire exactement pareil que la session
précédente d’exemple :
<prompt_shell>
<prompt_shell>
<prompt_shell>
total 4
drwxr-xr-x
2
<prompt_shell>
<prompt_shell>
total 4
drwxr-x--x
2
<prompt_shell>
<prompt_shell>
total 4
d--x--x--x
2
<prompt_shell>
<prompt_shell>
cd /tmp
mkdir repalc
ls -l
ualc galc
4096 Dec 4 00:34 repalc
chmod u+rwx,g+rx-w,o+r-wx repalc
ls -l
ualc galc
chmod u-rx,g-x
ls -l
4096 Dec
4 00:34 repalc
ualc galc
4096 Dec 4 00:34 repalc
chmod u+w-x,g+w-x,o+w-x repalc
ls -l
16
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
total 4
d-w--w--w2 ualc galc
4096 Dec 4 00:34 repalc
<prompt_shell> chmod u+r-w,g+r-w,o+r-w repalc
<prompt_shell> ls -l
total 4
dr--r--r-2 ualc galc
4096 Dec 4 00:34 repalc
<prompt_shell> touch repalc/un_fichier
touch: repalc/un_fichier: Permission denied
<prompt_shell> chmod u+wx-r,g-r,o-r repalc
<prompt_shell> ls -l
total 4
d-wx-----2 ualc galc
4096 Dec 4 00:49 repalc
<prompt_shell> touch repalc/un_fichier
<prompt_shell> cd repalc
<prompt_shell> ls
ls: .: Permission denied
<prompt_shell>
Pour ce qui est des “suid”, “sgid” et “sticky” bits, nous allons procèder comme
suit avec des valeurs octales :
<prompt_shell>
<prompt_shell>
<prompt_shell>
total 4
drwxr-xr-x
2
-rw-r--r-1
<prompt_shell>
<prompt_shell>
total 4
drwxr-xr-t
2
-rw-r--r-1
<prompt_shell>
<prompt_shell>
total 4
drwxr-xr-t
2
-rwxr-sr-x
1
<prompt_shell>
<prompt_shell>
total 4
drwxr-xr-t
2
-rwsr-xr-x
1
<prompt_shell>
touch un_fichier
mkdir repalc
ls -l
ualc galc
4096 Dec
ualc galc
0 Dec
chmod 1755 repalc
ls -l
4 01:30 repalc
4 01:29 un_fichier
ualc galc
4096 Dec
ualc galc
0 Dec
chmod 2655 un_fichier
ls -l
4 01:30 repalc
4 01:29 un_fichier
ualc galc
4096 Dec
ualc galc
0 Dec
chmod 4655 un_fichier
ls -l
4 01:30 repalc
4 01:29 un_fichier
ualc galc
ualc galc
4 01:30 repalc
4 01:29 un_fichier
4096 Dec
0 Dec
Maintenant avec l’autre méthode :
<prompt_shell>
<prompt_shell>
<prompt_shell>
total 4
drwxr-xr-x
2
-rw-r--r-1
<prompt_shell>
<prompt_shell>
total 4
drwxr-xr-t
2
-rw-r--r-1
<prompt_shell>
<prompt_shell>
total 4
touch un_fichier
mkdir repalc
ls -l
ualc galc
ualc galc
chmod +t repalc
ls -l
4096 Dec
0 Dec
4 01:30 repalc
4 01:29 un_fichier
ualc galc
4096 Dec
ualc galc
0 Dec
chmod g+xs un_fichier
ls -l
4 01:30 repalc
4 01:29 un_fichier
17
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
drwxr-xr-t
2
-rwxr-sr-x
1
<prompt_shell>
<prompt_shell>
total 4
drwxr-xr-t
2
-rwsr-xr-x
1
<prompt_shell>
5.3
ualc galc
4096 Dec
ualc galc
0 Dec
chmod u+x,g-s un_fichier
ls -l
4 01:30 repalc
4 01:29 un_fichier
ualc galc
ualc galc
4 01:30 repalc
4 01:29 un_fichier
4096 Dec
0 Dec
Changement de propriétaire et de groupe
Interressons nous désormais au moyen de changer un fichier ou répertoire de
propriétaire. Dans ce contexte ce sont “chown” et “chgrp” qui vont nous venir en
aide. Nous verrons que ce dernier n’est pas indispensable.
La syntaxe est simple “chown nouveau propriétaire fichier ou repertoire”, “chgrp
nouveau groupe fichier ou repertoire”, ou bien encore “chown nouveau propriétaire :nouveau groupe fichier ou répertoire”. Biensûr, les groupes et utilisateurs doivent exister. Pour ce faire nous pouvons consulter le contenu des fichiers “/etc/passwd” et
“/etc/group”.
<prompt_shell> cd /tmp
<prompt_shell> touch un_fichier
<prompt_shell> ls -l un_fichier
-rw-r--r-1 danseurf users
0 Dec
<prompt_shell> cat /etc/group
root::0:root
bin::1:root,bin,daemon
daemon::2:root,bin,daemon
sys::3:root,bin,adm
adm::4:root,adm,daemon
tty::5:
lp::7:lp
mem::8:
kmem::9:
man::15:
nobody::98:nobody
nogroup::99:
users::100:ualc
console:x:101:
nofiles:x:4243:
<prompt_shell> chown nobody:nobody un_fichier
-rw-r--r-1 nobody
nobody
0 Dec
<prompt_shell>
5.4
4 01:29 un_fichier
4 01:29 un_fichier
Gestion des comptes utilisateurs et groupes
Les comptes utilisateurs et les groupes sont les entités qui vont vous permettre de
vous authentifier, de gèrer des droits d’accès à certains fichiers ou utilitaires. . .D’avoir
une première approche de la securité de votre système. Par défaut, vous êtes en
utilisateur “root” sur votre système, lorsque vous venez juste de l’installer. Il est
préconisé de n’utiliser ce compte que pour des tâches administratives ; surtout
lorsqu’on débute. On évite ainsi d’irremediable commande du type “rm -rf /”.
Dans ce cas, le résultat est garantit. Pour ce faire nous avons à notre disposi-
18
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
tion, quelques utilitaires qui vont modifier les fichiers “/etc/passwd”, “/etc/group”,
“/etc/shadow” et “/etc/gshadow”.
5.4.1
Ajouter/Modifier/Effacer un utilisateur
Le fichier “/etc/passwd” est composé de plusieurs champs : “1 :2 :3 :4 :5 :6 :7”
1.
2.
3.
4.
5.
6.
7.
Nom de l’utilisateur
Anciennement l’emplacement du mot de passe en crypté.
UID ( Identifiant unique de l’utilisateur )
GID ( Identifiant de groupe primaire auquel appartient l’utilisateur )
Commentaires sur l’utilisateur
“Home directory”, répertoire d’arrivée lors du login
Emplacement du shell choisi
Avec la montée en puissance des machines, le mot de passe, á l’origine présent
dans “/etc/passwd”, donc lisibles par tous le monde, même cryptés s’est retrouvé
dans le fichier “/etc/shadow”, qui lui n’est normalement lisible que par le root, afin
d’éviter des attaques de type “Brute force” ou “attaque par dictionnaire”. Ce n’est
pas forcément le cas sur un certain nombre de systèmes comme IRIX ou Solaris,
même si ce type de politique peut être mis en place. Par convention, il a été definit
que les UID de 0 à 999 étaient réservés à une utilisation système, et que le root
avait l’UID 0 (ainsi que le GID 0).
Comme le fichier “/etc/passwd”, “/etc/shadow” est composé de plusieurs champs
qui va contenir le mot de passe crypté et les diverses informations quand à son delais
d’expiration.
Pour la création d’un compte utilisateur nous allons utiliser “useradd”, “usermod” pour le modifier et “userdel” pour l’effacer, “passwd” pour changer son mot
de passe et “chage” pour modifier ses paramètres d’expiration. Imaginons que nous
souhaitions un créer un compte avec les contraintes suivantes :
– Le compte doit s’appeler “bob”
– Le mot de passe sera “totoenslip”
– Son “home directory” sera dans le /home
– Qu’il soit désacivé le 21 décembre 2006
– Qu’il fasse partie du groupe “users”
– Que sont shell soit “zsh” placé dans “/usr/bin/”
Pour savoir comment passer les paramètre “useradd” ou “man useradd”. Biensûr
il faut être root pour faire celà.
<prompt_shell> useradd -e 2006-12-21 -g users -s /usr/bin/zsh bob
<prompt_shell> tail -n 1 /etc/passwd /etc/shadow
==> /etc/passwd <==
bob:x:1014:100::/home:/usr/bin/zsh
==> /etc/shadow <==
bob:!:11661:0:99999:7::13503:
<prompt_shell> passwd bob
Changing password for bob
Enter the new password (minimum of 5, maximum of 127 characters)
Please use a combination of upper and lower case letters and numbers.
19
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
New password: **************************************************
Re-enter new password: ********************************************************
Password changed.
<prompt_shell> tail name -n 1 /etc/passwd /etc/shadow
==> /etc/passwd <==
bob:x:1014:100::/home:/usr/bin/zsh
==> /etc/shadow <==
bob:$1$/hxYw1Z/$VsqArdENg1cxhVsaQE1FY1:11661:0:99999:7::13503:
<prompt_shell>
Petite remarque, lorsque vous regardez dans le répertoire “/home/” vous devriez
voir qu’un répertoire du nom de l’utilisateur s’est créé. C’est un paramètre par
défaut. Si vous souhaitiez en avoir d’autres, il possible de les fixer par l’option “-D”.
Ainsi vous éviterez de repasser une multitude de fois les même paramètres.
Maintenant je souhaite :
– Changer le shell pour mettre à la place “bash” qui se trouve dans “/bin/”.
– Le mot de passe doit être changé tous les 30 jours.
– Je souhaite avertir l’utilisateur 4 jours avant qu’il doit changer son mot de
passe.
Cette fois, nous allons utiliser “passwd”, “chage” et ”usermod” (allez toujours
voir dans les man assosciés pour avoir de plus amples informations) :
<prompt_shell> passwd -x 30 -w 4 bob
<prompt_shell> tail -n 1 /etc/shadow
bob:$1$/hxYw1Z/$VsqArdENg1cxhVsaQE1FY1:11661:0:30:4::13503:
<prompt_shell> usermod -s /bin/bash bob
<prompt_shell> tail -n 1 /etc/passwd
bob:x:1014:100::/home:/bin/bash
<prompt_shell> chage -l bob
Minimum:
0
Maximum:
30
Warning:
4
Inactive:
-1
Last Change:
Dec 05, 2001
Password Expires:
Jan 04, 2002
Password Inactive:
Never
Account Expires:
Dec 21, 2006
<prompt_shell>
Remarque : lorsque vous êtes connecté avec un nom d’utilisateur, il est possible
dans le shell courant de prendre les droits d’un autre utilisateur avec la commande
“su nom utilisateur” (“su - nom utilisateur” pour utiliser les variables d’envirronement propres à cet utilisateur).
5.4.2
Ajouter/Modifier/Effacer un groupe
Maintenant, nous allons nous interresser aux fichiers “/etc/group” et “/etc/gshadow”.
Là encore, comme il est possible de mettre un mot de passe pour les groupes, et
que “/etc/group” est lisible par tous les utilisateurs, les “shadow utils” sont là pour
veiller dans le fichier “/etc/gshadow”. Les gestion des groupes sous Unix permet un
niveau de délégations de droits à un ou plusieurs utilisateurs. Ainsi, un utilisateur
peut administrer les utilisateurs qui font partie d’un certain groupe, et le mot de
20
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
passe qui l’accompagne. Ce n’est pas utilisé très souvent, mais celà reste tout de
même interressant à connaı̂tre.
Voici comment s’organisent les champs de “/etc/gshadow” : 1 :2 :3 :4
1. Nom du groupe
2. Mot de passe du groupe
3. GID (Identifiant unique du groupe)
4. Liste des utilisateurs en faisant partie, séparés par une virgule
Les outils qui vont être utilisés pour modifier ces fichiers sont “groupadd”,
“groupmod”, “gpasswd”, “groupdel” et “passwd”.
Nous voulons créer un groupe s’appelant “galc” et dont le GID sera “5445” et
pour lequel bob sera membre.
<prompt_shell> groupadd galc
<prompt_shell> tail -n 1 /etc/group /etc/gshadow
==> /etc/group <==
galc:x:4245:
==> /etc/gshadow <==
galc:!::
<prompt_shell> gpasswd -M bob galc
<prompt_shell> tail -n 1 /etc/group /etc/gshadow
==> /etc/group <==
galc:x:4245:bob
==> /etc/gshadow <==
galc:!::bob
<prompt_shell>
Très simple, non ? Maintenant, je souhaiterai renommer le groupe que je viens
de créer en “groupe bidon”.
<prompt_shell> groupmod -n groupe_bidon galc
<prompt_shell> tail -n 1 /etc/group /etc/gshadow
==> /etc/group <==
groupe_bidon:x:4245:bob
==> /etc/gshadow <==
groupe_bidon:!::bob
<prompt_shell>
Pour ce qui est de mettre un mot de passe au niveau du groupe (“passwd g nom du groupe”) et les paramètres pour définir un ou plusieurs utilisateurs en
tant qu’administrateur d’un groupe (“gpasswd -A nom utilisateur nom groupe”)
reportez-vous aux “man pages” respectives. Lorsque nous sommes dans un groupe,
(en général le primaire, par défaut), pour beneficier des droits d’un groupes diffèrent
du notre, il suffit d’utiliser la commande “newgrp nom groupe”. Comme pour un
changement d’utilisateur, on vous demandera d’entrer le mot de passe du groupe.
5.4.3
Le fichier login.defs
Ce fichier paufine un peu la logique de securité données autour des mots de
passe et authentifications. Il contient un certain nombre de mots clés auxquels on
peu affecter des valeurs. Ils permettent par exemple de gèrer combien de fois il va
21
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
être possible de réessayer son mot de passe, combien de temps va s’écouler entre les
diffèrentes tentatives. . .
6
Gestion des disques
Que vous souhaitiez utiliser une partition fat32, ntfs, hpfs, iso9660 ou bien
d’autres, il y a de grandes chances pour que ce soit supporté. De même, alors que
vous éstimez que votre espace disque n’est plus suffisant, il vous suffira de “monter” une partition de votre nouveau disque dur et le “brancher” à n’importe quelle
partie de votre arborescence. Une fois la petite tâche administrative effectuée, votre
arborescence semblera être la même que celle que vous aviez auparavant, l’espace
disque en plus.
6.1
Partitionnement
Les outils de partitionnement seront diffèrent d’un Unix à l’autre. Dans l’état
actuel de la documentation, nous allons nous interresser au monde Linux.
Pour cette tâche, l’utilitaire sous GNU/Linux s’appele “fdisk” auquel nous allons
passer en paramètre le chemin vers le periphèrique à partitionner.
6.1.1
Organisation de quelques périphèriques dans le “/dev/”
Nous avons vu précédemment que nous avions dans le repertoire “/dev/” les
entrées de divers periphèriques. Ces entrées sont caractèrisée comme des fichiers.
Il peuvent d’ailleurs très bien se comporter comme tels. Sur certains d’entre eux,
essayer de faire un cat ou tout simplement de rediriger la sortie d’un fichier ou d’un
programme vers eux, vous obtiendrez un certain nombre de choses inattendues. Un
test probant consiste à rediriger un fichier binaire vers “/dev/audio”, vos oreilles
devraient apprécier.
Les disques sont diffèrenciés suivant qu’ils sont IDE ou SCSI. Sur la plupart des
installations de votre GNU/Linux, les periphèriques IDE seront caractèrisés par des
entrées du type “hdalpha” où alpha correspond à l’emplacement du périphèrique
sur la chaı̂ne IDE qui sera definit par une lettre. Ainsi, si nous souhaitons accèder
au periphèrique “master” du premier controleur IDE, le périphèrique se nommera
“hda”. De même, si nous souhaitons accèder à la seconde partition de ce même
disque, il suffira d’ajouter le numero de la partition au nom du périphèrique (pour
l’exemple : “hda2”). Pour les périphèriques SCSI, la démarche reste la même, hors
mis que les entrées seront du type “sdalpha” pour le disque, “scdnum” pour les
lecteurs cd. . .Même si cette notation est la plus fréquemment rencontrée, une autre
approche du répertoire “/dev/” se developpe petit à petit ; c’est celle que propose
le “devfs”. Le principe consiste à rendre plus lisible le contenu du “/dev/” avec
des répertoires symbolisant par exemple que nous souhaitons acceder à un periphèrique SCSI, sur tel chaı̂ne, tel ID. . .Voici ce que pourrait donner láccès à un
lecteur cd scsi : “/dev/scsi/host0/bus0/target4/lun0/cd” C’est quand même bien
plus compréhensible. Cette approche est du même type que celle qu’on peut retrouver sur IRIX (Unix de Silicon Graphics) par exemple.
22
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
Si vous ne savez pas comment retrouver l’appelation de certains périphèrique,
l’utilitaire “dmesg” devrait vous venir en aide. Voici un exemple de comment peuvent
se representer les peripheriques via “dmesg” qui reprend les messages donnés par
le noyau lors du boot ou l’ont peut distinguer le nom qu’a affecté le noyau à deux
disques SCSI et leurs partitions :
...
SCSI device sda: 8925000 512-byte hdwr sectors (4570 MB)
/dev/scsi/host0/bus0/target3/lun0: p1
SCSI device sdb: 17836668 512-byte hdwr sectors (9132 MB)
/dev/scsi/host0/bus0/target6/lun0: p1 p2 p3 < p5 p6 >
...
6.1.2
Edition de la table des partitions
Une fois que nous avons cerné le périphèrique à éditer, nous allons pouvoir éditer
la table des partitions. Sur un système GNU/Linux, vous allez être contraint de
crèer au-moins deux partitions. La première va contenir le “/”, et la seconde va être
le “swap”. Pour le reste, si vous souhaitez avoir une partition pour “/usr”, “/tmp”
ou autre, libre à vous, et c’est même plutôt conseillé pour un soucis d’intègrité du
système. Nous verrons comment procèder pour associer par exemple “/dev/hda3”
avec “/usr”. Imaginons que nous souhaitons partitionner notre “master” sur le premier controleur IDE. Nous voulons disposer d’une partition de “swap” de 128 Mo
et le reste du disque pour le repertoire root (“/”). Voyons par la pratique :
<prompt_shell> fdisk /dev/hda
The number of cylinders for this disk is set to 1826.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): p
Disk /dev/hda: 255 heads, 63 sectors, 1826 cylinders
Units = cylinders of 16065 * 512 bytes
Device Boot
Start
End
Blocks
Id
System
Command (m for help): n
Command action
e
extended
p
primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1826, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1826, default 1826): +128M
Command (m for help): p
Disk /dev/hda: 255 heads, 63 sectors, 1826 cylinders
Units = cylinders of 16065 * 512 bytes
Device Boot
/dev/hda1
Start
1
End
17
Blocks
136521
Id
83
23
System
Linux
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
Command (m for help): n
Command action
e
extended
p
primary partition (1-4)
e
Partition number (1-4): 2
First cylinder (18-1826, default 18):
Using default value 18
Last cylinder or +size or +sizeM or +sizeK (18-1826, default 1826):
Using default value 1826
Command (m for help): p
Disk /dev/hda: 255 heads, 63 sectors, 1826 cylinders
Units = cylinders of 16065 * 512 bytes
Device Boot
Start
End
Blocks
Id System
/dev/hda1
1
17
136521
83 Linux
/dev/hda2
18
1826 14530792+
5 Extended
Command (m for help): n
Command action
l
logical (5 or over)
p
primary partition (1-4)
l
First cylinder (18-1826, default 18):
Using default value 18
Last cylinder or +size or +sizeM or +sizeK (18-1826, default 1826):
Using default value 1826
Command (m for help): p
Disk /dev/hda: 255 heads, 63 sectors, 1826 cylinders
Units = cylinders of 16065 * 512 bytes
Device Boot
/dev/hda1
/dev/hda2
/dev/hda5
Start
1
18
18
End
17
1826
1826
Blocks
136521
14530792+
14530761
Id
83
5
83
System
Linux
Extended
Linux
Command (m for help): t
Partition number (1-5): 1
Hex code (type L to list codes): L
0
1
2
3
4
5
6
7
8
9
a
b
c
e
f
Empty
FAT12
XENIX root
XENIX usr
FAT16 <32M
Extended
FAT16
HPFS/NTFS
AIX
AIX bootable
OS/2 Boot Manag
Win95 FAT32
Win95 FAT32 (LB
Win95 FAT16 (LB
Win95 Ext’d (LB
18
1b
1c
1e
24
39
3c
40
41
42
4d
4e
4f
50
51
AST Windows swa
Hidden Win95 FA
Hidden Win95 FA
Hidden Win95 FA
NEC DOS
Plan 9
PartitionMagic
Venix 80286
PPC PReP Boot
SFS
QNX4.x
QNX4.x 2nd part
QNX4.x 3rd part
OnTrack DM
OnTrack DM6 Aux
61
63
64
65
70
75
80
81
82
83
84
85
86
87
8e
SpeedStor
GNU HURD or Sys
Novell Netware
Novell Netware
DiskSecure Mult
PC/IX
Old Minix
Minix / old Lin
Linux swap
Linux
OS/2 hidden C:
Linux extended
NTFS volume set
NTFS volume set
Linux LVM
24
a6
a7
b7
b8
c1
c4
c6
c7
da
db
e1
e3
e4
eb
f1
OpenBSD
NeXTSTEP
BSDI fs
BSDI swap
DRDOS/sec (FATDRDOS/sec (FATDRDOS/sec (FATSyrinx
Non-FS data
CP/M / CTOS / .
DOS access
DOS R/O
SpeedStor
BeOS fs
SpeedStor
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
10 OPUS
11 Hidden FAT12
12 Compaq diagnost
14 Hidden FAT16 <3
16 Hidden FAT16
17 Hidden HPFS/NTF
Hex code (type L to
Changed system type
52 CP/M
93 Amoeba
f4
53 OnTrack DM6 Aux 94 Amoeba BBT
f2
54 OnTrackDM6
9f BSD/OS
fd
55 EZ-Drive
a0 IBM Thinkpad hi fe
56 Golden Bow
a5 BSD/386
ff
5c Priam Edisk
list codes): 82
of partition 1 to 82 (Linux swap)
SpeedStor
DOS secondary
Linux raid auto
LANstep
BBT
Command (m for help): p
Disk /dev/hda: 255 heads, 63 sectors, 1826 cylinders
Units = cylinders of 16065 * 512 bytes
Device Boot
/dev/hda1
/dev/hda2
/dev/hda5
Start
1
18
18
End
17
1826
1826
Blocks
136521
14530792+
14530761
Id
82
5
83
System
Linux swap
Extended
Linux
Command (m for help): w
Syncing disks
<prompt_shell>
Il est clair, qu’hormis son nom, “fdisk” est très loin de son homologue sous DOS.
Une remarque concèrnant les partitions bootables ou non, si vous souhaitez “booter”
sur une partition plutôt qu’une autre, lors de l’invite de commande de “fdisk”, il est
possible de taper la commande “a” qui va vous demander sur quel partition mettre
le “flag” indiquant où vous souhaitez démarrer. Autre remarque, l’identifiant affecté
aux partitions suit la notation suivante :
– Les partitions primaires auront un identifiant allant de 1 à 4 compris
– Les partitions logiques auront des identifiants superieurs ou égaux à 5
6.1.3
Formatage de la partition au système de fichier souhaité
Une fois encore, les utilitaires vont varier d’un Unix à l’autre. Comme ci-dessus,
nous allons nous cantonner pour l’instant au cadre de GNU/Linux. La plupart
du temps, il suffira d’appeler la commande “mknom du fs” suivit de la partition.
Toutefois, en ce faisant, les paramètres par defauts s’appliqueront, si ce n’est pas
ce que vous souhaitez (Ex : changer la taille des blocs), tapez simplement “man
mknom du fs”, “man mkfs”, ou “mkfs -h”.
6.2
Association periphérique / point de montage
Une fois nos partitions “prêtes à l’emploi” parceque nous les avons conçu ou tout
simplement parcequ’elles existent déjà (Ex : des partitions Windows2k), il va falloir
qu’on puisse y accèder quelquepart dans notre arborescence. Celà peut se faire n’importe où. Par convention, on dispose dans le répertoire “/mnt/” les répertoires qui
vont être assosciés aux péripheriques n’intervenants pas dans l’arborescence “principale” tels que les lecteurs cd, disquette, zip, partitions Windows. . .Une fois que nous
avons définit l’endroit qui servira pour accèder à une partition ou péripherique, et
que nous l’avons créé par la simple utilisation de “mkdir”, il va falloir faire l’assosciation péripherique et cette entrée préparée que l’on appelle “point de montage”.
25
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
Ce processus d’assosciation est naturellement appelé, “montage”.
6.2.1
Utilisation de la commande “mount”
La commande “mount”, comme son nom l’indique va permettre de monter des
partitions, et “umount” les démonter. La syntaxe générale est la suivante :
mount -t type de fs /dev/péripherique ou partition /point de montage
Appelée seule, “mount” affiche les montages actuels avec leur type de fichiers
respectifs et les options entre parenthèses. Ces informations peuvent également être
trouvées dans le fichier “/etc/mtab”. Il est possible en plus de l’argument “-t” lui
en passer d’autres, dont “-o” qui permet de definir les options. Elles peuvent par
exemple permettre à tous le monde de monter la partition, qu’à certaines personnes,
qu’on n’ait les droits qu’en lecture ou en lecture/écriture.
Exemple de montage d’un lecteur CD :
<prompt_shell> mount
/dev/hda5 on / type ext2 (rw)
none on /proc type proc (rw)
<prompt_shell> ls /mnt/Cd
<prompt_shell> mount -o ro -t iso9660 /dev/hdc /mnt/Cd
<prompt_shell> ls /mnt/Cd
BOB SINCLAR - Champs Elys?es
Dimitri from Paris - A Night at the Playboy Mansion
Etienne de Crecy - Tempovision
Live at Queen by DJ Alan Thompson - Trade
Moby - Play
Superfunk - Hold Up
<prompt_shell> mount
/dev/hda5 on / type ext2 (rw)
none on /proc type proc (rw)
/dev/hdc on /mnt/Cd type iso9660 (ro)
<prompt_shell> cat /etc/mtab
/dev/hda5 / ext2 rw 0 0
/dev/hda6 /mnt/Perso ext2 rw,noexec,nosuid,nodev 0 0
none /dev/pts devpts rw,gid=5,mode=620 0 0
none /proc proc rw 0 0
/dev/hdc /mnt/Cd iso9660 ro 0 0
<prompt_shell>
Il devient rapidement pénible de définir à la main, les arguments de la commande “mount”, surtout pour des lecteurs utilisés souvent comme les lecteurs cd.
Heureusement, comme toujours (ou presque), il y a une solution.
6.2.2
Le fichier “/etc/fstab”
Grâce à ce fichier, “mount” va pouvoir faire la relation seul en lui passant seulement, soit le point de montage, soit le péripherique, en paramètre entre les diverses
options et le type du système de fichier. Il s’organise comme ceci :
périphérique point de montage type fs options dump fsck
periphérique par exemple “/dev/hda1”
point de montage par exemple “/”
type fs par exemple “iso9660”
26
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
options diverses et variées, par exemple “rw”2
dump Mis à un ou à zero permet de spécifier à l’utilitaire “dump” s’il doit sauvegarder cette partition ou non.
fsck Mis à un pour le “/” et à deux pour les autres partitions, indique qu’il est
necessaire de faire une vérification du système de fichier (on met à zero si ce
n’est pas nécessaire).
Le principe de démontages est très simple, il suffit pour ce faire d’utiliser “umount
partition ou point de montage”. Toutefois, il y a une règle à respecter pour démonter
une partition, c’est qu’aucune application ne l’utilise. Il peut en effet arriver que
vous cherchiez quelquechose et que vous souhaitiez démonter la partition pour en
activer une nouvelle (Ex : un cd). Si êtes placés dans un des répertoires de ce
même lecteur, il ne vous sera pas possible de le faire. Cette tâche de savoir “qui
utilise quoi” est grandement facilitée par la commande “fuser” (sous GNU/Linux
du moins). Elle va vous permettre d’envoyer des messages aux utilisateurs concernés
pour qu’ils arrêtent d’eux-même le processus incriminés, d’envoyer un signal à tous
les processus utilisant une certaine partie de notre arborescence. . .
<prompt_shell> fuser -v /
/
USER
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
ualc
root
ualc
root
ualc
PID
1
2
3
4
5
6
94
98
101
103
105
108
110
120
123
125
126
127
128
129
130
131
132
133
1461
9022
9024
9297
9305
10689
12017
ACCESS
.rc..
.rc..
.rc..
.rc..
.rc..
.rc..
.rc..
.rc..
.rc..
.rc..
.rc..
.r...
.r...
.rc..
.r...
.r...
.r...
.r...
.r...
.r...
.rc..
.r...
.r...
.r...
.r...
.rc..
.r...
.rc..
.r...
.r...
.r...
COMMAND
init
keventd
ksoftirqd_CPU0
kswapd
bdflush
kupdated
dhcpcd
syslogd
klogd
inetd
sshd
crond
atd
gpm
qmail-send
agetty
agetty
agetty
agetty
agetty
splogger
qmail-lspawn
qmail-rspawn
qmail-clean
agetty
sshd
zsh
sshd
zsh
zsh
zsh
2 Il faut tout de même préciser que d’un système de fichier à l’autre, les options disponibles ne seront pas les
mêmes. Par exemple, le système de fichier “vfat” ne supportera pas la gestion des droits sur les fichiers
27
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
root
root
ualc
ualc
12607
12733
32634
32644
.rc..
.r...
.r...
.r...
sshd
fuser
ptrace
ptrace
<prompt_shell>
6.2.3
Gestion de l’espace
Une fois les partitions montées, il est necessaire, si ce n’est indispensable de
savoir quel espace reste disponible sur nos diverses partitions pour savoir combien
de DiVX on peut encore mettre, quelle taille font tels ou tels fichiers. . .
Nous avons pour connaı̂tre l’espace restant sur les partitions montées, “df” et
pour la taille des fichiers ou répertoires, “du”. Les exemples pour ce genre de commandes étant plus fort qu’une explication qui serait juste les reflets de “man df” et
“man du”, voilà :
<prompt_shell> df -h
Filesystem
/dev/hda5
/dev/hda6
/dev/hdc
<prompt_shell> df -h
Filesystem
Type
/dev/hda5
ext2
/dev/hda6
ext2
none
devpts
none
proc
/dev/hdc
iso9660
<prompt_shell> du -h
3.8M
/sbin
<prompt_shell> du -h
472k
/bin/bash
<prompt_shell>
Size Used Avail Use% Mounted on
3.9G 2.9G 802M 79% /
1004M 440M 512M 46% /mnt/Toto
598M 598M
0 100% /mnt/EnShort
-T -a
Size Used Avail Use% Mounted on
3.9G 2.9G 802M 79% /
1004M 440M 512M 46% /mnt/Toto
0
0
0
- /dev/pts
0
0
0
- /proc
598M 598M
0 100% /mnt/EnShort
-s /sbin
/bin/bash
Lorsqu’il devient indispensable de trouver de la place, il va falloir utiliser des
commandes pour compresser les données trops conséquentes. Ceci va être rendu
possible par des utilitaire comme “zip”, “rar”, “gzip”, “bzip2”. Les deux derniers
de cette liste sont les plus couremments rencontrés sous Unix. Le plus interressant
au niveau intègrité des données et qualité de compression, s’avère être “bzip2”. Sa
grosse particularité consiste a pouvoir récupèrer, même partiellement, une archive
si elle a été endommagée. Cependant l’algorithme utilisé est efficace, mais plus lents
que les autres. Tout dépend de la machine dont vous disposez et de l’utilisation que
vous voulez faire de vos archives.
7
Gestion des processus
Comme nous l’avons constaté, ce n’est pas parceque nous sommes en ligne de
commande qu’on se retrouve sous un MS-DOS ; un UNIX ca ne gère pas qu’une
tâche à la fois, et il est possible de “dialoguer” avec elles. L’interêt réside notemment dans la capacité “de faire le café” tout en “pressant une orange”. Tout ceci
ne peut s’exécuter en même temps si vous n’avez que deux bras (CPU). Il va falloir
s’organiser (notion d’ordonnancement et de priorités) pour exécuter les táches correctement. Tout à coup, une deuxième paire de bras vous a poussé à l’issue d’une
28
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
nuit étrange ; vous avez alors le potentiel d’exécuter à peu près deux fois plus de
choses en un mm̂em temps, si toutefois votre cerveau est capable de le gèrer (notions de capacite du noyau à utiliser des architectures multiprocessus). Il est donc
tout naturel d’avoir toute une série d’utilitaires dédiés à consulter létat des divers
processus, à vérifier qu’ils se comportent conformément à ce qu’on attend d’eux, et
à modifier leur priorités.
7.1
Lister les processus
Pour ce faire, nous avons quatres commandes principales :
ps Permet de lister les processus suivant un certain nombre de critères.
jobs Permet de lister les processus dans lancés dans le shell courant.
pstree Permet de lister les processus suivant dans un arbres indiquant les liens de
parentés entre eux.
top Permet d’avoir un suivit de l’évolution des processus, et ce faisant, d’effectuer
des traitement comme pourrait le faire ps, mais de façon interactive.
Voici un exemple d’utilisation de “ps”
<prompt_shell>
PID TTY
12758 pts/4
12872 pts/4
<prompt_shell>
PID TTY
1 ?
2 ?
3 ?
4 ?
5 ?
6 ?
94 ?
98 ?
101 ?
103 ?
105 ?
108 ?
110 ?
120 ?
123 ?
125 tty2
126 tty3
127 tty4
...
<prompt_shell>
USER
PID
root
1
root
2
root
3
root
4
root
5
root
6
root
94
root
98
root
101
ps
TIME CMD
00:00:00 zsh
00:00:00 ps
ps ax
STAT
TIME COMMAND
S
2:35 init
SW
0:00 [keventd]
SWN
0:00 [ksoftirqd_CPU0]
SW
418:11 [kswapd]
SW
0:00 [bdflush]
SW
0:02 [kupdated]
S
0:00 /sbin/dhcpcd eth1
S
0:26 /usr/sbin/syslogd
S
0:17 /usr/sbin/klogd -c 3
S
0:00 /usr/sbin/inetd
S
0:36 /usr/local/sbin/sshd
S
0:00 /usr/sbin/crond -l10
S
0:00 /usr/sbin/atd -b 15 -l 1
S
0:00 gpm -m /dev/psaux -t ps2
S
0:00 qmail-send
S
0:00 /sbin/agetty 38400 tty2 linux
S
0:00 /sbin/agetty 38400 tty3 linux
S
0:00 /sbin/agetty 38400 tty4 linux
ps auxww
%CPU %MEM
0.0 0.1
0.0 0.0
0.0 0.0
0.8 0.0
0.0 0.0
0.0 0.0
0.0 0.0
0.0 0.3
0.0 0.2
VSZ
344
0
0
0
0
0
332
1788
1296
RSS
64
0
0
0
0
0
52
232
180
TTY
?
?
?
?
?
?
?
?
?
STAT
S
SW
SWN
SW
SW
SW
S
S
S
29
START
TIME COMMAND
Nov02
2:35 init
Nov02
0:00 [keventd]
Nov02
0:00 [ksoftirqd_CPU0]
Nov02 418:12 [kswapd]
Nov02
0:00 [bdflush]
Nov02
0:02 [kupdated]
Nov02
0:00 /sbin/dhcpcd eth1
Nov02
0:26 /usr/sbin/syslogd
Nov02
0:17 /usr/sbin/klogd -c 3
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
root
103
root
105
root
108
daemon
110
root
120
qmails
123
root
125
nux
root
126
nux
...
<prompt_shell>
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.4
0.4
0.4
0.0
0.0
0.2
0.0
1772
2288
1348
1360
1268
1256
1220
0.0
0.0
1220
252
264
300
60
8
132
4
?
?
?
?
?
?
tty2
S
S
S
S
S
S
S
Nov02
Nov02
Nov02
Nov02
Nov02
Nov02
Nov02
0:00
0:36
0:00
0:00
0:00
0:00
0:00
/usr/sbin/inetd
/usr/local/sbin/sshd
/usr/sbin/crond -l10
/usr/sbin/atd -b 15 -l 1
gpm -m /dev/psaux -t ps2
qmail-send
/sbin/agetty 38400 tty2 li
4 tty3
S
Nov02
0:00 /sbin/agetty 38400 tty3 li
Nous avons respecivement affichés les processus de notre terminal courant et
nous appartenant, ceux dans tous les terminaux et pour tous les utilisateurs, et
ceux dans tous les terminaux pour tous les utilisateurs, avec des informations sur
les utilisateurs, l’état de la memoire et les arguments qui leurs sont passés en entier
(ils ne seront pas tronqués par la fin de la largeur du terminal). Au milieu de tout
une quantités d’informations, celles qui vont les plus nous interresser sont le PID
(“Process ID”), et l’état du processus (“STAT”).
Le PID est un identifiant unique par processus. Dans ce cadre, il y a une notion
d’héritage ; un processus parent qui exécute par des procédés de type “fork” un
autre processus se verra être le père de celui-ci. En gardant à l’esprit ce principe, il
y a donc un processus qui est le père de tous les autres. C’est le cas, et son nom est
“init” qui a pour PID de 1. Cette notion d’héritage est particulièrement flagrante
avec la commande “pstree” (cf exemple ci-dessous). Pour ce qui est de de la partie
“STATUS”, les lettres symbolisent ceci :
D En sommeil imperturbable (ce qui arrive souvent à certain modules kernel)
R En cours d’exécution
S En sommeil
T Stoppé ou “tracé” (notamment pour le débugage)
Z Zombie (peut arriver lorsqu’un processus n’a pas attendu la fin de l’exécution de
l’un de ses fils)
Tous ces indicateurs sont autant de moyens pour connaı̂tre à chaque instant l’état
d’un processus, pour voir si il est planté par exemple.
Voici comme cité précédemment une sortie du programme “pstree” :
<prompt_shell> pstree
init-+-6*[agetty]
|-atd
|-crond
|-dhcpcd
|-gpm
|-inetd---2*[in.talkd]
|-keventd
|-klogd
|-2*[ptrace]
|-qmail-send-+-qmail-clean
|
|-qmail-lspawn
|
|-qmail-rspawn
|
-splogger
|-sshd-+-sshd---zsh---zsh-+-jed
30
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
|
|
-mpg123
|
|-sshd---zsh---zsh---ytalk
|
|-2*[sshd---zsh---ytalk]
|
-sshd---zsh---zsh---pstree
‘-syslogd
<prompt_shell>
Cette fois une sortie du programme “jobs” (Attention cette commande est une
commande interne au shell) :
<prompt_shell> jobs
[1]
suspended (tty output)
[2] + suspended (tty output)
[3] - suspended man man
<prompt_shell>
vi pouet
vi toto
Une fois encore, nous pouvons distinguer l’état du processus, un identifiant qui
pourra nous servir dans les commandes qui vont suivre.
Voyons désormais une sortie typique du programme “top” permettant de suivre
l’évolution d’un ou plusieurs processus dans le temps :
12:54am up 34 days, 23:02, 5 users, load average: 0.00, 0.00, 0.00
56 processes: 43 sleeping, 2 running, 0 zombie, 11 stopped
CPU states: 0.2% user, 1.0% system, 0.0% nice, 0.5% idle
Mem:
62668K av,
60376K used,
2292K free,
0K shrd,
476K buff
Swap: 136512K av,
3020K used, 133492K free
21128K cached
PID
12909
12949
1
2
3
4
5
6
94
98
101
103
105
108
110
120
123
125
126
127
USER
root
root
root
root
root
root
root
root
root
root
root
root
root
root
daemon
root
qmails
root
root
root
PRI
17
18
8
9
19
9
9
9
9
9
9
9
9
8
9
9
9
9
9
9
NI
0
0
0
0
19
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
SIZE RSS SHARE STAT
1476 1476 1272 R
1344 1344 1140 R
72
64
44 S
0
0
0 SW
0
0
0 SWN
0
0
0 SW
0
0
0 SW
0
0
0 SW
52
52
32 S
276 232
192 S
264 180
152 S
280 252
212 S
340 264
200 S
328 300
252 S
132
60
52 S
68
8
8 S
156 132
100 S
64
4
4 S
64
4
4 S
64
4
4 S
LIB %CPU %MEM
TIME COMMAND
0 3.8 2.3
0:52 mpg123
0 1.9 2.1
0:00 top
0 0.0 0.1
2:35 init
0 0.0 0.0
0:00 keventd
0 0.0 0.0
0:00 ksoftirqd_CPU0
0 0.0 0.0 418:12 kswapd
0 0.0 0.0
0:00 bdflush
0 0.0 0.0
0:02 kupdated
0 0.0 0.0
0:00 dhcpcd
0 0.0 0.3
0:26 syslogd
0 0.0 0.2
0:17 klogd
0 0.0 0.4
0:00 inetd
0 0.0 0.4
0:36 sshd
0 0.0 0.4
0:00 crond
0 0.0 0.0
0:00 atd
0 0.0 0.0
0:00 gpm
0 0.0 0.2
0:00 qmail-send
0 0.0 0.0
0:00 agetty
0 0.0 0.0
0:00 agetty
0 0.0 0.0
0:00 agetty
Ici nous avons énormément d’informations concèrnant l’état général du système
avec la memoire utilisée, le nombre de processus actifs, le taux d’occupation du
processeur, et le même type d’informations détaillées cette fois par processus. La
signification des champs est la suivante (et directement tirée du “man top”) :
PID - Identifiant du processus
USER - Le proprietaire du processus
PRI - Priorité de la tâche (plus le chiffre est petit plus la tâche est prioritaire).
SIZE - Taille du processus en memoire incluant la partie donnée et la pile.
31
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
RSS - Quantité totale de memoire occupée par la tâche (les bibliothèques chargées
sont comptabilisées pour les programme ELF).
SHARE - Quantité de memoire partagée.
STAT - La même definition des lettres que celle faı̂te au-dessus avec en plus “a”
ou “<” pour indiquer une priorité infèrieure à zero, “N” pour l’inverse et “W”
pour les processus issue du “Swap” (le “man” précise que celà ne fonctionne
pas pour les parties inhérentes au noyaux).
LIB - Nombre de pages occupées par les bibliothèques (sauf pour les executables
au format ELF ; autant dire que ca ne fonctionne quasiment jamais)
%CPU - Taux d’occupation du(des) processeur(s) par ce processus. Il peut être
superieur à 100% dans le cadre de machine ayant plusieurs processus.
%MEM - Taux d’occupation de la memoire physique du processus
TIME - Temps total d’exécution au sein du(des) processeur(s) depuis que le processus est lancé.
COMMAND - C’est comme le “Port Salut”
A ce stade, il vous est possible de “monitorer” l’etat de vos processus et . . .c’est
tout. Comment intéragir avec eux ? Comment les supprimer de la mémoire ?
7.2
Envoi de signaux aux processus
Ce procédé se concentre essentiellement autour de la commande “kill”. Il n’est
pas comme son nom pourrait le laisser supposer, dédié à “tuer” des processus. Il
va permettre de faire effectuer un certain nombre de tâches à l’un ou plusieurs
d’entres-eux. Tout dépend finalement comment les programmes réagissent aux signaux qui leurs sont envoyés. Pour obtenir la liste des signaux disponibles il suffit
de taper dans la l’invite de commande du shell “kill -l”. Ensuite, lorsque vous
souhaitez envoyer un signal à un processus, il suffit de récupèrer son PID et faire
“kill -NOMSIGNAL ou son identifiant PID1 PID2 . . .”. Si aucun nom de signal
n’est passé en paramètre, c’est le “SIGTERM” qui est utilisé par defaut. Il est souvent utiliser pour arrêter un processus. Si celui-ci persiste, vous pouvez utiliser le
“SIGKILL” qui ne peut être intercepté et évité par le processus, le forçant ainsi
à se terminer (c’est une methode très pratique lorsque Netscape plante). D’autres
signaux comme “SIGHUP” permet aux processus qui le gèrent comme tel de les
redémarrer en lisant éventuellement leur fichier de conf. . .
<prompt_shell> kill -l
HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT
CLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS
<prompt_shell> kill -l TERM
15
<prompt_shell> ps
PID TTY
TIME CMD
10689 pts/1
00:00:00 zsh
12739 pts/1
00:00:00 jed
13040 pts/1
00:00:00 ps
<prompt_shell> kill -9 12739
[1] + killed
jed /tmp/bozoenshort
<prompt_shell>
32
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
7.3
Arrière plan / Avant plan / Detachement
Le shell prévoit en général les outils “bg”, “fg” et “disown” afin de gèrer les
processus. Respectivement permettant de mettre en arrière plan, avant plan un
processus et de le détacher de son propriétaire. Le shell fournit également des raccourcis clavier permettant de faire ce genre de tâches. “Ctrl+z” permet notamment
de mettre en arrière plan le processus courant.
<prompt_shell> man man &
[1] 13095
[1] + suspended (tty output)
<prompt_shell> vi pouet&
[2] 13106
[2] + suspended (tty output)
<prompt_shell> jobs
[1] - suspended (tty output)
[2] + suspended (tty output)
<prompt_shell> fg %1
...
man man
vi pouet
man man
vi pouet
Imaginons que vous souhaitez qu’un processus (au hasard un client ftp) continue
son exécution, et ce même lorsque vous quittez la session de votre shell. La solution
consiste à se désattribuer le processus par le biais de la commande “disown PID”.
Attention, ce faisant vous n’aurez aucun moyen de vous le réapproprier.
7.4
Modification des priorités du “Scheduler”
Nous avons vu précédemment que les processus avaient des priorités. Elles sont
modifiable aussi bien au moment du lancement du programme, qu’après , respectivement, grâce à “nice” et “renice”. Nous avons également vu que la priorité d’un
processus et d’autant plus grande que la valeur de son “nice” est petite. Il n’y a
plus qu’à se lancer, la syntaxe étant très simple ; “nice -n PRIORITE INC OU DEC
commande args. . .” et “renice PRIORITE -p PID” par exemple. Il faut manier
l’odonnancement des processus avec precautions, surtout lorsqu’on est root ou il est
possible de mettre des priorités de +20 à -20.
8
Approche élémentaire du reseau
Nous allons aborder rapidement dans cette section ce qu’il est nécessaire de faire
pour bénéficier d’un reseau.
8.1
Configurer son adresse IP dynamiquement
Pour ce faire, sur GNU/Linux et la famille BSD, “dhclient interface” ou “dhcpcd
interface”.
8.2
Configurer son adresse IP manuellement
Quel que soit l’Unix sur lequel vous vous retrouverez, vous aurez accès à l’utilitaire “ifconfig”. Sa syntaxe est relativement simple. Imaginons que nous souhaitions
affecter à notre interface eth0 l’adresse 192.16.2.1 avec un masque de 255.255.224.0.
33
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
<prompt_shell> ifconfig -a
eth0
Link encap:Ethernet HWaddr 00:50:DA:44:2E:A5
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
Interrupt:7 Base address:0xec00
eth1
Link encap:Ethernet HWaddr 00:10:5C:66:1A:58
inet addr:172.16.0.3 Bcast:172.16.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1323940 errors:119 dropped:0 overruns:0 frame:270
TX packets:1007937 errors:0 dropped:0 overruns:0 carrier:0
collisions:1468 txqueuelen:100
Interrupt:11 Base address:0xe080
lo
Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:69 errors:0 dropped:0 overruns:0 frame:0
TX packets:69 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
<prompt_shell> ifconfig eth0 192.16.2.1 netmask 255.255.224.0
<prompt_shell> ifconfig eth0
eth0
Link encap:Ethernet HWaddr 00:50:DA:44:2E:A5
inet addr:192.16.2.1 Bcast:192.16.2.255 Mask:255.255.224.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
Interrupt:7 Base address:0xec00
<prompt_shell>
8.3
Selection du routeur par defaut
Celà peut s’avèrer pratique d’avoir la possibilité de sortir sur Internet, par
exemple. Pour celá, si vous êtes si ce n’est pas votre machine qui est directement
connectée, il va falloir passer par un routeur. Nous allons, pour ce faire, utiliser
“route”. Imaginons que celle qui nous interresse soit 192.16.2.254 :
<prompt_shell> route add default gw 192.16.2.254
8.4
Selection des DNS (Domain Name Server)
Cette configuration se trouve dans un fichier se nommant “/etc/resolv.conf”. En
voici sa syntaxe :
domain nom de domaine
nameserver DNS primaire
nameserver DNS secondaire
9
Envirronnement graphique
Mais non, il n’y a pas qu’une console en mode texte sous Unix. Si nous voulons
utiliser le formidable GIMP, jouer à Quake3 ou Parsec, lancer Mozilla ou Opera, il
34
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
va nous falloir configurer ce qu’on appelle XFree86. C’est un “serveur graphique” sur
lequel vont pouvoir se greffer les applications précédemment évoquées. Ses capacités
ne se limitent pas à celà. Par son intermediaire, nous allons pouvoir exporter l’affichage d’une machine distante vers une machine locale (nous sommes sur des Unix ;
le reseau c’est quand même important). Cependant, il n’est pas capable de gèrer
le multifenêtrage et un envirronnement de bureau. Pour celà nous allons avoir ce
qui s’appelle des “Window Manager” et des “Desktop Manager”. Pour les premiers,
nous avons “enlightenment”, “windowmaker”, “blackbox”, “sawfish” et beaucoups
d’autres. Il peuvent être particulièrement magnifique suivant les thèmes. En effet,
il sont pour la majorité configurables à volontés. Pour estimer ce qu’il est possible
de faire il suffit d’aller sur “http ://www.themes.org”. Pour ce qui est des “Desktop
Manager” nous en avons deux à notre disposition ; “GNOME” et “KDE”, eux aussi
particulièrment sympathiques.
9.1
Configuration de XFree86
Nous allons utiliser “Xf86config” pour configurer notre serveur X comme il faut.
Celui-ci est en mode texte, et fait partie de XFree86 ; suivant les votre Unix et distribution (pour celles reposant sur GNU/Linux) vous aurez probablement à votre
disposition des interfaces plus pratiques que celle que nous allons utiliser (le programme “xf86cfg” est lui aussi présent en standard avec XFree86 et permet une
configuration en mode graphique). Toutefois, si les configurations en mode graphique échouent, il faudra se rabattre sur la version texte. Nous ne detaillerons
pas ici toutes les étapes (à part si vous le souhaitez vraiment, auquel cas envoyez
nous un mail) puisque celà variera d’une machine à l’autre et les questions sont
suffisamment explicites. Une fois que vous aurez répondu á toutes les questions, la
configuration sera gardée dans le fichier “/etc/X11/XF86Config” que vous pourrez
editer si besoin est.
Si vous avez l’impression que votre écran scintille beaucoup ou est particulièrement
moiré, essayez de récupèrer les specifications précises de votre écran et passez les bon
paramètres de fréquence horizontale et verticale au moment où on vous le demande,
ou allez dans la partie du fichier “XF86Config” qui contient celà :
...
# **********************************************************************
# Monitor section
# **********************************************************************
# Any number of monitor sections may be present
Section "Monitor"
Identifier
#
#
#
#
#
"My Monitor"
HorizSync is in kHz unless units are specified.
HorizSync may be a comma separated list of discrete values, or a
comma separated list of ranges of values.
NOTE: THE VALUES HERE ARE EXAMPLES ONLY. REFER TO YOUR MONITOR’S
USER MANUAL FOR THE CORRECT NUMBERS.
HorizSync
30-90
35
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
#
#
#
#
#
#
#
#
HorizSync 30-64
HorizSync 31.5, 35.2
HorizSync 15-25, 30-50
# multisync
# multiple fixed sync frequencies
# multiple ranges of sync frequencies
VertRefresh is in Hz unless units are specified.
VertRefresh may be a comma separated list of discrete values, or a
comma separated list of ranges of values.
NOTE: THE VALUES HERE ARE EXAMPLES ONLY. REFER TO YOUR MONITOR’S
USER MANUAL FOR THE CORRECT NUMBERS.
VertRefresh 50-160
EndSection
...
Une fois ceci fait, si lorsque vous démarrez votre machine vous n’avez accès qu’au
mode texte pour vous authentifier, tapez la commande “startx”. En ce faisant, ce
programme va consulter le contenu du fichier “.xinitrc” se trouvant dans votre
“Home Directory” pour connaı̂te ce qu’il doit lancer. Si cela fonctionne et mais
que vous n’avez pas de “Window Manager” vous pouvez appuyer sur “Ctrl-AltBackspace” pour quitte la “session X” courante.
10
Recompiler son noyau
L’une des grandes puissances des Unix libres consiste en la capacité de pouvoir recompiler son noyau, et ainsi l’optimiser pour l’utilisation que nous en avons.
En ce faisant, nous gagnons de la place en memoire puisque tous les pilotes de
péripheriques inutiles sont retirés, nous pouvons rajouter des fonctionnalités disponibles dans les sources standards du noyau ou utiliser un mécanisme de “patch”
lorsqu’une tierce personne a programmé une fonctionnalité au niveau du noyau dont
on peut avoir besoin.
10.1
Le noyau GNU/Linux
Il est disponible sur quantités de sites (cf Références) mirroirs. Au moment de
l’écriture de ce document la version actuelle est la 2.4.16. Vous pouvez mettre les
sources dans “/usr/src/” et faire pointer le lien symbolique “/usr/src/linux” vers
l’emplacement des sources de votre nouveau noyau. Une fois ceci fait, placez-vous
dans le repertoire contenant les sources et vous pouvez taper les commandes suivantes3 :
– make config - C’est l’interface de configuration en mode texte
– make menuconfig - C’est toujours du mode texte, mais joli cette fois
– make xconfig - C’est l’interface de configuration sous X. Elle s’avère ne pas
être particulièrement pratique.
Une fois ceci fait, il ne vous reste qu’à vous promener dans les divers repertoires
proposés en indiquant si souhaiter intègrer la fonctionnalités sur laquelle vous vous
trouvez en statique dans le noyau ([X]), en module ([M]) ou pas du tout ([ ]). Si
vous n’êtes pas sûr des choix à faire vous pouvez consulter à la fois l’aide proposée,
3 Si
vos sources ont déjà été compilées, vous pouvez taper “make clean” pour effacer les fichiers issus de la
compilation, et garder le fichier de configuration, et “make mrproper” pour tout réinititialiser.
36
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
ou en trouver d’autres dans le repertoire “/usr/src/linux/Documentations/”. Si
vous ne savez pas quel materiel est présent dans votre machine, il y a plusieurs
moyens de le savoir. Tout d’abord, vous pouvez consulter les messages de démarage
avec la commandes “dmesg” ou encore, vous pouvez consulter le contenu des divers
fichiers présents dans le “/proc” (interressez vous surtout aux fichiers ayant un
nom explicite). Pour le reste il y a quelque utilitaires comme “lspci” ou “lsisa” qui
permettre de connaı̂tre le materiel présent sur la machine (en pci et isa). Lors de
votre selection de ce qui doit être mis ou nom dans le noyau, verifiez bien que le
système de fichier présent sur le “/” est bien en statique dans le noyau.
Une fois que vous avez terminé votre selection lorsque vous quittez l’interface, on
vous demande de sauvegarder, ce que vous faites. Le fichier dans lequel sera enregistré les diverses informations de votre future noyau est “/usr/src/linux/.config”.
Il vous faut maintenant créer diverses dépendances utiles pour la compilation
avec “make dep”. Ensuite vous allez compiler la partie statique du noyau par la
commande “make bzImage”. Celà va prendre un certain temps et placer le resultat
de la compilation dans “/usr/src/linux/arch/votre archi/boot/bzImage”. Lorsque
la compilation est terminée il faut compiler les modules et les installer (“make
modules” et “make modules install”). Cette dernière phase va installer les modules
dans “/lib/modules/version du noyau”.
Voici le résumé de ce qu’il faut faire :
1. make clean ou make mrproper si besoin
2. make config , make menuconfig ou make xconfig
3. make dep
4. make bzImage
5. make modules
6. make modules install
Une fois ces diverses étapes terminées, il va falloir indiquer à notre “bootloader”
quelle noyau utiliser pour démarrer le système.
11
Le “boot loader”
Le “boot loader” est une application lancée avant n’importe quel système d’exploitation qui va pouvoir gèrer comment tel ou tel système doit démarrer, avoir une
liste avec un choix (typiquement, votre Unix et un Windows, ou encore plusieurs
versions d’un noyau). Il en existe de nombreux dont GRUB, Lilo, Silo. . .
Nous allons voir comment modifier les fichiers de configuration de GRUB et Lilo
pour prendre en compte un nouveau noyau GNU/Linux (au hasard).
11.1
Lilo
Lilo (Linux Loader) est probablement le “boot loader” le plus répendu sous les
distributions à base de GNU/Linux. Son fichier de configuration se trouvant à cet
emplacement “/etc/lilo.conf” ressemble à ceci :
37
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
<prompt_shell> cat /etc/lilo.conf
# Emplacement du secteur de boot
boot = /dev/hda
# Temps d’attente avant de d\’emarrer sur
# l’image par defaut
delay = 10
# Quel syst\‘eme sur lequel il doit d\’emarrer par defaut
default = Nouveau_noyau
# Emplacement de l’image du noyau sur le disque
image = /boot/vmlinuz-2.4.14
# Nom qui sera affiche dans le menu au moment du boot
label = Vieux_noyau
# Quelle partition sur laquelle le noyau doit demarrer
root = /dev/hda1
read-only
# Ce qu’il faudrait rajouter avec un nouveau noyau
image = /boot/vmlinuz-2.4.16
label=Nouveau_noyau
root= /dev/hda1
read-only
# Exemple d’entr\’ee pour d\’emarrer sur Windows
other = /dev/hda3
label = Windows
table = /dev/hda
<prompt_shell> lilo
Vieux_noyau
Nouveau_noyau *
<prompt_shell>
Il est important, une fois qu’on a modifié la configuration de “lilo” de taper la
commande du même nom pour que les données soient écriture où de droit.
11.2
“GRUB”
GRUB pour GRand Unified Bootloader utilise le fichier de configuration qui se
trouve normalement dans “/boot/grub/menu.lst”. Voici comment faire la meme
chose que lilo dans l’exemple précédent :
<prompt_shell> cat /boot/grub/menu.lst
# Temps d’attente avant de d\’emarrer sur
# l’image par defaut
timeout 30
# Quel syst\‘eme sur lequel il doit d\’emarrer par defaut
default 1
# Nom qui sera affiche dans le menu au moment du boot
title Vieux_noyau
# Quelle partition sur laquelle le noyau doit demarrer.
38
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
# Le comptage commence a 0, donc pour la premiere partition
# du premier disque dur c’est (hd0,0)
root (hd0,0)
# Emplacement de l’image du noyau sur le disque
kernel /boot/vmlinuz-2.4.14 root=/dev/hda1 ro
# Ce qu’il faudrait rajouter avec un nouveau noyau
title Nouveau_noyau
root (hd0,0)
kernel /boot/vmlinuz-2.4.16 root=/dev/hda1 ro
# Exemple d’entree pour un Windows
title Windows
rootnoverify (hd0,0)
makeactive
chainloader +1
<prompt_shell>
Ici il n’y a pas besoin de taper une commande pour enregistrer les données.
GRUB étant capables de lire les partitions sur lesquelles se trouve la configuration,
ce n’est pas necessaire.
Une fois les modifications des fichiers de configuration des “boot loader” terminée, il ne reste qu’à rebooter et selectionner ce sur quoi nous souhaitons démarrer.
12
Phases du “boot”
Lorsque le “boot loader” nous demande sur quel système démarrer, et que vous
choisissez un Unix que se passe-t’il (nous n’allons pas descendre au niveau CPU et
memoire) ?
La première étape consiste à charger le noyau an memoire et d’en executer le
code. Lors de son execution, il met en place un certain nombre de mécanismes de
protection de la memoire, et cherche ensuite sur la partition qu’on lui a indiquée
comme contenant le repertoire racine “/”, un utilitaire qui se nome “init”, qui luimême va consulter son fichier de configuration (“/etc/inittab”) et en executer le
contenu. C’est à ce niveau que sont éxécutés les scripts de démarage pour la gestion
du reseau, du montage des disques, des mise en place de terminaux virtuels. . . Ce
qui explique pourquoi, lorsqu’on liste les processus, il dipose d’un PID de 1 et
qu’il est le père, grand-père, arrière-grand-père. . . de tous les autres processus. En
général il y a plusieurs mode d’initialisation symbolisés par des chiffres de 0 à 6
et A, B et C. Il ont tous une vocation particulière. Certain vont nous permettre
de demarrer en mode administration (“single user”) ou il n’y aura pas d’autres
utilisateurs de connectés sur la machine, et qui ne pourront pas le faire dans ce
mode. Il peut permettre également de demarrer avec une authentification graphique,
d’executer des scripts lorsqu’on souhaite redemarrer ou stopper notre machine, ou
encore lorsque la machine reçoit un signal du système de sauvegarde qui arrive
en fin de batterie. . . Pour passer d’un “mode d’init” à un autre, il suffit de taper
“init ID” où l’ID est le numero d’initialisation souhaités tel qu’il est defini dans
“/etc/inittab”.
39
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
Chaque ligne du fichier “inittab” se compose comme suit :
id:nivaux_d_init:action:commande_ou_script
id Permet d’identifier la tâche à executer (nombre de caractères compris entre 1 et
4).
niveaux d init Ce sont les numeros d’init dans lesquels le script ou la commande
s’executera.
action Ici on spécifie comment doit réagir “init” ; s’il doit attendre que la tâche
du processus lancé soit terminée ou non, s’il doit “ressusciter” le processus
lorsqu’il meurt. . .
commande ou script C’est comme le “Port-Salut”
Voici un exemple d’inittab issue d’une Slackware :
#
#
#
#
#
#
#
#
#
#
#
inittab This file describes how the INIT process should set up
the system in a certain run-level.
Version: @(#)inittab 2.04 17/05/93 MvS
2.10
3.00
02/10/95
02/06/1999
PV
PV
Author: Miquel van Smoorenburg, <[email protected]>
Modified by: Patrick J. Volkerding, <[email protected]>
# These are the default runlevels in Slackware:
#
0 = halt
#
1 = single user mode
#
2 = unused (but configured the same as runlevel 3)
#
3 = multiuser mode (default Slackware runlevel)
#
4 = X11 with KDM/GDM/XDM (session managers)
#
5 = unused (but configured the same as runlevel 3)
#
6 = reboot
# Default runlevel. (Do not set to 0 or 6)
id:3:initdefault:
# System initialization (runs when system boots).
si:S:sysinit:/etc/rc.d/rc.S
# Script to run when going single user (runlevel 1).
su:1S:wait:/etc/rc.d/rc.K
# Script to run when going multi user.
rc:2345:wait:/etc/rc.d/rc.M
# What to do at the "Three Finger Salute".
ca::ctrlaltdel:/sbin/shutdown -t5 -rf now
# Runlevel 0 halts the system.
l0:0:wait:/etc/rc.d/rc.0
# Runlevel 6 reboots the system.
l6:6:wait:/etc/rc.d/rc.6
40
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
# What to do when power fails (shutdown to single user).
pf::powerfail:/sbin/shutdown -f +5 "THE POWER IS FAILING"
# If power is back before shutdown, cancel the running shutdown.
pg:0123456:powerokwait:/sbin/shutdown -c "THE POWER IS BACK"
# If power comes back in single user mode, return to multi user mode.
ps:S:powerokwait:/sbin/init 3
# The getties in multi user mode on consoles an serial lines.
#
# NOTE NOTE NOTE adjust this to your getty or you will not be
#
able to login !!
#
# Note: for ’agetty’ you use linespeed, line.
# for ’getty_ps’ you use line, linespeed and also use ’gettydefs’
c1:1235:respawn:/sbin/agetty 38400 tty1 linux
c2:1235:respawn:/sbin/agetty 38400 tty2 linux
c3:1235:respawn:/sbin/agetty 38400 tty3 linux
c4:1235:respawn:/sbin/agetty 38400 tty4 linux
c5:1235:respawn:/sbin/agetty 38400 tty5 linux
c6:12345:respawn:/sbin/agetty 38400 tty6 linux
# Runlevel 4 used to be for an X window only system, until we discovered
# that it throws init into a loop that keeps your load avg at least 1 all
# the time. Thus, there is now one getty opened on tty6. Hopefully no one
# will notice. ;^)
# It might not be bad to have one text console anyway, in case something
# happens to X.
x1:4:wait:/etc/rc.d/rc.4
# End of /etc/inittab
La valeur de l’init sur laquelle démarrer par defaut est définie au début du fichier
avec “initdefault”. Nous pouvons constater qu’à la fin du fichier, un utilitaire est
lancé du nom de “agetty”. C’est lui qui va gèrer les sessions des terminaux virtuels
au niveau physique. Donc voilà la boucle est bouclées, vous connaissez désormais
quelques ficelles des monstres Unix qui je n’en doute pas, vous plairons et dont vous
avez pu évaluer la puissance, la robustesse et la grande modularité.
41
Labo-Unix - Supinfo Paris - 2001/2002
Initiation aux systèmes de type Unix
Références
[1] http ://www.openbsd.org
[2] http ://www.netbsd.org
[3] http ://www.freebsd.org
[4] http ://www.trustedbsd.org
[5] http ://www.bsdi.com
[6] http ://www.linux.com
[7] http ://www.pathname.com/fhs/
[8] http ://www.linuxdoc.org
[9] http ://www.freebsd.org/doc/en US.ISO8859-1/books/handbook/index.html
[10] http ://netbsd.org/Documentation/
[11] http ://www.freshmeat.net
[12] http ://www.slashdot.org
42
Labo-Unix - Supinfo Paris - 2001/2002