Maitrise MASS - MST ISASH 2 - Maitrise Math Module Systemes 1999/2000 Q U E L Q U E S C O M M A N D E S S H E L L Dominique Pastre octobre 1999 Commandes generales elementaires ================================ passwd ou passwd et se laisser guider smbpasswd sur les machines du 5eme, oct 99 echo repete date who donne les utilisateurs loges variable whoami nom de l'utilisateur selon les who am i machine, nom, terminal, date machines tty donne le nom du terminal de l'utilsateur mail pour lire donne la liste des messages avec leur numero , puis t ou t pour lire (message courant par defaut) d pour detruire s ou s pour sauvegarder (fichier mbox par defaut) w idem sans en-tete q pour quitter (les messages lus sont alors dans un fichier de nom mbox) x pour quitter sans rien changer f* pour tout lister si plus de 20 messages mail pour envoyer a , se laisser guider, . ou pour arreter man tout sur la commande Manipulation de fichiers et repertoires ======================================= pwd donne le repertoire de travail cd chemin relatif ou absolu, ".." pour remonter ls donne la liste des fichiers ou repertoires de (par defaut .) options -l mode du fichier, nombre de liens, propr, groupe, taille, date (type+protections) si lien symbolique .. -> .. -a tous les noms de fichiers, y compris ceux commencant par . -i donne le i-node -L si lien symbolique liste la reference, sinon comme ls -R recursif sur sous-repertoires -F repertoires/ executables* lien_symboliques@ -d seult le nom si repertoire (interet -dl) -r ordre alphabetique inverse -t ordonne par date derniere modif -c ordonne selon derniere edition ou changement de mode -u ordonne selon dernier acces ls idem pour un seul fichier alias conseilles : ls -la ou ls -laF et ls -laF | more chmod .. pour modifier les protections = [ugoa] [+-] [rwx] mkdir cree un nouveau repertoire rmdir detruit le repertoire (il doit etre vide) cat affiche le contenu de more affiche le contenu de page par page, pour avoir la page suivante, pour avoir la ligne suivante ghostview pour visualiser du postcript cp copie physique d'un fichier dans un autre cp copie physique de dans avec le meme nom option -i pour eviter d'ecraser par inadvertance, RECOMMANDEE ! ln creation d'un lien (meme fichier physique, meme i-noeud, faire ls -il pour voir) ln -s creation d'un lien symbolique (faire ls pour voir la difference) mv renommage option -i pour eviter d'ecraser par inadvertance, RECOMMANDEE ! rm supprime DANGER !!! (rm *) option -i RECOMMANDEE rm -r suppression recursive a partir de !!! SUPER DANGER !!! (rm -r .*) option -i ENCORE PLUS RECOMMANDEE wc nombre de lignes, mots, caracteres options -l ou w ou c uniquement lignes, mots ou caracteres grep .. cherche si le motif se trouve dans les fichiers et donne les lignes options -v donne les lignes ne contenant pas le motif -i pas de difference entre majuscules et minuscules -l ne donne que les noms de fichiers -n donne les numeros des lignes utiliser si necessaire des \ , des ' et des " exemples grep Dominique\ Pastre * ou grep 'Dominique Pastre' * ou grep "Dominique Pastre" * grep a\'b fic grep a\"b fic ou grep "a'b" fic ou grep 'a"b' fic grep a\"b fic ou grep 'a"b' fic pour chercher a"b grep a\[^b] fic pour chercher a non suivi de b grep a\[^\(] fic pour chercher a non suivi de ( grep '^a.*[0-9];$' fic ou grep a\.\*\[0-9]\;$ fic pour chercher une ligne commencant par a et set erminant par un chiffre suivi de ;2 diff donne les differences entre les deux fichiers option -w ne tient pas compte des separateurs (esp, tab) fichiers temporaires /tmp/.. poubelle : /dev/null Processus ========= ps processus de l'utilisateur attaches au terminal avec numero, terminal, etat, temps, nom de la commande etat : R (execution), S ou I (endormi (+-20s), T (stoppe) temps : CPUtime (user + syst) options -a processus de tous les utilisateurs -l autres informations (numero du pere, priorite, memoire ..) -u autres informations (nom de l'utilisateur, pourcentage de CPU et de memoire, heure de demarrage, ..) -r uniquement les processus actifs -x processus autres terminaux -v plus et moins d'informations interruption d'un processus : ou ou ou (extreme) kill -9 entree et sortie standards : /dev/tty commande > fic redirige la sortie standard sur fic (ecrase) commande >> fic idem sans ecraser (concatenation) commande 2> fic redirige la sortie erreur standard sur fic ! en shell seulement ! commande < fic redirige l'entree standard sur fic Exemples a.out > resultats mail destinataire < message mail -s sujet destinataire < message mail -s mon\ sujet destinataire < message ou ' " (cf grep) enchainement de processus sequentiels independants .. ; .. ; .. exemple date; whoami ; ps -v ; echo fin de commande composee attention aux parentheses (en shell seulement) date; whoami ; ps -v ; echo fin de commande composee > fic cat fic ou (date; whoami ; ps -v ; echo fin de commande composee) > fic cat fic date; whoami ; com ; echo fin de commande composee date; whoami ; com ; echo fin de commande composee > fic cat fic ou (date; whoami ; com ; echo fin de commande composee) > fic cat fic date; whoami ; com ; echo fin de commande composee 2> fic cat fic ou (date; whoami ; com ; echo fin de commande composee) 2> fic cat fic communication de processus -------------------------- indirecte who > qui wc -l < qui rm qui par tube !---------------! ____________ !----------------! ! 1er processus ! ------------ ! 2eme processus ! !---------------! -> !----------------! sortie entree who | wc -l se fait en parallele pour verifier, comparer ps > zz ; wc zz et ps | wc processus en arriere-plan (background) ------------------------------------- commande & premet de garder la main pendant l'execution de la commande utile pour compilation cc prog.c & messagerie xmail & pour interrompre, sortir de la fenetre ou kill -9 Recherche d'informations ======================== du .. occupation memoire (blocs) pour cat, recursif par defaut, comme du . options -s seulement le nombre total -a avec les fichiers df .. occupation des disques, et pourcentage, par defaut, tous les disques find .. .. recherche de fichiers ou repertoires dans les cat verifiant exp -name fichier ou repertoire -type f fichier -type d repertoire -user proprietaire -size taille du fichier (blocs de 512 ou 1024 octets) -mtime - le fichier a ete modifie depuis n jours -atime - consulte -ctime - change (fichier ou attribut) -print toujours vrai, imprime le chemin vers le fichier -exec {} \; vrai si valeur de retour 0 {} represente le nom du fichiers possibilite de composer avec des operateure booleens: et (concatenation), ou (-o), non (!), parentheses (\(et \)) exemples find -name -print cherche les fichiers de nom donne et affiche les chemins find -mtime -1 -print cherche les fichiers sous modifies depuis 1 jour find . \( -name a.out -o -name '*.o' \) -atime -7 -exec rm {} \; supprime les fichiers a.out et .. .o qui n'ont pas ete consultes depuis une semaine Impressions =========== lpr impression sur imprimante $PRINTER lpq liste des impressions en attente avec leur numero lprm annule la demande d'impression option pour ces 3 commandes -P pour changer d'imprimante ATTENTION pas d'espace entre P(majuscule) et l'imprimante mp genere une version bien presentee en format postcript a combiner avec lpr pour imprimer ( man ... | lpr ) (ou ghostview pour tester) option -o pour une meilleure presentation des messages recus Autres ====== su pour se connecter a partir de la session d'un autre cal ou cal calendrier history donne l'historique des commandes (en cshell seulement) basename supprime le plus long prefixe de la chaine jusqu'a / basename idem et le suffixe a la fin de la chaine head - affiche les n premieres lignes, 10 par defaut tail +ou- affiche a partir de n lignes a partir du debut(+) ou de la fin(-) paste fic2> .. ecrit les fichiers en colonnes a cote les uns des autres sort trie fic, resultat sur la sortie standard rediriger sur un fichier, exemple sort fic > fic_trie ATTENTION sort fic > fic ecrase fic options -r ordre inverse -f majuscules etminuscules confondues -d seuls, lettres, dhiffres et espaces sont significatifs tar pour creer ou recuperer un fichier d'archive (poursauvegarder sur bande ou transferer une arborescence de repertoires) option obligatoire c cree un fichier d'archive et y ecrit les fichiers t liste le contenu du fichier d'archive x extrait les fichiers initiaux du fichier d'archive options facultatives v version bavarde f pour preciser le nom du fichier d'archive - designe l'entree ou la sortie standard par defaut $TAPE b pour preciser le nombre de blocs (par defaut 20) Exemples tar cvf /def/rmt0 fic_rep tar cvbf 200 /def/rmt0 fic_rep tar tvf /def/rmt0 fic_rep tar xvf /def/rmt0 fic_rep tar cvf fic_rep.tar fic_rep tar xvf fic_rep.tar fic_rep mieux tar cvf - fic_rep | compress > fic_rep.tar.Z uncompress fic_rep.tar.Z | tar xvf encore mieux avec des alias Execution de programmes ======================= sh ou csh ou tcsh pour changer de shell options at fic lancement d'un fichier de commandes shell a une heure donnee kill -

envoie le signal de numero n au processus de numero p n=9 pour tuer le processus mail < fichier mail -s sujet > fichier env donne l'environnememt de l'utilisateur env modifie l'environnement PS1 premier prompt HOME repertoire personnel PRINTER imprimante par defaut PATH chemins d'acces pour affecter PRINTER = ... pour utiliser echo $PRINTER Variables (surtout utiles pour les fichiers de commandes) ========= pour affecter (chaine alphanumerique) Exemples a=bonjour (en shell, sans espaces autour de =) set a = bonjour (en cshell) setenv a bonjour (en cshell ou tchell) $ pour utiliser Exemple echo $a Alias (Cshell et tcshell seulement) ===== alias pour definir une abreviation peuvent etre mis dans fichiers .login ou .cshrc unalias pour la supprimer alias pour la connaitre des quote peuvent etre necessaires Exemples alias diamant rlogin diamant alias rmi 'rm -i' parametres possibles !* designe la liste des parametres !^ designe le premier parametre !$ designe le dernier parametre !:i désigne le ième paramètre Attention : quote et \ necessaires Exemples alias lll 'ls -l \!*' alias trouver 'find . -name \!^ -print' alias trouv_supp 'find . -name \!* -exec echo on supprime {} \; -exec rm {} \;' fichiers de commande shell (scripts) ========================== a rendre executables ou a appeler par sh interpretes en cshell si le premier caractere est # shell sinon quel que soit le shell initial les parametres s'appellent $1, $2, ... $# est le nombre d'arguments d'appel $* est la liste des parametres de la commande Exemple de fichier mv $1 $1.c echo $1 est renomme $1.c Autre exemple cp $1 $1.$2 echo $1 est renomme $1.$2 Commandes et structures de controle ----------------------------------- test primitives -d fic_rec fic_rec existe et est un repertoire -f fic_rec fic_rec existe et n'est pas un repertoire -l fic_rec fic_rec existe et est un lien symbolique if ... then ... else ... fi Exemple if test -f $1 then echo le contenu du fichier $1 est ; cat $1 else if test -d $1 then echo les fichiers du repertoire $1 sont ;ls $1 else echo erreur fi fi on peut aussi utiliser elif case in ) ;; ) ;; ... * ) ;; esac Exemple case $# in 0) pwd;; 1) if test -f $1 then cat $1 fi ;; 2) if test -f $1 then cp $1 $2 fi ;; *) echo plus de 2 parametres ;; for in ... do done Exemple for i in .p .c .o do if test -f $1$i then echo $1$i existe fi done si pas de prend par defaut la liste des arguments d'appel Exemple for i do echo $i reecrit $i.c mv $i $i.c done qu'on pourra appeler pour une liste de fichiers ou meme pour l'argument * il y a aussi des iterations de la forme while et until lecture ------- read Exemple echo fichiers a concatener : read f1 f2 echo nouveau fichier concatene : read f3 cat $f1 $f2 > $f3 Exemple de fichiers de commandes mettant a la poubelle for i do echo suppression de $i \? \(o/n\) read rep if test $rep = o then mv -i $i /users/infocom3/pastre/poubelle/$i elif test $rep = y then mv -i $i /users/infocom3/pastre/poubelle/$i else echo $i non supprime fi done et vidant la poubelle automatiquement au logout (fichier .logout) rm -ir /users/infocom3/pastre/poubelle/* rm -ir /users/infocom3/pastre/poubelle/.[a-zA-Z]* Editeur ligne ed ================ mode commande par defaut i pour rentrer en mode insertion (avant le caractere courant) a apres . pour sortir du mode insertion w pour sauvegarder q pour sortir . designe la ligne courante, $ la derniere ligne quelques exemples de commandes : 15 la ligne 15 devient la ligne courante p affiche la ligne courante 14 p affiche la ligne 14 23,89 p affiche les lignes 23 a 89 .,.+2 j concatene la ligne courante et les deux suivantes 1,. d detruit de la premiere ligne a la ligne courante .,$ w fic sauvegarde de la ligne courante a la derniere ligne dans le fichier fic s/chaine1/chaine2/p remplace la premiere occurence de chaine1 par chaine2 dans la ligne courante et affiche s/chaine1/chaine2/g remplace toutes les occurences 12,45s/... remplace la premiere occurence de chaque ligne entre 12 et 45 /chaine1/ la premiere ligne contenant chaine1 est la ligne courante g/chaine1/s/chaine2/chaine3/ remplace, dans les lignes contenant chaine1 chaine2 par chaine3 g/chaine1/s//chaine3/ idem avec chaine1 remplacee, identique a 1,$ s/chaine1/chaine3/ s/chaine1\(motif1\)chaine2\(motif2\)chaine3/chaine4\2chaine5\1chaine6/ r fic insere toures les lignes de fic apres la ligne courante Pour le reste, faire man ed Dans l'editeur video vi, qui comporte des commandes de deplacement sur l'ecran, on peut utiliser les commandes ed precedees de ":" fichiers de commandes appelant ed ================================ Exemples de fichier echo on remplace dans $1 toutes les occurences de $2 par $3 ed $1 <<% g/$2/s//$3/g w q % echo fin des remplacements ls *.c > zzz ed zzz <<% g/\(.*\.c/s//mv \1.c \1/ w zzzz q % chmod u+x zzzz zzzz