Marcel Bosc Introduction système Université Paris-13Département informatiqueIUT de Villetaneuse Cours-3/
Plan du cours ● chemins ● redirections ● l'informatique en vrai : service web ● programmation shell partie pratique ● commandes: find, tar, sed, wc
chemins 1ère partie répertoire-départ répertoire-arrivé
commandes: chemins simples cp essai.txt tp1 répertoire courant systeme tp1 tp2 essai.txt chemin relatif dans le répertoire courant dans le répertoire courant doc gpl.txt chemins relatifs (très simples)
commandes: chemins relatifs cp essai.txt tp1/doc répertoire courant systeme tp1 tp2 essai.txt dans le répertoire courant dans le répertoire courant chemin relatif doc gpl.txt
commandes: chemins relatifs cp tp2/gpl.txt tp1/doc répertoire courant systeme tp1 tp2 essai.txt fichier source pas forcement dans répertoire courant fichier source pas forcement dans répertoire courant doc gpl.txt
cp../art.txt. répertoire courant systeme tp1 tp2 essai.txt répertoire parent doc gpl.txt répertoires parent et courant dupond art.txt répertoire courant.. : parent. : courant
répertoire courant répertoire courant chemins absolus / bin usr tmp var home include libdurand systeme tp1 tp2 stdlib.h dupond etc essai.txt chemins absolus racine cp /usr/include/stdlib.h /tmp
liens symboliques ln -s systeme/tp2/exo1 lien-vers-exo1 systeme tp1 tp2 gpl.txt ~ exo1 lien-vers-exo1 lien symbolique: raccourci pour accéder à un fichier ou répertoire « raccourcis » « junctions » cd ~/lien-vers-exo1 exemple: on peut écrire
redirections 2ème partie ● redirection de la sortie et de l'entrée ● les tubes ● exemples
la sortie standard ~/public_html]# ls README.html HEADER.html ~/public_html]# sortie standard de la commande ls la sortie standard c'est ce qui s'affiche normalement lorsqu'on exécute une commande commande: « ls » sortie standard affichage README.html HEADER.html
rediriger la sortie standard l'opérateur > redirige la sortie standard dans un fichier. Si le fichier existe déjà, il est écrasé l'opérateur > fichier commande sortie standard affichage
~/public_html]# ls > essai ~/public_html]# commande: « ls » sortie standard affichage README.html HEADER.html fichier « essai » rien n'est affiché! on retrouve tout dans le fichier « essai » 1er exemple de redirection
2e exemple de redirection ~/public_html]# pwd /home/dupond/public_html ~/public_html]# pwd > essai2 ~/public_html]# rien n'est affiché! ~/public_html]# ls essai2 README.html HEADER.html ~/public_html]# nouveau fichier affichage normal de 'pwd'
rediriger la sortie standard l'opérateur >> redirige la sortie standard vers la fin d'un fichier existant. Le fichier est crée s'il n'existe pas l'opérateur >> ~/public_html]# ls >> essai
l'entrée standard l'entrée standard c'est ce qui est saisi au clavier lorsqu'on exécute une commande commande clavier entrée standard
rediriger l'entrée standard ~/public_html]# commande < essai ~/public_html]# fichier l'opérateur < commande clavier entrée standard peu utilisé
les tubes redirige la sortie standard d'une commande dans l'entrée standard d'une autre commande commande1 | commande2 commande1 commande2 tube très utilisé!
la commande: grep rechercher des informations dans un fichier ligne par ligne bonjour. aurevoir. tonton. grouik. paf. fichier.txt ~]# grep on fichier.txt bonjour. tonton. ~]# pas de fichier en argument : entrée au clavier ! commande très utile!
les tubes ~/exemple]# ls image.png index.html estimation.txt toto.sxc ~/exemple]# ls | grep ima image.png estimation.txt la sortie de ls redirigée dans l'entrée de grep la sortie de ls redirigée dans l'entrée de grep l'opérateur |
exemples ~]# ps -ef... bosc Aug16 ? 00:00:38 gnome-terminal bosc Aug16 ? 00:00:00 gnome-pty-helper root Aug16 ? 00:00:03 spamd child root Aug16 ? 00:00:13 spamd child bosc Aug16 pts/1 00:00:00 bash root :26 ? 00:00:17 /usr/sbin/cupsd -F bosc :44 pts/1 00:03:49 /usr/lib/openoffice bosc :10 ? 00:07:36 /usr/lib/mozilla-fir bosc :40 ? 00:00:02 emacs bosc :40 ? 00:00:00 /usr/bin/aspell -a bosc :28 pts/2 00:00:00 bash bosc :18 pts/4 00:00:00 emacs memo/plan.txt bosc :18 pts/1 00:00:01 gpdf introinfo.pdf... trop de choses, impossible à lire!
exemples ~]# ps -ef > essai.txt première idée: tout dans un fichier ~]# less essai.txt ~]# gedit essai.txt & [2] 6586 ~]# grep bash essai.txt... puis rechercher les informations dedans
~]# ps -ef | grep bash bosc Aug16 pts/1 00:00:00 bash bosc :28 pts/2 00:00:00 bash meilleure solution: un tube ~]# ps -ef | grep root root Aug16 ? 00:00:03 spamd child root Aug16 ? 00:00:13 spamd child root :26 ? 00:00:17 /usr/sbin/cupsd -F tous les processus contenant « bash » tous les processus contenant « root » exemples pas besoin d'un fichier intermédiaire
l'informatique en vrai 3ème partie
exemple: un service web réseau internet utilisateur entreprise fournissant un service web pages web (html...)
un service web serveurs web développeurs, graphistes serveurs de base de données administrateurs serveurs, réseau, base de données, sécurité logiciel réseau internet « datacenter »
programmation shell: introduction 4ème partie ● variables simples ● variables d'environement ● boucles "for"
exécuter plusieurs commandes ~]# cd public_html ; ls ; echo bonjour HEADER.html README.html bonjour ~/public_html]# ~/public_html]# echo bonjour ; ls bonjour HEADER.html README.html ~/public_html]# syntaxe: commande1 ; commande2 exemples: résultat "echo" résultat "ls"
variables shell ~]# prenom=Amira ~]# echo bonjour $prenom bonjour Amira ~]# ~]# repertoire=/etc ~]# cd $repertoire /etc]# affectation: $nom_variable nom_variable=valeur référence: valeur nom_variable exemples:
script shell ~]#./essai.sh bonjour /home/dupond au revoir ~]# script shell: programme constitué de commandes shell dans un fichier texte echo bonjour pwd cp fichier1 copie1 echo au revoir fichier: essai.sh programme simple!
script shell : exécution ~/bin]#./essai.sh./ exécuter le fichier essai.sh qui se trouve dans le répertoire courant./ exécuter le fichier essai.sh qui se trouve dans le répertoire courant on doit préciser le chemin du script, même dans le répertoire courant ~]# ~/bin/essai.sh ~/bin/ chemin complet
~]# ls -l essai.sh -rw-r--r-- 1 bosc prof :08 essai.sh ~]# chmod +x essai.sh ~]# ls -l essai.sh -rwxr-xr-x 1 bosc prof :08 essai.sh chmod +x nom-fichier.sh droits d'exécution sur un fichier script shell : exécution
arguments d'un script shell ~]#./essai.sh toto titi bonjour premier argument: toto deuxieme argument: titi ~]#./essai.sh aaa bbb bonjour premier argument: aaa deuxieme argument: bbb ~]# echo bonjour echo premier argument: $1 echo deuxieme argument: $2 fichier: essai.sh toto nom_variable: 1 titi nom_variable : 2
boucles "for" for prenom in Amira Nicolas Karim ; do echo bonjour $prenom echo je suis dans la boucle done liste de valeurs variable commandes à exécuter fin de la boucle boucle: exécuter plusieurs fois des commandes
boucles "for" for prenom in Amira Nicolas Karim ; do echo bonjour $prenom done fichier: essai-boucle.sh ~]# chmod +x essai-boucle.sh ~]#./essai-boucle.sh bonjour Amira bonjour Nicolas bonjour Karim ~]#
boucles "for" ~]# cp oiseau.jpg images/photo_oiseau.jpg ~]# cp chien.jpg images/photo_chien.jpg ~]# cp vache.jpg images/photo_vache.jpg ~]# cp hibou.jpg images/photo_hibou.jpg... ~]# for nom in oiseau chien vache ;do cp $nom.jpg images/photo_$nom.jpg ; done variable liste de valeurs commande à exécuter fin des commandes
partie pratique
la commande: tar manipuler des archives ~]# tar czvf archive.tar.gz repertoire c:créer nouvelle archive c:créer nouvelle archive z: compresser v: verbose f: fichier archive le nom du fichier archive qu'on va créer le nom du fichier archive qu'on va créer le répertoire qu'on veut archiver le répertoire qu'on veut archiver créer une archive
la commande: tar manipuler des archives ~]# tar xzvf archive.tar.gz x:extraire z: compresser v: verbose f: fichier archive le nom du fichier archive d'ou on veut extraire le nom du fichier archive d'ou on veut extraire désarchiver
la commande: sed remplacer dans des fichiers bonjour. aurevoir. tonton. grouik. paf. fichier.txt remplacer "on" par "af" dans fichier.txt bafjour. aurevoir. taftaf. grouik. paf. fichier.txt ~]# sed -i 's/on/af/g' fichier.txt
la commande: wc word count: compter le nombre de lignes, mots ou caractères dans un fichier ~]# wc fichier fichier ~]# wc -l fichier 5 fichier mots lignes caractères
la commande: find rechercher des fichiers dans une arborescence find. -iname "*.jpg" rechercher les fichiers terminant par.jpg find /usr/include -iname "*color*.h" rechercher les fichiers.h contenant "color" dans /usr/include find. -iname "*.jpg" -exec cp {} ~/images \; rechercher les fichiers.jpg et les copier dans un répertoire ! commande très utile!
ce document est distribué librement : ● sous licence GNU FDL : ● les originaux sont disponibles aux formats OpenOffice et powerpoint