Formation administration Linux
Transcription
Formation administration Linux
Formation administration Linux
Marc-Olivier Buob
Linux : aperçu
Qu'est ce que GNU/Linux ?
Quelques distributions classiques
Pourquoi tant de distributions ?
A quoi ça ressemble ?
Le boot loader
Le chargement
Le mode texte
L'environnement graphique
Structure de GNU/Linux
Rôle du gestionnaire de paquets
Qu'est ce que GNU/Linux ?
Noyau + Système d'exploitation (OS)
Basé sur un noyau linux (1991 Linus Torvalds)
Projet GNU : système inspiré d'Unix (1986 Stallman)
Développé par des milliers d'informaticiens sur Internet
Inclue des milliers de logiciel dont ceux du projet GNU
emacs, gcc
Libre
D'exécuter le logiciel pour n'importe quel usage
D'étudier le fonctionnement d'un programme et de l'adapter (open source)
De redistribuer des copies
D'améliorer le programme et d'en faire profiter la communauté linux
Communautés (linux-fr, lea-linux...)
Quelques distributions classiques
Knoppix
Fedora
Pourquoi tant de distributions ?!
Plusieurs dizaines de distributions
Il y a quand même une base commune !
Choix techniques différents
Gestionnaire de paquets
Manière dont sont gérés les services (serveurs...)
Manière dont est configuré le système (réseau...)
Choix philosophiques différents
Paquets installés par défaut : libre vs non libre (licences)
Public différent : familiers de linux (debian) ou grand public (ubuntu)
Serveur (debian), PC bureautique (ubuntu), restauration (knoppix)
1) Le boot loader : grub / lilo
Les différents
noyaux linux
disponibles
Les autres
systèmes
(windows...)
2) Le chargement
3) Le mode texte (console)
Le prompt :
login@hostname:path$
~: home directory
Commande shell
pwd : le répertoire
courant
Le résultat
4) L'environnement graphique
Structure de GNU/Linux (1/2)
Un noyau qui prend en charge
Les périphériques (disque dur, clavier, carte réseau...)
Les systèmes de fichiers (ext4, fat32, ntfs...)
Les protocoles réseaux (TCP, UDP...)
… éventuellement étoffé par des modules chargés au boot
… sur lequel s'appuie le système
Système de base
Shell (ligne de commandes) : sh, bash, tcsh, ksh, zsh...
Librairies
Logiciels « en mode texte » : gcc, gdb, vim, aptitude, pwd, client/serveur ssh
Serveur graphique (serveur X)
Environnement graphique : KDE, gnome
Applications graphiques : konsole, kdevelop
Structure de GNU/Linux (2/2)
Chaque couche à un rôle bien défini et s'appuie sur les autres
Windows
pilotes
logiciels
GNU/Linux
Boot loader
Grub
Lilo
noyau1
noyau2
...
modules
Système
de
base
pwd
hal
udev
Serveur
graphiqu
e
Env.
graphiqu
e
App.
Graphique
s
Xorg
Gnome
KDE
kdevelop
konsole
adept
Librairies
QT, libstdc++, boost
Progr. mode texte
Shell, compilateurs,
gest. de paquets...
Le gestionnaire de paquets
Chaque logiciel / librairie / … est stocké dans un paquet
Contient les fichiers à installer
Précise de quels paquets il dépend
Décrit le contenu du paquet
Le gestionnaire de paquets
Installe, met à jour, ou supprime des paquets (et ses dépendances)
Corrige les fichiers de configurations
Garantit que les dépendances sont présentes, à jour et en un exemplaire
Diffère d'une distribution à l'autre
debian/ubuntu... : aptitude, apt-get, dpkg …
redhat/mandriva... : urpmi, yum, rpm...
Linux un peu plus dans le détail
Ce qui se passe-t'il au démarrage ?
L'arborescence linux (FHS)
Les devices
Les systèmes de fichiers, les partitions
Les TP (enfin !)
Que se passe-t'il au démarrage ?
On choisit quel kernel on lance et avec quelles options
éventuellement le runlevel peut être précisé
Le kernel est chargé
Les différents médias sont montés (/etc/fstab)
en particulier la partition sur lequel le système GNU/Linux est installé (/)
la swap
Le système démarre au runlevel par défaut (/etc/inittab)
A chaque runlevel, on lance des services spécifiques
0 arrêt
1 mode mono utilisateur
2-5 mode multi utilisateur (réseau, mode graphique etc...)
6 reboot
FHS (File Hierarchy Standard)
/ (root)
/boot : kernels, initrd...
/bin : binaires essentiels (mv, cp...)
/dev : devices (/dev/mouse, /dev/sda1...)
/etc : fichiers de configuration et scripts de démarrage
/etc/X11 : fichiers de configuration du serveur X
/home : home directories (répertoires utilisateurs)
/lib : librairies essentielles
/media : périphériques montés (CD, clé USB)
…
/root : home directory de root
/sbin : binaires systèmes essentiel (route, mount, …)
/tmp : fichiers temporaires
/usr : /usr/bin, /usr/sbin, /usr/include, /usr/lib
/var : variable files (/var/apt/cache/archives, /var/dpkg/lock...)
Les devices
Chaque périphérique est associé à un device dans /dev
/dev/sda (/dev/sdb, …) ; /dev/sda1 ; /dev/sda2
/dev/hda
/dev/mouse, /dev/dsp
/dev/cdrom /dev/cdrom0
/dev/null, /dev/stdin, /dev/stdout, /dev/stderr
Le partitionnement
Windows
1 partition pour le système (NTFS en général)
Éventuellement 1 partition de données (NTFS en général)
GNU/Linux
1 partition pour le système / (compter 10Gio en ext4 en général)
1 partition de swap (1 Gio en swap)
Éventuellement 1 partition de données séparée de /, /home, en général en ext4
Les systèmes de fichiers
NTFS / ntfs-3g
FAT32 / vfat
ext4
Windows
Lit
Écrit
Lit
Écrit
-
Linux
Lit
Lit
Lit
Écrit
Remarques
Fragmente
Droits
Journalisation
d'erreurs
Pas de droits
Fragmente très peu
Pas de lien symbolique Droits
Taille limite
Liens symboliques
Journalisation d'erreurs
Écrit
Écrit
Les partitions : sudo fdisk -l
Disk /dev/hda: 40.0 GB, 40020664320 bytes
255 heads, 63 sectors/track, 4865 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x802b81ca
Device Boot
/dev/hda1
*
/dev/hda2
/dev/hda3
swap / Solaris
Start
1
1276
4741
End
1275
4740
4865
Blocks
10241406
27832612+
1004062+
Id
7
83
82
System
HPFS/NTFS
Linux
Linux
Id
b
System
W95 FAT32
Disk /dev/hdb: 82.3 GB, 82348277760 bytes
255 heads, 63 sectors/track, 10011 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x4707841a
Device Boot
/dev/hdb1
*
/dev/hda1
Start
1
/dev/hda2
End
10011
Blocks
80413326
/dev/hda3
/dev/hdb1
Travaux pratiques
TP1 : installation
TP2 : prise en main
TP3 : visite guidée
TP4 : les droits
TP5 : les paquets sous Debian (et distributions dérivées)
TP6 : shell (bases)
TP7 : réseau
(TP8 : la programmation C/C++ sous linux)
(TP9 : STL)
TP10 : shell (algo)
TP11 : LVM
TP12 : apache
TP1 : installation
Télécharger l'iso d'ubuntu ou de kubuntu
http://www.ubuntu-fr.org/telechargement
Vérifier la somme md5
Graver le CD
(Réduire les partitions windows)
Installer ubuntu
Lancer ubuntu !
TP2 : prise en main
Windows
Gnome
KDE3
KDE4
firefox / IE
firefox / epiphany
firefox / konqueror
idem
thunderbird / outlook
thunderbird /
evolution
thunderbird / kmail
idem
pidgin, msn...
pidgin / empathy
kopete
idem
Lecteur multimédia /
vlc
rythmbox, totem, vlc
amarok, kaffeine, vlc, amarok2, gwenview
kmplayer
Commande MS DOS gterm
konsole
konsole
Explorateur
nautilus
konqueror / dolphin
konqueror / dolphin
Bloc notes
gedit
kwrite / kate
idem
Suite MS office /
openoffice
openoffice
koffice / openoffice
idem
Live update
synaptic
adept
idem
Adobe reader / fox it
reader
evince
kpdf
okular
La philosophie sous GNU/Linux
L'intelligence est le moins possible dans l'interface graphique
L'interface se base le plus possible sur des programmes en ligne
de commande
Scripter un programme
Rôle de l'UI (User Interface) : convivialité et ergonomie
La ligne de commande permet souvent d'aller plus loin et plus vite
que l'interface graphique
Exemple : kdevelop se base sur g++ et gdb
Voir TP shell
Voyons à présent le décor et l'envers du décor
UI vs ligne de commande
Où trouver l'information ?
La documentation embarquée
Les pages de man, apropos, l'autocomplétion
L'aide KDE / gnome
L'option --help
La documentation en ligne
http://doc.ubuntu-fr.org/
man + mot clé (commandes linux, fonctions C...)
Sites dédiés. Par exemple pour la STL : http://www.sgi.com/tech/stl/
Avec un moteur de recherche !
Listes, bug reports
Forum de la distribution, forums spécialisés
Les pages de man
NOM
Conventions linux :
echo - Afficher une ligne de texte.
SYNOPSIS
Commande en minuscules, [-p] : optionnel
--pouet : option longue
-p : option courte (chaînable)
echo [-neE] [message ...]
echo {--help,--version}
DESCRIPTION
Cette page de manuel documente la version GNU de echo.
La plupart des shells ont une commande intégrée ayant le même nom et
les mêmes fonctionnalités.
echo écrit chaque message sur la sortie standard, avec une espace
entre chacun d'eux, et un saut de ligne après le dernier.
Sections de man : man 1 write, man 2 write...
Le man indique le rôle d'une fonction et de ses options
Il précise les commandes ou fonctions connexes
TP3a : manipuler des fichiers
Le terminal, les tty
cd, ls, pwd, cp, mv, mkdir, rm, rmdir,ln
touch, file, cat
Chemins particuliers
Absolus : ~ /
Relatifs : . ..
Exercice
Créer /tmp/a/b/c, puis /tmp/a/b/c/d.txt, puis /tmp/a/b/c2/
Copier d.txt dans /tmp/a/b/c2/
Supprimer /tmp/a/b/c
Créer un lien vers /tmp/a/b/c2 dans le home directory
Créer e.txt dans /tmp/a/b/c2/. Que ce passe-t'il dans le home ?
TP3b : manipuler des périphériques
Regarder /etc/fstab
Expliquer pourquoi les devices ne sont pas référencés sous la forme /dev/sd*
Parenthèse
udev : peut renommer un device au moment ou celui-ci est branché
hal : notifie l'utilisateur qu'un périphérique est branché
usbdev, applet de périphérique KDE4, gvfs...
Commandes de base
df, du
dmesg
fdisk, cfdisk, mkfs, lspci, lsusb, dmidecode, hdparm
mount, umount
reboot, halt
Monter une clé dans /media/usb. La formater en fat32.
TP4 : les droits
La notion de droits sous GNU/Linux est fondamentale
Distribution des rôles : seul root peut administrer la machine
Sécurisation : programmes malveillants
Confidentialité : accès restreint à un répertoire ou à un device (ex: /dev/dsp)
rwxrwxrwx
Propriétaire, groupe, tout le monde
Read Write eXecute
root, sudo, su
Les profils et les groupes
/etc/passwd, /etc/shadow, /etc/group
groups, whoami, passwd, (yppasswd, ypcat)
addgroup/groupadd, adduser/useradd, userdel, usermod, sg
chown, chgrp
Les droits dans /etc/fstab
Le gestionnaire de paquet apt
Récupère la liste des mises à jours (update)
Interroge les dépôts configurés dans /etc/apt/sources.list
/var/lib/dpkg/lock
Corrige l'arbre de dépendance
http://packages.ubuntu.com
Télécharge les paquets
fichiers .deb
/var/cache/apt/archives
Déploie la mise à jour
dpkg -i, dpkg --purge
(Re)configure le paquet
dpkg-reconfigure, dpkg --configure -a
TP5 : installons des paquets
Avec adept ou synaptic : installer apt-file
Avec aptitude ou apt-get : installer nmap
aptitude en mode interactif
rose : supprimer; cyan : mettre à jour, vert : installer
update (u), upgrade (U), go (g), quitter (q)
installer (+) désinstaller (-) purger (_)
trouver (/), suivant (n), précédent (p)
deborphan, vider le cache
apt-file, apt-cache
Parenthèse : tar, ./configure, make && make install
Un peu de shell
Les flux
>, >> écrire dans un fichier
2>, 2>>, 2>>&1 rediriger stderr
< lire un fichier
cat < pouet.txt
Les pipes | : chaîne les commandes
wc -l pouet.txt
cat pouet.txt | wc -l
sort, cut, grep, xargs, uniq, wc
TP6 : shell
Compter dans /etc tous les fichiers finissant par « .conf »
Chercher dans /etc les fichiers dans lesquels figure la chaîne
/dev/sda
grep wc
Écrire l'équivalent de dpkg --get-selections en utilisant juste :
grep, (uniq, cut)
Compter dans /etc/fstab le nombre de ligne contenant /dev/sd*
find, (grep, wc)
dpkg -l, grep, cut
Supprimer les paquets fanés ; supprimer les paquets « rc »
deborphan xargs dpkg grep cut
Le réseau sous GNU/Linux
Administration
Commandes de base
/sbin/ifconfig, /sbin/iwconfig, /sbin/iwlist
dhclient
/sbin/route
ping
host, nslookup, /etc/resolv.conf, /etc/hosts
nmap
Configuration
/etc/network/interfaces, network manager
Transfert
lftp
ssh, scp, fish
TP7 : réseau
Vérifier le fingerprint du serveur ssh :
–
ssh-keygen -lf /etc/ssh/ssh_host_dsa_key.pub
Configurer un utilisateur mando (useradd, passwd)
Configurer une clé ssh :
http://prendreuncafe.com/blog/post/2005/08/29/262-installer-sa-cle-ssh-sur-un-serveur-distant
ssh-add
Écrire le script shell suivant
Lister les fichiers dans /home/mando situé sur la machine d'un stagiaire et
stocker le résultat dans un fichier à l'aide de ssh
Transférer ce fichier avec scp
Supprimer le fichier créé sur la machine distante
Les services
Les processus, les PID et les démons
ps
top
kill, killall
Visite dans /etc/init.d
/etc/init.d/ssh : le serveur ssh
/etc/init.d/gdm ou /etc/init.d/kdm : le gestionnaire de connexion graphique
Comment réparer son serveur X (tty, dpkg-reconfigure)
/etc/init.d/apache2
/etc/init.d/proftpd
/etc/init.d/mon_service [start|restart|stop...]
service mon_service [start|restart|stop...]
TP8a : Développer sous GNU/Linux
Sous debian les paquets de développement sont postfixés -dev
Installer gcc et g++
Installer make, vim
Installer gdb, valgrind
Installer une librairie (par exemple boost)
Installer un IDE (kdevelop, anjuta)
Quelques librairies célèbres
libstdc++, boost
QT, gtk, SDL
openGL
pcre
TP8b : Développer sous GNU/Linux
Écrire un tic tac toe
Le compiler à la main et l'exécuter
gcc -W -Wall -c module.c
gcc -W -Wall main.c module1.o module2.o main.c -o binaire
Écrire un makefile
Makefile automatique
parenthèse sur automake et autoconf
gdb
Erreur de segmentation : r binaire, bt
Débogage pas à pas : b n s p
valgrind
Les templates
Les templates
L'opérateur ::
typename
La STL
std::vector<T>
std::list<T>
std::set<T>
std::map<K,T>
Les flux : std::ifstream, std::ofstream, ...
Callback vs visiteurs, foncteurs
g++, gSTLfilt
TP9 : STL
Exercice 1
Lire un fichier tabulé nom prénom
Afficher tous les contacts
Rechercher les contacts dont le nom de famille et Durand
Afficher le nombre de contacts
Exercice 2
Lire dans un répertoire des fichiers de contact au format :
−
NOM
−
PRENOM
−
AGE
Écrire une interface en mode texte permettant de retrouver les personnes pour
un âge, un prénom, ou un nom donné
TP10 : shell (algo)
Créer un script shell qui demande le prénom et qui répond bonjour.
Exemple :
prénom ? Marc
Bonjour Marc !
Créer un script shell qui prend un paramètre un entier positif n. Écrire
un carré de n caractères sur n caractères. Exemple :
****
****
****
****
LVM (Logical Volume Manager)
Permet de s'abstraire des
partitions physiques
une donnée peut être stockée
à cheval sur plusieurs disques
/ partitions.
Physical volume
/dev/sda1
redimensionnement aisé
pas de limites sur le nombre
de partitions
/dev/sdb2
/dev/mda1
groupe de volume vg0
lvol1
lvol2
lvol3
toto
Terminologie
pv : physical volume
vg : volume group
lv : logical volume
Logical volume
Au final, on manipule /dev/vg0/toto (ou /dev/mapper/vg0-toto)
RAID logiciel
RAID1 établi sur
deux disques
RAID5 établi sur
quatre disques
A0
A1
A0
A0
A0
B0
C0
P0
A2
A3
A1
A1
A1
B1
P1
D1
A4
A5
A2
A2
A2
P2
C2
D2
A6
A7
A3
A3
P3
B3
C3
D3
RAID0 : volume agrégé par bandes
Pas de redondance :
- Pas de perte d'espace
- Très performant en lecture/écriture
- La perte d'un disque est fatale
RAID1 : disque en miroir
Redondance :
- Perte d'espace ((n-1)/n %)
- Supporte la perte de n-1 disques
RAID5 : volume agrégé par bandes
à parité répartie
Bits de parité :
- Performances en lecture
équivalentes au RAID0
- Performances dégradées en écriture
- Surcoût en place minimal (1/(n-1) %)
- Requiert au moins 3 disques
- Reconstruction longue
Exemple LVM + RAID
/dev/sda1
500Mo
/dev/sda2
500Mo
/dev/sda3
79Go
Disque a
80Go
/dev/sdb1
500Mo
/dev/sdb2
500Mo
/dev/sdb3
79Go
Disque b
80Go
/dev/sdc1
500Mo
/dev/sdc2
500Mo
/dev/sdc3
79Go
Disque c
80Go
swap
RAID1
/dev/md0
(1*500Mo)
RAID5
/dev/md1
(2*79Go)
LVM vg0
/dev/sd*1
Swap
1.5Go
/dev/md0
/boot
500Mo
ext3
/dev/vg0/racine
/
10Go
ext3
/dev/vg0/home
/home
148Go
ext3
Ce que
l'on
manipule
dans
/etc/fstab
TP11 LVM RAID
Faire une installation calquée sur cet exemple :
LVM
http://doc.ubuntu-fr.org/tutoriel/installation_raid_lvm
Physical volume : pvcreate, pvscan, pvdisplay
Volume group : vgcreate, vgremove, vgreduce, vgextend, vgrename, vgdisplay,
vgmknodes, vgchange
Logical volume : lvcreate, lvremove, lvreduce, lvextend, lvrename, lvdisplay...
ext2/3/4 : e2fsck, resize2fs
RAID
mdadm, mdstat
/etc/mdadm.conf
Apache2
Serveur http/https. Qui dit serveur dit service !
Apache2 : 2 multi processing module (mpm) :
prefork : permet d'utiliser des librairies non thread safe
worker : gestion des threads (recommandé).
Décomposé en modules apache :
pam, php5, perl, python, bw... : a2enmod, a2dismod
Configuration : relancer apache2 en cas de modification
essentiellement via /etc/apache2/apache2.conf
via des liens symboliques (voir /etc/apache2/[mods|sites]-[available|enabled])
−
Un serveur apache, plusieurs sites (les vhosts) : a2dissite, a2ensite
−
A priori rangés dans /var/www/htdocs/...
TP12 : apache
Installation d'apache et de ses modules
http://doc.ubuntu-fr.org/apache2#installation1
lancer apache, utiliser nmap etc...
visite des fichiers de configuration
Installer et configurer php5
créer une page /var/www/htdocs/mon_site/index.php qui écrit l'heure quand on
s'y connecte
créer une page admin.php dans /var/www/htdocs/mon_site/admin
Restreindre l'accès via htaccess au répertoire admin
http://www.infres.enst.fr/~danzart/frames/htaccess.html