Академический Документы
Профессиональный Документы
Культура Документы
Multics
UNICS
Unix TSS V1
Unix TSS V2 V3
Unix TSS V4 V5
Unix TSS V6
Linux Solaris
1965
1969
1972
1973 1973
1974 1974
1976 Unix BSD Free BSD Net BSD Open BSD MacOSX
usr
etc
home
var
dev
bin
lib
passwd
C1
C2
.. .. .
Un mcanisme de protection identification des utilisateurs par mot de passe protection des fichiers Un super-utilisateur Une vision simplifie par l'utilisateur des entres-sorties Les priphriques sont reprsents par des noms de fichier, et peuvent tre utiliss comme des fichiers ordinaires) Le choix dun langage de commandes : Les shells.
10
&tilitaires
Le noyau gre les tches de base du systme : -L'initialisation du systme -La gestion des ressources -La gestion des processus -La gestion des fichiers -La gestion des Entres/Sorties Lutilisateur communique avec le noyau par l'intermdiaire d'un SHELL. Les shells sont aussi des langages de commandes et de programmation. Les shells les plus connus sont : BOURNE SHELL (sh) KORN-SHELL (ksh) C-SHELL (csh) TC-SHELL (csh) Les utilitaires sont des outils d'interfaage avec le systme, de programmation et de communication.
11 12
1*1,I-"
Cest un petit programme qui rside en mmoire morte. Quand vous allumez l'ordinateur, les instructions du BIOS (Basic Input Output System) sont charges en RAM depuis un composant ROM situ sur la carte mre et dans lequel elles sont disponibles de faon permanente. Ces instructions indiquent au processeur o est situ le systme d'exploitation et comment le charger en RAM. Pour permettre au systme d'exploitation et aux applications de fonctionner sur un PC, le BIOS fournit un niveau standard de services que le systme d'exploitation peut utiliser pour dialoguer avec le matriel. son tour, le systme d'exploitation fournit des services standards aux applications qui leur permettent de fonctionner.
15 16
Avec LBA, chaque bloc a un numro unique et le niveau physique du disque n'est pas visible par le systme d'exploitation. Par exemple, un disque de 2048 cylindres, 16 ttes et 63 secteurs sera dtect avec 1024 cylindres, 32 ttes et 63 secteurs. Dans la traduction, si le numro de secteur est infrieur 1024*16*63, le disque dur fait moins de 528M. Lorsque le numro de secteur est suprieur 1024*16*63, le nombre de ttes est fix 32. Pour que tout fonctionne correctement, ce mcanisme doit tre support par le BIOS, l'OS et le disque IDE.
17 18
Limitation 63 16 1024
136.9G 528M
Exemples : hdparm -g /dev/hda /dev/hda: geometry = 3648/255/63, sectors = 58605120, start = 0 hdparm -C /dev/hda /dev/hda: drive state is: active/idle
19
20
2* *on%igurer un
Objectifs
ode son
et une carte
Assurez-vous des conditions de compatibilit de raccordement des priphriques (en particulier pour les modems qui ne sont pas "Windows"), vrifiez que le modem et la carte son emploient des adresses uniques et correctes d'IRQ, d'I/O, et de DMA, si la carte son est PnP, installez et dmarrez sndconfig et isapnp, configurez le modem pour un "dial-up" clavier, configurez le modem pour le protocole PPP | SLIP | CSLIP connection, paramtrez le port srie pour 115.2 Kbps.
22
2.1 Mode
Un modem est un priphrique qui permet d'envoyer des donnes numriques sur une ligne tlphonique. Il existe quatre types de modems :
Externe : connect par le port srie. USB : connect par un port USB. Interne : carte ISA ou PCI. Intgr : directement intgr la carte mre.
La plupart des nouveaux modems sont Plug and Play et vous avez diffrents moyens de les configurer :
Le pilote srie le fait pour vous. Utiliser le programme isapnp. Laisser le BIOS PnP faire la configuration.
Pour afficher les informations sur un priphrique ISA, utilisez pnpdump. Cet utilitaire peut afficher les informations d'une carte PnP (ports d'entre/sortie, interruptions et canaux DMA) que la carte souhaite ou doit utiliser. Pour configurer un priphrique ISA, utilisez isapnp. Pour plus d'informations, lisez la page de manuel du fichier isapnp.conf.
23
24
Paramtres habituels : -port: numro de port. -irq: numro IRQ. -uart: Type d'UART autoris (aucun, 8250 (vitesse=19200bit/s), 16450 (vitesse=38400 57600bit/s), 16550 (vitesse=115 kbit/s). (40 broches) -autoconfig: Demande au kernel de dterminer l'UART, le numro IRQ,... -baud_rate: Bande passante de communication (maximum : 115200 octets/sec). Exemple : Pour obtenir des information sur les priphriques connects setserial -a /dev/ttyS* Pour dfinir la vitesse du port srie: setserial speed option Option: spd_hi (56ko), spd_vhi (115ko), spd_shi(230ko),
25
28
D.D
IDE: /dev/hdxy SCSI: /dev/sdxy O x prsente (a maitre, b esclave, c maitre, d esclave) (chacun possde au max 4 partitions primaires de 1 4 et 12 partitions logiques de 5 16 ) Exemple: La deuxime partition logique: /dev/hda2 /dev/hda5 /dev/hda6 Il existe 3 grands types dinterface SCSI: 1. SCSI-1: Interface 8 bits, 8 priphriques (en ralit 7), f=4,77Mhz 2. SCSI-2: 16 bits, 16 priphriques (15 en ralit) 3. SCSI-3: 32 priphriques.
29
4.1 Cartes PCI Toutes les cartes PCI sont normalement dtectes par le BIOS. Lors du boot, le BIOS vrifie l'espace de configuration PCI et dtecte tous les priphriques et les bridges. Pour tre sr que le BIOS a dtect tous les priphriques PCI, utiliser lspci. Vrifier les bridges, les fonctions et les priphriques spciaux. 4.2 Cartes ISA Toutes les cartes ISA sont aussi normalement dtectes par leur pilote respectif. Les utilitaires qui permettent de configurer manuellement les cartes ISA sont pnpdump, pnpisa et le fichier /etc/isapnp.conf. Le programme pnpdump permet d'afficher les informations sur les cartes ISA dtectes. Le programme pnpisa utilise un fichier de configuration /etc/isapnp.conf qui a la mme syntaxe que la sortie de pnpdump et qui permet de configurer n'importe quel paramtre d'une carte ISA
32
5.2 Interruptions Afin d'obtenir la liste de toutes les interruptions de tous les priphriques, on peut afficher le contenu du fichier /proc/interrupts l'cran. $ cat /proc/interrupts CPU0 0: 397517 XT-PIC timer 1: 7544 XT-PIC keyboard 2: 0 XT-PIC cascade 5: 0 XT-PIC usb-uhci, usb-uhci 8: 2 XT-PIC rtc 10: 2024 XT-PIC eth0, usb-uhci, PCI device 12: 19502 XT-PIC PS/2 Mouse .. 5.3 DMA Pour obtenir la liste de tous les canaux DMA (Direct Memory Access) ISA utiliss, afficher le contenu du fichier /proc/dma. $ cat /proc/dma 4: cascade
35
5*4 P*I
Pour obtenir la liste de tous les priphriques sur le bus PCI, afficher le contenu du fichier /proc/pci. $ cat /proc/pci PCI devices found: Bus 0, device 0, function 0: Class 0600: PCI device 8086:3575 (rev 2). Prefetchable 32 bit memory at 0xe0000000 [0xefffffff]. Bus 0, device 1, function 0: Class 0604: PCI device 8086:3576 (rev 2). Master Capable. Latency=96. Min Gnt=12. Bus 0, device 29, function 0: Class 0c03: PCI device 8086:2482 (rev 1). IRQ 10. I/O at 0x1800 [0x181f]. .
36
37
38
+,emple de -uestions
Quelle commande permet dafficher les messages de dmarrage du systme? A. mess B. dmesg C. bootmsg D. lsmsg 2. Comment afficher les cartes connectes sur le bus PCI? A. less /proc/pci B. pcidump C. lesspci 3. La commande permet de lister les priphriques USB prsents sur la machine. 4. Combien de priphriques peut on thoriquement connecter sur une interface SCSI-2? A. 32 B. 8 C. 15
42
1.
5. Quelle commande permet de dtecter les priphriques prsents sur les ports srie? A. lsserial B. setserial C. scantty 6. Quelle(s) commande(s) permet(ent) de dtecter les cartes son prsentes sur votre machine? A. lspci B. less /var/log/dmesg C. sndconfig D. less /etc/modules.conf 7. Comment est reprsent le priphrique IDE esclave du deuxime controleur? A. hda B. sdc C. hdc1 D. hdd 8. Le choix du priphrique de dmarrage de votre machine se fait A. dans le bios B. avec une option du chargeur de demarrage (boot loader) C. automatiquement 43
44
1*1 Partitions
Lorsque l'on fait une installation, il est ncessaire de crer au minimum deux partitions : / (systme de fichiers racine): partition contenant la distribution Linux. Espace de swap : partition permettant au noyau de faire tourner plus de processus que la RAM seule ne pourrait en supporter. Si plusieurs disques sont disponibles, il est de bon ton de prvoir galement des partitions spares pour les rpertoires /usr et /home. Chaque partition contiendra un type de systme de fichiers (ventuellement tous diffrents) et pourra tre monte sur le systme actif dans l'arbre global des fichiers. Pour afficher la liste des systmes de fichiers actifs, utilisez la commande mount. $ mount proc on /proc type proc (rw) /dev/hda1 on /boot type ext2 (rw) shmfs on /dev/shm type shm (rw) La partition de swap n'a pas besoin d'un systme de fichiers. Le noyau pourra y accder en mode brut. 46
Si votre systme possde plusieurs disques, utilisez le plus rapide pour conserver la majorit de vos donnes.
/ Contient la plupart des utilitaires systmes qui ne sont pas souvent utiliss. Ils peuvent donc tre envoys sur le disque le plus lent. /var/log contient beaucoup d'informations de log. Cette partition est mieux sur un disque rapide. /usr est typiquement une partition spare. Nanmoins, la prvision d'utiliser de nombreux clients dmarrant de nombreuses applications graphiques pousse souvent mettre cette partition sur un disque rapide.
47
48
r:processes waiting for run time. b: processes in uninterruptable sleep. w: processes swapped out. swpd: virtual memory used (kB). free: Idle memory (kB). buff: Memory used as buffers (kB). si: Memory swapped in from disk (kB/s). so: Memory swapped to disk (kB/s). bi: Blocks sent to a block device (blocks/s). bo: Blocks received from a block device (blocks/s). in: The number of interrupts per second. cs: The number of context switches per second. us: user time, sy: system time, id: idle time.
49
50
Exemple de /etc/lilo.conf : # LILO global section boot = /dev/hda # Cible d'installation de LILO : le MBR vga = normal # (normal, extended, ou ask) read-only # Monte le systme de fichiers en lecture seule # LILO Linux section image=/boot/vmlinuz # Image charger label=linux # Nom de l'entre du menu root=/dev/hda1 # Partition racine pour le noyau initrd=/boot/initrd # disque en RAM # LILO DOS/Windows section other=/dev/hda3 label=windows # LILO memtest section image=/boot/memtest.bin label=memtest86
Exemple de menu.lst (fichier de configuration de GRUB): # GRUB default values timeout 10 # Dmarer le noyau par dfaut apres 10 secondes. default 0 # Noyau par dfaut. # Grub for Linux section 0 title GNU/Linux # Titre root (hd0,1) # /dev/hda2 systme de fichiers racine # Noyau et paramtres passer au noyau. kernel /boot/vmlinuz root=/dev/hda2 read-only initrd /boot/initrd boot # Grub for DOS/Windows section title Windows root (hd0,2) # /dev/hda3 makeactive chainloader+1
53 54
Une fois qu'une archive a t cre, elle peut tre compresse. Exemples: $ ls -l backup.tar -rw-r--r-- 1 rarrigon users 22773760 nov 10 11:07 backup.tar $ gzip -v backup.tar backup.tar: 53.8% -- replaced with backup.tar.gz $ ls -l backup.tar.gz -rw-r--r-- 1 rarrigon users 10507393 nov 10 11:07 backup.tar.gz $ gunzip backup.tar.gz $ bzip2 -v backup.tar backup.tar: 2.260:1, 3.540 bits/byte, 55.75% saved, 22773760 in, 10077846 out.
57
Beaucoup d'archives contiennent des fichiers d'information (README, INTALL) qui expliquent comment le programme doit tre compil et install. Les fichiers Makefile.in et configure.in sont les fichiers de base servant produire le Makefile final. Le fichier configure est gnralement un script qui va explorer le systme et produire un Makefile final. C'est pourquoi il est courant que l'installation d'un programme partir des sources se rsume la suite de commandes : $ ./configure $ make $ make install La dernire commande demande gnralement les droits super-utilisateur (root) pour s'excuter avec succs.
59
60
Le (ic"ier 8etc8ld*so*con( est utilis par le systme pour indi-uer les 0entuelles autres localisations des .i.liot"-ues* 'our cr er un (ic"ier cac"e utilis par le c"ar/eur de liens$ utilise9 ldcon(i/* Le (ic"ier 8etc8ld*so*cac"e sera / ner * )e (ic"ier contient en (ait la liste des .i.liot"-ues trou0 es par le systme dans les r pertoires mentionn s par le (ic"ier 8etc8ld*so*con(*
61
!.2 41endance de +i+lioth$/ues. 'our a((ic"er la liste des d pendances d1un pro/ramme 4ou d1une .i.liot"-ue5 en termes de .i.liot"-ues parta/ es$ utilise9 ldd* ldd :;0dr< pro/ramme=.i.liot"-ue +,emple# > ldd ;d ;0 8.in8cp li.c*so*6 ?@ 8li.8li.c*so*6 40,400270005 8li.8ld;linu,*so*2 ?@ 8li.8ld;linu,*so*2 40,400000005 !.3 *hargeur de liens Le c"ar/eur de liens ld.so c"erc"e la .i.liot"-ue dont un pro/ramme a .esoin et la c"ar/e en m moire 67M* L1ordre de rec"erc"e de ld*so est #
LABLIC676DB'7EF Le (ic"ier cac"e 8etc8ld*so*cac"e Les r pertoires par d (aut 8li. et 8usr8li.*
62
5*1 4select
L1utilitaire 0ous permettant d1aGouter ou retirer (acilement des pa-uets sous Ae.ian est dselect* Il permet de #
)"oisir la m t"ode d1accs au, pa-uets$ Mettre H Gour la liste des pa-uets disponi.les$ ! lectionner les pa-uets -ue 0ous 0oule9 sur 0otre systme$ Installer et mettre H Gour les pa-uets d sir s$ )on(i/urer n1importe -uel pa-uet non encore con(i/ur $ A sinstaller les lo/iciels non d sir s*
Le menu interacti( de dselect permet l1aGout et la supression de pa-uets* !oye9 trs prudents lors de l1utilisation de ce pro/ramme$ 0ous ris-uerie9 d1endomma/er 0otre systme*
64
5*2 A1t0get
!i 0ous conaisse9 le nom du pa-uet -ue 0ous 0oule9 installer$ utilise9 apt;/et* Ious de0e9 au pr ala.le con(i/urer le (ic"ier sources*list* )e m3me (ic"ier est utilis lors-ue 0ous c"oisisse9 la m t"ode d1accs apt de dselect* Il se trou0e dans 8etc8apt* +,emple de (ic"ier sources*list # cdrom#8cdrom cdrom#8mnt8cdrom (ile#8mnt (ile#8de.ian 'our mettre H Gour l1in(ormation sur les pa-uets disponi.les # > apt;/et update 'our installer un pa-uet # > apt;/et install pa-uet 'our remettre H Gour automati-uement tous les pa-uets install s # > apt;/et up/rade
65
5*3 A1t0cache
'our trou0er le nom d1un pa-uet -ue 0ous 0oule9 installer$ utilise9 apt;cac"e* !es options principales sont #
add ; aGoute un (ic"ier pa-uet au cac"e source s"oJp%/ ; Montre -uel-ues in(ormations / n rales relati0es H un pa-uet stats ; Montre -uel-ues statisti-ues .asi-ues searc" ; Kait une rec"erc"e dans la liste des pa-uets H partir d1une re/e, s"oJ ; Montre un enre/istrement lisi.le du pa-uet depends L Montre les in(ormations de d pendances d1un pa-uet
> apt;cac"e searc" /imp .a.y/imp ; 7n icon editor in 'erl;E% .lac%.oo% ; MENO 7ddress Coo% 7pplet cupsys;dri0er;/impprint ; Mimp;'rint printer dri0ers (or )&'! escputil ; 7 maintenance utility (or +pson !tylus printers (ilm/imp ; 7 motion picture editin/ and retouc"in/ tool
66
6.2 Requtes RPM Il est possible d'interroger la base de donne RPM avec l'option -q. $ rpm -q -i apache L'option -i sert obtenir les informations sur les paquets L'option -l sert lister les fichiers contenu dans un paquet. $ rpm -q -l pciutils /sbin/lspci /sbin/setpci . L'option -f sert trouver le paquet contenant le fichier mentionn. $ rpm -q -f /sbin/lspci pciutils-2.1.9-58 -s: liste des fichiers avec informations sur les status. -d: ne liste que les fichiers de documentation. -a: Liste tous les paquets installs. 6.3 Commandes RPM Pour obtenir des informations sur un paquet ou un programme, utilisez rpmlocate. $ rpmlocate ipcs -q -i apache Searching for ipcs in rpm db: util-linux-2.11n-75: /usr/bin/ipcs /usr/share/man/man8/ipcs.8.gz Pour lister tous les paquets installs, utilisez rpmqpack. $ rpmqpack
69
'our installer les sources d1un pa-uet$ Goue9 la commande# > rpm ;i monpa-uet*src*rpm Les (ic"iers sources seront plac s dans 8usr8src8pac%a/es dans les r pertoires !'+) et !Q&6)+!* 'our compiler les sources$ Goue9 la commande# > rpm ;.a 8usr8src8pac%a/es8!'+)!8monpa-uet*spec Le r sultat de la compilation sera plac dans le r pertoire C&ILA*
70
+,emple de -uestions
Quelle fichier contient la liste des partitions qui seront montes au dmarrage? A. /etc/inittab B. /etc/fstab C. /etc/mtab 2. Quelle commande permet de voir toutes les partitions montes? A. mount -a B. df C. show mount D. du -m 3. Quelle variable contient les chemins daccs aux librairies du systme? A. PATH B. LD_LIBRARY_PATH C. LIBPATH D. USRLIB 4. Linux utilise une zone spcifique lorsque la mmoire est sature, cet espace sappelle le .
71
1.
5. A quoi sert la commande ldconfig? A. a prendre en compte les nouvelles librairies dont le chemin est contenu dans le fichier /etc/ld.so.conf B. a configurer les chemins des librairies de systme C. a prparer la compilation dun programme 6. Lorsque vous installez un programme partir de ces sources , ltape finale aprs avoir dcompress les sources, lanc le ./configure et compil le programme est 7. Quelles sont les extensions des fichiers qui sont compresss de diffrentes manires? A. .tar B. .g C. .gz D. .tgz E. .Z 8. Quelles commandes peuvent dcompresser un fichier .tgz? A. gunzip B. guntar C. tar D. gzip 72 E. tar xvf
9. Quelle commande qui permet de dsinstaller lilo ? A. lilo -u B. remove lilo C. uninstall lilo D. lilo r 10. Quelle commande qui permet dattendre 30 seconde avant le dmarrage du systme? A. lilo -t 30 B. lilo -d 30 C. lilo delay 30 D. lilo 30 11. Quelle option avec la commande lilo qui permet le reboot du systme? A. -R B. -S C. -T D. L
73
12. Quelle est la la commande qui permet de dsinstaller le fichier testking du systme Debian ainsi que ses fichiers de configuration? A. dpkg -r testking B. dpkg --remove testking C. dpkg --kill testking D. dpkg -R testking E. dpkg --purge testking 13. Quelle est le rle de la commande suivante : rpm -Uvh file A. le fichier rpm sera vrifier B. le paquetage install sera mise jour dans le fichier file avec une sortie verbose. C. le paquetage install sera mise jour avec le fichier file donnant une sortie verbose et ajoute ltat davancement. D. Erreur 14. Quelle commande affiche le changelog du paquetage install postfix? A. rpm Vc postfix B. rpm qpil postfix C. rpm --changelog postfix D. rpm q --changelog postfix E. rpm qa --changelog postfix 74
76
1*1 Partitions
Un support peut tre divis en plusieurs partitions. Les partitions sont habituellement cres lors de l'installation, mais elles peuvent aussi tre cres avec le programme fdisk ou d'autres utilitaires. Ceci permet de diviser le support en plusieurs partitions avec des systmes de fichiers spars et o des systmes d'oprations peuvent tre installs. Voir diapos 32
77
81
86
Checking extended filesystems To check extended filesystems consistency, use e2fsck. e2fsck [options] device Common options: -b: Use an alternate super block filename. -c: This option makes badblocks program to run and marks all the bad blocks. -f: Force checking even if the filesystem seems clean. -a or -p: Automatically repair. -y: non-interactive mode Examples: e2fsck -ay /dev/fd0 e2fsck -f /dev/hda2
88
92
Examples: umount -a # Unmount devices or dirs listed in /etc/fstab. umount /mnt # Unmount the filesystem attached to /mnt. umount /media/cdrom # Allow a user to unmount the CDROM if the following line is in /etc/fstab: /dev/cdrom /media/cdrom iso9660 ro,user,noauto,unhide
94
96
4*1 ?uotas
On a system, root can manage the useage of disk space per user and per filsystems. The two limits that can be setup are: The soft limit (soft =) specifies the maximum amount of disk usage a quota user is allowed to have. The hard limit (hard =) specifies the absolute limit on the disk usage a quota user can't go beyond it. There is also the possibility to setup a grace period that will enforce the soft limit only after an amount of time specified.
3) Check the setting quotacheck -v mnt quotacheck: Scanning /dev/fd0 [/home/yann/mnt] done quotacheck: Checked 6 directories and 1 files 4) Enable quota on the disk quotaon -av /dev/fd0 [/home/yann/mnt]: user quotas turned on 5) Customize the disk quota limits: $ edquota -u yann Disk quotas for user yann (uid 500): Filesystem locks soft hard inodes soft hard /dev/fd0 15 0 0 4 0 0 $ edquota -g yann $ edquota -t Grace period before enforcing soft limits for users: Time units may be: days, hours, minutes, or seconds Filesystem Block grace period Inode grace period /dev/fd0 7days 7days
99
103
106
7*1 Liens
Use link when: You want to create a pathname to a file Set a shorter or fixed pathname to a file To link one file to another, use ln. ln [options] filename linkname ln [options] filename linkdirectory Common options: -f force: clobber existing link -s symbolic link The default links are hard link. On Windows there are called shortcut. A hard link can only be created to an existing file on the same physical device and no visible association can be displayed between a link name and a file name. A symbolic link can be created on a file that doesnt exist yet and can be viewed with the ls command.
109 110
$ ls/readme lrwxrwxrwx 3 yann users 677 Jul 4 21:50 readme When removing a link name, use rm. Only the link will be removed not the linked file.
111
112
+,emple de -uestions
1. Pour formater une partition, vous utilisez A. disk druid B. fdisk C. mkfs D. fsck 2. Quelles commandes permettent de tester un systme de fichiers format en ext3? A. fsck.ext3 B. fsck t ext3 C. tune2fs j D. e3fsck 3. Quelle commande montre loccupation dun rpertoire /usr/xxx? A. du s /usr/xxx B. df h /usr/xxx C. ls iR /usr/xxx 4. La commande permet de vrifier les quotas dun utilisateur.
113
5. La commande locate A. fonctionne comme find mais avec des options diffrentes B. est plus efficace que find car elle utilise un index C. permet de changer la langue par dfaut de linux 6. Pour rechercher un fichier texte dun utilisateur sur votre disque, vous utilisez A. locate B. whereis C. who D. find 6. Comment obtenir de linformation sur une commande et effectuer une recherche par mots-clefs? A. whoami B. whatis C. apropos D. which
114
7. Quels droits devrait avoir le fichier /usr/bin/passwd? A. 4511 B. 6400 C. 4222 8. Quelle commande est lance au dmarrage du systme sur toutes les partitions contenues dans /etc/fstab A. mkfs B. fsck C. chksum D. verify 9. La commande ln s permet A. de crer un lien symbolique B. de mettre jour les librairies du systme C. de faire une sauvegarde dun fichier
115
<xercice1 A A terminer les types et les droits dVaccs de c"a-ue utilisateur pour c"a-ue entr e # L rJ, L L L L L L essai L rJ L r L L r L L resume*t,t d rJ, r L , L L L ac"ats d rJ, r L , L L , .ilan l rJ, rJ L rJ L raccourci p rJ L rJ L rJ L communication <xercice2 A B )hoa i ali B ls 0l ;rJ, ;;; ;;; l med etudiants 120 Qct 10 10 #13 coda/e ;r;, r;; r;; l ali etudiants 210 Qct 10 11 #13 p/cd dr;; ;;; ;;; l ali etudiants 212 Qct 10 12 #30 reser0e ;rJ, r;; r;; l ali etudiants 120 Qct 10 13 #13 resume*t,t ; ;;; ;;; ;;; l ali etudiants 120 Qct 10 14 #13 secret*t,t d;;; ;;; ;;; l ali etudiants 120 Qct 10 15 #13 0ide drJ, ;;, L, l med etudiants 120 Qct 10 16 #13 .ilan
116
Que font les commandes suivantes? Fonctionnent elles ? Si non, pourquoi ? $ cat resume.txt $ more secret.txt $ ./pgcd $ ./codage $ chmod 777 codage $ ls reserve $ cp resume.txt reserve $ ls vide $ cp resume.txt pgcd $ rm pgcd $ ls bilan $ cd bilan Exercice3 : Crer un rpertoire Inter sous votre rpertoire personnel. Quels sont les droits daccs de Inter ? Modifier les permissions daccs sur Inter de faon quil soit accessible pour tout le monde. Utilisez la notation symbolique pour permettre tous les droits au propritaire (concernant le rpertoire inter ) et les refuser tous les autres. Crer un fichier Essai et modifier ses droits de la faon suivante : rw rw r rw wxxx r xr rrr
117
Vrifier ltat aprs chaque modification en utilisant la commande ls -l Crer un rpertoire RepTest et un fichier FileTest dans ce rpertoire. Modifier les droits daccs du rpertoire RepTest selon les droits proposs et essayer aprs chaque modification de passer dans le rpertoire (cd), lancer la commande ls dans RepTest , lire le contenu de FileTest et essayer de crer un rpertoire dans RepTest. Les droits de lutilisateur seront les suivants : rwx rw rx wx Trouver le masque positionn. Modifier le de faon avoir les droits suivants pour les fichiers nouvellement crer : rr Quels seront alors les droits aux rpertoires ? Exercice4 : Crer un rpertoire dont le droit daccs est 611. Crer un fichier dont le droit daccs est 644. Crer un rpertoire dont le droit daccs est 755. Crer un rpertoire dont le droit daccs est r x 118
)"ap4# GNU et co
andes Unix
1* Unix et Linux
Objectifs Unix est l'OS original d'Internet. NFS, TCP/IP, RPC, ... ont t dvelopps sur et pour Unix. Unix est en fait une spcification de ce que doit tre ce genre d'OS. Il en existe plusieurs implmentations. Citons pour l'exemple AIX d'IBM, HP-UX d'HP, Solaris de Sun, ou les *BSD. Linux est une implmentation Unix entirement rcrit par Linus Torvalds et son quipe de dveloppeurs volontaires rpartis sur l'ensemble de la plante et mis en contact grce Internet. Unix comme Linux sont : Portable, multi-utilisateurs, multi-tches, rendu indpendants des priphriques d'entres et de sorties, capables de grer les ressources matrielles, d'une grande performance, scuriss, quip d'une ligne de commande puissante et d'une interface graphique. Linux est compatible avec la norme POSIX et supporte d'autres API standard comme BSD ou SVR4 Linux possde toutes les fonctionalits que l'on peut attendre d'un Unix moderne, dont le multi-tche, multi-utilisateurs, mmoire virtuelle, librairies partages, chargement la demande, shared copy-on-write executables, gestion propre de la mmoire et utilisation de TCP/IP pour le rseau. De plus en plus d'entreprises slectionnent Linux pour ses performances, son cout faible et l'absence de royalties. 120
1 Unix et Linux 2 Travailler en ligne de commande 3 Excution de flux de textes en utilisant des filtres 4 Gestion de base des fichiers 5 Utiliser les streams, pipes, et redirections 6 Crer, surveiller et terminer des processus 7 Modifier les priorits d'excution des processus 8 Expressions rgulires 9 Effectuer les modifications de base des fichiers avec vi
119
La plupart des Unix sont soumis des licences de copyright. Linux a t diffus pour la premire fois par Linux Torvalds en 1991. Son modle de dveloppement est librr du droit d'auteur. Il adopte la licence GPL cre par Richard Stallman quelques annes auparavant. Richard Stallman est galement l'origine du projet GNU, sans lequel Linux ne servirait pas grand chose. Certaines personnes prfrent ainsi parler de systme GNU/Linux. Linux implmente la plupart des commandes system V, BSD et Unix.
121
1*6 *o
andes 5aries
Pour obtenir des informations sur une session, jouez la commande id. id [options] [username] Options courantes: -g : N'imprime que l'identifiant du groupe. -u : N'imprime que l'identifiant de l'utilisateur. Exemple: $ id uid=0(root) gid=0(root) groupes=0(root), 1(bin), 14(uucp), 15(shadow),16(dialout) Pour lancer un shell avec un nouvel utilisateur et/ou groupe, jouez la commande su. su [options] [username] Options courantes: -s : Selectionne un autre shell. Exemple: $ su toto passwd:
126
1*7 "hell
Un shell est un interprteur de lignes de commandes qui :
attends les commandes (en affichant ce qu'on appelle l'invite) Les interprte (ceci inclus les redirections d'entre-sortie, les tuyaux, la gnration de nom de fichiers, etc...) les excute excute des langages de script
2. @ra5ailler en ligne de co
ande
La plupart des shell vous permettent de personaliser son invite et son environement. Pour le bash, la variable du prompt est PS1 Pour le bash, les fichiers utiliss pour la personnalisation de l'environnement sont: .bashrc excut chaque nouvelle session bash. .bash_profile excut la connextion au shell. 127 .bash_logout excut la sortie du shell.
Objectifs Intragir avec les shells et les commandes en utilisant la ligne de commandes. Cet objectif inclus l'introduction de commandes et de squences de commandes valides, la dfinition, la rfrence et l'exportation de variables d'environement, l'utilisation de l'historique et des facilits d'dition, l'invoquation de programmes dans et en dehors du chemin, l'utilisation des commandes de substitution, l'application rcursive des commandes dans l'arbre des rpertoires, et l'utilisation de la commande man pour trouver des informations sur les commandes. fichiers cls, termes et utilitaires : . / source bash echo env exec export man pwd set unset ~/.bash_history ~/.profile 128
2*1 Ligne de co
Les lignes de commandes sont de la forme : commande [options] [arguments] Exemples: pwd ls -ld ou ls -l -d ou ls -d -l rm -r /tmp/toto cat ../readme helpme > save more /etc/passwd /etc/hosts /etc/group find . -name *.[ch] -print date "+day is %a"
ande
On peut mettre des lignes de commandes dans un fichier, de manire obtenir un script. Pour afficher une chaine de caractres sur la sortie standard, utiliser la commande echo. echo [-n][string|command|$variable] echo my home directory is: $HOME echo I use the $SHELL shell
129
130
/bin/bash peut-tre invoqu l'ouverture d'une session ou explicitement par un utilisateur. A l'ouverture, les fichiers scripts suivants sont utiliss : /etc/profile fichier du systme par dfaut. $HOME/.profile s'il existe. $HOME/.bash_profile s'il existe /etc/bash.bashrc s'il existe $HOME/.bashrc s'il existe Lorsqu'un utilisateur invoque explicitement le shell bash, les fichiers suivants sont excuts : /etc/bash.bashrc s'il existe. $HOME/.bashrc s'il existe; L'historique de tout ce qui est tap se trouve dans le fichier .bash_history. Un script est une liste de commandes et d'oprations excutes dans le contexte du shell. Vous pouvez vous servir de scripts bash pour mettre en place votre environement, vos variables, et plus.
131
2.4 Variables du Shell Toutes les variables locales de la session bash peuvent tre vues par la commande set. La variable ne sera vue que par le shell o elle a t dclare. Pour dclarer une variable locale, utiliser simplement : $ MAVARIABLE=SAVALEUR Pour effacer une variable, utiliser : $ unset MAVARIABLE Toutes les variables d'environement peuvent-tre vues par la commande env. Pour dclarer une variable qui sera vue par les autres shells, utilisez export. $ export MAVARIABLE=SAVALEUR ou, $ MAVARIABLE=SAVALEUR $ export MAVARIABLE Quelques varaibles importantes : HOME : rpertoire utilisateur de celui qui s'est connect. PATH : chemin de recherche des commandes.
133
2.5 Man pages Les manuels en ligne dcrivent la majorit des commandes disponibles sur votre systme. $ man mkdir $ man cal Si vous cherchez un mot cl dans toutes les man pages, utiliser l'option -k, ou la commande apropos. $ man -k compress $ apropos compress La variable MANPATH contient les rpertoires o les man pages sont stockes. $ echo $MANPATH /usr/local/man:/usr/share/man:/usr/X11R6/man:/opt/gnome/man
134
2.3 Shell et jokers Une commande shell peut tre une commande simple ou complexe. ls -l [fF]* ls *.c | more ls -l [a-s]* | mail `users` La premire activit du shell est d'interprter les jokers. Seulement le shell interprte les jokers sans guillemets. 2.4 Guillemets et commentaires 2.4.1 Guillemets Utiliser des guillemets pour que le shell n'interprte pas les caractres spciaux et ne transforme plusieurs mots en commandes shell. 'chane' Presque tout dans les guillements est litral : echo 'Il le fait, "Pourquoi ?"' echo 'Parce que "#@&^:-)"' echo '$VAR='Moi "chane" Comme 'chane' mais interprte $, \, ! echo "Que s'est-il pass ?" echo "Je ne sais pas mais lisez cette $REPONSE" L'antislash \ trate le caractre suivant comme litral : echo \$VAR=Moi echo Que s\'est-il pass \? Comment afficher l'antislash ? echo \\
138
2.4.2 Commentaires Vous pouvez ajouter des commentaires sur une ligne de commande ou dans un script. Utiliser le caractre #. Un espace doit immdiatement prcder #. Exemples: echo $HOME # Print my Home directory echo "### PASSED ###" # Only this part is a comment echo The key h#, not g was pressed. Commandes cat, tac: Concatene des fichiers et affiche le rsultat sur la sortie standard. head, tail: Renvoie sur la sortie standard la premire (respectivement) la dernire partie des fichiers passs en argument. nl: Renvoie le nombre de lignes des fichiers passs en argument. wc: Print the number of bytes, words, and lines in files. cut: Remove sections from each line of files. tr: Translate or delete character. expand, unexpand: Convert tabs to spaces and space to tabs. Paste: Merge lines of files. join: Join lines of two files on a common field.
139
uniq: Remove duplicate lines from a sorted file. split: Split a file into pieces. fmt: Simple optimal text formatter. pr: Convert text files for printing. sort: Sort lines of text files. od: Dump files in octal and other formats. Concatenate files To concatenate files, use cat. cat [options] [files...] tac [options] [files...] The results are displayed to the standard output. Common options: -s: never more than one single blank line. -n: number all output line. Examples: cat file # Display file to the stdout. cat chapter* # Display all chapters to stdout. cat -n -s file # Display file with line number with single blank line. To concatenate files in reverse order, use tac. View the begining and the end of a file
140
To view only few lines at the beginning or at the end of a file, use head or tail. head [options] [files...] tail [options] [files...] The results are displayed to the standard output. Common options: -n: number of lines to be displayed. (head and tail) -c: number of bytes to be diplayed (head and tail) -f: append output. (tail) -s #: iteration for new data every # sec. (tail) Examples: head file # Display the first 10 lines of file. head -n 2 file # Display the first 2 lines of file. tail -c 10 file # Display the last 10 bytes of file. tail -f -s 1 /var/log/messages Display the last 10 lines of messages, block and check for new data every second. Numbering file lines To add the line number to a file, use nl. nl [options] [files...] The results are displayed to the standard output. Common options: -i #: incremente line number by #. -b: numbering style: a: number all lines, t: non empy line, n: number no line. -n: numbering format: rz:right justified, ln: left justified.
141
Examples: nl file # Add the line number in each line in the file. nl -b t -n rz file # Add the line number to each non-empty line with zerocompleted format. Counting items in a file To print the number of lines, words and characters of a file, use wc. wc [options] [files...] The results are displayed to the standard output. Common options: -c: the byte size. -m: the number of character. -w: the number of word. -l: the number of line. -L: length of the longest line. Examples: wc *.[ch] # Diplay the number of lines, words, and characters for all files .c or .h. wc -L file # Display the size of the longest line. wc -w file # Display the number of words.
142
Cutting fields in files To remove sections from each line of files, use cut. cut [options] [files...] The results are displayed to the standard output. Common options: -b #: Extract the byte at position #. -f #: Extract the field number #. Examples: cut -b 4 file # Extract and display the 4th byte of each line of file. cut -b 4,7 file # Extract and display the 4th and 7th byte of each line. cut -b -2,4-6, 20- file # Extract character 1 and 2, 4 to 6 and 20 to the end of the line for each line of file. cut -f 1,3 -d: /etc/passwd # Extract the username and ID of each line in /etc/passwd. The default delimiter is TAB but can be specified with -d.
2.5 Characters convesion To translate the stdin to stdout, use tr. tr [options] SET1 SET2 Common options: -d: delete character in SET1. -s: replace sequence of character in SET1 by one. Examples: tr a 'A' # Translate lower a with A tr [A-Z] [a-z] # Translate uppercase to lowercase tr -d # Delete all spaces from file To convert tabs to spaces, use expand and to convert spaces to tabs, use unexpand. expand file unexpand file 2.6 Lines manipulation To paste multiple lines of files, use paste. paste [options] [files...] Common options: -d #: delimiter: Use # for the delimiter. -s: serial: paste one file at the time.
144
143
Examples: paste f1 f2 # Display line of f1 follow by f2. paste -d: file1 file2 # Use ':' for the delimiter. To join multiple lines of files, use join. join file1 file2 To remove duplicated line, use uniq. uniq [options] [files...] Common options: -d: only print duplicated lines. -u: only print unique lines. Examples: uniq -cd file # Display the number of duplicated line. Splitting files To split big files, use split. split [options] file Common options: -l #: split every # lines. -b #: split file in bytes or b for 512 bytes, k for 1Kbytes, m for 1 Mbytes. Examples: split -l 25 file # Split file into 25-line files. split -b 512 file # Split file into 512-byte files. split -b 2b file # Split file into 2*512-byte files.
145
2.7 Formating for printing To format a file, use fmt. fmt [options] [files...] Common options: -w #: maximum line width. Examples: $ fmt -w 35 file # Display 35-character lines width. To format a file for a printer, use pr. pr [options] [files...] Common options: -d: double space. Examples: $ pr -d file # Format file with double-space. Sort lines of text files To sort the lines of the names files, use sort. sort [options] file The results are displayed to the standard output. Common options: -r: Reverse -f: Ignore case -n: Numeric -o: file: Redirect output to file -u: No duplicate records t;: Use ';' as delimiter, rather than tab or space.
146
Examples: sort file -r sort file -ro result Binary file dump To dump a binary file, use od. od [options] file The results are displayed to the standard output and start with an offset address in octal. Common options: -c: each byte as character -x: 2-byte in hex -d: 2-byte in decimal -X: 4-byte in hex. -D: 4-byte in decimal. Examples: $ od -cx /bin/ls 0000000 177 E L F 001 001 001 \0 \0 \0 \0 \0 \0 \0 \0 \0 457f 464c 0101 0001 0000 0000 0000 0000 0000020 002 \0 003 \0 001 \0 \0 \0 224 004 \b 4 \0 \0 \0 0002 0003 0001 0000 9420 0804 0034 0000 0000040 \0 \0 \0 \0 \0 \0 4 \0 \0 006 \0 ( \0 b2b0 0000 0000 0000 0034 0020 0006 0028 0000060 032 \0 031 \0 006 \0 \0 \0 4 \0 \0 \0 4 200 004 \b 001a 0019 0006 0000 0034 0000 8034 0804
147
148
150
4.3 Dplacer et renommer des fichiers Pour renommer un fichier, un rpertoire ou pour dplacer un fichier ou un rpertoire vers un autre endroit, utilisez mv. mv [options] source target Source et target peuvent tre un fichier ou un rpertoire. Common options: -i interactive: prompt to overwrite -f force: force the overwriting -v verbose The default is to silently clobber the target file. Does not alter the srcfile. Examples: mv *.[a-z] /tmp mv readme readme.orig mv ls /bin mv -fi bin/* /bin 4.4 Afficher une liste de fichiers et des informations The command to list files in the current directory is ls. ls [options] [filenames] Common options are: -l for a long format ; -F Append a file type character ; -a All files, including hidden; -R Recursive listing of subtree; -d Do not descend into directory The ls is equivalent to the dir command on DOS. Examples of ls output: ls -l /bin/ls -rwxr-xr-x 1 root root 46784 mar 23 2002 /bin/ls
151
4.5 Types de fichiers The long format means: ls -l /etc/hosts #List a long format of the file hosts -rw-rr-- 1 root root 677 Jul 5 22:18 /etc/hosts 4.6 Contenu des fichiers et emplacement Linux/Unix does not distinguish file by filename extension, like Windows. To determine the file content use file. file /etc .bashrc /bin/ls /dev/cdrom /etc: directory .bashrc: ASCII English text /bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), stripped /dev/cdrom: symbolic link to /dev/hdc To determine if a command is a built-in shell command or a program, use type, and use which to find its location
152
4.7 Crer et utiliser des fichiers Les noms de fichiers peuvent tre cr avec les redirections I/O : cat chapter1 chapter2 > book Un diteur comme vi : vi mynewfile Plein d'utilitaires UNIX : cp file newfile Une application netscape La commande touch, qui cre des fichiers vides touch memo Un nom de fichier valide : a maximum 255 caractres doit respecter la casse (majuscules, minuscules,...) peut comporter tous les caractres sauf l'anti-slash '\' Recommended alphanumeric characters as well as plus, minus, and underscore characters.
4.8 Supprimer des fichiers et des rpertoires To remove files or subtree directories, use rm. rm [options] files Files can be a file or a directory. Common options: -i interactive: prompt to for each removal -f force: force the overwriting -r recursive: remove subtree directories and contents There is no unremove or undelete command. Examples: rm *.[a-z] rm readme readme.orig rm ls /bin rm -rfi /bin cd; rm -rf * .*
153
154
4.9 Trouver des fichiers dans le sous-rpertoire d'une arborescence To search for a file in a subtree directory, use find. find [subtrees] [conditions] [actions] The command can take multiple conditions and will search recursively in the subtree. Some possible conditions are: -name [FNG] # Search fo the FNG name -type c # Type of file [bcdfl] -size [+-]# # Has a +- size in blocks (c:bytes,k:kilo) -user [name] # Own by user -atime [+-]# # Accessed days ago +n means not been accessed for the last n days -n means been accessed the last ndays. -mtime [+-]# # Modified days ago -perm nnn # Has permision flags nnn Some possible actions are: -print # Print the pathname -exec cmd {} \; # Execute cmd on the file -ok cmd {} \; # Same as -exec but ask first Examples find . -name '*.[ch]' -print find /var /tmp . -size +20 -print find ~ -type c -name '*sys*' -print find / -type f -size +2c -exec rm -i {} \; find / -atime -3 -print find ~jo ~toto -user chloe -exec mv {} /tmp \;
155
156
4.10 whereis and which To locate a binary, source file, or man pages, use whereis. whereis [options] Common options: -b: Search only for binaries. -m: Search only for manual sections. -s: Search only for sources. Examples: whereis host host: /usr/bin/host /etc/host.conf /usr/share/man/man1/host.1.gz whereis -m host host: /usr/share/man/man1/host.1.gz To locate a file located somewhere defined by the PATH variable, use which. which -a ls /bin/ls The -a will look for all possible matches in PATH, not just for the first one.
5.1 Entre et sortie standard For each command executed in a terminal, there are: a standard input value 0. (default keyboard) a standard output value 1.(default terminal) and a standard output for the errors value 2. (default terminal). Each channel can also be identified by an address: &0 for input, &1 for output, And &2 for errors. Each channel [n] can be redirected. [n]< file: Default value of n is 0 and it reads standard input from file. [n]> file: Default value is 1 and it sends standard output to file. (clobber) [n]>>file: Default value is 1 and it appends standard output to file. <<word: Read standard input until word is reached. `command`: Substitute the command name by the result. Examples: $ pwd > file # out=file in=none error=terminal. cat chap* >book # out=book in=none error=terminal. mv /etc/* . 2>error # out=terminal in=none error=error. echo end of file >> book # out=book in=none error=terminal. set -o noclobber # Shell does not clobber existing files. ls > list 2>&1 # ls and errors are redirected to list. ls 2>&1 > list # Errors are redirected to standard output and ls output is redirected to list. cat `ls /etc/*.conf` > conffile 2>>/tmp/errors 159
Concatenate all the configuration files from /etc dir in conffile and append errors in file /tmp/errors. Redirecting with pipes Pipes are an efficient way to apply multiple commandes concurrently. command1 | command2 The standard output of command1 will be piped to the standard input of command2. The standard error is not piped. Examples: ls -l /dev | more ls -l /etc/*.conf | grep user | grep 500 ls -l /bin | mail `users` To redirect the standard output to a file and to the terminal at the same time, use tee. ls -l /dev | tee file ls -l /etc | tee -a file # Append to the file Building arguments
160
The xargs utility constructs an argument list for a command using standard input. xargs [options] [command] The xargs command creates an argument list for command from standard input. It is typically used with a pipe. Common options: -p: prompt the user before executing each command. Examples: ls f* | xargs cat # Print to standard output the content of all files starting with f. find ~ -name 'proj1*' print | xargs cat Search in the Home directory for files starting with proj1 and send it to the standard input of cat. Use the /dev/null device file to discard output or error messages. Try the following: grep try /etc/* grep try /etc/* 2> /dev/null grep try /etc/* > /dev/null 2> /dev/null
161
6.1 Crer des processus A running application is a process. Every processes have: A process ID. A parent process ID. A current directory PWD. A file descriptor table. A program which it is executing. Environment variables, inherited from its parent process. Stdin, stdou, and stderr Other Bash is a program that when it is executed becomes a process. Each time you execute a command in a shell a new process is created. Except for the buil-in shell command. They run in the shell context. Use type to check if a command is a built-in shell command. Example type cp ls which type Monitor processes Once the system is up and running from a terminal it is possible to see which processes are running with the ps program. To display a long format of all the processes in the system, do: ps -Al F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY 0 1 0 0 80 0 79 0 112 do_sel 761 ? 0 1524 1222 0 TIME CMD 004 S 044 R 00:00:04 init
163
6.2 Surveiller des processus To monitor the processes in real-time, use top. top 9:20am up 2:48, 4 users, load average: 0.15, 0.13, 0.09 78 processes: 75 sleeping, 3 running, 0 zombie, 0 stopped CPU states: 15.3% user, 0.3% system, 0.0% nice, 84.2% idle Mem: 254896K av, 251204K used, 3692K free, 0K shrd, 27384K buff Swap: 514072K av, 0K used, 514072K free 120488K cached PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND 0 40816 39M 17372 0 988 220 0 988 220 0 768 188 0 R R S SW 15.0 16.0 0.3 0.0 0.0 0.3 0.0 0.0 2:59 mozilla-bin 0:00 top 0:04 init 0:00 keventd 1517 rarrigon 0 1727 rarrigon 19 1 2 Root root
20 0 20 0
pts/3 00:00:00 ps
RSS: The total amount of physical memory used by the task. SHARE: The amount of shared memory used by the task. %CPU: The task's share of the CPU time. %MEM: The task's share of the physical memory. Once top is running it is also possible to execute interactive commands: Type N to sort tasks by pid. Type A to sort tasks by age (newest first). Type P to sort tasks by CPU usage. Type M to sort tasks by memory usage. Type k to kill a process (prompted for pid).
164
6.3 Terminer des processus The ps program will display all the processes running and their PID numbers. Once the PID is known, it is possible to send signals to the process. SIGSTOP to stop a process. SIGCONT to continue a stopped process. SIGKILL to kill a process. The program to send a signal to a process is called kill. kill -SIGKILL [pid] kill -63 [pid] kill -l By default a process is started in foreground and it is the only one to receive keyboard input. Use CTRL+Z to suspend it. To start a process in backgroud use the &. bash & xeyes & Job control In a bash process it is possible to start multiple jobs. The command to manipulate jobs are: jobs # List all the active jobs bg %job # Resume job in background fg %job # Resume job in foreground kill %job # Kill background job When bash is terminated all processes that have been started from the session will receive the SIGHUP signal. This will by default terminate the process. To prevent the termination of a process, the program can be started with the nohup command. nohup mydaemon
165
166
7*1 Priorits
Pour dmarrer une commande avec une priorit donne, utilisez la commande nice . nice -n +2 [command] nice -n -19 [command] The program nice changes the base time quantum of the scheduler. Les valeurs sont comprises entre -19 (-20), qui correspond a une haute priorit +20 (+19), basse priorit. La valeur par dfaut est 0. Seul le superutilisateur root peut donner une priorit ngative (haute priorit). To modify the priority of a running program, use renice. renice +1 -u root # Change the priority for all root processes. renice +2 -p 193 # Change the priority for PID 193
167
8* <x1ressions rguli$res
Objectifs Manipuler des fichiers et des donnes textes en utilisant les expressions rgulires. Cet objectif inclu la cration simple d'expression rgulires contenant plusieurs lments d'criture. Ceci inclu aussi l'utilisation rgulire d'outils pour raliser des recherches travers un filesystem ou le contenu d'un fichier. Key files terms and utilities include: grep regexp sed
168
8.1 Pattern matching There are two kinds of pattern matching: Wildcards (File Name Generation) Regexp (Regular Expression)
Wildcard characters are mainly applied when they are used in the current directory or subdirectories. When wildcard characters *, ?, [ - ], ~, and ! are used in regexp they no longer generate filenames. Some of the utilities that us regexp are: grep, egrep vi more sed Perl
169
8.2 grep To find text in a file, use grep. grep [options] [string] [files] Best to quote the string to prevent interpretation. Common options: -i: Ignore case -l: List filename only if at least one matches -c: Display only count of matched lines -n: Also display line number -v: Must not match. Examples: grep host /etc/*.conf grep -l '\<mai' /usr/include/*.h grep -n toto /etc/group grep -vc root /etc/passwd grep '^user' /etc/passwd grep '[rR].*' /etc/passwd grep '\<[rR].*' /etc/passwd
170
8.3 sed To apply a command on a stream, use sed. sed [address1][,address2][!]command[options] [files...] The program sed will apply a command from address1 to address2 in a file. The address1 and address2 format are regular expressions. The sed program is a noninteractive editing tool. Examples: sed '1,3s/aa/bb/g' file # Replace in file from line 1 to 3 aa by bb. sed '/here/,$d' file # Delete line from here to the end. sed '/here/d' file # Delete lines with word here. sed '1,/xxx/p' file # Print lines from 1 to xxx. sed '/ll/,/ff/!s/maison/house/g' file # In file replace words maison by house excluding lines from ll to ff.
171
172
9.1 vi When using X-Windows, you can use mouse oriented editors such as xedit. In a cross-development environment, users use their favorite editor. On a nonwindowing system, you only need a keyboard editor such as vi. The vi editor on Linux is the same as on any Unix systems. vi has two modes: Command mode: Anything you type will be interpreted as a command Input mode: Anything you type will be inserted into the file Transition from one mode to another Command mode to Input mode: i, I, a, A, o, O keys Input mode to Command mode: ESC key The default starting mode is the Command mode The file configuration .exrc can be created in your HOME directory to setup some vi behavior. set ignorecase # No case-sensitive set tabs=3 # 3 space for tab character Perform basic file editing using vi
Enter Input Mode i before cursor a after cursor o open line below Delete dw delete word dd delete line D delete to end of line x delete char at cursor Move cursor l one space right h one space left j one line down k one line up $ end of line ^ start of line w next word e end of word
174
173
+,ercices
1. Quelle est la commande qui permet dafficher la liste des processus associs votre terminal. Quelle est la commande qui permet dafficher la liste des processus dont vous tes propritaire. Quelle est le rle des options -l et -f. quoi correspondent les colonnes PID et PPID ? Lancez une commande longue en arrire plan. Quel est le comportement du processus associ lorsqu'il reoit les signaux suivants :
1. 2. 3. sigkill (9) sigstop (23) sigcont (25)
)"ap5#' (indo)
1 Installer et )on(i/urer ]Kree86 2 Installer un /estionnaire d1a((ic"a/e 3 Installer ^ con(i/urer un /estionnaire d1en0ironnement /rap"i-ue 4 ] en r seau
176
2.
3. 4. 5. 6.
Utilisez la commande nice pour lancer des commandes ayant une faible priorit. Interprtez la hirarchie des processus qui vous appartiennent. La commande ps | wc compte deux processus en plus de ceux qui existent rellement lorsqu'on lance la commande. Pourquoi ? Donner deux commandes pour reprendre l'excution d'une instruction interrompue par un ^Z.
175
1.1 Configuration Si vous tapez "XFree86 -configure", cela va analyser votre matriel et gnrer automatiquement un fichier de configuration correspondant votre matriel. Cependant, pour les souris PS/2, on a souvent besoin de modifier ce fichier de configuration manuellement, de ""Device" "/dev/mouse"" jusqu' ""Device" "/dev/psaux"" 1.2 Dmarrer et arrter X Pour dmarrer X, on peut utiliser la commande : xdm Dmarrage automatique de startx lors du dmarrage de Linux au niveau 5 startx Lors de l'authentification au niveau 3 xinit Lorsque le fichier .xinitrc n'existe pas. init Dmarrage de X-Windows au niveau 5 de Linux Pour arrter X, on peut utiliser: <CTRL>+<ALT>+<BACKSPACE> init A un niveau infrieur Linux 5, arrte X-Windows. Configuration de X Pour configurer X sur un systme, on peut utiliser XF86Setup. Le programme va gnrer un fichier de configuration qui sera utilis par le serveur XFree86. Pour rgler l'cran sous X, utilisez Xfine2. Sous X, l'utilisateur peut configurer chaque paramtre convenable de l'affichage graphique. Polices d'affichage l'cran, styles Comportement du dispositif de pointage Couleurs d'affichage Gestionnaire de fentre Le rglage peut tre effectu par stratgie de groupe ou par utilisateur. .xinitrc est le gestionnaire de fentres et de style par dfaut utiliser avec la commande startx. .Xdefaults est utilis pour configurer les paramtres du pointeur, les couleurs, polices, etc...
178
X a besoin de gestionnaires de fentres pour manipuler toutes les applications graphiques. Dplacer, redimensionner. Ouvrir et fermer. Agrandir, rduire, mettre en icne. Barres de titres L'apparence des fentres est inclus dans le gestionnaire de fentres.shouldn't this be in Widget sets not WMs? Fournir des bureaux virtuels. Les distributions Linux disposent d'un grand nombre de gestionnaire de fentres: Fvwm2 Motif-like look, highly customizable WindowMaker Next Step look, fast and lean Wm2 Ultra lean Olwm Open look (Sun) The desktops bring on top of X Window managers more facilities: KDE: based on Qt, current at the top of market GNOME: The "GNU" Desktop, based on Gtk+-v2
180
4* ' en rseau
Objectifs X travaille en environnement client/serveur, o l'application est le client et le serveur est l'application qui sait de quelle manire fournir les services. Dans un systme autonome, les deux applications sont situes sur la mme machine. Dans un systme en rseau, l'utilisateur peut executer une application X installe sur une machine distante et effectuer l'affichage sur un ordinateur local. L'avantage de disposer d'un serveur X d'applications est : L'installation d'applications locales n'est pas ncessaire. Le systme local n'a pas besoin d'tre performant. L'accs aux donnes ne se fait pas localement. 4.1 X en rseau Export d'une application simple : Pour effectuer cette manipulation, faire : startx sur le serveur. xhost + Autoriser l'absence d'authentification sur le serveur. telnet serveur partir du client et paramtrer la variable DISPLAY pour le client. Export DISPLAY=clienthost:0.0 Export du gestionnaire de fentres : Pour effectuer cette manipulation, faire : Activer xdmcp avec gdmsetup sur le serveur Utiliser Xnest pour connecter le client au serveur en diffusion
182
+,emple de -uestions
1. A quoi sert un ficier Xressources? A. contrler lapparence des clients X; B. affecter des ressources pour le serveur X C. dfinir les droits daccs au serveur X en rseau 2. Pour dmarrer un serveur X ? A. vous utiliser un logiciel XDM B. vous lancez le script startx C. vous utiliser la commande Xressource D. vous utiliser la commande Xserved 3. Dans la liste suivante, quels sont les window manager A. WindowMaker B. KDM C. Xwindow D. twm
183
4. Que contient le fichier XF86Config? A. La rsolution de lcran B. Le(s) chemin(s) pour trouver les polices de caractre. C. La taille du moniteur D. Le nom du Window Manager lancer 5. Quel est lentre ddu fichier XF86Config qui spcifie quon est en machine locale? Choisi 2. A. unix/:-1 B. unix/:7100 C. tcp/:45 D. udp/:80 E. font/:-1 6. Quel est le fichier qui est utilis pour la configuration du XDM daemon? A. xdm-config B. xdm.conf C. xdmcfg D. xdaemon.conf E. None of the above
184
1. Introduction
Un script peut tre lanc en ligne de commande, comme dans un autre script. Mais il sagit bien plus quun simple enchanement de commande: on peut dfinir des variables et utiliser des structures de contrle, ce qui lui confre le statut de langage de programmation interprt et complet.
185 186
1. Introduction
$suite%
Le langage bash gre notamment:
La gestion des entres-sorties et de leur redirection Des variables dfinies par le programmeur et des variables systmes Le passage de paramtres Des structures conditionnelles et itratives Des fonctions internes
Saisie du script
Utiliser vi de prfrence Les lignes commenant par le caractre dise # sont des commentaires. Le script doit dbuter par lindication de son interprteur crite sur la premire ligne: #!/bin/bash En fait si le shell par dfaut est bash, cette ligne est inutile.
187
188
3. Les variables
Saisie du script
Exemple:
#!/bin/bash #script bonjour #affiche un salut lutilisateur qui la lanc #la variable denvironnement $USER contient le nom de login echo ----Bonjour $USER ----#loption n empche le passage la ligne #le ; sert de sparateur des commandes sur la ligne echo n Nous sommes le; date #recherche de $USER en dbut de ligne dans le fichier passwd #puis extraction de luid au 3ime champ, et affichage echo Ton numro dutilisateur est (grep ^$USER /etc/passwd | cut -d: -f3)
189
190
3. Les variables
Excution du script
Il est indispensable que le fichier script ait la permission x (soit excutable). Lui accorder cette permission pour tous ses utilisateurs avec chmod: Chmod a+x bonjour Pour lancer lexcution du script, taper ./bonjour, ./ indiquant le chemin, ici le rpertoire courant. Ou bien indiquer le chemin absolu partir de la racine. Ceci dans le cas o le rpertoire contenant le script nest pas list dans le PATH
191
192
3.2- Laffectation
3. Les variables
Par exemple, i=2, i=0002, i=deux nont pas la moindre signification de valeur pour le shell, et sont donc pour lui des affectations diffrentes.
Le shell a donc besoin dutilitaires pour manipuler les nombres (tester, additionner) ainsi que les chanes de caractres: Les variables shell ne sont pas types.
$echo $variable valeur $ Le shell interprte dabord les variables, puis la commande quil trouve en premire position sur la ligne.
194
3. Les variables
3. Les variables
195
3. Les variables
3. Les variables
Une commande excuter entre (guillemet inverse): Ne doit pas faire de lecture au clavier (ex: ni vi, ni pg) Sexcute dans un sous-shell, donc peut tre compose de plusieurs commandes spares par des ; voire mme sexcuter dans un autre rpertoire. $var= `cd /etc ; grep fun passwd` $echo $var fun:x:208:55:Guy Thienot:/tech/u2/fun:/bin/ksh $ La substitution de commande permet lexcution dune commande ou mme dun fichier de commandes.
199
200
# Commentaire:
; [point-virgule]
/emarque:
Bien sr, un # chapp dans une instruction echo ne commence pas un commentaire. De la mme manire, un # apparat dans certaines constructions de substitution de paramtres et dans les expressions numriques constantes.
Sparateur de commande : Permet de placer deux commandes ou plus sur la mme ligne. echo bonjour; echo ici Notez que le ; a parfois besoin dtre chapp
;; [double point-virgule]
Terminateur dans une slection par cas (case). On va le voir plus prcisment dans la partie choix multiple.
32emp#es:
echo "Le # ici ne commence pas un commentaire. echo Le # ici ne commence pas un commentaire. echo Le \# ici ne commence pas un commentaire. echo Le # ici commence un commentaire. echo ${PATH#*:} # substitue de paramtres, pas un commentaire. echo $((2#101011)) # conversion de base, pas un commentaire.
. [point] Commande point : Equivalent source. Cest une commande intgre de Bash. [guillemet double]
CHANE empche linterprtation de la plupart des caractres spciaux prsents dans
la CHANE.
201 202
[guillemet simple]
CHANE empche linterprtation de tous les caractres spciaux prsents dans la CHANE. Ces guillemets sont plus puissant que .
/ [barre oblique]. Spare les composants dun nom de fichier (comme dans /home/bozo/projets). Cest aussi loprateur arithmtique de division. `[guillemet invers]. `commande` rend la sortie de commande disponible pour initialiser une variable. Connu sous le nom de guillemets inverss ou bien quottes. : [deux point]. Il sagit de lquivalent shell dun NOP (no operation). Elle peut tre considre comme un synonyme pour la commande intgre true. La commande : est elle-mme une commande intgre Bash, et son tat de sortie est vrai (0). : echo $? # 0
203 204
, [virgule].
relie une suite doprations arithmtiques. Toutes sont values, mais seul le rsultat de la dernire est renvoy. let t2 = ((a = 9, 15/3)) # Initialise a et calcule t2.
\ [anti-slash]
\X chappe le caractre X. Cela a pour effet de mettre X entre guillemet, et est quivalent X. Le \ peut tre utilis pour mettre et entre guillemets, pour pouvoir les crire sous forme littrale.
! [point dexclamation].
Il inverse ltat de sortie de la commande la quelle il est appliqu. Il inverse aussi la conclusion dun oprateur de test. Cela peut, par exemple, changer le sens dun gal (=) en un diffrent (!=). Loprateur ! Est un mot-cl Bash.
Dans un autre contexte, le ! Apparat aussi dans les rfrences indirectes de variable. Dans un contexte encore diffrent, partir de la ligne de commande, le ! Appelle le mcanisme dhistorique de Bash.
? [point dinterrogation].
A lintrieur de certaines expressions, le ? Indique un test pour une condition. Dans une construction entre parenthses doubles, ? Sert doprateur trois arguments dans le style du C. Dans une expression de substitution de paramtres, le ? Teste si une variable a t initialise. ? Joker (caractre irrgulier). Le caractre ? Sert de joker pour un seul caractre pour lexpansion dun nom de fichier dans un remplacement, et galement reprsente un caractre dans une expression rgulire tendue.
$ [dollar].
var1=5 var2=23skdoo echo $var1 # 5 echo $var2 # 23skidoo Un $ prfixant un nom de variable donne la valeur que contient cette variable
205 206
* [ltoile].
Dans le contexte des oprations arithmtique, * est une multiplication. La double astrisque ** est loprateur exponentiel.
!$ %parenthses&.
(a=bonjour; echo $a) Une liste de commandes entre parenthses lance un sous shell. Les variables comprises dans ces parenthses, lintrieur du sous-shell, ne sont pas visibles par le reste du script. Le processus parent, le script, ne peut pas lire les variables cres dans le processus fils, le sous-shell. a=123 (a=123;) echo a = $a # a = 123 # a lintrieur des parenthses sagit comme une variable locale.
|| [double barre]
Oprateur OU logique: Dans une structure de test, loprateur || a comme valeur de retour 0 (succs) si lun des deux est vrai.
- [moins]
Le signe moins est une opration arithmtique.
= [gal].
Oprateur daffectation. a=28 echo $a # 28
'nitialisation de tableaux.
Array=(element1 element2 element3 ) [ ] lment dun tableau. Accols au nom dun tableau, les crochets indiquent lindice dun lment. Tableau[]=slot_1 echo ${Tableau[1]}
207
+ [Plus].
Oprateur arithmtique daddition
% [Modulo].
Oprateur arithmtique modulo (reste dune division entire).
~ [tilde]
Le ~ correspond la variable interne $HOME : Rpertoire de lutilisateur.
208
3. Les variables
$echo $d date $ j vaut la date au moment de laffectation. d vaut la chane de caractres date $ $d Wed May 18 16:39:11 MET 1994 $echo $j Wed May 18 16:28:16 MET 1994 $ Le contenu de la variable sera substitu puis on excute la commande. Dans le premier cas on excute date, alors que dans le second on affiche la date au moment de laffectation dans j (valeur statique).
210
3. Les variables
32emp#es: $read a 33 $echo $a 33 $read b c d voici trois mots $echo $d $c $b mots trois voici $read a b c et voici quatre mots
$echo $a et $echo $b voici $echo $c quatre mots $read d e f blups $echo $d blups $echo $e $echo $f
212
211
1. Procdure
(. )rocdure
Une procdure (shell script fichier de commandes shell) est un fichier contenant une suite de lignes excutables par linterprteur de commande shell.
32emp#e:
32emp#e:
$cat p1 # ceci est une procdure date who tty $
$ .p1 wed Jul 6 11:07:45 MET 1994 philip term/c0 Jul 6 10:30 fun term/c5 Jul 6 09:14 c1 term/c4 Jul 6 09:14 /dev/term/c4 $ Dans ce cas, aucun processus nest cr pour lire et lancer ces commandes, mais de toutes faons trois processus sont crs par ce script.
213 214
1.1- Excution dune procdure Lancer le programme shell en redirigeant son entre standard sur le fichier contenant la procdure.ainsi le shell lit les commandes sur ce fichier au lieu de les lire sur le terminal.
1.1- Excution dune procdure Modifier les droits du fichier p1, pour le rendre excutable pour lutilisateur, puis lancer la procdure comme sil sagissait dune commande standard.
32emp#e:
$ chmod u+rx p1 $ p1 wed Jul 6 11:07:45 MET 1994 philip term/c0 Jul 6 10:30 fun term/c5 Jul 6 09:14 c1 term/c4 Jul 6 09:14 /dev/term/c4 $ Dans ce cas, le systme se rend compte quil sagit dun fichier excutable particulier, en effet, celui-ci ne contient pas de code machine, mais des lignes de texte. Il suppose quil sagit dune procdure shell, donc cre un processus, qui excute le programme shell, et les commandes sont lues depuis ce fichier.
216
32emp#e:
$bash p1 wed Jul 6 11:07:45 MET 1994 philip term/c0 Jul 6 10:30 fun term/c5 Jul 6 09:14 c1 term/c4 Jul 6 09:14 /dev/term/c4 $ Dans ce cas, un sous processus est cr. Le pre est mis en attente et ne sera rveill que lorsque le sous-processus sera termin.
215
1. Procdure
La procdure ne peut jamais initialiser le contenu de ces variables, mais peut le consulter en utilisant la syntaxe $0, $1, $2,$9. Chaque paramtre positionnel contient un mot de la ligne de commande.
32emp#e:
> '1 ] D \
\ >3
7tte!tio!:
Si la ligne contient des mta-caractres, le shell les substitue avant deffectuer le dcoupage en mots, et daffecter ces mots aux paramtres positionnels.
217 218
1. Procdure
2. La comma!de test
8!ra#its
Comme son nom lindique, elle sert vrifier des conditions. Ces conditions portent sur des fichiers (le plus souvent), ou des chanes ou une expression numrique. Cette commande courante sert donc prendre des (bonnes) dcisions, do son utilisation comme condition dans les structures conditionnelles if .. then .. else, en quelque sorte la place de variables boolennes qui nexistent pas.
Sy!ta2e
Test expression [expression]
,a#eur de retour
La commande test, retourne 0 si la condition est considre comme vraie, une valeur diffrentes de 0 sinon pour signifier quelle est fausse.
220
2. La commande test
2. La commande test
9ester u! )ic"ier
Elle admet 2 syntaxes (la seconde est la plus utilise): test option fichier [ option fichier ]
5ptio! si !i)icati):
-z | -n = | != la chaine est vide / nest pas vide les chaines compares sont identiques | diffrentes.
32emp#e:
[-n " toto"] echo $? Affiche la valeur renvoye 0
221 222
32emp#es:
[-w fichier] le fichier est il modifiable? [-r /etc/passwd] X peut-il lire le fichier /etc/passwd?
2. La commande test
2. La commande test
9ester u! !om(re
[ nb1 option nb2 ] Il y a dabord un transtypage automatique de la chane de caractres en nombre
5ptio! Si !i)icati)
-eq | -ne -lt | -gt -le | -ge gal | diffrent strict.inf | strict.sup inf ou gal | sup ou gal
32emp#e: 32emp#es:
a=15; [" $a " lt 15]; echo $? note=9; [$note lt 8 o $note ge 10] && echo tu nest pas convoqu(e) loral"
223
224
Loprateur de multiplication doit tre chapp lorsquil est utilis dans une expression arithmtique avec expr.
225
# Index: position du premier caractre dans une sous-chaine qui correspond un # caractre dans la chaine
b=expr index $a 23 echo la position du premier 23 dans $a est $b
227
228
1. Structures conditionnelles
(. La structures conditionnelles
Syntaxe: if condition then instruction(s) fi Syntaxe: if condition then instruction(s) else instruction(s) fi
else # squence excute sinon bloc-instruction2 fi Attention: ! Si bien est plac sur la 1re ligne, sparer avec un ; if condition ; then
229
230
1. Structures conditionnelles Lexemple suivant teste lexistence dun fichier if [-e /etc/shadow"] then echo fichier existe else echo Erreur fichier inexistant fi Pour vrifier que 2 arguments ont t passs au script if [$# -ne 2] then echo il faut 2 arguments vous en avez $# fi Test numrique permet dafficher si largument pass en paramtre est compris entre 5 et 10: if [$1 gt 5 a $1 lt 10] then echo 5<$1<10 fi
1. Structures conditionnelles Test numrique permet dafficher si largument pass en paramtre est un nombre positif, ngatif ou nul: if [$1 -gt 0] then echo $1 est positive elif [$1 -lt 0] then echo $1 est ngative elif [$1 -eq 0] then echo $1 est zero else echo Opps! $1 nest pas nbre, donner un nombre fi
231
232
1. Structures conditionnelles Supposons que le script exige la prsence dau moins un paramtre, il faut tester la valeur de $#, est elle nulle? if [$# = 0] then echo erreur, la commande exige au moins un argument.. exit 1 elif [$# = 1] then echo Donner le second argument: read arg2 fi
1. Structures conditionnelles
Un script shell qui fait le test sur lexistence dun utilisateur $ cat exist_user if grep $1 /etc/passwd > /dev/null then echo Lutilisateur $1 a un compte else echo lutilisateur $1 nexiste pas fi $ chmod u+x exist_user $exist_user c1 Lutilisateur c1 a un compte $
233
234
2. Choix multiples
2. C"oi2 mu#tip#es
Syntaxe: case valeur in expr1) commandes;; expr2) commandes;; esac ;; indique la fin du choix (cas).
32emp#e1:
case $param in 0|1|2|3|4|5|6|7|8|9) echo $param est un chiffre;; [0-9]*) echo $param est un nombre;; [a-zA-Z]*) echo $param est un nom;; *) echo $param de type non prvu;; esac
32emp#e:
Le script attent une langue de lutilisateur read langue case $langue in franais) echo bonjour;; anglais) echo hello;; espagnol) echo buenos Dias;; esac
235
32emp#e2:
case $1 in one) X=un;; two) X=deux;; three) X=trois;; *) X=$1;; esac
236
3. Structure itrative
32emp#es:
Supposons que nous souhaitons renommer tous nos fichiers *.tar.gz en *.tar.gz.old, nous taperons le script suivant: for I in *.tar.gz do #tous les fichiers $I sont renomms $I.old echo $I-> $I.old mv $I $I.old #on finit notre boucle done
237
Supposons que nous voulions parcourir tous les sous-rpertoires du rpertoire courant pour faire cette mme manipulation. Nous pourrons taper: for REP in `find . -type d` do for FICH in $REP/*.tar.gz do if [-f $FICH] then mv $FICH $FICH.old else echo On ne renomme pas $FICH car ce n\est pas un fichier fi done done #Une boucle for avec une [liste] gnre par une substitution de commande. NOMBRE=9 7 3 8 37.53 for nombre in echo $NOMBRE # ou bien for nombre in 9 7 3 8 37.53 do echo n $nombre done
238
3. Structure itrative
32emp#es:
Supposons, par exemples que vous souhaitiez afficher les 100 premiers nombres (pour une obscure raison), alors vous taperez: i=0 while [$i lt 100] do echo $i i=$(($i+1)) done Supposons, par exemples que vous souhaitiez lire un nom partir du clavier , alors vous taperez: echo e Entrez un nom de fichier read fich while [-z $fich] do echo e Saisie recommencer read fich done
239
240
3.2 La boucle while Supposons, par exemples que vous souhaitiez afficher les 10 premiers nombre, alors vous taperez: var0=0 LIMITE=10 while [$var0 lt $LIMITE] do echo n $var0 # -n supprime le retour chariot. var0=expr $var0+1 #var0=$(($var0+1)) fonctionne aussi. done Supposons, par exemples que vous souhaitiez quitter si le paramtre donn est fin , alors vous taperez: while [$var1!=fin"] do echo Variable dentre #1 (quitte avec fin) read var1 echo variable #1 = $var1 done
3. Structure itrative
32emp#e:
until [$var1=fin] do echo "variable dentre #1 echo (fin pour sortir)" read var1 echo variable #1 =$var1 done # condition du test ici, en haut de la boucle.
241
242
3.4 Interruption & reprise dune boucle if [$# -ne 1] then echo Usage: $0 number echo I will find sum of all digit for given number" echo for eg. $0 123, I will print 6 as sum of all digit (1+2+3) exit1 fi n=$1 sum=0 sd=0 while [$n gt 0] do sd=`expr $n % 10` sum=`expr $sum + $sd` n=`expr $n/10` done echo sum of digit for number is $sum"
243
$cat deconnecte do sleep 180 echo ,\c done echo $1 nest plus connect $chmod u+x deconnecte $deconnecte c1 c1 nest plus connect $
Tand que lutilisateur pass en argument who (donc est connect), on boucle aprs avoir attendu 180 secondes et affich une virgule. Puis on signale quil nest plus connect. Les commandes testes dans le while sont excutes, donc leur affichage se fait lcran (sortie standard), afin dviter de recevoir laffichage parasite (seul le statut nous intresse), on redirige la sortie standard de la dernire commande dans le pseudopriphrique /dev/null.
while (who | grep $1) > /dev/null (ici c1) est dans la liste de la commande
244
4. Fonctions
+. ?o!ctio!s
Le shell permet la dclaration de fonctions qui pourront tre appeles au sein dune procdure ou en direct sur linterprte. Lappel une fonction est plus rapide que lappel un script. Une fonction regroupe des commandes qui seront lances lappel cette fonction. Contrairement aux procdures, une fonction peut modifier lenvironnement dun shell. nom_de_fonction ( ) { commande1 commande2 commande3 }
245
Les commandes contenues dans une fonction pourront utiliser : les paramtre positionnels ($0, $1, $2, ..., $9), les variables automatiques (?, #, *, $, , @, !), les structures de contrle (if, for, case, while, until), les redirections dentres/sorties, les tubes (pipe "|").
32emp#e :
$ info ( ) { date tty } $ info Fri Sep 16 16:05:06 MET 2000 /dev/tty3 $
246
4. Fonctions Les fonctions sont considres comme des commandes mais ne font pas partie de lenvironnement puisquelles ne peuvent tre exportes. La commande set permet de visualiser les variables et les fonctions dfinies dans le shell courant.
$ set HOME=/usr/c1 PATH=:/bin:/usr/bin:/usr/local/bin:/usr/c1/bin:. info( ) { date tty } $
4. Fonctions Les fonctions accdent leurs arguments par les paramtres positionnels ($0, $1, ...). Elles peuvent galement consulter les variables automatiques ($#, $*, ...).
$ dir ( ) { > ls $* >} $ dir /
Il est possible de rediriger les entres/sorties dune fonction, ou encore de les combiner par des pipes. Il est galement possible de les excuter dans des structures de contrle.
$ dir / > /tmp/out $ dir / | wc 3 15 198 $
Une fonction sutilise de la mme faon que les commandes internes et externes du shell. Dans lexemple suivant, la commande interne exit est excute dans le shell courant :
$ export info sh : cannot export functions $ essai ( ) { > date > exit 0 >} $ essai Fri Sep 16 16:55:34 MET 2000 Login :
247
Chaque commande shell de la fonction est excute en squence. Si une commande retourne un statut faux, la commande suivante est excute quand mme. La fonction retourne le statut de la dernire commande lance. return n permet de quitter la fonction en retournant n comme statut. Il est possible de sauvegarder les fonctions dans des fichiers de commandes. Dans ce cas les fonctions dfinies lintrieur ne seront connues que dans le fichier de commandes luimme, cestdire que le shell courant ne connatra pas les fonctions dfinies.
248
4. Fonctions Afin que le shell courant prennent en compte les fonctions dfinies dans un fichier, il suffit de les lancer en utilisant le "." :
$ cat fichfonc d(){ date } $ chmod u+x fichfonc $ . fichfonc Lun 19 Sep 10:45:33 MET 2000 $
32emp#e
factorielle() { if [ $# -ne 1 ] || [ $1 -lt 0 ] ; then echo "Usage: factorielle n (avec n >= 0)" 1>&2 else resultat=1 n=$1 while [ $n -gt 1 ] ; do let $[ resultat *= n] On peut utiliser cette fonction dans un script comme suit: n=0 until [ $n -eq 14 ] do resultat=$(factorielle resultat=$( factorielle $n) $n) echo "$n! = $resultat" let $(n += 1) done
32emp#e :
stat() { if [-d "$1" ] then echo $1 est un rpertoire return 0 else echo $1 n'est pas un rpertoire return 1 fi }
stat /tmp retourne 1 stat $dir dpend de la valeur de $dir stat $1 $1 est ici le paramtre du shell
249
250