Académique Documents
Professionnel Documents
Culture Documents
P age 1
Shell et Outils Unix --------------------------------------------------------Shell et Outils Unix - Eric Lecolinet - ENST Paris
P age 2
PLAN --------------------------------------------------------------------------------------------------------------------
Shell et Outils Unix --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------SHELL FILTRES ET EXPRESSIONS REGULIERES GREP AWK DEBOGUEURS 3
Shell et Outils Unix - Eric Lecolinet - ENST Paris
31 35 39 47
E. Lecolinet ENST
P age 3
utilisation non conversationnelle : langage de programmation des scripts cration de nouvelles commandes avec : notation concise, variables, paramtrage, structures de contrle Notation : "quotation inverse" : pas de "marquage" des chanes de caractres (sauf si ncessaire) marquage des valeurs des variables (prexe $) pas de virgule entre les arguments
E. Lecolinet ENST
P age 4
Syntaxe
Redirections : entre standard: sort < input-file sortie standard: man awk > output-file sortie erreurs: ls 2> kk ls >& kk (sh, ksh, bash) (csh, tcsh)
E. Lecolinet ENST
P age 5
Redirections
--------------------------------------------------------------------------------------> chier >> chier < chier com1 | com2 <<s dirige la sortie standard vers chier ajoute la sortie standard chier prend lentre standard depuis chier tube: connecte la sortie de com1 lentre de com2
Shell et Outils Unix - Eric Lecolinet - ENST Paris
Pour sh, ksh, bash : n> chier n>&m n<&m dirige la sortie du descripteur n vers chier fusionne la sortie du descripteur n celle de m fusionne lentre du descripteur n celle de m
P age 6
Mtacaractres du Shell
--------------------------------------------------------------------------------------& ; | * ? commande en "background" (arrire-plan) succession de commandes tube (pipe) chane gnrique caractre gnrique cc prog.c -o prog & cc prog.c -o prog; prog ls -l | wc
Shell et Outils Unix - Eric Lecolinet - ENST Paris
[ccc] prend un caractre parmi ccc [a-z] prend un caractre entre a et z \ ... "..." neutralisation dun mtacaractre neutralisation lintrieur de la sous-chane ... neutralisation partielle (interprtation de $ et )
E. Lecolinet ENST
P age 7
...
excute les commande dans ... ; le rsultat remplace ... ls -l which ps excute les commande dans ... par un sous-shell (make prog ; prog)& commentaire excute com1, sil ny a pas derreur excute com2
Shell et Outils Unix - Eric Lecolinet - ENST Paris
(...) #
Caractres de contrle ^D ^C ^\ ^Z n de chier, n de connexion interruption (termine lexcution) quit (cre un "core dump" pour analyse post mortem) suspend lexcution (reprise par fg ou bg ; pas support par sh)
E. Lecolinet ENST
P age 8
Commandes usuelles
--------------------------------------------------------------------------------------echo afchage des arguments sur sortie standard echo -n date = ; date liste des utilisateurs connects who am i ; whoami
Shell et Outils Unix - Eric Lecolinet - ENST Paris
who, rwho
terminal utilis changer, montrer le rpertoire courant espace disque partitions liste des processus ps -aux (Unix BSD) ps -ef (Unix Systme V)
E. Lecolinet ENST
P age 9
stty
passwd, yppasswd, nispasswd changement du mot de passe chmod changer les attributs dun chier chmod a+x toto ; ls -l toto
Shell et Outils Unix - Eric Lecolinet - ENST Paris
remote login: connexion sur machine distante remote shell: excution dun programme sur machine distante rsh autre-machine who (dpend du fichier .rhosts) retrouver une "commande" (= un chier excutable dans $PATH) which ls retrouver un chier quelconque (en spciant des conditions) find ~ -name toto\* -print
E. Lecolinet ENST
which
nd
P age 10
Shells Unix
--------------------------------------------------------------------------------------Deux familles : -- Systme V : Bourne Shell: Korn Shell: Gnu Shell: ... -- BSD C-Shell: Toronto C-Shell: csh tcsh sh ksh, bash zsh ...
Plusieurs shells "cohabitent" souvent sur une mme machine; frquemment : csh ... --> utilisation interactive = interprteur de commandes --> utilisation non conversationnelle : = langage de programmation des scripts
E. Lecolinet ENST
sh ...
P age 11
Fichiers dinitialisation
--------------------------------------------------------------------------------------Shells: sh, ksh : zsh : csh, tcsh : .prole .prole .zshrc .login .cshrc .tcshrc .logout
Shell et Outils Unix - Eric Lecolinet - ENST Paris
Outils: Rlogin: Emacs: Debogueur: X Window: .rhosts .emacs .dbxinit .xinitrc .Xdefaults .mwmrc .xmodmaprc
P age 12
Utilisation interactive
--------------------------------------------------------------------------------------Editeur de ligne (ksh, bash, zsh, tcsh) suivant les cas: Flches, mode Emacs (^B ^F ^P ^N), mode VI Complmentation ESC Historique liste: rappel: Aliases sh : csh, tcsh : ksh, zsh : Exemples (csh): history !! !string !no-commande
TAB
^D
Shell et Outils Unix - Eric Lecolinet - ENST Paris
pas daliases alias name value alias name="value" alias ls alias ll alias E
E. Lecolinet ENST
P age 13
Job control
--------------------------------------------------------------------------------------(pas de "job control" pour sh) ^Z : suspend lexcution (met le processus en cours dans ltat dormant) liste les jobs lancs depuis ce shell ou ou bg no-process : fg no-process : met un processus en "background" met un processus en "foreground"
Shell et Outils Unix - Eric Lecolinet - ENST Paris
E. Lecolinet ENST
P age 14
Variables
-------------------------------------------------------------------------------------- type chane de caractres nom commenant par une lettre dclaration implicite affectation : sh: name=value csh: set name = value
valeur de la variable: $name Exemples (sh) compteur=0 echo $compteur s=/usr/paul/src mv *.c $s l=/usr/lib/lib ls ${l}c.a ( ls $lc.a !!!)
E. Lecolinet ENST
P age 15
Variables denvironnement
-------------------------------------------------------------------------------------- variables transmises aux sous-shells servent congurer lutilisation du Shell et des outils Unix sh: csh: name=value ; export name setenv name value
Shell et Outils Unix - Eric Lecolinet - ENST Paris
Variables usuelles
PATH LD_LIBRARY_PATH MANPATH MAIL, MAILPATH HOME, PWD PS1, PS2 SHELL DISPLAY LINES, COLUMNS VISUAL, EDITOR, XEDITOR PRINTER, LPDEST, TAPE NAME, SIGNATURE CSH et TCSH : prompt ignoreeof nobeep history
E. Lecolinet ENST
lec gnore
P age 16
Scripts ------------------------------------------------------------------------------------------------------------------- chiers excutables contenant des commandes Unix pour crer de "nouvelles commandes" de manire simple => Shell = vrai langage de programmation NB: par dfaut: Bourne Shell (sh)
Shell et Outils Unix - Eric Lecolinet - ENST Paris
Crer et utiliser un nouveau script: 1. diter le chier de commandes (par exple: "myscript") 2. le rendre excutable: chmod a+x myscript 3. lancement comme une commande normale: myscript 4. (ventuellement) mettre le script dans un des rpertoires de $PATH faire: rehash
E. Lecolinet ENST
P age 17
--------------------------------------------------------------------------------------$1 $2 .... $9 $* $# $0 ligne de commande: -> variables: $$ $! $? argument 1, 2 ...9 de la ligne de commande tous les arguments nombre darguments nom du script toto $0 xxx $1 yyy $2 zzz $3
numero du processus shell numero du dernier processus en arrire plan code de retour (valeur renvoye par exit) vaut 0 (= True) si terminaison normale
Spcication du shell employer pour interprter le script: par defaut: sinon indiquer: Par exemple: Bourne Shell (sh) #!shell-a-executer sur la premire ligne du script #!/usr/local/bin/tcsh
E. Lecolinet ENST
P age 18
Boucle for
--------------------------------------------------------------------------------------Syntaxe: Exemples: for i in *.c do echo "fichier $i :" diff ../old/$i $i done Dans un script: for i in $* do echo "fichier $i :" cat $i done | lpr
E. Lecolinet ENST
P age 19
set
date
case $1 in Sun) jour=Dimanche;; ... Sat) jour=Samedi;; esac case $2 in Jan) mois=Janvier;; ... Dec) mois=Decembre;; esac echo "$jour $3 $mois $7 $4 E. Lecolinet ENST
P age 20
Alternatives
--------------------------------------------------------------------------------------t Les commandes Unix renvoient une valeur qui est un "compte-rendu" de lexcution t Cette valeur vaut : 0 ("vrai") une valeur > 0
si la commande sest excute sans erreur qui indique le type derreur dans le cas contraire
Shell et Outils Unix - Eric Lecolinet - ENST Paris
t Cette valeur peut tre utilise pour faire des alternatives avec la commande if Syntaxe: if commande then commandes-a-faire-si-vrai else commandes-a-faire-si-faux Note: la partie "else" est optionnelle
E. Lecolinet ENST
P age 21
Tests
Cette commande Unix renvoie la valeur de vrit dun test Options: -f chier -d chier -r chier -s chier s1 = s2 s1 != s2 n1 -eq n2 n1 -ne n2 etc ... chier existe et nest pas un rpertoire chier existe et est un rpertoire chier existe et est lisible chier existe et est de taille non nulle les chanes s1 et s2 sont identiques les chanes s1 et s2 sont diffrentes les nombres n1 et n2 sont gaux les nombres n1 et n2 sont diffrents
E. Lecolinet ENST
P age 22
Exemples:
if test $# != 2 then echo "usage: $0 file1 file2" exit 2 fi if cmp -s $1 $2 then echo "$1 et $2 sont identiques" exit 0 else echo "$1 et $2 sont differents" exit 1 fi
----------------------------------------------------------------------------------------------Diffrence entre:
if test $1 = hello; then commande; fi if test "$1" = hello; then commande; fi case "$1" in hello) commande ;; esac E. Lecolinet ENST
P age 23
Calcul
Exemple: ... truc=expr $truc + 1 echo $truc Note: ne pas oublier les blancs et les
E. Lecolinet ENST
P age 24
Evaluation -------------------------------------------------------------------------------------------------------------------$var ${var} ${var-val} ${var=val} ${var?mess} ${var?} ${var+val} valeur de var; rien si var indnie mme chose valeur de var si dnie, val dans le cas contraire $var est inchange mme chose mais $var devient val si indnie valeur de var si dnie, impression de mess sinon valeur de var si dnie, sinon impression de : var: parameter not set val si var est dnie, rien sinon
Shell et Outils Unix - Eric Lecolinet - ENST Paris
eval :
P age 25
until commande do commande--faire-tant-que-faux done Utilisent les"comptes-rendu" de lexcution comme la commande if Exemple: while read line do echo line done < $1
E. Lecolinet ENST
P age 26
Exemples
--------------------------------------------------------------------------------------n=1 for i in $* do echo arg $n : $i n=`expr $n + 1` done -----------------------------------------------------------------------n=1 while [ $# -gt 0 ] do echo arg $n : $1 n=`expr $n + 1` shift done -----------------------------------------------------------------------n=1 while [ $n -le $# ] do eval echo arg: $n : $$n n=`expr $n + 1` done
E. Lecolinet ENST
P age 27
E. Lecolinet ENST
P age 28
Divers -------------------------------------------------------------------------------------------------------------------break continue exit n read echo set unset sortie de for, while, until itration suivante de for, while, until sortie du script en renvoyant la valeur n lecture sur lentre standard
Shell et Outils Unix - Eric Lecolinet - ENST Paris
afche ses arguments sur la sortie standard initialisation des variables effacer des variables
oprateurs || et && jouent le rle de OU et de ET logiques (mme principe quen langage C) test -f fichier || echo Fichier inconnu quivaut : if test ! -f fichier; then echo Fichier inconnu; fi
E. Lecolinet ENST
P age 29
Interruptions -------------------------------------------------------------------------------------------------------------------trap suite-de-commandes liste-dinterruptions ... trap rm -f /tmp/fichtemp; exit 1 ... commande vide = ignorer linterruption (trap 1; commande) & Interruptions: 0 1 2 3 9 15 n du shell n de connexion (^D) interruption par ^C n par ^\ (produit un core dump) destruction imprative terminaison; interruption par dfaut de kill
E. Lecolinet ENST
1 2 15
Shell et Outils Unix - Eric Lecolinet - ENST Paris
P age 30
main() { if test $# -le 0; then usage $0; fi for i in $* do echo $i done } main $*
E. Lecolinet ENST
P age 31
LES FILTRES -------------------------------------------------------------------------------------------------------------------Programmes qui : lisent une entre effectuent une transformation crivent un rsultat (sur la sortie standard) t grep, egrep, fgrep : recherche dune expression dans des chiers t sed : diteur de ots t awk : outil programmable de transformation de texte t diff, cmp, uniq, tr, dd ... : outils de comparaison, conversion ... de chiers Ces outils utilisent les "expressions rgulires"
Shell et Outils Unix - Eric Lecolinet - ENST Paris
E. Lecolinet ENST
P age 32
EXPRESSIONS REGULIERES (Regexp) -------------------------------------------------------------------------------------------------------------------t Moyen algbrique pour reprsenter un langage rgulier t Les expressions regulires permettent de dcrire une famille de chanes de caractres au moyen de mtacaractres t Principe un "caractre simple" "matche" avec lui-mme : a matche avec a 6 matche avec 6 un mtacaractre gnre ou prcise un ensemble de possibilits . matche avec nimporte quel caractre ^ indique un dbut de chane, etc ... les mtacaractres sont neutraliss par le caractre \
Shell et Outils Unix - Eric Lecolinet - ENST Paris
E. Lecolinet ENST
P age 33
Mtacaractres des Regexp -------------------------------------------------------------------------------------------------------------------. * \* ^a a$ ^a$ ^.$ nimporte quel caractre rptition du caractre prcdent caractre * a en dbut de chane
Shell et Outils Unix - Eric Lecolinet - ENST Paris
a en n de chane correspond exactement au mot: a chane dun seul caractre chane dexactement 3 caractres chane dau moins 3 caractres point en n de chane
Attention aux confusions avec les mtacaractres du Shell : !!! sens diffrents pour mtacaractres:
E. Lecolinet ENST
P age 34
chane contenant a ou b ou c idem chane contenant un caractre alphabtique chane contenant une lettre minuscule suivie dun chiffre chane ne contenant pas de chiffre chane ne contenant pas de chiffre au dbut chane contenant le caractre . (pas dinterprtation) chane ne commenant pas par ^
Shell et Outils Unix - Eric Lecolinet - ENST Paris
/ / Exemple:
E. Lecolinet ENST
P age 35
GREP -------------------------------------------------------------------------------------------------------------------grep expression chiers ... Recherche et imprime les lignes contenant lexpression spcie grep From $MAIL grep From $MAIL | grep -v Marie who | grep Marie ls | grep -v temp Options: -i -v -n -f Remarque: ignore distinction minuscules / majuscules inverse : imprime les lignes ne contenant pas lexpression afche le numro de ligne lit lexpresion dans un fichier rsultat sur sortie standard (utiliser les redirections)
E. Lecolinet ENST
P age 36
Grep avec expressions rgulires grep ^From $MAIL ls -l | grep ^d Attention: neutraliser linterprtation des mtacaractres par le Shell au moyen de
Shell+Grep
Shell et Outils Unix - Eric Lecolinet - ENST Paris
ls .[a-Z]* ; ls .[a-zA-Z]* grep -n nom-var *.[ch] grep nom-var[1-9] *.[ch] Mtacaractres traits par le Shell ou par grep suivant neutralisation
Variantes fgrep egrep commande optimise mais simplie pour traiter de gros chiers grep tendu (quivalent grep -E sur certains systmes)
E. Lecolinet ENST
P age 37
Caractres gnriques de grep Rappel: . caractre quelconque * rptition du caractre prcdent : y* autant de y que lon veut (ou aucun) xy* x xy xyy xyyy .... .* nimporte quelle chane
Shell et Outils Unix - Eric Lecolinet - ENST Paris
Exemple: trouver les utilisateurs sans password en utilisant : cat /etc/passwd ou : ypcat passwd Sortie :
root:x:0:1:Super-User:/:/sbin/sh daemon:x:1:1::/: bin:x:2:2::/usr/bin: toto:x::3::/: adm:x:4:4:Admin:/var/adm:
Commande :
grep
...
E. Lecolinet ENST
P age 38
E. Lecolinet ENST
P age 39
AWK -------------------------------------------------------------------------------------------------------------------awk programme-awk [variable=valeur] chiers ... ou awk -f chier-awk [variable=valeur] chiers ... t Outil programmable de transformation de texte t Syntaxe proche du langage C t Calculs de base, fonctions, tableur programmable t Intgre la recherche des expresssions rgulires Options -f chier-awk : pratique si plusieurs lignes -Fc : initialise la variable FS (voir ci-aprs) Note: AWK = Aho Weinberger Kernighan
E. Lecolinet ENST
P age 40
Structure dun programme awk BEGIN regexp1 regexp2 ....... END Principe
Shell et Outils Unix - Eric Lecolinet - ENST Paris
t Initialisation t Corps
effectuer action0 pour chaque ligne du texte entr si regexp1 est vrie effectuer action1 si regexp2 est vrie effectuer action2 etc ... effectuer actionF
P age 41
Variables et Structure dune ligne Chaque ligne ("Record") automatiquement spare en champs ("Fields") sparateur par dfaut: blancs et/ou tabulations NR, NF $0 $1, $2 ... $NF RS, FS ORS, OFS OFMT numro de ligne (Record), nombre de champs (Fields) contenu de la ligne courante
Shell et Outils Unix - Eric Lecolinet - ENST Paris
contenu du ime ... dernier champ sparateur de lignes (dfaut = \n), de champs (defaut = blanc et tab) sparateurs en sortie (pour modier limpression) format dimpression des nombres (dfaut = %.6g)
Remarque La variable FS peut aussi tre initialise lors de lappel de awk via loption: -Fc : le sparateur de champs prend la valeur du caractre c
E. Lecolinet ENST
P age 42
Programme totpop: BEGIN {printf("%10s %6s %5s %s\n", "Pays","Superf","Pop","Cont")} { printf ("%10s %6s %5s %s\n", $1, $2, $3, $4) superf = superf + $2 pop = pop + $3 } END {printf("\n %10s %6s %5s\n", "TOTAL", superf, pop)} Rsultat sur sortie standard:
Pays Superf URSS 8649 Canada 3852 Chine 3705 France 211 TOTAL 16417 Pop 275 25 1032 55 1387 E. Lecolinet ENST Cont Asie Amerique Asie Europe
P age 43
Remarques variables et tableaux dnis implicitement oprateurs de comparaison et de calcul du langage C fonctions dimpression et structures de contrle similaires au C Programme maxpop: { if (maxpop < $3) { maxpop = $3 pays = $1 } } END { print "Pays: " pays "/ Max-Pop: " maxpop } Rsultat Pays: Chine / Max-Pop: 1032
Shell et Outils Unix - Eric Lecolinet - ENST Paris
E. Lecolinet ENST
P age 44
Tableaux et Mmoire associative Programme contpop: { contpop[$4] += $3 } END { for (c in contpop) print c, contpop[c] }
Shell et Outils Unix - Eric Lecolinet - ENST Paris
Expressions Rgulires $2~/[0-9]+/ $1 != prev { print $1 ": " $3 / 1000 " milliards" } { print; prev = $1 }
E. Lecolinet ENST
P age 45
Fonctions et structures de contrle if (condition) instruction [else instruction] while (condition) instruction for (expression; condition; expression) instruction for (identicateur in tableau) instruction break, continue, next, exit print [expr1 [expr2] .....] printf (format, expr1, expr2 ...) sprintf (format, expr1, expr2 ...) length length (chaine) index (chaine, caractere) substr (chaine, caractere [, long]) sqrt (x) log (x) exp (x) int (x)enlever les rptitions de lignes
E. Lecolinet ENST
P age 46
AUTRES FILTRES -------------------------------------------------------------------------------------------------------------------sort -f -n -r uniq diff, comm tr tri alphanumrique ignore majuscules et minuscules tri numrique renverse lordre enlever les rptitions de lignes
Shell et Outils Unix - Eric Lecolinet - ENST Paris
comparaison de chiers conversion de caractres dans des chiers tr a-z A-Z <in >out conversion format entre systmes dexploitation diffrents (sert la lecture de chiers sur bandes magntiques ...) extrait des champs dans les lignes dun chier concatne les lignes de plusieurs chiers
E. Lecolinet ENST
dd
cut paste
P age 47
DEBOGUEURS --------------------------------------------------------------------------------------------------------------------
adb
t maintenant: gestion du code source : dbogueurs symboliques : t variantes suivant systmes : SunOS : multi-plateformes : Attention: dpendance entre compilateur et dbogueur : exemple SunOS5: cc <-> dbx gcc <-> gdb compiler avec : option -g dbx, dbxtool (SunOS4), debugger (SunOS5) gdb (GNU), xxgdb (X), mxgdb (Motif)
Shell et Outils Unix - Eric Lecolinet - ENST Paris
E. Lecolinet ENST
P age 48
E. Lecolinet ENST