__ __ ___ __ __ __ __
| | | | | \ | | | | | | | |
| | | | | \ | | | | | \/ |
| | | | | \| | | | \ /
| |__| | | |\ | | | / \
| | | | \ | | | | /\ |
|________| |__| \___| |__| |__| |__|
Installation Configuration Administration
unix.txt 09/04/2004
maregeneration
####################
# HISTORIQUE #
####################
PARTIE 1 - CONCEPTS FONDAMENTAUX D'UNIX
#######################################
NFS: Network File System noeud racine du systeme de fichiers "/". Les autres disques, partitions, cdrom, etc... se montent dans un point de montage quelque part dans la hierarchie des repertoires (sur le disque contenant la partition racine). On utilise mount. ex: mount /dev/fd0 -t auto -o default,user,noauto /mnt/floppy mount /dev/cdrom -t iso9660 -o defaults,ro,noauto /cdrom mount /dev/sr0 -t iso9660 /mnt/scsicd mount /dev/hda5 -t vfat -o w,user,noauto /mnt/hard_disk_master_part5 umount /dev/fd0 !!: le repertoire de montage doit exister (ex mkdir /mnt/scsicd)
Il est possible d'explorer different systemes de fichiers; les differences sont gerees en coulisse.
Le NFS possede 4 blocs:
Chaque systeme de fichiers possede un inode racine qui correspond au point de montage du systeme de fichiers par rapport au systeme racine ( mount ). Un repertoire est une liste de noms associes a des numeros d'inodes. (ls -ai) inode:
Les pilotes permettent de rendre le noyau independant du materiel. Ils se trouvent dans /dev. Ils peuvent etre charges en permanance, ou lorsqu'ils sont utilises. Il existe 2 types de pilotes; bloc (hd) et caractere (reseaux modem). Avec ls -l /dev on voit brw- ... pour un pilote de type bloc. Les pilotes bloc utilisent un tampon memoire contrairement aux pilotes caractere. Avant la date, on voit 2 numeros qui correspondent au major(type) / minor(no) device number. les pilotes les plus utiles:
Plusieur processus peuvent tourner simultanement, grace au noyau qui gere chacun d'entre eux. un processus parent peut lancer un processus fils avec fork(). avec ps -f on trouve le PID (Process ID) et PPID (Parent Process ID). 9 etats sont possibles pour un processus ( cf p49 ). Si un processus est en attente d'un signal, il peut etre transferer en swap(dd) pour gagner de la RAM. ps -t tty1 -f permet de killer un processus sur une autre console. top permet d'afficher l'activite du systeme (on quitte par q).
Systeme de pagination: permet le transfert de pages de la RAM vers la swap, et donc, un processus peux utilise plus du memoire que la RAM. En effet, il n'est plus obligatoire de le charger entierement. Plusieur signauds peuvent etre interceptes par les processus. On peut les creer par la commande kill. On affiche les pid avec la commande ps .
Unix permet de construire des systemes et des applications a partir d'une serie de processus indépendants, tout en atteignand un haut niveau d'integration.
Methode d'un fichier de donnees: Un processus uucico cree un fichier verrou pour disposer d'un acces exclusif a un perpherique (modem). Le programme uucp (Unix To Unix Copy) cree des fichiers de donnees qui seront rapatries.
Methode du pipe: Un pipe est un connecteur permettant de reunir un flot de donnees en sortie, a un flot de donnees en entree d'un autre processus, selon un ordre FIFO ( first in, first out). ex: ls /usr/bin | more. Dans un programme c'est pipe() (cf p59). On peut egalement utiliser mknod().
Methode System V IPC: La commande msgget() permet de l'acces a une file d'attente de messages externe via une cle choisi au prealable. msgrcv() et msgsnd() permettent de recevoit et d'emettre ces messages. Les programmes peuvent ainsi recevoir des signaux directement, plutot que de scruter periodiquement une application. Si une appli connait l'identifiant de la file, msgctrl() permet l'acce et la modification de la file. ipcs permet de recuperer les infos sur plusieurs files en cours. Le system V IPC posse des problemes de securites car la cle peut etre devinee.
Methode de la memoire partagee: L'acce a une memoire partage externe se fait par shmat(), et shmget(). shmdt() detache le processus de la region memoire pour evite que cette memoire soit efface quand le processus s'arrete. Par effacer ce segemt il faut shmctl().
Les semaphores permettent d'arbitrer les processus qui partagent de la memoire. voir semop(), semget(), semctl()
Pour naviguer entre les repertoires utilisez ls et cd (ex ls -al /) ls renvoit un masque d'informations au format octal sur chaque elements ex: drwxr-xr-x 4 fenix fg 1024 Mar 22 15:36 f1
première lettre (type): autres lettres (attributs) - fichier ordinaire - non selectione d dossier r lecture possible l lien w ecriture possible c peripherique en mode caractère. x execution possible pour fichiers b peripherique en mode bloc. acces interdit pour dossiers p tube s exec avec droit du proprietaire f file t code du prog en swap ex /tmp seul user peut supprimer
mode octal: r=4 w=2 (x,s,t)=1 ex: r-x=4+1=5 ex fichier -rwxrwxr-- -> (0774)o (octal utile pour la commande chmod) - rwx rwx r-- user(u) group(g) other(o) Ici tout acces est possible sauf pour les autres, qui n'on pas les droit d'ecriture et d'execution. Il existe 3 autres bits de poids fort set-uid(4), set-gdi(2), sticky bit(1) lorsque set-uid est actif, dans user le x actif devient un s, et S si inactif. lorsque set-gdi est actif, dans group le x actif devient un s, et S si inactif. lorsque sticky est actif, dans other le x actif devient un t, et T si inactif.
Le 4 corespond au nombre d'inode, fenix a l'user, fg au groupe de fenix, 1024 la taille, etc ... Les fichiers commencant par un . correspondent aux fichiers caches.
dans le système de fichier UNIX, tous les répertoires ont un rôle (cf chap5):
sh: le Bourne shell existe depuis le debut d'Unix. Il n'a pas le controle de job, ni l'edition de commande, ni l'historique de commande. csh: c-shell. Historique, jobs, edition limitee. Les script proche du c ne sont pas tres portable. ksh: Korn shell. Il reunit le meilleure de sh et csh et il est compatible avec les script sh. Il possede les alias et la v1993 est tres puissante. bash: Bourne Again shell. pareil que ksh mais entierement libre. tcsh: pareil que csh mais supporte l'edition de commande. pdksh: mise en oeuvre du domaine public de ksh. zsc: inspire de Bourne et Korn.
sh: informations de configuration: /etc/profile, $HOME/.profile variables: HOME, PATH, PS1($), PS2(>), IFS(Internal File Separator) ex: PATH=/bin:/$HOME:.
ksh: informations de configuration: /etc/profile, $HOME/.profile, .kshrc (=$ENV) variables: sh +: ERRNO, LINENO (ligne du script en cours), OLDPWD (cd -), PWD, RANDOM (0->32767), HISTFILE, HISTSIZE (info historique commandes).
tcsh: informations de configuration: /etc/csh.cshrc, /etc/csh.login, /$HOME/.cshrc, $HOME/.login, $HOME/.logout variables: cwd, = pwd, home, HOME, ignore(Ctrl-D), noclobber(ne pas ecraser >) noglob(*), path(separ par, ), PATH
ligne de commandes: Il est possible de saisir plusieurs commandes a la foi par ";". ex: mv fic1 fic2 ; ls -l; cat fic1 fic2 | sort | uniq
script shell:
Les parametres du script sont recuperees dans les variables 0 a 9 ex: ($1 .. $9) ainsi que $# (nb de params) et $* (chaine des params) (cf "structure while"). $0 est le nom de la commande. $$ affiche le pid de l'interpreteur en cour.
Peripheriques d'entree sortie:
Ce sont des fichiers, qui servent d'interface avec l'utilisateur.
Liste des metacaracteres:
* designe plusieurs caracteres inconnus ? designe un caractere inconnu \ desymbolisation, pour intraduire un caractere special [] liste ex [1,3,5,a-c] designe un des 6 caracteres 1,3,5,a,b,c > < sortie, entree vers un fichier ou un peripherique en mode overwrite >> << sortie, entree vers un fichier ou un peripherique en mode append | voir fifo pipe & execution en tache de fond ; separateur de commandes $? niveau d'erreur de la derniere commande 0 si ok, 1 si ko, et > 1 si erreur # commentaires ^ marqueur de debut de ligne, s'il est utilise en debut d'expression $ marqueur de fin de ligne, s'il est utilise en fin d'expression
Liste des racourcis clavier: (cf unixcom.txt; bg fg)
Alt Gr-Enter sauter une ligne dans l'interpreteur Ctrl-D fin de la saisie standard (ex cat) Ctrl-Z passer l'application en arriere plan (background, bg) fleche haut rappeler les commandes precedantes fleche bas rappeler les commandes suivantes
Il est recommander de travailler sous un compte utilisateur, et de se reloger en root (avec su) pour effectuer des taches administratives. La creation d'un utilisateur consiste a:
Une entree du fichier /etc/passwd: login:password:usernb:groupnb:user:home:shell
Une entree du fichier /etc/group: group:x:groupnb:user1, user2, ...
voir le fichier unixcom.txt
Il faut utiliser +caractere pour saisir un caractere reserve. caracteres reserve: ( ) [ ] / \ etc ... Alt Gras + Enter sert a sauter des lignes &2 sortie standard d'erreur | redirection d'entree sortie , pipe ou fifo
Operation Booleenes: && ET logique, || OU logique
ex: ls fic1 2> /dev/null > /dev/null && echo "fic1 existe" || \
echo "fic1 creer" && touch fic1
"\
voir bash.txt voir exemple.sh
Les variables sont automatiquement supprimes a la fin du processus.
-e si le fichier existe test -e fname -f si le fichier est normal test -f "~/fname" -h si le fichier est un lien test -h $0 -d si c'est un dossier test -d "$HOME/d1" -c si c'est un periph car test -c /dev/tty -b si c'est un perif bloc test -b /dev/lp0 -p si c'est un tube (fifo) test -p `echo toto | /dev/lp0` -r droit de lecture test -r f; if [ f -r ]; -w droit d'ecriture test -w f -x droit d'execution test -x f -s si le fichier est plein test -s f -z si chaine vide test -z "" -n si chaine pleine test -n "toto" -eq si int var egal test 0 -eq $i -ne si int var non egal test 0 -ne 1 -lt less than test 0 -lt 1 -gt greater than test 1 -gt 0 -le less or equal test 1 -le 1 -ge greter or equal test 0 -ge 0 ! NON test ! -s "$a" -a ET test -d f -a -x f -o OU test \(-d f -a -x f\) -o \(-d f2\)
[ -r f ] && echo "Le fichier f est accessible en lecture"
read stocke ce que rentre sur l'entree standard dans une ou des variables. ex: read v1 v2; more f | read line; Il est possible de lire sequentiellement les ligne d'un fichier: more f | \ #\ permet de sauter une ligne while read line do echo $line done eval 'echo operation terminee'
getopts permet l'analyse de la ligne de commande. set -x; en debut de script permet d'afficher les commandes avant de les executes set -; permet de revenir en mode normal set "a b c"; affecte $1 $2 $n $# $* . $IPS contient la liste des séparateurs. unset nom_fonction; désaffecte la fonction pushd; empile le chemin courant popd; dépile et affiche le chemin courant dirs; affiche la pile de dossiers alias ls="ls --color" ualias
Un herescript est le script qui est introduit, et qui se termine par le mot Fin nimporte quel mot peut etre utilise, mais en reigle generale, on utilise EOT.
Pour traiter des fichiers recherches.
Le nom awk vient des initiales des 3 concepteurs; Aho Weiberger Kernighan (C) . awk est un langage de recherche de motifs de type texte. Il est concu pour travailler sur fichiers texte dans lesquels chaque ligne de texte correspond a un enregistrement ou a une entree (ex /etc/passwd).
Effectue une recherche de 100 sur la 4 eme colone, et affiche les colones 1 et 5 pour les lignes trouvees. Le cractere delimiteur est specifie par l'option -F .
Perl (Practical Extraction and Report Language) execute ces scripts en 2 etapes. Il compile le script, puis l'execute (comme du java). Perl reunit les concepts d'awk, de sed, et de bash. Il existe de nombreux paquetages complementaires; creation de scripts CGI, gerer les formulaires web, verifier les liens html, automatiser l'envoi des mails et gerer les fonctions reseau. Perl existe aussi sous windows, il contient la plupart des fonctions des librairies standard du C. Perl est le plus populaire des langages script.
Python est un langage interprete et oriente objets.
PARTIE 2 - UNIX VU DE L'INTERIEUR
#################################
Il est indispensable d'etudier la documentation technique de votre noyau Unix. Un module est un code qui peut etre charger dynamiquement dans le noyau. En reigle generale on prefere installer en interne tous les codes indispensable au lancement du systeme; et en modules tous ceux qui peuvent se charger plus tard. Le fichier de configuration du noyau contient tous les paramettres du noyau.
Note: Il est conseiller de sauvegarder l'ancien noyau, ainsi que ses modules.
les sources doivent se trouver dans /usr/linux ou dans /usr/src/kernel*. le noyau compile dans ./arch/i386/boot/bzImage le noyau du systeme dans /boot/vmlinuz le fichier de configuration dans ./.config les modules dans /bin/modules/kernel
Installation des sources:
les sources doivent se trouver dans /usr/src/sys le noyau compile dans ./arch/i386/boot/bzImage le noyau du systeme dans /boot/vmlinuz le fichier de configuration dans ./i386/conf/GENERIC les modules dans /bin/modules/kernel
Installation des sources:
Creation d'une disquette de demarrage: Compilation: 1) vi /usr/src/sys/i386/conf/MYKERNEL; # ou ee: editeur pour d 2) /usr/sbin/config MYKERNEL; cd ../../compile/MYKERNEL; 3) make depend; make; make install;
A la mise sous tension de la machine, le code BIOS (Basic Input Output System) est execute. Il recherche alors la memoire, la carte graphique, les controleurs de disque dur, le SCSI. Puis c' est le code POST ( Power On Self Test ) qui s'execute. Celui ci teste l'execution du BIOS, le controleur DMA (Direct Memory Access), l'IT (Interruption). Suivant l'ordre de recherche sur les lecteurs, le systeme essaye de lancer le secteur de boot, sur le premier secteur de donnees (MBR, Master Boot Record ou boot sector). Le MBR contient l'identifiant de la partition contenant le systeme d'exploitation, une table de partition, etc ... Lors du demarrage d'UNIX, une serie d'initialisations sont effectues avant le chargement du noyau, leur pid est 0. En suivant, le programme init se lance en pid 1. Il constitu la racine de tous les processus suivants ( cf pstree ). Tous les scripts de demarrage se trouvent dans le repertoire /etc/rc.d/init.d/ . Le niveau d'execution du systeme est specifie dans /etc/inittab (5 pour Mandrake et 2 pour debian). A chaque niveau (run-level) est associe un repertoire /etc/rcX.d ou 'X' est le run-level. Ces dossiers contiennent des liens vers des script de /etc/init.d . Chaque lien du dossier rcX.d sera executer. /etc/initscript est execute en priorite s'il existe. Tout les scripts S* sont lances par start, K* par kill, S* par stop. Au moment du boot il est possible de donner le parametre init=X, pour fixer le niveau d'execution. Le script d'amorcage monte les systemes de fichier contenus dans /etc/fstab , apres avoir charges les modules du noyau avec /sbin/depmod -a . Enfin il lance /sbin/init.d/boot.d .
LILO (LInux LOader) permet de choisir un systeme de fichier a executer. C'est un petit programme qui se place dans le MBR. Pour l' installer il suffit de paramettrer /etc/lilo.conf et de lancer la commande lilo .
Lors du demarrage, il faut appuyer plusieurs fois sur 'Shift' Droit pour faire apparaitre l'invite. Avec 'Tab' on peut afficher la liste de labels reconnus. Pour supprimer LILO du MBR: fdisk /MBR sous dos, et fdisk /NEWMBR sous OS/2 . Sous unix la restauration du MBR de sda (scsi drive a) peut se faire ainsi:
Pour chaque partition creee sur un disque dur, il faut creer un systeme de fichiers. Si vous disposez de plusieurs disques, il est possible de mettre en place un systeme RAID (Redundant Array of Inexpensive Disks), pour augmenter la fiabilite du systeme. Il est conseiller de creer une partition par dossiers critique. /, /var, /opt, /tmp, /usr, /home. Pour une station independante, une partition suffit car l'administration est simplifiee. Les repertoires /, /etc, /kernel, /lkm, /modules, /stand, /proc, /sbin, /bin, /boot et eventuellement /root doivent se trouver dans la partition racine. Pour un serveur il faut 200M car sinon, certaines applications refuseront de s'installer.
Le choix des partition est guidee par l'utilisation de la machine. Un dossier succeptible de devenir tres volumineux doit etre mi sur une partition separee pour eviter le debordement, et l'ecroulement du systeme.
exemple de repartition et de choix de partitions pour un disque de 10 Go:
Profil Developpement 0,5 2 3 1,5 3 Profil serveur de messagerie 0,5 1 2 2 3 1,5 Profil serveur Web 0,5 1 4 1,5 3 Profil pour un SGBD Oracle 0,5 1,5 4 1 3
La commande de création de systèmes de fichiers est newfs. Voici les options :
-N affiche les parametres du systeme de fichier sans le créer. -T récupère les informations sur le fichier /etc/disktab -a maxconfig contrôle le nombre de blocs adjacents pour les opération d'écriture différée -b block-size contrôle la taille unitaire des blocks (puissance de 2). -f frag-size contrôle la taille d'un fragment de block (puiss de 2 1024). Une taille de block égale à la taille du fragment gaspille l'espace disque. -i bytes per inode contrôle la densité des inodes -m free space % définit le pourcentage d'espace interdit à l'utilisation normale et réservé au super-utilisateur. -o opt. Method "space" ou "time" : demande au système de fichier de privilégier la vitesse d'affectation des block ou la réduction de la fragmentation.
Un disque dur est structuré en pistes, chaque piste contenant des secteurs. La taille habituelle d'un secteur est de 512 octets. Les systèmes de fichiers Unix autorisent des tailles de blocs variables.
25 millisecondes