Résumé LINUX

download Résumé LINUX

of 103

Transcript of Résumé LINUX

RESUME LINUX

FILALI MOULAY RACHID

FILALI MOULAY RACHID

Page :

1

PARTIE I : COMMANDES LINUX A : RAPPEL1.Grer fichiers et rpertoiresCrer un rpertoire (make directory): mkdir rp rm fichier1 fichier2 Crer des rpertoires imbriqus: Supprimer un rpertoire (remove dir): mkdir -p rp1/rp2 rmdir rp Changer de rpertoire (change dir): Supprimer un rpertoire non vide (force): cd nouveau_rp rm -rf rp cd .. (rpertoire parent) mv fichier_orig fichier_dest Supprimer (remove) des fichiers ou des liens:

2.Afficher les noms de fichierscd (rpertoire personnel) numrer (list) les fichiers ordinaires (ne cd ~alice (rpertoire personnel de alice) commenant pas par .) dans le rp. courant: Afficher rpertoire courant (print working dir) pwd Copier un fichier vers un autre: cp fichier_orig fichier_dest Copier des fichiers dans un rpertoire: cp fichier1 fichier2 rp Copier des rpertoires entiers (recursively): cp -r rp_orig rp_dest ls -t rsync -a rp_orig/ rp_dest/ Trier par taille (size) (d'abord les plus gros) Crer un lien symbolique: ls -S ln -s fichier_orig lien Renommer un fichier, lien ou rpertoire : Affichier en inversant (reverse) l'ordre de tri: ls Afficher une liste dtaille (long): ls -l numrer tous (all) les fichiers dans le rp. courant (y compris ceux commenant par .): ls -a Trier par date (time) (d'abord les plus rcents):

FILALI MOULAY RACHID

Page :

2

ls -r Afficher le contenu des fichiers Afficher bout bout le contenu de fichiers: cat fichier1 fichier2 (concatenate) Afficher le contenu de plusieurs fichiers (en faisant une pause chaque page): more fichier1 fichier2

Afficher toutes les lignes sauf celles qui contiennent une expression: grep -v expression fichier Recherche rcursive dans un rp.: grep -r expression rp Trier les lignes d'un fichier: sort fichier

less fichier1 fichier2 (plus de possibilits) Afficher les 10 premires lignes d'un fichier: head -10 fichier uniq -c (id. et compte chaque lment) Afficher les 10 dernires lignes d'un fichier: Trier, n'afficher qu'1 fois les lignes identiques: sort -u fichier (ou uniq)

5.Droits d'accs aux fichierstail -10 fichier Ajouter droits en criture au propritaire:

3.Modles de noms de fichierschmod u+w fichier (user, write) * .* tous les fichers tous les fichiers "cachs" Ajouter droits en lecture au groupe du fichier: chmod g+r fichier (group, read) Ajouter droits d'excution aux autres utilisat.: chmod o+x fichier caractre Ajouter droits lecture / criture tous (all):

*.log fichiers finissant par '.log' *bug* fichiers avec 'bug' dans leur nom *.? fichiers finissant par '.' et suivis d'un

4.Grer le contenu des fichierschmod a+rw fichier N'afficher que les lignes d'un fichier contenant une expression donne: chmod a+rX * grep expression fichier Rendre le rpertoire et tous les fichiers qu'il Recherche insensible aux majusc. / minusc.: contient accessibles par tous les utilisateurs: grep -i expression fichier FILALI MOULAY RACHID Page : 3 Rendre fich. excutables excutables par tous:

chmod -R a+rX rp (recursive) Changer le propritaire et le groupe d'un

Ajouter la sortie d'une commande un fichier: ls *.jpg >> fichiers_image

rpertoire et tout ce qu'il contient: Rediriger la sortie d'une commande vers chown -R nouvproprio:nouvgroupe rp l'entre d'une autre:

6.Comparer: fichiers, rpertoirescat *.log | grep erreur Comparer 2 fichiers:

9.Contrle de tchesdiff fichier1 fichier2 Afficher tous les processus excuts: Comparer 2 rpertoires: ps -ef diff -r rp1 rp2 Classement en direct des processus (P, M, T: trie par utilisation Proc, Mm ou Temps CPU): top Afficher la mmoire libre: free Afficher la mmoire virtuelle toutes les n secs: vmstat n Recherche rapide dans tout systme: (utilise un index, les fichiers rcents peuvent manquer): locate "*bar*" kill -9 Envoyer un signal d'arrt un processus: kill (numro indiqu par ps) Faire tuer un processus par le systme:

7.Rechercher des fichiersRechercher tous les fichiers dans le rpertoire courant (.) avec log dans leur nom: find . -name "*log*" Trouver tous les fichiers en .pdf dans rp et excuter une commande sur chacun: find . -name "*.pdf" -exec xpdf {} ';'

8.Rediriger sortie de commandeRediriger sortie de commande vers un fichier: ls *.png > fichiers_image

Tuer tous processus que l'on a le droit de tuer: kill -9 -1 Tuer tous processus appels windows: killall windows

FILALI MOULAY RACHID

Page :

4

Tuer une application en mode graphique: xkill (cliquer sur la fentre du programme)

tar zcvf archive.tar.gz rp/ Tester (lister) une archive compresse: tar jtvf archive.tar.bz2 tar ztvf archive.tar.gz Extraire les fichiers d'une archive compresse: tar jxvf archive.tar.bz2

10. Taille de fichiers et partitionsAfficher l'espace total occup sur le disque par des fichiers ou des rpertoires (disk usage) du -sh rp1 rp2 fichier1 fichier2 Nombre de caractres, mots et lignes:

tar zxvf archive.tar.gz wc fichier (word count) Options de tar: Afficher la taille, le Type, l'espace total et c: crer l'espace libre dans la partition courante: t: tester / lister df -Th . x: extraire Afficher cette info pour toutes les partitions: df -Th j: (d)compression bzip2 la vole z: (d)compression gzip la vole Manipuler des archives zip: zip -r archive.zip (crer) unzip -t archive.zip (tester / lister) unzip archive.zip (extraire)

11.CompresserCompresser un fichier: bzip2 fichier (meilleur taux de compression) gzip fichier Dcompresser un fichier: bunzip2 fichier.bz2 gunzip fichier.gz

13.ImprimerEnvoyer fichiers PostScript ou texte sur queue: lpr -Pqueue f1.ps f2.txt (local printer) Lister les tches d'impression dans queue: lpq -Pqueue Annuler la tche n123 dans queue: cancel 123 queue Page : 5

12.Manipuler des archivesCrer une archive compresse (tape archive) tar jcvf archive.tar.bz2 rp/ (le mieux!)

FILALI MOULAY RACHID

lprm -Pqueue 123

Mesurer le temps pris par une commande: time trouve_prince_charmant -beau -ric he

14.Gestion des utilisateursAfficher les utilisateurs connects au systme: who Afficher sous quel utilisateur je suis connect: whoami Afficher quel groupe appartient utilisateur: groups utilisateur

16.Aide sur les commandesAide de base (pour la plupart des commandes): commande help (parfois '-h') Voir le manuel complet d'une commande: man grep help cd (commandes internes du shell)

17.RseauPasser l'utilisateur hulk: Vrifier l'tat d'un lien Ethernet: su - hulk ethtools Passer au super-utilisateur (root): su sudo -i su (sans changer de rp. ni d'environnement) Excuter une commande en tant que root: sudo commande Afficher toutes les interface rseau disponibles: ip link show Assigner une adresse IP une interface rseau: ip address add 207.46.130.108 dev eth0 Dsactiver une interface rseau: ip link set dev eth0 down Dfinir une passerelle par dfaut: ip route add default via 192.168.0.1 Supprimer la route par dfaut: ip route del default Tester la connexion rseau avec une machine: ping 207.46.130.108 FILALI MOULAY RACHID Page : 6

15.Grer le tempsAttendre 60 secondes: sleep 60 Afficher la date actuelle: date Mettre l'heure ntp : ntpdate time.nist.gov

18.Bases d'administration systmeRedmarrer la machine dans 5 minutes: shutdown -r +5 Eteindre la machine immdiatement: shutdown -h now (ou halt)

umount /mnt/cleusb Crr un volume RAID: mdadm -C /dev/md0 -l1 -n2 /dev/hda /dev/hdb Visualiser l'tat d'un volume RAID: mdadm -D /dev/md0 Marquer un disque comme dfaillant: mdadm /dev/md0 -f /dev/hda Sortir un disque du volume RAID: mdadm /dev/md0 -r /dev/hda Ajouter un disque dans un volume: mdadm /dev/md0 -a /dev/hda Prparer un volume physique pour LVM: pvcreate blockdev1 ... blockdevN Crer un volume group LVM: vgcreate monvg blockdev1 ... blockdevN Crer un volume logique LVM de 30Mb: lvcreate -n vol1 -L30M monvg Etendre un volume logique de 5Mb: lvextend -L5M /dev/mapper/monvg/vol1 Rduire un volume logique de 15Mb: lvreduce -L15M /dev/mapper/monvg/vol 1 Crer un volume TrueCrypt (fichier ou device): truecrypt -c

19.Gestion des filesystemsCrer ou supprimer des partitions sur le premier disque IDE: fdisk /dev/hda1 Crer (formater) un systme de fichiers ext3: mkfs.ext3 /dev/hda1 Crer (formater) un systme de fichiers FAT32: mkfs.vfat -v -F 32 /dev/hda2 Monter une partition formate: mkdir /mnt/cleusb (ncessaire une seule fois) mount /dev/uba1 /mnt/cleusb Monter image de systme de fichiers (loopback) mount -o loop initrd.img /mnt/initrd Utiliser un fichier comme un block device losetup /dev/loop0 fichier losetup -d /dev/loop0 (librer le device) Dmonter un systme de fichiers: FILALI MOULAY RACHID

Page :

7

(D)Monter un volume TrueCrypt: truecrypt volume /mnt/crypto (-d) Crer un volume luks: cryptsetup luksFormat /dev/ice Ouvrir un volume luks (monter ensuite crypdv): cryptsetup luksOpen /dev/ice cryptdv

[[:space:]] espace ou tabulation [[:lower:]] [a-z] ([[:upper:]] : [A-Z]) [[:print:]] caractre imprimable ou espace [[:xdigit:]] [A-Fa-f0-9]

21. Raccourcis bash dbut de ligne fin (end) de ligne

20.Expressions rgulires couper (kill) la fin de la ligne dans grep, vi, sed, ... les caractres ?, +, {, |, (, et ) doivent tre prcds d'un antislash (\) . n'importe quel caractre * caractre prcdent 0 fois ou + + caractre prcdent 1 fois au moins ? le caractre prcdent 0 ou 1 fois {n} le caractre prcdent n fois {m,n} le caractre prcdent de m n fois {n,} le caractre prcdent n fois ou plus [a-z] un caractre en minuscule [a-zA-Z] une lettre [0-9] un chiffre ^/$ le dbut/la fin de ligne | sparateur (ou logique) [[:alnum:]] [[:alpha:]] ou [[:digit:]] coller (yank) efface (delete) le caractre droit du curseur d efface le mot droite du curseur transposer deux caractres t transpose le mot prcdent et le suivant rechercher dans l'historique effacer l'cran (quivalent clear) envoie le caractre 'fin de fichier' arrter la commande en cours stopper la commande en cours complte l'lment affiche les compltions possibles

22. Historique et job control bash[[:digit:]] [0-9] !! r-excuter la dernire commande [[:alpha:]] [[:upper:]] ou [[:lower:]] !texte excuter la dernire commande FILALI MOULAY RACHID Page : 8

commenant par texte !n excuter la commande numro n cmd & excuter la commande cmd en arrire plan fg %n mettre le travail n en avant plan (sans argument : le dernier travail) bg %n mettre le travail n en arrire plan (sans argument : le dernier travail) kill %n terminer le travail n jobs affiche la liste des travaux du shell history affiche l'historique des commandes

Modes i () mode insertion mode commande o ajouter une ligne aprs la ligne courante et passer en insersion Sortir , sauver :w sauver le fichier :w nom sauver dans le fichier nom :w>>nom sauver la fin du fichier nom :q quitter sans sauver :q! quitter de force sans sauver :x (:wq) sauver et quitter :e nom ferme le fichier courant et dite le fichier nom :e! nom ferme le fichier courant de force et dite le fichier nom :e! annule tous les changements et revient au fichier original Dplacements h dplacement vers la droite j dplacement vers le bas k dplacement vers le haut l dplacement vers la gauche ^^ dbut de ligne $ fin de ligne

23. Raccourcis less (ou man) avance d'une page avance d'une ligne n avance de n lignes b recule (back) d'une page nb recule de n lignes q quitter less /texte rechercher la chaine texte n rechercher l'occurence suivante > va au dbut du fichier < va la fin du fichier v edite le fichier en cours !command excute command dans un shell

24. Editeur ViFILALI MOULAY RACHID

Page :

9

gg premire ligne (ou 1G) G dernire ligne nG ligne n (ou :n) w mot suivant b mot prcdent page suivante page prcdente fx aller aprs le prochain caractre x de la ligne tx aller avant le prochain caractre x de la ligne H aller en haut de l'cran M aller au milieu de l'cran

L aller en bas de l'cran Copier , couper , coller x coupe le caractre sous le curseur yy copie la ligne courante entire y^ copie la ligne du dbut au curseur y$ copie la ligne du curseur la fin yw copie le mot suivant dd coupe la ligne courante entire d^ coupe la ligne du dbut au curseur d$ coupe la ligne du curseur la fin dw coupe le mot suivant P colle avant la position courante p colle aprs la position courante

FILALI MOULAY RACHID

Page :

10

B : QUESTIONS /REPONSES : COMMANDES LINUX CPQ1.Est-il possible de faire une copie d'un rpertoire et de l'ensemble de ses sous-rpertoires en une seule ligne de commande ? R1.Oui, c'est cela que sert l'option -r (recursive). Supposons, larborescence d'exemple

Que vous voulez copier le rpertoire Rapport et ses sous-rpertoires dans le rpertoire www. Il faut taper :cp -r Rapport/ www/

oucp -R Rapport/ www/

Q2.Que se passe-t-il si l'on veut faire une copie appele tentative/ de son rpertoire essai/, et que le rpertoire tentative/ existe dj ? R2.Quand on indique le nom d'un rpertoire qui n'existe pas, cp considre qu'il s'agit du nom donner la copie du premier rpertoire (ou fichier). Quand le rpertoire existe dj, cp considre qu'il s'agit de l'endroit o il faut placer la copie du premier lment (la cible : target). Si donc on tapecp -R essai/ tentative/

et que tentative/ existe dj, on obtient une copie de essai/, galement appele essai/, place dans le rpertoire tentative/. Q3.Que se passe-t-il si vous voulez faire une copie d'un fichier dans un rpertoire o il existe dj un fichier de ce nom ? R3.Le programme demande si vous voulez vraiment effacer le fichier dj existant pour le remplacer par celui dont vous faites la copie.

FILALI MOULAY RACHID

Page :

11

Attention ! Il en est ainsi parce que vous avez un alias de cp sur cp -i, qui demande confirmation. Ce n'est pas ncessairement le cas partout. Pour savoir quels sont vos alias, tapez alias ou allez voir dans votre fichier .alias. Avec la config conscrits, les alias sont dans le .zshrc (le fichier de configuration du shell zsh). Q4.Quel est l'effet d'une ligne comme :cp fichier1 fichier2 fichier3 repertoire/

R4.Les fichiers fichier1, fichier2 et fichier3 sont copis sous leur nom dans le rpertoire rpertoire/, qui doit exister.

mvQ5. Que se passe-t-il si le fichier cible existe dj ? R5. Si vous avez un alias de mv sur mv -i (cas de la config conscrits), le programme demande si vous voulez rcrire le fichier cible en remplaant son contenu par celui du fichier de dpart :Rachid ~ $ ls rapport.tex notes complements Rachid ~ $mv notes complements mv: overwrite complements (yes/no)? y Rachid ~ $ls rapport.tex complements

Q6.Supposez que vous avez chez vous l'arborescence

Et que vous vous trouvez dans ~/Rapport/docs/. Q61. Comment faites-vous pour y amener Rapport.tex qui se trouve dans le rpertoire pre ?R61. mv ../Rapport.tex .

Amener le fichier Rapport.tex situ dans rpertoire pre (../Rapport.tex) dans le rpertoire o on se trouve (. : ici). Q62. Comment faites-vous ensuite pour ramener ce fichier son emplacement d'origine ?R62. mv Rapport.tex ..

FILALI MOULAY RACHID

Page :

12

Amener le fichier Rapport.tex situ dans le rpertoire courant, dans le rpertoire pre (..). Q7. Comment renommer un rpertoire bla/ en blo/ ? Que se passe-t-il si le rpertoire blo existe dj ? R7. Il suffit de tapermv bla/ blo/

Si jamais blo/ existe dj, bla/ devient un sous-rpertoire de blo/. Q8. Comment faire pour la fois dplacer un fichier et changer son nom ? Que se passe-t-il si il existe dj un fichier de ce nom dans le rpertoire d'arrive ? R8. Supposons que l'on veut amener Rapport.tex dans le rpertoire courant, et l'appeler On tape :mv ../Rapport.tex stage Rapport.tex est la fois dplac et renomm; vous pouvez vrifier qu'il n'est plus dans Rapport et qu'il y a dsormais un fichier stage dans docs/.

stage.

Si le fichier d'arrive existe dj, on se retrouve dans le cas vu tout au dbut de cet exercice (remplacement ou non). Q9. Mmes questions avec un rpertoire. R9. Pour dplacer et renommer, la syntaxe est la mme que pour un fichier :mv ../bla ble/

dplace le rpertoire bla/ du rpertoire pre dans le rpertoire courant, et le renomme en ble/. Si jamais ble/ existe dj, bla/ y est dplac sous son nom, et devient un sous-rpertoire de ble/. Q10. Que se passe-t-il si on lance mv avec les options -i et -f ensemble ? . R10. L'option -f (force) sert renommer le fichier imprativement, mme si le fichier cible existe dj, sans demander confirmation. L'option -i (interactive) demande confirmation. Des deux options, c'est -f qui l'emporte :Rachid ~ $ ls bla tutu Rapport/ Rachid ~ $ alias mv mv='mv -i' Rachid ~ $ mv bla tutu mv: overwrite tutu (yes/no)? n Rachid ~ $ mv -f bla tutu Rachid ~ $ ls tutu Rapport/

FILALI MOULAY RACHID

Page :

13

mkdir, rmdirQ11. Crez trois rpertoires en une seule ligne de commande. R11. Si vous voulez crer trois rpertoires bla, ble et bli, tapezmkdir bla ble bli

Q12. Effacez ces trois rpertoires en une seule ligne de commande. R12. Il faut taperrmdir bla ble bli

Q13. Que se passe-t-il si vous tapez mkdir mkdir ? R13. Vous crez chez vous un rpertoire appel mkdir. Q14. Vous voulez dtruire un rpertoire bla/... mais a ne marche pas.R14. ls vous dit qu'il est vide, et pourtant vous ne russissez pas l'effacer : c'est qu'il n'est pas vide. Il doit y avoir des fichiers cachs, commenant par un point, que vous ne voyez pas avec ls sans option. Il faut taper ls -a

et effacer les fichiers trouvs. Q15. Est-ce que mkdir peut prendre des options ? R15. Oui, une : l'option -p, dont on va parler tout de suite. Q16. quelle condition est-ce que la ligne de commande mkdir Rapport/annexes peut fonctionner et crer effectivement ce sous-rpertoire ? R16. Il faut que le rpertoire Rapport existe, pour que l'on puisse y crer un sous-rpertoire. Q17. Y a-t-il une option de mkdir qui permette de crer la fois un rpertoire et un sousrpertoire de ce rpertoire ? R17. Oui, c'est l'option -p. Quand vous tapezmkdir -p Rapport/annexes

un rpertoire Rapport est cr, et dans ce rpertoire un sous-rpertoire annexes. Q18. Comment crer un rpertoire en spcifiant des droits ? R18. On utilise l'option -m (mode) de mkdir. Par exemple :

FILALI MOULAY RACHID

Page :

14

Rachid ~ $ mkdir -m 700 Mail Rachid ~ $ ls -ld Mail drwx-----2 robin litt95

2048 Jun

2 15:27 Mail/

Q19. Quel est l'effet de la commande suivante :rmdir -p toto/tata/tutu/

R19. Cette commande efface toute la hirarchie des rpertoires, condition qu'ils soient vides; si par exemple tutu/ est vide mais toto/ ne l'est pas, tutu/ sera effac mais pas toto/, et le programme s'arrte. Q20. Cration rcursive sans message d'erreur R20. On achve avec ceci le tour de l'option -p... Si donc on tapemkdir -p toto/tutu/

le sous-rpertoire tutu/ est cr si toto/ existe dj; et si toto/ n'existe pas, ce rpertoire et son sous-rpertoire sont crs. Il n'y a pas de message d'erreur.

cdBut de l'exercice : apprendre se servir de . et .. (point et point point). .. dsigne le rpertoire pre du rpertoire courant, et . dsigne le rpertoire courant. .. sert beaucoup avec cd, pour remonter d'un niveau dans une arborescence; . est trs utile avec des commandes comme mv ou cp, o il signifie en fait ici.

Q21. Dans quel rpertoire vous trouvez-vous quand vous vous loguez ? R21. Vous vous trouvez dans votre rpertoire personnel, dans ~ (tilde). Q22. Allez directement dans ~/Rapport/docs/afaire/ R22. Tapercd Rapport/docs/afaire

Q23. De l, passez dans ~/Rapport/docs/fait/R23. cd ../fait

Q24. Revenez dans ~/Rapport/ FILALI MOULAY RACHID Page : 15

R24. Tapercd ../..

oucd ~/Rapport

Q25. Sans changer de rpertoire, regardez avec less le contenu de ~/www/index.html R25. Il faut taperless ~/www/index.html

ouless ../www/index.html

Q26. Passez dans ~/Rapport/docs/R26. cd docs/

Q27. En restant l o vous tes, affichez les droits de ~/Mail/ R27. Il y a un petit pige dans cette question. En effet, si vous tapezls -l Mail/

vous allez obtenir le contenu du rpertoire Mail/, mais pas le statut du rpertoire luimme. Il faut donc utiliser l'option -d de ls :Rachid ~ $ ls -ld Mail drwx------ 2 toto litt98 512 Apr 2 19:02 /users/98/litt/toto/Mail/

Q28. Revenez dans votre rpertoire principal R28. Taper cd, sans arguments. Q29. Que se passe-t-il si vous vous dloguez alors que vous n'tes pas dans votre rpertoire principal ? R29. Strictement rien ! a n'a aucune importance.

lsQ30. Affichez le contenu de /usr/local/games/binR30. ls /usr/local/games/bin

Vous obtenez une liste des jeux installs.

FILALI MOULAY RACHID

Page :

16

Q31. Quelle est la taille de votre .flnewsrc.forum ?R31. ls -al .flnewsrc.forum

L'option -a fait apparatre les fichiers de configuration, qui commencent par un point; l'option -l affiche plusieurs renseignements, en particulier la taille. En fait, si vous indiquez le nom complet du fichier cherch, avec le point, l'option -a est inutile; c'est le cas ici. Le .flnewsrc.forum contient la liste de continua de forum avec des indications sur les contis auxquels vous tes abonns et les messages que vous avez dj lus. Il est remis jour chaque fois que vous lisez forum : la date indique correspond donc la dernire fois que vous avec lanc (ou plus prcisment, quitt...) forum. Q32. quoi sert l'option -R de ls ? R32. Cette option permet d'afficher une liste rcursive, c'est--dire qui indique le contenu des rpertoires lists, ainsi que de leurs sous-rpertoires. Si vous tapez ls -R dans votre rpertoire personnel, vous aurez une liste de tout ce que vous avez chez vous. Q33. Dans quel ordre les fichiers et rpertoires sont-ils classs par dfaut? Quelles sont les options qui peuvent servir modifier ce critre de classement ? R33. Pour savoir cela, il faut chercher le mot sort dans le man de ls. La premire occurence vous dit que par dfaut le rsultat est tri par ordre alphabtique, selon la premire lettre des fichiers. De faon plus prcise, l'ordre est le suivant : ponctuations, chiffres, majuscules, minuscules, selon l'ordre dfini par la table des caractres ASCII. En continuant chercher, vous trouvez des options intressantes : -r (reverse), qui inverse l'ordre de classement, -t (time) qui trie en fonction de la date de dernire modification. Q34. Affichez le contenu de votre rpertoire courant de telle sorte que les fichiers modifis rcemment apparaissent en premier.R34. ls -t

si vous voulez juste modifier le critre de tri, sans plus de renseignements; ou encorels -lt

si vous voulez une longue liste. Q35. Quels sont les droits de votre rpertoire Mail ? Qu'est-ce que cela signifie ? R35. La ligne ressemble ceci :drwx------ 2 toto litt98 512 Apr 2 19:02 Mail

Le d indique qu'il s'agit d'un rpertoire (directory). Suivent ensuite neuf caractres, allant par trois; r, w, x correspondent aux droits que vous avez sur le rpertoire (ou le FILALI MOULAY RACHID Page : 17

fichier) : r (read) pour le droit de lecture, w (write) pour le droit d'criture, x (execute) pour le droit d'excution. Les six tirets qui suivent correspondent aux droits qu'ont le groupe (ici litt98) puis le reste des utilisateurs. Ici il y a des tirets, ce qui signifie qu'ils n'ont aucun droit sur ce rpertoire. Cela veut dire que seul le propritaire a le droit de lire et crire dans son rpertoire Mail/, ainsi que d'y accder. Les rpertoires et les fichiers de courrier sont protgs contre les indiscrtions. Un fichier de texte standard a les droits suivants :-rw-r--r--

Il y a un tiret tout au dbut, ce qui signifie que c'est un fichier normal; vous avez le droit d'crire et de lire (rw-), votre groupe et les autres utilisateurs ont le droit de lire le fichier (r--). La commande chmod permet de changer ces droits, si l'on veut restreindre la lecture, ou rendre un fichier excutable. Remarque : ne cdez pas la paranoa... vos camarades ne passent pas leur temps farfouiller sur les comptes des voisins, donc vous n'avez pas besoin d'interdire la lecture tout ce que vous avez chez vous. Q36. Dcrivez le rsultat de la commande ls -l. R36.o o -rw-r--r-- 1 robin litt95 754 Mar 22 11:59 projet.aux

Les dix premiers caractres dtaillent les droits du fichier. Le premier caratre identifie le type du fichier : ici, rien n'est spcifi, c'est donc un fichier normal. L'exercice prcdent dtaille la signification des lettres suivantes. Ce sont les droits normaux d'un fichier standard : tout le monde (propritaire, groupe et autres utilisateurs) peut lire le fichier, seul le propritaire peut crire dedans.-rw-r--r-- 1 robin litt95 754 Mar 22 11:59 projet.aux

o o o o o o o o o

Le chiffre indique le nombre de liens. Nous vous renvoyons aux exercices sur les liens pour plus d'explications (qui peuvent attendre un niveau dbutant...).-rw-r--r-- 1 robin litt95 754 Mar 22 11:59 projet.aux

Le troisime champ donne le nom du propritaire du fichier. Ici, il s'agit de l'utilisateur robin.-rw-r--r-- 1 robin litt95 754 Mar 22 11:59 projet.aux

Ce champ indique le groupe de l'utilisateur. Ici, nous apprenons qu'milia est une littraire de la promotion 1995.-rw-r--r-- 1 robin litt95 754 Mar 22 11:59 projet.aux

Ce chiffre donne la taille en octets du fichier considr. Ici, le fichier fait 754 octets, soit moins d'un Ko (1000 octets). C'est un petit fichier.-rw-r--r-- 1 robin litt95 754 Mar 22 11:59 projet.aux

Ce champ indique la date de dernire modification du fichier, ici le 22 mars de l'anne courante, 11h59. Quand le fichier date d'une anne antrieure, celle-ci est indique et l'heure ne figure plus. FILALI MOULAY RACHID Page : 18

-rw-r--r-- 1 robin

litt95

754 Mar 22 11:59 projet.aux

Vient enfin le nom du fichier. Le suffixe .aux montre qu'il s'agit d'un fichier produit par LaTeX lors de la compilation d'un fichier projet.tex. Q37. Comment afficher les droits d'un rpertoire donn ? R37. Si on tapels -l repertoire/

c'est le contenu du rpertoire qui s'affiche, et pas son statut lui. L'option -d (directory) permet de lister le rpertoire lui-mme. Q38. Caractres identifiant les fichiers ? R38. Ce sont les caractres suivants : slash (/) pour un rpertoire arobase (@) pour un lien symbolique toile (*) pour un excutable pipe (|) pour un pipe nomm gal (=) pour un socket C'est l'option -F qui permet de les afficher. Q39. Droits sur un rpertoire ? R39. Avoir le droit d'excuter un rpertoire, c'est avoir le droit d'y accder, de s'y dplacer; mais je n'ai pas le droit de lire son contenu. Donc, moins d'en tre propritaire, je ne peux pas afficher le contenu d'un rpertoire ayant comme droits :drwx--x--x

Les droitsQ40. Changez les droits d'un fichier fic1 pour que tous ceux de votre groupe puissent crire dedans.R40. chmod g+w fic1

Q41. Donnez en une seule ligne le droit d'excution tous les utilisateurs d'un fichier script qui n'a jusqu'alors que des droits standards (-rw-r--r--).R41. chmod uog+x script

Q42. Le fichier toto a les droits suivants : -rwxr--r--. Modifiez-en les droits en une ligne de commande de sorte que le propritaire n'ait plus que le droit de lecture.

FILALI MOULAY RACHID

Page :

19

R42. chmod u-wx toto

Q43. Modifier les droits du fichier toto (-rwxr--r--) de sorte que le groupe et les autres utilisateurs aient les mmes droits que le propritaire.R43. chmod og+wx toto

Q44. Quelle option permet de modifier rcursivement les droits d'un rpertoire et des fichiers qu'il contient ? R44. C'est l'option -R. Par exemple, pour interdire tous les droits aux fichiers prsents dans une branche du rpertoire confidentiel, on peut faire :chmod -R og-rwx confidentiel

Q45. Quelle option de mkdir permet de crer un rpertoire en spcifiant les droits sur ce rpertoire ? R45. C'est l'option -m qui permet de le faire. Par exemple, pour crer un rpertoire en lecture interdite aux autres :mkdir -m og-r repertoire

Q46. Affichez et interprtez les droits de /usr/sbin/mount.R46 Rachid ~ $ ll /usr/sbin/mount -r-xr-xr-x 1 root bin 27208 Jan 9 2000 /usr/sbin/mount*

Il s'agit d'un fichier xcutable par tout utilisateur.

Les liensQ47. Vous avez chez vous un rpertoire tmp/ qui contient un fichier bidon. Crez un lien physique sur tmp/bidon appel blo, dans votre rpertoire d'accueil (HOME). Comparez les contenus de tmp/bidon et de blo. Que contient blo ?R47. ln tmp/bidon blo

Les contenus sont identiques. Les noms de fichiers tmp/bidon et blo renvoient au mme endroit sur le disque dur.

Q48. Mme question avec un lien symbolique.R48. ln -s tmp/bidon blo

Le contenu semble tre identique, cependant, propos du blo, le disque dur ne contient comme information que le nom du fichier vers lequel le lien pointe (tmp/bidon).

Q49. Quelles sont les diffrences entre les liens durs et les liens symboliques ? FILALI MOULAY RACHID Page : 20

R49. On vient d'en voir une. On en dduit que le temps d'accs au contenu d'un lien dur est plus rapide que pour un lien symbolique. Une autre diffrence notable est que, contrairement aux liens symboliques, un lien dur ne peut pas pointer vers un rpertoire. Q49. Dans quel cas ne peut-on pas faire de lien physique ? Que faut-il faire ? R49. On ne peut pas faire de lien dur vers un rpertoire. Dans ce cas, il faut donc utiliser un lien symbolique. Q50. Quel est l'effet de chmod sur un lien ? R50. S'il s'agit d'un lien dur, les droits des deux fichiers lis sont modifis. En revanche, s'il s'agit d'un lien symbolique, les deux fichiers peuvent avoir des droits diffrents.

Les processusQ51. Affichez la liste des processus associs votre terminal. Affichez la liste des processus dont vous tes propritaire. Recommencez en utilisant l'option -l. quoi correspondent les colonnes PID et PPID ? R51.1. Rachid ~ $ ps 2. 3. 4. 5. PID 16970 16992 17382 TT pts/2 pts/2 pts/3 S S S R TIME 0:00 0:07 0:00 COMMAND /usr/local/util/bin/zsh4 vim systeme-sol.tml /usr/local/util/bin/zsh4

6. Rachid ~ $ ps -l

7. 8. 9. 10.

F 8 8 8

UID PID PPID %C PRI NI SZ RSS WCHAN S TT 9625 16970 16967 0 48 20 4032 3152 mutex_ex S pts/2 9625 16992 16970 1 58 20 4312 3760 mutex_ex S pts/2 9625 17382 17379 0 48 20 3912 2840 mutex_ex S pts/3

TIME 0:00 0:07 0:00

COMMAND /usr/local/u vim systeme/usr/local/u

Les numros apparaissant dans la colonne PID sont les numros des diffrents processus. Le PPID dsigne lui le numro du processus pre du processus en question. Par exemple, ici, le processus 16992 (vim) est un fils du processus 16970 (zsh). Q52. Lancez une commande longue en arrire plan. Quel est le comportement du processus associ lorsqu'il reoit les signaux suivants : R52. Pour envoyer un signal un processus, on peut faire :Rachid ~ $ kill -23 17382

17382 dsignant un numro de processus (PID) et 23 le numro d'un signal (SIGSTOP).o sigkill

(9) Page : 21

FILALI MOULAY RACHID

Le processus est tu sans pouvoir de dfendre.o sigstop

(23)

Le processus s'interrompt.o sigcont

(25)

Le processus interrompu redmarre. Q53. Utilisez la commande nice pour lancer des commandes ayant une faible priorit.R53. Rachid ~ $ nice -19 ./calcul

Q54. Interprtez la hirarchie des processus qui vous appartiennent. R54. Pour vous aider comprendre, vous pouvez afficher un arbre en lanant la commande pstree (FreeBSD) ou ptree (Solaris). Q55. La commande ps | wc compte deux processus en plus de ceux qui existent rellement lorsqu'on lance la commande. Pourquoi ? R55. Ce sont les processus associs aux commandes ps et wc que vous venez de lancer ! Q56. Donner deux commandes pour reprendre l'excution d'une instruction interrompue par un ^Z. R56. Vous disposez des commandes fg et bg. fg permet de poursuivre le droulement du programme. bg le fait aussi mais il relance le programme en tche de fond.

Pipes, jokers et redirections catQ57. Comment visualiser deux fichiers l'un aprs l'autre l'aide de la commande cat ? R57. Il suffit de taper les deux noms de fichiers la suite; par exemple, pour visualier bla puis on tape :cat bla blo

blo,

Q58. Comment faire une copie d'un fichier sans utiliser cp ni ouvrir d'diteur de texte ? R58. On demande cat d'afficher le contenu d'un fichier, puis de placer le rsultat dans un fichier :cat toto > copie

Q59. Utiliser cat pour crire un peu de texte et mettre le rsultat dans un fichier notes. FILALI MOULAY RACHID Page : 22

R59. On demande cat de rediriger sa sortie dans un fichier, puis on n'a plus qu' taper le texte et indiquer la fin du texte avec ^D :Rachid ~ $ ls maitrise.tex Rachid ~ $ cat > notes Faire la bibliographie Revoir le chapitre 1. ^D Rachid ~ $ ls maitrise.tex notes Rachid ~ $ cat notes Faire la bibliographie Revoir le chapitre 1. Rachid ~ $

C'est bien sr un moyen un peu spartiate pour crire du texte, mais dans le cas de choses trs courtes dans ce style, ce peut tre plus rapide que de lancer un vritable diteur. Q60. Quelle diffrence y a-t-il entrecat bla blo > blu

etcat bla blo >> blu

Que se passe-t-il, pour chaque ligne, selon que le fichier blu existe ou n'existe pas ?cat bla blo > blu

R60. Concatne les deux fichiers bla et blo, et place le rsultat dans un nouveau fichier appel blu. Si blu existe dj, le shell affiche un message d'erreur et ne fait rien.cat bla blo >> blu

place la concatnation de bla et blo la fin d'un fichier blu dj existant. S'il n'existe pas, le shell affiche un message d'erreur et en reste l, sans crer de fichier blu.

Les deux redirections ne sont donc pas du tout quivalentes, mais leur action dpend du shell, qui a des options qui modifie leur comportement par dfaut. Q61. Comment obtenir un fichier blo qui corresponde un fichier bla dont les lignes seraient dsormais numrotes ? R61. Il faut utiliser l'option -n de cat. Par exemple :Rachid ~ $ cat bla Pomme Poire Prune Rachid ~ $ cat -n bla > blo Rachid ~ $ cat blo 1 Pomme 2 Poire

FILALI MOULAY RACHID

Page :

23

3 Prune Rachid ~ $

Jokers et expressions rguliresQ62. Vous avez chez vous des fichiers appels essai1, essai2, essai3 et essai4. Comment les effacer en une seule ligne de commande ? R62. Il s'agit de donner le nom des fichiers en indiquant qu'ils commencent par essai et qu'ils finissent par un chiffre. Il y a en fait plusieurs faons de faire :o o o rm essai[1234]

: les crochets signifient l'un des caractres qui se trouvent

entre crochets; : c'est le mme principe, sauf que l'on indique un intervalle au lieu d'crire explicitement les chiffres; rm essai? : le point d'interrogation dsigne n'importe quel caractre unique, le point y compris, sauf si le nom du fichier commence par un point (ls ?pine dans $HOME ne vous donnera pas, par exemple, la liste des fichiers de configuration de Pine : .pinerc, etc).rm essai[1-4]

Ici, on trouvera tous les fichiers commenant par essai, suivi d'un unique caractre qui peut ne pas tre un chiffre.o rm essai* : c'est la formulation la plus vague : effacer les fichiers dont le nom commence par essai suivi de quelque chose, c'est--dire d'un nombre indfini de caractres, ou aucun.

Q63. Dans mon rpertoire d'accueil, j'ai un certain nombre de fichiers avec un suffixe .c. Je dsire les regrouper dans un rpertoire que j'appelerai C/. Quelles sont les commandes que je dois taper ? R63. On commande par crer un rpertoire C avec mkdir, puis, avec mv, on dplace tous les fichiers ayant un suffixe . et dont le nom est fait d'une suite de caractres quelconques :Rachid ~ hello* hello.c Rachid ~ Rachid ~ Rachid ~ C/ Rachid ~ hello.c $ ls zoinx* zoinx.c $ mkdir C $ mv *.c C/ $ ls hello* zoinx* $ ls C/ zoinx.c

Q64. Vous dsirez regrouper dans un rpertoire Rangement les fichiers dont le nom contient un caractre minuscule suivi d'un caractre majuscule. Quelle(s) est/sont la/les commande(s) donner ? R64. On commence par crer le rpertoire Rangement avec mkdir. Pour dsigner les noms des fichiers, il faut indiquer la notion de minuscule. On pourrait crire explicitement l'alphabet entre crochets, pour dire l'un de ces caractres, puis faire de mme avec les majuscules. Mais FILALI MOULAY RACHID Page : 24

on gagne du temps en utilisant des intervalles ([a-z] et [A-Z]). Le reste du nom du fichier, avant et aprs la minuscule puis la majuscule, est indfini. On crit donc :Rachid ~ $ mkdir Rangement Rachid ~ $ mv *[a-z][A-Z]* Rangement/

Q65. Mme chose avec les fichiers dont le nom contient trois voyelles la suite. R65. Le principe est le mme, sauf que l'on indique explicitement les voyelles entre crochets :Rachid ~ $ mkdir Rangement Rachid ~ $ mv *[aeiou][aeiou][aeiou]* Rangement/

Q66. En utilisant ls et grep, affichez la liste des fichiers dans /bin dont le nom correspond un motif donn. R66. On peut procder de deux faons : utiliser ls seul et des jokers, ou rediriger ls dans grep et utiliser les expressions rgulires de grep. !Attention ! Dans la suite, on suppose que l'on se trouve dj dans /bin/. On met des apostrophes autour des expressions de grep pour les protger contre le shell. Enfin, on ne dtaille pas les expressions rgulires; noter ces points importants propos de grep :o o o o o

Le chapeau (^) en dbut d'expression dsigne le dbut de la ligne; Le dollar en fin d'expression dsigne la fin de la ligne; Le point dsigne n'importe quel caractre; L'toile signifie zro ou plus de fois le caractre qui prcde; c'est un multiplicateur; Comme avec les jokers du shell, [^m] veut dire sauf le caractre m.

On constate que grep est plus complexe mais bien plus puissant que les jokers du shell. Avec ls seul Commence par a et dont la deuxime lettre est s ou t Contient un et se termine par t Contient gre ou st Contient exactement deux lettres m Contient au moins deux lettres m Contient au moins quatre caractres et aucun chiffre Est constitu de deux lettres exactement Commence et finit par un chiffrels a[st]* ls *un*t ls *(gre|st)*

Avec ls et grepls | grep '^a[st].*' ls | grep '.*un.*t$' ls | grep '\(gre\|st\)' ls | grep '[^m]*m[^m]*m[^m]*' ls | grep '.*m.*m.*' ls | grep '^[^0-9]\{4,\}$'

ls ??

ls | grep '^..$'

ls [0-9]*[0-9] ls | grep '^[0-9].*[0-9]$'

FILALI MOULAY RACHID

Page :

25

Q67. Comment liminer les lignes vides dans un fichier ? Comment liminer les lignes ne contenant que des blancs ? Comment liminer toutes les lignes blanches ? R67. Une ligne vide est diffrente d'une ligne ne contenant que des blancs, c'est--dire des espaces ou des tabulations, mme si pour un oeil humain cela revient au mme. La commande de recherche sera diffrente selon le cas :o

Lignes vides : c'est rien entre le dbut et la fin de la ligne; on crit donc :grep '^$' fichier

o

Lignes ne contenant que des blancs : on utilise une classe de caractre prexistante : [:space:]. On crit donc :grep '^[[:space:]]$' fichier

Pour liminer toutes les lignes blanches pour un oeil humain, on combine les deux expressions et on utilise l'option -v qui inverse le sens de la recherche. On n'a plus qu' rediriger la sortie dans un fichier. On crit donc :grep -v '\(^[[:space:]]$\|^$\)' fichier1 > fichier2

en remplaant ventuellement le motif par '^$' ou ^[[:space:]]$' selon que l'on veut ter les lignes vides ou les lignes contenant des blancs.

head et tailQ70. Affichez les 15 premires lignes du fichier /etc/hosts, les 15 dernires lignes, toutes les lignes partir de la quinzime, les lignes 15 20. R70. propos du fichier /etc/hosts : les ordinateurs sur l'Internet sont dsigns par une adresse IP, constitue de 4 nombres entre 0 et 255 spars par des points. C'est cette adresse IP qui permet un ordinateur d'envoyer un message (datagramme IP) un autre. Cependant, mmoriser les adresses IP n'est pas commode pour un humain. Pour cette raison, les ordinateurs ont aussi un nom, constitu d'un nombre variable de composantes spares par des points (par exemple, S9.ISTAG.AC.MA). Le mcanisme de conversion d'un nom en adresse IP (ou le mcanisme inverse) s'appelle la rsolution de noms. Elle se fait normalement par l'intermdiaire de nameservers, ordinateurs sur lequel tourne le programme BIND, qui se chargent de rpondre aux questions de rsolution de noms. Cependant, pour certaines machines trs communment accdes depuis un ordinateur donn (par exemple, les machines de la mme salle) ou bien pour viter d'avoir configurer un nameserver, on prfre parfois utiliser le fichier /etc/hosts : celui-ci dfinit un certain nombre de conversions nom -> adresse IP qui seront consultes avant les nameservers. La bibliothque qui se charge de faire la traduction, et qui consulte d'abord le /etc/hosts puis les nameservers, s'appelle la libresolv. FILALI MOULAY RACHID Page : 26

o

Afficher les 15 premires lignes de /etc/hosts :head -15 /etc/hosts

o

Afficher les 15 dernires lignes de /etc/hosts :tail -15 /etc/hosts

o

Afficher toutes les lignes partir de la quinzime :tail +15 /etc/hosts

o

Affichez les lignes 15 20 :head -20 /etc/hosts | tail -6

Q71. Rcuprer les lignes 5 9 d'un fichier de 12 lignes R71. Il y a deux solutions : Prendre les neuf premires lignes, et n'en garder que les cinq dernires (de 5 9 inclus) :head -9 fichier | tail -5

Prendre les 8 dernires lignes (de 5 12 inclus) et n'en garder que les 5 premires :tail -8 fichier | head -5

Q72. Comment afficher la cinquime ligne d'un fichier ? R72. On utilise la commande head pour extraire les cinq premires lignes du fichier, puis la commande tail pour ne conserver que la dernire des cinq :head -5 fichier | tail -1

Filtres et redirectionsQ73. Crez un fichier dont chaque ligne commence par un chiffre, suivi d'un slash (/), puis d'un ou plusieurs mots. R73. C'est la commande sort qui permet de trier des fichiers selon un ordre donn. ./TRI1A ./TRI1B ./TRI1C ./TRI1D ./TRI1E FILALI MOULAY RACHID Page : 27

Q74. Affichez les lignes de ce fichier tries en ordre croissant, suivant le nombre plac en dbut de ligne sans option trie automatiquement en fonction du premier caractre, par ordre alphabtique si c'est une lettre, par ordre croissant si ce sont des chiffres. Il suffit donc de taper :R74. sort sort fichier

Q75. liminez de chaque ligne le chiffre et le caractre / . R75. Pour cela, sans utiliser d'diteur, on peut utiliser la commande cut, qui limine des champs dans une ligne. Par dfaut, le sparateur de champs est une tabulation. Ici, on peut demander cut de considrer le slash comme un sparateur de champs (option -d, dlimiteur), et de ne conserver que le deuxime champ du fichier (option -f, field). On redirige ensuite la sortie dans un autre fichier :cut -d/ -f2 fichier > fichier2

Q76. Triez ces lignes par ordre alphabtique inverse. R76. C'est l'option -r (reverse) de sort qui inverse le rsultat de la comparaison. Par dfaut, sort trie par ordre alphabtique, il suffit donc de taper :sort -r fichier2

Q77. Combien de fichiers de configuration avez-vous ? R77. La rponse n'est pas simple, car vous avez galement des rpertoires de configuration, comme .netscape/ qui contient entre autres vos marque-pages (bookmarks.html), vos prfrences (preferences), etc. On va compter le nombre de fichiers commenant par un point situs dans votre rpertoire principal, en liminant les copies de sauvegarde (qui finissent par un tilde). Il y a plusieurs manires de procder. A/ ls, grep, tr, cut On peut penser une solution complexe et bien lourde utilisant toutes ces commandes, ce qui permet de les apprendre plus qu'autre chose... On affiche une liste longue avec l'ensemble des fichiers (ls -la) puis qui limine tous les rpertoires et les liens avec grep en ne gardant que les lignes qui commencent par un tiret :ls -al | grep '^-'

Ensuite, on utilise tr pour ne conserver qu'un seul espace entre chaque champ de la liste, en utilisant l'option -s (squeeze) qui remplace par une seule occurence la rptition d'un caractre spcifi; on met des apostrophes autour de l'espace pour qu'il soit compris comme tel et non comme un simple espace :tr -s ' '

FILALI MOULAY RACHID

Page :

28

On utilise cut pour conserver le dernier champ avec les noms de fichiers (en l'occurence le neuvime champ), en indiquant que l'espace sert de dlimiteur de champ :cut -d' ' -f9

Enfin, on demande grep de ne retenir que les fichiers commenant par un point, et ne finissant pas par un tilde, et on les comptel'option -c de grep. Cela donne pour finir :ls -al | grep '^-' | tr -s ' ' | cut -d' ' -f 9 | grep -c '^\..*[^~]$'

Mais que de tourments pour si peu... :-) B/ ls et grep Il y a plus simple... On demande ls une liste des fichiers commenant par un point (avec l'option -d pour ne pas descendre dans les rpertoires de configuration), on ne garde que les lignes ne finissant pas par un / ou un tilde, et on compte :ls -ad .* | grep -vc '\(~\|/\)$'

C/

find On demande find de chercher dans le rpertoire courant (.), sans descendre dans l'arborescence (-maxdepth 1), tous les fichiers normaux (-type f : file), dont le nom commence par un point (-name '.*'). On les compte ensuite avec wc :find . -maxdepth 1 -name '.*' -type f | wc -l

Cette solution est prfrable car elle ne lance que deux processus et non pas au moins cinq comme la prcdente. Q78. Combien de rpertoires de configuration avez-vous ? R78. Il y a deux solutions, l'une faisant appel ls et grep, l'autre faisant appel find. 1. ls et grep Le principe est le mme que dans l'exercice prcdent. La diffrence est que grep va chercher les lignes qui commencent par un point et finissent par un slash. Cela se fait de la manire suivante :grep '^\..*/$' .*

signifie n'importe quel caractre (point) rpt zro ou plusieurs fois (toile). On tape donc :

ls -ad .* | grep '^\..*/$' | wc -l

FILALI MOULAY RACHID

Page :

29

On part ici du principe que vous avez un alias de ls sur ls -F (qui met un slash aprs les noms de rpertoires, une toile aprs les noms d'excutables et une arobase aprs les noms de liens). Si ce n'est pas le cas, ajoutez-le dans un fichier .alias ou tapez ls -lF. 2. find On demande find de chercher tous les fichiers de type rpertoire (-type : directory), et dont le nom commence par un point (-name '.*', les quotes servant protger du shell le contenu de l'expression), dans descendre dans l'arborescence.d

On tape donc :find . -maxdepth 1 type d -name '.*' | wc -l

Il y a une inexactitude dans le rsultat : find compte aussi ./ dans le rsultat. Q79. Comment mettre dans un fichier la liste de tous les fichiers de l'arborescence partir du rpertoire courant ? R79. C'est l'option -R de ls qui permet d'afficher rcursivement le contenu d'un rpertoire et de ses sous-rpertoires ( ne pas confondre avec -r qui inverse le tri). Pour rediriger la sortie d'une commande dans un fichier, on utilise le caractre >. Pour mettre la liste de tous les fichiers de l'arborescence dans un fichier toto, il faut donc taper :ls -R > toto

Q80. Crez un fichier liste contenant la liste de tous vos fichiers, avec leur taille, leurs droits, etc R80. Il va s'agir de faire une liste rcursive de l'ensemble de votre compte (option -R de ls), incluant les fichiers de configuration (option -a) et les renseignements donns par l'option -l. De la longue liste obtenue, on ne veut retenir que les fichiers, dont les droits commencent par un tiret (un d identifie les rpertoires). On va donc demander grep de chercher toutes les lignes commenant par un tiret. Enfin, on va placer le rsultat dans un fichier appel liste. On tape donc :ls -alR | grep '^-' > liste

Q81. Comment afficher uniquement les fichiers du rpertoire courant qui sont des liens symboliques ? R81. L'option -l de ls donne une liste longue des fichiers, incluant les droits et le type des fichiers, identifis par une lettre : rien pour un fichier, d pour un rpertoire (directory), l pour un lien (link); par exemple :drwxr-xr-x 2 emilia users 1024 mai 10 02:27 www/

FILALI MOULAY RACHID

Page :

30

Pour obtenir la liste des fichiers du rpertoire courant qui sont des liens symboliques, il suffit donc d'afficher cette liste longue et de ne retenir que les lignes qui commencent par un l, grce la commande grep. On utilise une expression rgulire pour cela : le chapeau (^) dsigne le dbut de la ligne, et l'ensemble de l'expression est place entre apostrophes pour qu'elle ne soit pas interprte par le shell. On tape donc :ls -l | grep '^l'

Q82. Combien de lignes contiennent le mot file dans la page de man de less ? R82. Il faut lancer le man de less, et ensuite chercher dedans le nombre de lignes contenant le mot file (fichier en anglais), avec grep. C'est l'option -c (count) de grep qui va servir. Finalement, on crit :man less | grep -c file

Et on obtient 205. C'est le nombre de lignes contenant au moins une fois la chane de caractres file, mais pas le nombre d'occurences du mot dans le fichier : il pourrait y avoir plusieurs fois file sur la mme ligne. On atteint l encore la limite de ce que sait faire grep. Q83. Quels sont les dix plus gros fichiers de /usr/bin/ ? R83. Il faut d'abord faire une liste des fichiers avec leurs tailles (option -l de ls. Ensuite, il faut trier ces lignes en fonction de la taille, avec la commande sort. Une ligne est de la forme suivante :-rwxr-xr-x 1 root staff 5872 Jan 21 1994 /usr/bin/rm*

C'est le cinquime champ, celui de la taille, qui nous intresse. La numrotation commenant 0 (comme les tages), pour indiquer le cinquime champ on crit +4. Ensuite, on veut que le tri se fasse selon un critre numrique (option -n) et l'envers, en commenant par les plus grandes valeurs (option -r, reverse). Pour finir, on veut les dix premires lignes du rsultat. On les slectionne avec la commande head; par dfaut, elle prend les dix premires lignes d'un fichier, il n'est donc pas ncessaire de prciser le nombre de lignes voulues. Finalement, on crit :ls -l /usr/bin | sort -nr +4 | head

Q84. Pour chaque ligne du fichier /etc/hosts, affichez :o o o

Le cinquime caractre; Les caractres 5 10, et le treizime; Tous les caractres partir du quinzime.

R84. Une manire de rsoudre cet exercice consiste utiliser le programme sed qui sert manipuler du texte.

FILALI MOULAY RACHID

Page :

31

Nous allons utiliser la commande s de sed. Sa syntaxe est las/regexp/remplacement/

o regexp est une expression rgulire et remplacement une chane devant la remplacer.o o

Pour afficher le cinquime caractre de chaque ligne, on peut faire ceci :Rachid ~ $ cat /etc/hosts | sed -e "s/^.\{4\}\(.\).*/\1/"

Le "^.\{4\}" du dbut sert filtrer les 4 premiers caractres de chaque ligne. Ensuite, \(.\) filtre n'importe quel caractre, le fait de mettre des parenthses enregistre le caractre en question dans une variable que l'on peut utiliser dans la chane de remplacement avec "\1". Ensuite, .* filtre le reste de la ligne.o o o o

Sur le mme principe, pour afficher les caractres 5 10 et le treizime :Rachid ~ $ cat /etc/hosts | sed -e "s/^.\{4\}\(.\{6\}\)..\(.\).*/\1 \2/"

Et enfin, pour afficher tous les caractres partir du quinzime :Rachid ~ $ cat /etc/hosts | sed -e "s/^.\{14\}//"

lessOn aborde ici less, qui est une version plus labore de more; ce dernier est toujours dtaill dans dans les ouvrages sur Unix, et de fait il est toujours prsent sur ces systmes, ce qui n'est pas forcment vrai pour less (qui est quand mme trs courant). more est beaucoup plus rudimentaire, alors que less a beaucoup de fonctionnalits apprciables : vido inverse pour les motifs recherchs, dplacements en avant et en arrire pour la recherche, etc. Q85. Comment fait-on pour obtenir une page d'aide avec less ? R85. On tape h ou H pour afficher une page d'aide. On s'y dplace comme dans less (flches, ^D, ^F, ^B, ^P, SPC, j, k...). Pour quitter l'aide, ce sont les mmes commandes que pour quitter less : q, Q, :q, :Q, ZZ. Q86. Comment examiner plusieurs fichiers la suite ? Comment passe-t-on au suivant ? Comment revient-on au prcdent ? R86. Il suffit de donner plusieurs fichiers en argument la commande less; par exemple, pour examiner sucessivement les fichiers toto, bla et blu, on tape :less toto bla blu

Pour passer au fichier suivant, on tape :n (next); pour revenir au fichier prcdent, on tape :p (previous). :x permet de revenir au premier fichier spcifi. Q87. Quelles sont les commandes diffrentes qui permettent de quitter less ? R87. Ce sont : q, Q, :q, :Q, ZZ. Q88. Comment dire less d'ouvrir le fichier en plaant en haut de l'cran la ligne n ? FILALI MOULAY RACHID Page : 32

R88. On spcifie le numro de la ligne aprs le signe +; par exemple, pour ouvrir le fichier rapport sur la ligne 57, on tape :less +57 rapport

Q89. Comment dire less d'ouvrir le fichier en plaant en haut de l'cran la premire ligne o apparat un motif donn ? R89. On utilise l'option -p de la commande less; par exemple, pour chercher le mot toto dans le fichier rapport, on tape :less -p toto rapport

On peut aussi indiquer le motif recherch de la faon suivante :less +/toto rapport

Q90. Quelles sont les deux commandes de less qui permettent de chercher un motif dans un fichier, respectivement aprs et avant la position courante ? R90. Pour chercher un motif plus en avant dans le texte, on utilise le slash (barre oblique vers la droite : /). Par exemple :/mot

Pour chercher en arrire de la position courante, on utilise le point d'interrogation. Pour aller la prochaine occurence du mot, il suffit de taper n (next). Pour aller la prcdente occurence du mot, il faut taper N. videmment, quand on cherche un motif avec ?, n remonte dans le texte et N descend dans le texte. Une fois le dbut ou la fin du fichier atteint, la recherche s'arrte. On peut utiliser les expressions rgulires. Q91. Comment dire less de chercher le mot partir de la premire ligne du fichier, et ce o que l'on soit dans le fichier ? R91. Il faut taper ^F aprs avoir tap /. En fait, ^F fait commencer la recherche au premier fichier dont on a donn le nom; quand il n'y en a qu'un seul, cela place de fait tout au dbut du fichier. Par exemple, pour chercher toto alors qu'on se trouve la fin du fichier, on tape :/^F

Le prompt devient alors :First-file /

et il n'y a plus qu' taper le motif recherch. Q92. Que se passe-t-il si l'on cherche le motif suivant : toTo en donnant l'option -i less ? Quelle option faut-il mettre la place de -i pour chercher toTo tout en ignorant la casse des caractres ? FILALI MOULAY RACHID Page : 33

R92. L'option -i signifie ignorecase, c'est--dire ignorer la casse des caractres (diffrence entre majuscules et minuscules). Si donc je tape (au choix) :less less less less less -ip TOTO rapport -ip toto rapport -i +/toto rapport -i +/TOTO rapport

ne fera pas la diffrence entre les majuscules et les minuscules, et je trouverai toto comme TOTO. Bien sr, c'est la mme chose si je lance less avec l'option -i et que je cherche ensuite le mot l'intrieur du fichier avec / ou ?. Mais l'option -i est invalide si le motif recherch contient des majuscules et des minuscules : si, en lanant less comme ci-dessus, je cherche le motif Toto, je ne trouverai que Toto et pas TOTO par exemple. Pour contourner cette restriction, il faut lancer less avec l'option -I, qui est donc un ignorecase robuste. Q93. Quelles sont les commandes qui permettent d'aller la prochaine (resp. prcdente) occurence du motif recherch travers tous les fichiers dits ? R93. Pour aller l'occurence suivante (resp. prcdente) d'un motif dans un fichier, on utilise n (resp. N). Pour faire la mme opration mais sans passer manuellement de fichier en fichier, on tape ESC n pour chercher en avant, et ESC N pour chercher en arrire. ESC dsigne bien sr la touche d'chappement (Escape). Q94. Comment chercher dans un fichier le caractre / ? Le caractre / sert chercher un mot dans le fichier. Si on tape//

rpond : Pattern not found. Il faut donc dire less de considrer le / comme un caractre ordinaire, et pas comme un caractre spcial. Comme avec toutes les expressions rgulires, c'est le backslash (barre oblique vers la gauche : \) qui sert cela. Pour chercher un /, on tape donc :less /\/

La page de man donne une liste de caractres qui sont spciaux avec / et ?. Ces commandes de recherche utilisent les expressions rgulires de ed (et de vi par consquent).

findQ95. Comment chercher tous les fichiers dont les noms commenent par un a majuscule ou une minuscule, suivi d'ventuellement quelques lettres ou chiffres, et se terminent par un chiffre entre 3 et 6 ? R95. C'est l'option -name qui permet de spcifier le nom du ou des fichiers recherchs. On peut indiquer le nom d'un fichier complet (bofichier.tex), ou utiliser des expressions rgulires (celles du shell, pas celles de grep...) : FILALI MOULAY RACHID Page : 34

o o o

L'toile (*) dsigne un ou plusieurs caractres; Le point d'interrogation remplace un (et un seul) caractre quelconque; Les crochets permettent de dsigner une srie de caractres au choix.

Dans notre cas, le premier caractre est un a ou un A ([aA]), suivi de quelque chose (*) et termin par un chiffre entre 3 et 6 ([3456] ou [3-6]). On crit donc :find . -name '[aA]*[3-6]' -print

Q96. Comment fait-on pour indiquer que le fichier recherch a t modifi il y a plus de 30 jours ? Il y a 30 jours ? Il y a moins de 30 jours? R96. C'est l'option -mtime qui permet de donner une indication en jours. La syntaxe varie selon ce que l'on souhaite :o o o -mtime 30 : le fichier a t modifi il y a 30 jours; -mtime +30 : le fichier a t modifi il y a 30 jours -mtime -30 : le fichier a t modifi il y a 30 jours

ou plus; ou moins.

Q97. Comment faire pour dire que le fichier a t modifi plus rcemment qu'un autre fichier donn ? R97. On utilise l'option -newer (plus rcent). Par exemple, on cherche un fichier .tex modifi plus rcemment que bofichier.tex :find . -newer bofichier.tex -name '*.tex'

On peut raffiner la demande, en combinant cette option avec l'option -mtime : cherchons les fichiers modifis plus rcemment que bofichier.tex, mais il y a plus de 5 jours :find . -newer bofichier.tex -mtime +5 -name '*.tex'

Q98. Comment fait-on pour spcifier que le fichier recherch est un rpertoire ? R98. On utilise l'option -type pour spcifier le genre de fichier recherch : les principaux sont f (file) pour un fichier normal, et d (directory) pour un rpertoire. On tape donc :find . -type d

Q99. Comment indiquer que le fichier recherch une taille suprieure une taille donne ? R99. On utilise l'option -size, suivie d'un nombre et d'une lettre indiquant l'unit de mesure (c : octets, k : kilo-octets). Comme pour -mtime, on utilise +, - ou [rien] pour indiquer que la taille est, respectivement, suprieure, infrieure ou gale la valeur donne. Par exemple, on recherche un fichier modifi il y a moins de 12 jours et dont la taille soit suprieure 30 K :find . -type f -size +30k -mtime -12 -print

FILALI MOULAY RACHID

Page :

35

commandes sur les fichiersQ100. Utiliser find pour effacer tous vos fichiers de sauvegarde (termins par un tilde ~) qui ont plus d'un mois.

R100. La ligne utilise pour trouver ces fichiers et la suivante :find . -mtime +30 -name '*~'

Il y a deux faons de faire excuter des commandes sur les fichiers trouvs par find : utiliser l'option -exec commande, ou utiliser un pipe avec xargs. 1. -execcommande excute la commande sur le fichier courant. La commande est termine par le marqueur ;, qu'il faut protger du shell avec un backslash. Le fichier courant est dsign par la chane {}. Pour effacer tous les fichiers de sauvegarde vieux de plus d'un mois, on tape donc :find . -mtime +30 -name '*~' -print -exec rm \;

On peut faire excuter la commande de faon interactive en remplaant -exec par -ok :find . -mtime +30 -name '*~' -print -ok rm \;

Le programme demande, pour chaque fichier trouv, si on veut bien excuter la commande; la rponse doit tre y ou Y . 2. La solution avec -exec est en fait trs lourde, car elle cre un nouveau processus pour chaque fichier; il vaut mieux rediriger le rsultat de find avec un pipe et xargs. Dans notre cas, on tapera donc :3. find . mtime +30 -name '*~' | xargs -p rm

L'option -p de xargs rend cette commande interactive. Il faut rpondre y ou Y pour confirmer. Q101. Quelle diffrence y a-t-il entre un simple pipe et | xargs ? Pour la comprendre, voici un exercice : cherchez tous les fichiers contenus dans /usr/local/lib/texmf/tex et cherchez dedans le mot supertab. R101. Il y a deux solutions : 1. Vous tapezfind /usr/local/lib/texmf/tex -type f | grep supertab

Vous obtenez une liste de fichiers contenant supertab dans leur nom. 2. Vous tapez FILALI MOULAY RACHID Page : 36

find /usr/local/lib/texmf/tex -type f | xargs grep supertab

cherche dans chaque fichier pass en argument la chane de caractres supertab, ce qui est trs diffrent...grep

grepQ102. Quelles sont les options de grep qui permettent d'obtenir des lignes de contexte (qui prcdent et/ou suivent la ligne o figure le mot) ? R102. Il y en a plusieurs, qui se recoupent :o -num

: le numro indique le nombre de lignes de contexte que l'on veut voir figurer avant et aprs la ligne o figure le mot recherch. Par exemple, si on veut trois lignes de contexte, avant et aprs la mot (soit sept lignes au total), on tape :

o o o o o o o o o

grep -3 ... -A num (after) : le numro

indique le nombre de lignes qui doivent suivre la ligne o figure le mot. Si on en veut quatre, on tapera :

indique le nombre de lignes qui doivent prcder la ligne o figure le mot. Si on en veut dix, on tape :grep -B 10 ... -C (context), qui donne deux lignes de contexte avant et aprs. En fait, les trois lignes suivantes sont strictement quivalentes : grep -2 ... grep -C ... grep -A 2 -B 2 ...

grep -A 4 ... -B num (before) : le numro

Q103. Comment faire apparatre le numro de la ligne o figure le mot recherch ? R103. C'est l'option -n (number) qui sert cela; le numro figure tout au dbut de la ligne, suivi d'un deux-points (:) et du texte. Par exemple :Rachid ~ $ grep -n violon verlaine.tex 12:des violons de l'automne

Q104. Quand on fait une recherche dans plusieurs fichiers, le nom du fichier figure d'abord, puis le numro de la ligne, et enfin le texte, le tout spar par des deux-points. Par exemple :Rachid ~ $ grep -n violon * verlaine.tex:12:des violons de l'automne orchestre:45:Cordes : contrebasse, violoncelle, alto, violons.

Que se passe-t-il quand on demande galement des lignes de contexte ? R104. La disposition gnrale ne change pas, par contre, le signe utilis pour sparer la ligne de son numro est un tiret (-) quand il s'agit des lignes de contexte, et un deux-points quand il s'agit de la ligne voulue. Par exemple :Rachid ~ $" grep -nC violon verlaine.tex 10-

FILALI MOULAY RACHID

Page :

37

11-Les sanglots longs 12:des violons de l'automne 13-bercent mon coeur 14-d'une langueur monotone

Q105. Comment faire pour afficher le nombre d'occurences du mot recherch ? R105. On utilise l'option -c (count) :Rachid ~ $ grep -c violon * verlaine.tex:1 orchestre:1

Q106. Comment faire pour que grep ignore la casse des caractres (diffrence entre majuscules et minuscules) dans sa recherche ? R106. Par dfaut, grep fait la diffrence entre les majuscules et les minuscules; pour invalider ce comportement, on utilise l'option -i (ignorecase). Q107. Comment faire pour faire apparatre non pas les lignes o figurent le mot, mais les noms des fichiers ? R107. C'est l'option -l qui permet de faire cela : afficher les noms des fichiers o figure au moins une fois la chane de caractres recherche. Q108. Comment faire apparatre les lignes o ne figurent pas le mot recherch ? R108. On veut en fait inverser le sens de la recherche : c'est l'option -v qui fait cela. Q109. Comment faire apparatre les noms des fichiers ne contenant pas le mot recherch ? R109. On utilise l'option -L, qui affiche les noms de fichiers o ne figurent pas la chane de caractres recherche. Il ne faut bien sr pas confondre les options -l et -L... Q110. Comment faire pour que grep ne recherche que les lignes o figure le mot tel quel, et non pas ses variantes ? R110. C'est l'option -w (comme word) qui sert cela : un mot complet est dlimit comme suit :o o

Dbut : la chane de caractres est place au dbut d'une ligne, ou prcde d'un blanc, d'une tabulation ou d'une ponctuation. Fin : la chane de caractre est place en fin de ligne, ou suivie d'un blanc, d'une tabulation ou d'une ponctuation.

Si donc on veut chercher travail et aucune forme drive de ce mot, on crit :grep -w travail mon-fichier

Q111. Comment faire pour chercher plusieurs mots la fois en faisant apparatre les numros des lignes ? FILALI MOULAY RACHID Page : 38

R111. On veut chercher toutes les occurences des mots terre et ciel dans les deux premiers chapitres de la premire partie de Germinal, avec les numros des lignes. On propose deux solutions, la premire utilisant les ressources de la syntaxe de grep, la seconde utilisant l'option -f avec un fichier. Syntaxe de grep : La structure \(mot1\|mot2\) permet de chercher plusieurs mots. Ici, on tape la ligne suivante :grep '\(ciel\|terre\)' fichier

On met des apostrophes de part et d'autre de l'expression pour la protger contre le shell, c'est-dire pour que le shell ne cherche pas interprter l'expression. Option -f fichier : dans un fichier quelconque, que nous appellerons liste, on indique les mots que l'on recherche : ciel et terre. Chaque ligne correspond un mot recherch. Il ne faut donc pas mettre de ligne commeterre ciel

Car le programme chercherait la chane de caractres terre ciel, qui est assez improbable en franais. Il ne faut pas non plus laisser de ligne blanche : le programme afficherait l'ensemble du texte. Quelle que soit la solution retenue, on veut ensuite afficher le numro des lignes (option -n); d'autre part, pour que la recherche soit exhaustive, il vaut mieux que grep ne fasse pas de diffrence entre les majuscules et les minuscules, avec l'option -i (ignore case, ignorer la casse des caractres). Il faut aussi dcider si on cherche les mots tels quels, sans leurs variantes (comme terre au pluriel), ou si on accepte ces variantes. Si on ne veut que le mot sans ses drivs, on utilise l'option -w. Pour dsigner les deux fichiers o faire la recherche, on peut les crire littralement :zola1.txt zola2.txt

ou, mieux, utiliser les joker du shell :zola[12].txt [12]

signifie le caractre 1 ou le caractre 2.

Finalement, on peut taper, au choix :grep grep grep grep -inw -inw -inw -inw -f liste zola1.txt zola2.txt -f liste zola[12].txt '\(ciel\|terre\)' zola1.txt zola2.txt '\(ciel\|terre\)' zola[12].txt

Et on obtient :zola1.txt:13:ciel, le pav se droulait avec la rectitude d'une jete, au milieu de

FILALI MOULAY RACHID

Page :

39

zola1.txt:36:brlaient si haut dans le ciel mort, pareils des lunes fumeuses. Mais, au zola1.txt:50:besogne. Les ouvriers de la coupe terre avaient d travailler tar d, on zola1.txt:124:terre, lorsqu'un accs de toux annona le retour du charretier. Le ntement, zola1.txt:191:bleues en plein ciel, comme des torches gantes. C'tait d'une tristesse zola1.txt:207: Le manoeuvre, aprs avoir vid les berlines, s'tait assis terre, zola1.txt:222:fois avec tout le poil roussi, une autre avec de la terre jusque dans le (...)

Le rsultat est un peu diffrent quand on n'utilise pas l'option -w.

Expressions rgulires de grepgrep

recherche des chanes de caractres, qui peuvent tre un mot complet (terre), une suite de lettres (tre), ou une expression rgulire. Les expressions rgulires sont des formules qui reprsentent des chanes de caractres. On cherche alors non pas un mot prcis, mais des suites de caractres correspondant aux critres demands. Elles sont d'un usage frquent avec grep bien sr, mais aussi avec des commandes comme less, ou encore au sein d'un diteur.

Q112. Chercher toutes les lignes commenant par a ou A. R112. Il faut indiquer que l'on veut le dbut de la ligne, avec le chapeau (caret en anglais). Ensuite, on veut prciser que la ligne commence par un a minuscule ou majuscule. Il y a deux faons de le faire :o o

Utiliser l'option -i qui fait ignorer la diffrence entre les majuscules et le minuscules. Dire que l'on cherche un a ou un A. C'est cela que servent les crochets : [abc] signifie a ou b ou c. Ici, ce sera [aA].

Enfin, il faut protger les signes contre le shell, pour qu'il ne les interprte pas; on met donc l'expression entre apostrophes. Remarque : la protection des expressions rgulires contre le shell est une question complexe.... Il faut donc crire :grep -i '^a' fichier

ougrep '^[aA]' fichier

FILALI MOULAY RACHID

Page :

40

Q113. Chercher toutes les lignes finissant par rs R113. C'est le dollar ($) qui reprsente la fin de la ligne. Il faut donc crire :grep 'rs$' fichier

Q114. Chercher toutes les lignes contenant au moins un chiffre R114. Pour dsigner un chiffre, on peut en indiquer une liste entre crochets : [0123456789]. Il est plus simple d'utiliser une classe de caractres : [0-9] qui dsigne, comme la solution prcdente, n'importe quel chiffre de zro neuf. Il faut donc taper :grep '[0-9]' fichier

Q115. Chercher toutes les lignes commenant par une majuscule R115. Comme on l'a vu, c'est le chapeau qui indique le dbut de la ligne. Pour indiquer que l'on cherche une majuscule, on peut soit en donner une liste ([ABCDEFGHIJKLMNOPQRSTUVWXYZ]), soit utiliser une classe de caractres : [A-Z], la seconde solution tant, de loin, prfrable... Il faut donc taper :grep '^[A-Z]' fichier

Q116. Chercher toutes les lignes commenant par B, E ou Q R116. Il faut indiquer entre crochets les trois lettres recherches :grep '^[BEQ]' fichier

Q117. Chercher toutes les lignes finissant par un point d'exclamation R117. Le point d'exclamation n'a pas de signification particulire avec grep, on peut donc le mettre tel quel :grep '!$' fichier

Q118. Chercher toutes les lignes ne finissant pas par un signe de ponctuation (point, virgule, point-virgule, deux-points, point d'interrogation, point d'exclamation) R118. Il faut donner une liste de caractres, que l'on ne veut pas voir figurer; la liste sera entre crochets, comme on l'a dj vu, et c'est le chapeau qui signifiera, dans ce contexte, sauf. Par exemple, si on cherche tous les a, sauf ceux suivi de b, c ou t, on crit :grep 'a[^bct]'

Il y a une seconde difficult, qui vient de ce que certains caractres sont spciaux avec grep. Vous vous doutez que le chapeau est spcial quand il est plac au dbut de l'expression, et que le dollar l'est quand il est plac en fin d'expression. Dans notre cas : FILALI MOULAY RACHID Page : 41

o o

Le point dsigne n'importe quel caractre. Le point d'interrogation signifie le caractre qui prcde apparat 0 ou 1 fois. Avec egrep, il fonctionne tout seul, avec grep, il faut le faire prcder d'un backslash pour qu'il fonctionne; par exemple (avec grep), pour chercher charbon ou vagabond, on crit :grep 'ar?bo' fichier

o

(chercher la suite de lettre abo avec un r facultatif entre le a et le b). Pour que grep interprte littralement ces caractres, et ne les considre plus comme spciaux, il faut les faire prcder d'un backslash (\). Si par exemple vous cherchez toutes les lignes qui se terminent par un point, il faut taper :grep '\.$' fichier

Dans notre cas cependant, ces caractres sont protgs par les crochets. On peut donc crire :grep '[^.,;:?!]$' fichier

On peut aussi utiliser l'option -v, qui prend toutes les lignes o ne figure pas une chane de caractres donne; dans ce cas, on tape :grep -v '[.,;:?!]$' fichier

Q119. Comment chercher tous les mots contenant un r prcd de n'importe quelle lettre majuscule ou minuscule ? R119. On cherche une chane de caractres qui soit indiffremment au dbut ou au milieu d'un mot. N'importe quelle lettre, ce sont les classes de caractres [a-zA-Z] ou [:alpha:], qui sont quivalentes. Il y a une petite subtilit avec l'emploi de classes du second type; elles dsignent un groupe de caractres, et il faut mettre une seconde paire de crochets pour dire n'importe quel caractre de cette classe prdfinie. On tape donc au choix :grep '[a-zA-Z]r' fichier'

ougrep '[[:alpha:]]r' fichier'

Attention, dans ces listes ne sont pas compris les caractres accentus... Q120. Chercher tous les mots dont la seconde lettre est un r. R120. C'est le symbole \< qui dsigne un dbut de mot. La premire lettre du mot est indiffrente, la seconde est un r. On crit donc :grep '\ effectuer_une_action RECOMMENCER En bash, on l'crit comme ceci :1 while [ test ] 2 do 3 echo 'Action en boucle' 4 done

Il est aussi possible, comme pour le if, d'assembler les 2 premires lignes en 1, condition de mettre un point-virgule : while [ test ]; do echo 'Action en boucle' done On va demander l'utilisateur de dire "oui", et rpter cette action tant que l'utilisateur n'a pas fait ce qu'on voulait. On va crer un script boucles.sh pour l'occasion :1 #!/bin/bash 2 3 while [ -z $reponse ] || [ $reponse != 'oui' ]

FILALI MOULAY RACHID

Page :

67

4 do 5 6 done

read -p 'Dites oui : ' reponse

On fait 2 tests :

Est-ce que $reponse est vide ? Est-ce que $reponse est diffrent de "oui" ?

Comme il s'agit d'un OU (||), tant que l'un des 2 tests est vrai, on recommence la boucle. La boucle pourrait se traduire par : "Tant que la rponse est vide ou que la rponse est diffrente de oui". On est oblig de vrifier d'abord si la variable n'est pas vide, car sinon le second test plante. Comme vous pouvez le voir, il ne s'arrte que lorsqu'on a tap oui ! Il existe aussi le mot-cl until, qui est l'exact inverse de while. Il signifie "Jusqu' ce que". Remplacez juste "while" par "until" dans le code prcdent pour l'essayer.

XIII) for : boucler sur une liste de valeursAvertissement le "for" en bash ne se comporte pas de la mme manire que le for auquel vous tes habitus dans un autre langage, comme le C. Lisez donc attentivement.

1) Parcourir une liste de valeursLa boucle "for" permet de parcourir une liste de valeurs, et de boucler autant de fois qu'il n'y a de valeurs. Concrtement, la forme d'un for est la suivante : Algo : POUR variable PRENANT valeur1 valeur2 valeur3 FAIRE ------> effectuer_une_action VALEUR_SUIVANTE

La "variable" va prendre successivement les valeurs "valeur1", "valeur2", "valeur3". La boucle va donc tre excute 3 fois, et chaque fois la variable vaudra une nouvelle valeur de la liste. En bash, la boucle for s'crit comme ceci :1 #!/bin/bash 2 3 for variable in 'valeur1' 'valeur2' 'valeur3'

FILALI MOULAY RACHID

Page :

68

4 do 5 6 done

echo "La variable vaut $variable"

Ce qui donne, si on l'excute :La variable vaut valeur1 La variable vaut valeur2 La variable vaut valeur3

Vous pouvez donc vous servir du for pour faire une boucle sur une liste de valeurs que vous dfinissez :1 2 3 4 5 6 #!/bin/bash for animal in 'chien' 'souris' 'moineau' do echo "Animal en cours d'analyse : $animal" done

Animal en cours d'analyse : chien Animal en cours d'analyse : souris Animal en cours d'analyse : moineau

Toutefois, la liste de valeurs n'a pas besoin d'tre dfinie directement dans le code. On peut utiliser une variable :1 2 3 4 5 6 7 8 #!/bin/bash liste_fichiers=`ls` for fichier in $liste_fichiers do echo "Fichier trouv : $fichier" done

Ce script liste tous les fichiers trouvs dans le rpertoire actuel :Fichier trouv : boucles.sh Fichier trouv : conditions.sh Fichier trouv : variables.sh

On pourrait faire un code plus court, sans passer par une variable $liste_fichiers, en crivant :1 2 3 4 5 6 #!/bin/bash for fichier in `ls` do echo "Fichier trouv : $fichier" done

Bien entendu, ici on ne fait qu'afficher le nom du fichier, ce qui n'est pas trs amusant ni trs utile. On pourrait se servir de notre script pour renommer chacun des fichiers du rpertoire FILALI MOULAY RACHID Page : 69

actuel en leur ajoutant un suffixe -old par exemple :1 2 3 4 5 6 #!/bin/bash for fichier in `ls` do mv $fichier $fichier-old done

Essayons de voir si l'excution du script renomme bien tous les fichiers :$ ls boucles.sh conditions.sh variables.sh $ ./boucles.sh $ ls boucles.sh-old conditions.sh-old variables.sh-old

A vous de jouer ! Essayez de crer un script multirenommage.sh bas sur ce principe qui va rajouter le prfixe -old... uniquement aux fichiers qui correspondent au paramtre envoy par l'utilisateur !./multirenommage.sh *.txt

Si aucun paramtre n'est envoy, vous demanderez l'utilisateur de saisir le nom des fichiers renommer avec read.

Un for plus classiquePour les habitus d'autres langages de programmation, le "for" est une boucle qui permet de faire prendre une variable une suite de nombres. En bash, comme on l'a vu, le "for" permet de parcourir une liste de valeurs. Toutefois, en trichant un peu l'aide de la commande seq, il est possible de simuler un for classique :1 2 3 4 5 #!/bin/bash for i in `seq 1 10`; do echo $i done

Explication : seq gnre tous les nombres allant du premier paramtre au dernier paramtre, donc 1 2 3 4 5 6 7 8 9 10 :1 2 3 4 5 6 7 8

FILALI MOULAY RACHID

Page :

70

9 10

Si vous le voulez, vous pouvez changer le pas et avancer de 2 en 2 par exemple. Dans ce cas, il faut crire seq 1 2 10 pour aller de 1 10 en avanant de 2 en 2. Cela va donc gnrer les nombres 1 3 5 7 9.

Exercices

#exercice 1 #afficher le nombre de lignes correspondant #au contenu du repertoire passe en parametre b=`ls -l $1 | wc -l` b=$(expr $b - 1) echo $b #vous remarquerez qu'en fait les entres comptees #incluent la ligne 1 affichee par ls #c'est a dire : total ... #conclusion on soustrait 1 a la variable b #pour avoir le nombre reel d'entrees

#exercice 2 #afficher le contenu du fichier passe #en parametre #si le fichier existe test -f $1 if [ $? = 0 ] then cat $1 else echo "fichier inexistant" fi

exercice 3 # afficher la liste des users loggues # s'il y en a plus de 3 b=`who | wc -l` if [ $b -gt 3 ] then who fi #exercice 4 #passer en argument un nom #si c'est un fichier, attribuer le droit d'execution aux autres FILALI MOULAY RACHID Page : 71

#si c'est un repertoire, attribuer le droit de navigation aux autres # et retirer celui d'ecriture au groupe test -f $1 if [ $? = 0 ] # c'est un fichier then chmod o+x $1 test -d $1 fi # if [ $? = 0 ] #c'est un repertoire then chmod g-w $1 chmod o+x $1 fi

#exercice 5 #tester si la valeur passee en parametre #est paire ou impaire val=$(expr $1 % 2) if [ $val = 0 ] then #$1 a une valeur paire echo bravo else echo loupe fi

#exercice 6 #afficher le nombre d'arguments passes #s'il est superieur a 3 #afficher SUP 3 echo $# if [ $# -gt 3 ] then echo SUP 3 fi

FILALI MOULAY RACHID

Page :

72

PARTIE III : EXERCICES DE REVISION 0 Installation LinuxInstallationQuestion 0.1 Quelles sont les deux partitions qu'un systme doit avoir au minimum ? Question 0.2 Pourquoi est-il mieux de placer le rpertoire /var dans une partition indpendante ? Question 0.3 Pourquoi est-ce mieux de placer le rpertoire /home dans une partition indpendante ? Rponse 0.1 Swap et / Rponse 0.2 Pour optimiser les performances, /var peut tre utilis sur un disque rapide. Rponse 0.3 Pour la sauvegarde et aussi pour la maintenance. Le disque peut facilement tre enlev ou chang sans affecter le systme courant.

GrubQuestion0.1 Est-il possible d'installer un chargeur de dmarrage sur une disquette ? Question0.2 Quel est le fichier de configuration de LILO ? Question0.3 LILO peut-il accder au systme de fichiers pour lire son fichier de configuration ? Question0.4 Quel est le meilleur emplacement pour GRUB et LILO sur un disque dur IDE ? Question0.5 Quel est le nom et l'emplacement du fichier de configuration de GRUB? Question0.6 Quelle est la commande pour installer un nouveau LILO dans le MBR ? Question0.7 Quelle est la commande pour installer un nouveau GRUB dans le MBR ? Question0.8 Qu'est-ce que le initrd ? Rponse0.1 oui. Rponse0.2 /etc/lilo.conf Rponse0.3 non. Rponse0.4 Dans le MBR. FILALI MOULAY RACHID Page : 73

Rponse0.5 /boot/grub/menu.lst Rponse0.6 [root@test ] /# lilo Rponse0.7 [root@test ] /# grub > root (hd0,1) > initrd /boot/initrd >boot Rponse0.8 initrd est la mmoire disque minimale pour le noyau pour dmarrer et monter les systmes de fichiers. Exercice0.1 Installez Grub sur une disquette et essayez de dmarrer manuellement sur votre image: [root@test ] /# mkfs -t ext2 /dev/fd0 [root@test ] /# mount /dev/fd0 /mnt [root@test ] /# mkdir -p /mnt/boot/grub [root@test ] /# cp /boot/grub/stage* /mnt/boot/grub/ [root@test ] /# cp /boot/grub/e2fs_stage1_5 /mnt/boot/grub/ [root@test ] /# touch /mnt/boot/grub [root@test ] /# umount /mnt [root@test ] /# grub > root (fd0) > setup (fd0) > quit Redmarrez ensuite sur la disquette et, au prompte, slectionnez le noyau sur le disque dur. > est le prompte propos par GRUB, et les lecteurs hd0,1 et /dev/hda2 doivent tre remplacs par l'un de ceux utiliss dans votre systme. Les lignes suivantes mritent toute votre attention avant d'tre tapes. > root (hd0,1) > kernel /boot/vmlinuz root=/dev/hda2 read-only > initrd /boot/initrd > boot Exercice0.2 Crez le fichier /boot/grub/menu.lst et installez Grub sur votre disque dur en utilisant les utilitaires proposs par Grub. Exercice0.3 Rinstallez Lilo. Dans le fichier /etc/lilo.conf, changez le label Linux de l'image par dfaut du noyau par "kangaroo" et rinstallez le programme Lilo dans le MBR. Exercice0.4 Quelle commande permet de supprimer Lilo ? Rponse0.1 Suivre la procdure. Rponse0.2 FILALI MOULAY RACHID Page : 74

Tapez la commande: [root@test ] /# grub root (hd0,0) # partition boot puis: setup (hd0) # Where to install the boot record MBR quit Editez le fichier /boot/grub/menu.lst et inscrire les lignes suivantes: default 0 timeout 30 title=Mon exemple de Gentoo Linux root (hd0,0) kernel (hd0,0)/boot/bzImage root=/dev/hda3 Rponse0.3 Pour rinstaller lilo, dans un premier temps, il faut garder la disquette de grub et voir la question 0.1. Dsinstallez grub et installez le programme lilo. Modifiez le fichier /etc/lilo.conf et tapez au prompte la commande lilo afin que celui-ci soit install dans le MBR. Vous pouvez redmarrer votre machine et utilisez lilo comme chargeur de dmarrage. Rponse 13.4 La commande utiliser pour enlever lilo du MBR est lilo -U .

1 Travailler en ligne de commandeQuestion 1.1 Quelles sont les informations dont vous avez besoin pour vous connecter un systme Unix ou Linux ? Question 1.2 Quand .bashrc est-il excut ? Question 1.3 Que sont les commandes intgres (built-in) ? Question 1.4 Quelle commande faut-il utiliser pour connatre la source d'une commande ? Question 1.5 Quelle syntaxe faut-il utiliser pour dmarrer un programme en arrire-plan ? Question 1.6 Quelle option permet de bloquer un compte utilisateur ? Question 1.7 Comment vrifiez-vous qu'un compte est bien bloqu ? Question 1.8 Comment savez-vous si votre prompte est un prompte root dans un terminal bash ? Question 1.9 Dans quel fichier pouvez vous redfinir la longueur maximum du mots de passe ? Question 1.10 Dans le fichier /etc/passwd, quoi correspond le chiffre indiqu dans le quatrime champ d'un compte utilisateur ? FILALI MOULAY RACHID Page : 75

Question 1.11 Quelle est l'option utiliser avec la commande useradd pour crer automatiquement l'accs au shell et le rpertoire personnel ? Rponse 1.1 Un login et un mot de passe. Rponse 1.2 Excut pour chaque par bash pour chaque nouveau shell interactif. Rponse 1.3 Une commande intgre (built-in) est une commande excute dans un shell. Rponse 1.4 [root@test ] /# whereis ls Rponse 1.5 [root@test ] /# xeyes & Rponse 1.6 [root@test ] /# passwd -l [username] Rponse 1.7 Le ! devant le mot de passe encrypt signifie que le compte est bloqu. Rponse 1.8 [root@test ] /# Le # signifie que vous tes connect en root. Rponse 1.9 Le fichier est /etc/login.defs. Rponse 1.10 Il signifie l'identit du groupe primaire (GID) pour un utilisateur. Rponse 1.11 L'option est -m. Exercice 1.1 Trouvez les informations sur les commandes useradd et userdel. Exercice 1.2 Crez deux nouveaux comptes user1 et user2 et attribuez leur des mots de passe avec la comma nde passwd. Exercice 1.3 En tant que root, bloquez les comptes et vrifiez ensuite en essayant de vous connecter. Exercice 1.4 Quelle commande sert concatner des fichiers ? Exercice 1.5 Dclarez et initialisez les variables d'environnement suivantes : NAME et LASTNAME. Utilisez echo pour les afficher. Exercice 1.6 Lancez un bash et vrifiez que ces variables ont bien t dclares. Exercice 1.7 Utilisez exec pour ouvrir une nouvelle session bash: Peut-on encore voir ces variables ? Exercice 1.8 Utilisez la commande date pour afficher le mois courant. Exercice 1.9 Editez le fichier .bashrc dans le rpertoire home et ajoutez ces lignes : FILALI MOULAY RACHID Page : 76

alias ls='ls --color' alias ll='ls --color -l' Expliquez leur action ? Rponse 1.1 Pour avoir des information sur les commandes, utiliser l'aide systme: [root@test ] /# man useradd [root@test ] /# man userdel Rponse 1.2 cration des utilisateurs: [root@test ] /# useradd -m user1 [root@test ] /# useradd -m user2 Cration des mots de passe des utilisateurs: [root@test ] /# passwd user1 (entrer le mot de passe et le confirmer) [root@test ] /# passwd user2 (entrer le mot de passe et le confirmer) Se dconnecter de la session root et se connecter avec les deux comptes crs (user1 user2). Rponse 1.3 [root@test ] /# passwd -l user1 [root@test ] /# passwd -l user2 Rponse 1.4 La commande utilise pour concatner les fichiers est cat. Rponse 1.5 Cration d'une variable: [root@test ] /# name=jance [root@test ] /# LASTNAME=roberto Pour afficher le contenu des variables, procder comme suit: [root@test ] /# echo $name; echo $LASTNAME Rponse 1.6 Si on dmarre un nouveau bash, les variables cres ne sont pas effectives. Pour cela il faut faire un export des variables. Rponse 1.7 Non car nous avons chang d'environnement. Rponse 1.8 [root@test ] /# Date +"%m" Rponse 1.9 Les lignes ajoutes dans le fichier .bashrc permettent de crer des alias la commande ls. Le pr emier alias permet d'afficher en couleur le rsultat de ls. Le deuxime alias permet d'afficher en couleur et d'utiliser l'option -l de la commande ls -l en utilisant la commande ll.

2 Traiter les flux de texte l'aide des filtresQuestion 2.1 O va le rsultat de cat? Question 2.2 Comment rediriger la sortie de la commande cat? Question 2.3 FILALI MOULAY RACHID Page : 77

Quelle commande est approprie pour lire un fichier de log? Question 2.4 Comment ajouter un numro aux lignes d'un fichier? Question 2.5 Comment faites vous pour compter le nombre de mots dans un fichier? Question 2.6 Quelle commande vous permet de transformer des minuscules en majuscules? Question 2.7 Quelle commande faut-il utiliser pour classer alphabtiquement le contenu d'un fichier ? Question 2.8 Est-ce que le format ELF vous permet d'excuter le mme programme binaire sur des architectures x86 et PPC? Rponse2.1 cat crit sur stdout (la sortie standard), le plus souvent un terminal. Rponse2.2 Avec les utilitaires de pipe (|) ou de redirection (, >>). Rponse2.3 Il faut utiliser tail de la manire suivante: [root@test ] /# tail -f -s 1 /var/log/messages Rponse2.4 Avec l'utilitaire nl de la manire suivante: [root@test ] /# nl file Rponse2.5 Avec l'utilitaire wc de la manire suivante: [root@test ] /# wc -w file Rponse2.6 Avec l'utilitaire tr de cette manire: [root@test ] /# cat /etc/passwd | tr [a..z] [A..Z] Rponse2.7 Avec l'utilitaire sort de cette manire: [root@test ] /# sort file Rponse2.8 Non, ELF spcifie le format des fichiers binaires. La dfinition des instructions binaires est diffrente entre les architecture x86 et PPC. Exercice 2.1 Affichez le nombre de mots qui commencent par h dans tous les fichiers du rpertoire /etc. Exercice 2.2 Comment enregistrer un fichier de 2Mo sur deux disquettes de 1.44Mo ? Comment feriez-vous pour assembler ensuite les deux parties du fichier ? Exercice 2.3 Quelle commande utiliseriez-vous pour remplacer le dlimiteur : dans le fichier /etc/passwd par # ? Exercice 2.4 Combien de lignes pouvez-vous comptabiliser dans le fichier /etc/passwd ? Exercice 2.5 FILALI MOULAY RACHID Page : 78

Quelle commande permet d'afficher les 5 dernires lignes du fichier /etc/group ? Exercice 2.6 Combien de mots et de caractres le fichier /etc/passwd contient-il ? Exercice 2.7 Crez un fichier utilisateur dans votre rpertoire home qui contient tous les uid et le gid des comptes. Remplacez tous les : par un ESPACE. Exercice 2.8 Triez le fichier /etc/passwd avec le nom de l'utilisateur ? Rponse 2.1 La commande est: [root@test ] /# wc -w /etc/h* Rponse 2.2 La commande est: [root@test ] /# split -b 1m filename [root@test ] /# cat x* > filename ( pour reconstituer le fichier) Rponse 2.3 [root@test ] /# cat /etc/passwd | tr ":" "#" Rponse 2.4 La commande est: [root@test ] /# nl /etc/passwd ou [root@test ] /# cat -n /etc/passwd ou [root@test ] /# wc -l /etc/passwd Rponse 2.5 La commande est: [root@test ] /# tail -n 5 /etc/group Rponse 2.6 La commande est: [root@test ] /# wc -w -m /etc/passwd Rponse 2.7 La commande est: [root@test ] /# cut -d : -f 1,3,4 /etc/passwd > /home/toto/user &&