SOMMAIRE
- Introduction
- Répertoires et fichiers
- Suivi de l’activité et connexion à distance
- Compilation et exécution d’un programme
- Récapitulatif
I. Introduction
Nous présentons ici l’utilisation de la ligne de commandes sous Unix. Cette interface permet de dialoguer avec l’ordinateur au même titre que l’interface graphique, moins ergonomique, elle est, en revanche, beaucoup plus puissante et exhaustive.
L’interface graphique donne une représentation visuelle, sous forme d’icônes, des ressources proposées par le système. Ces icônes : dossiers, sous-dossiers, documents sont le reflet de l’organisation logique des fichiers sur le disque.
En effet, le système associe à l’organisation « à plat » du support physique (les blocs sur le disque) une organisation logique hiérarchique dans laquelle les noms des fichiers sont organisés sous la forme d’une arborescence. Les dossiers et sous-dossiers représentent des noeuds ayant des successeurs (répertoires ou directories), les documents sont les sommets pendants ou feuilles de l’arbre (fichiers standards).
A faire pour répondre aux questions suivantes :
- L’archive des TPs (que vous avez récupéré sur cette page) contient un dossier appelé TP0.
- Ce dossier est organisé ainsi :
Interface graphique Organisation « système » - Ouvrez l’application appelée terminal.
II. Répertoires et fichiers
II.1 Répertoires
Lorsqu’un utilisateurs ouvre un terminal ou se connecte à une machine via un terminal, il est positionné par défaut dans un répertoire qualifié HOME DIRECTORY.
Les commandes qui vont être utilisées ici sont :
- pwd (print working directory) pour donner votre position dans l’arborescence
- ls pour lister les noms de fichiers du répertoire courant
- cd (change directory)
- sans paramètre :
pour revenir sous votre répertoire de connexion (HOME DIRECTORY) - cd NOMDIR pour aller dans le répertoire NOMDIR
- sans paramètre :
Pour chacune des commandes, il existe un descriptif détaillé, accessible via la commande man, par exemple man ls. Il en sera de même des commandes illustrées dans la suite de ce TP.
Exercice
Dans le terminal courant :
- pwd, pour connaitre votre position dans l’arbre
- cd, sans option, donc aller dans le HOME DIRECTORY
- aller dans le répertoire du TP, en faisant, par exemple :
cd TP_INF104/TP0/part2_terminal/material - une fois dans le répertoire TP_INF104/TP0/part2_terminal/material faire ls pour lister les fichiers du répértoire courant, on trouve : INF104-liste.txt donnees src
- faire maintenant ls -l pour lister ces noms de fichiers avec leurs informations associées.
On obtient un résultat tel que :-rw-r--r-- 1 bertrand staff 2901 17 oct 16:23 INF104-liste.txt drwxr-xr-x 3 bertrand staff 102 25 oct 09:46 donnees drwxr-xr-x 4 bertrand staff 136 25 oct 09:51 src
- et, enfin, ls -lR : idem, récursif pour chaque répertoire du répertoire courant. Le résultat est de la forme suivante :
-rw-r--r-- 1 bertrand staff 2901 17 oct 16:23 INF104-liste.txt drwxr-xr-x 3 bertrand staff 102 25 oct 09:46 donnees drwxr-xr-x 4 bertrand staff 136 25 oct 09:51 src ./donnees: ./src: -rw-r--r-- 1 bertrand staff 197 16 oct 17:21 mon_echo.java
NOTE: connaitre ces trois commandes est essentiel pour utiliser le terminal. Elles sont simples, et vous les utiliserez dans tous les TPs de l’UE… Donc retenez les !
II.2 Redirection des entrées-sorties et pipes
Comme vous avez pu le constater, par défaut, toutes les commandes émises depuis une fenêtre terminal, effectuent leurs sorties sur ce terminal. Pour les rediriger sur d’autres supports on peut les faire suivre, entre autres, des symboles > ou >> :
- > indique que la sortie n’est plus le terminal mais un autre support (fichier, etc.)
- >> pour concaténer la sortie d’une commande à un support déjà existant (rallongement)
De façon analogue, on peut rediriger le résultat d’une commande en entrée d’une autre commande. Le symbole utilisé est | et il s’agi d’un « pipe ».
Exercice
Les commandes qui vont être utilisées ici :
- cat pour afficher le contenu d’un fichier
- date pour afficher la date
Depuis le répertoire TP_INF104/TP0/part2_terminal/material, entrer les commandes suivantes :
- ls
le résultat est : INF104-liste.txt donnees src - ls > display_output
cat display_output
le résultat est :INF104-liste.txt donnees src
- date > display_output
cat display_output
le résultat est du type : Jeu 25 oct 2012 10:55:51 CEST - ls >> display_output
cat display_output
le résultat est du type :Jeu 25 oct 2012 10:58:36 CEST INF104-liste.txt donnees display_output src
- Pour détruire le fichier display_output, faire : rm display_output
- Vous allez maintenant utiliser un « pipe », outil très utile et vous allez voir pourquoi. Pour cela, déplaçons nous dans le répertoire TP_INF104 et listons récursivement les fichiers contenus dans TP_INF104; exécutez les commandes (en remplaçant <chemin_relatif_… par le chemin qui va bien):
$cd <chemin_relatif_ou_absolu_vers_TP_INF104> $ls -R
$cd <chemin_relatif_ou_absolu_vers_TP_INF104>
$ls -R | grep INF104-liste.txt
II.3 Fichiers
II.3.1 Présentation des commandes
Les commandes qui vont être utilisées ici (utiliser man pour plus de détails) :
- grep
pour extraire d’un fichier les lignes contenant une certaine chaine de caractères, par exemple :
grep 1 INF104-liste.txt
va afficher toutes les lignes de INF104-liste.txt qui contiennent le mot 1
grep Pierre INF104-liste.txt
va afficher toutes les lignes de INF104-liste.txt qui contiennent le mot Pierre - cp (comme copy)
permet la copie d’un répertoire ou d’un fichier seul vers respectivement un répertoire, ou un répertoire ou un chemin absolu de fichier (renomme le fichier par la même occasion). Par exemple :
cp INF104-liste.txt ../
va copier le fichier INF104-liste.txt dans le répertoire parent - mv (comme move)
pour changer le nom d’un fichier ou un répertoire, ou pour déplacer un fichier ou un répertoire. Par exemple :
mv ../INF104-liste.txt ../../
va déplacer le fichier ../INF104-liste.txt dans le répertoire parent du répertoire parent. - rm (comme remove)
pour supprimer un fichier. ATTENTION, rm ne demande pas de confirmation, utiliser plutôt rm -i (i pour inquire). Par exemple :
rm ../../INF104-liste.txt
va supprimer le fichier ../../INF104-liste.txt - less
afficher un fichier page par page ; la barre d’espace fait passer de page en page, pour quitter : taper q. Par exemple :
less INF104-liste.txt
va afficher le contenu de INF104-liste.txt - sort
pour trier un fichier en fonction d’une clé ; par exemple :
sort mon_fichier.txt -k2
va afficher le contenu de mon_fichier.txt, trié ligne par ligne, selon la deuxième colonne (par défaut le séparateur entre colonnes est l’espace).
Pour aller plus loin : il n’est pas obligatoire de finir la partie du TP ci-dessous pour passer au TP suivant lors de la premier séance de TP. S’il vous reste du temps, faites le : les exercices ci-dessous fournissent quelques notions supplémentaires pour une bonne utilisation du terminal. Si vous n’avez pas le temps, ou si vous ne finissez pas les exercices ci-dessous, ce n’est pas très grave : vous pourrez passer au TP suivant lors de la prochaine séance.
II.3.2 Exercice
Nous allons travailler avec le fichier INF104-liste.txt, il contient la liste des élèves suivant INF104, ils y sont classés par ordre alphabétique. Nous allons en particulier trier cette liste par groupes, puis créer un fichier par groupe :
- En supposant que le répertoire courant du terminal (exécutez pwd pour le vérifier) est TP_INF104/part2_terminal/material
- copier INF104-liste.txt dans le répertoire donnees
- aller dans le répértoire donnees
- visualiser le contenu de ce fichier INF104-liste.txt en utilisant la commande less (avec less, la barre d’espace fait passer de page en page, pour quitter : taper q)
- trier ce fichier par groupes (sortie sur le terminal)
- effectuer à nouveau ce tri, en sortant le résultat dans un fichier (ici INF104-groupes.txt)
- vérifier le contenu de ce dernier fichier en utilisant less
- extraire le groupe 3 de INF104-groupes.txt, la sortie se fait sur le terminal
- faire même chose, mais en rangeant la liste extraite dans un fichier appelé G3.txt,
vérifier en faisant less G3.txt ou cat G3.txt - extraire le groupe 1 de INF104-groupes.txt et le copier dans le fichier G1G2.txt, vérifier
- extraire le groupe 2 de INF104-groupes.txt et le concatener à G1G2.txt, vérifier
La solution de l’exercice est donnée dans l’archive des TPs.
II.4 Notion de chemin (PATH)
Comme on l’a vu, la syntaxe d’une commande est la suivante :
<appli> <liste de parametres>
L’application (appli) peut être, comme on l’a vu, une commande système, une application ou un programme écrit par l’utilisateur.
Cette application peut être désignée par :
- son nom complet (chemin absolu vers le fichier) : /bin/ls,
- on utilise le plus souvent un raccourci : le nom seul (ls),
dans ce cas, le système va chercher ce fichier dans l’un des répertoire d’une liste préenregistrée.
Une variable mémorise cette liste, elle s’appelle PATH.
Pour afficher cette liste, utilise le acommande echo : echo $PATH
Ainsi, un message du type “commande inconnue” signifie soit que le fichier n’existe pas, soit que le chemin d’accès à ce fichier n’est pas dans le PATH.
Il existe d’autres variables :
- CLASSPATH, qui remplace l’option -classpath de java
- HOME
- etc.
La notion de chemin s’applique à tous les fichiers. Quand on utilise un chemin, on emploie souvent les symboles . et .. :
- . désigne le répertoire courant,
- . . désigne le répertoire de niveau supérieur
Par exemple, dans un des exercices précédents, on aurait pu faire :
cd donnees sort -k3 ../INF104-liste.txt
au lieu de :
cp INF104-liste.txt donnees cd donnees sort -k3 INF104-liste.txt
dans ce dernier cas, si on veut être sûr d’utiliser le fichier INF104-liste.txt se trouvant dans le répertoire courant :
sort -k3 ./INF104-liste.txt
III. Suivi de l’activité et connexion à distance
Suivi de l’activité : quelques commandes utiles :
- who qui donne la liste des utilisateurs connectés sur la machine et leur provenance, par exemple :
$who
domas pts/0 2012-10-25 11:47 (hapchot.enst.fr)
dupouy pts/1 2012-10-25 12:10 (cinna.enst.fr) - top : suivi dynamique des tâches active
- du ., utilisation de la surface disque (disk usage)
- time, exemple : time du .
Connexion à distance
Pour vous connecter sur une machine distante, vous pouvez utiliser la commande ssh.
Exemple pour le login dupont faisant ssh sur la machine cinna.enst.fr.Il se peut que la machine ne soit pas accessible (si elle est éteinte par exemple). Choisissez une machine de votre salle de TP, par exemple si vous êtes en C130 et que la machine C130-05 est allumée, vous pouvez vous y connecter ainsi: ssh dupont@C130-05.
ssh dupont@cinna.enst.fr dupont@cinna.enst.fr's password: Last login: Wed Nov 28 10:07:03 2012 from valjean.enst.fr
Connectez vous sur une autre machine que la vôtre et faites à nouveau who.
Si vous utilisez la ligne de commandes vous pouvez continuer tout ce qui suit sur n’importe quelle machine des salles de TP de l’école (y compris celles sur laquelle vous êtes connecté via ssh).
Pour arrêter la connexion distante, taper exit.
IV. Compilation et exécution d’un programme Java
Pour compiler et exécuter un programme java nous utiliserons les commandes suivantes :
- javac : compilation et production d’un fichier « bytecode », par exemple :
javac exo.java produit un fichier qui sera appellé exo.class - java : exécution d’un fichier « bytecode », par exemple :
java exo : exécution du fichier exo.class
Les commandes qui vont être utilisées ici :
- mkdir
créer un répertoire - file
donne le type des fichiers - mv
pour déplacer ou changer le nom d’un fichier - rmdir
détruire un répertoire
IV.1 Exercice 1
- Allez dans le répertoire TP_INF104/TP0/part2_terminal/material/src :
si vous êtes dans le répertoire donnees, faites cd ../src - ce répertoire contient mon_echo.java, affichez le avec :
cat mon_echo.java - Pour compiler mon_echo.java:
javac mon_echo.java
cette commande va créer le fichier mon_echo.class - la commande ls -l doit donner ce type de réponse :
-rw-r–r– 1 bertrand staff 692 25 oct 13:51 mon_echo.class
-rw-r–r– 1 bertrand staff 211 25 oct 13:48 mon_echo.java - vérifier le type des fichiers avec la commande file * qui va donner ce type de réponse :
mon_echo.class: compiled Java class data, version 50.0 (Java 1.6)
mon_echo.java: ASCII C++ program text - essayez plusieurs exécutions du fichier mon_echo.class :
- java mon_echo
résultat : - java mon_echo un deux trois
résultat :
args[0] = un
args[1] = deux
args[2] = trois
- java mon_echo
IV.2 Exercice 2
- créez deux répertoires resultats et exe, au même niveau que src :
mkdir ../exe
mkdir ../resultats - déplacer mon_echo.class dans le répertoire exec:
mv mon_echo.class ../exe - vérifier que ceci a été fait (ls)
- aller dans le répertoire exec, vérifier ce qu’il contient et exécuter le fichier mon_echo.class en mettant les résultats dans le répertoire resultats,
si vous êtes toujours dans src, faites :$ cd ../exe $ ls mon_echo.class $ java mon_echo 1 2 3 > ../resultats/mon_echo.out $ cat ../resultats/mon_echo.out args[0] = 1 args[1] = 2 args[2] = 3
V. Récapitulatif
Depuis le répertoire INF104-TP0, la sortie de la commande ls -lR doit ressembler à :
-rw-r--r-- 1 bertrand staff 2901 17 oct 16:23 INF104-liste.txt drwxr-xr-x 7 bertrand staff 238 25 oct 12:22 donnees drwxr-xr-x 3 bertrand staff 102 25 oct 14:19 exe drwxr-xr-x 3 bertrand staff 102 25 oct 14:21 resultats drwxr-xr-x 4 bertrand staff 136 25 oct 14:19 src ./donnees: -rw-r--r-- 1 bertrand staff 1206 25 oct 12:22 G1G2.txt -rw-r--r-- 1 bertrand staff 572 25 oct 12:22 G3.txt -rw-r--r-- 1 bertrand staff 2901 25 oct 11:22 INF104-groupes.txt -rw-r--r-- 1 bertrand staff 2901 25 oct 11:11 INF104-liste.txt ./exe: -rw-r--r-- 1 bertrand staff 692 25 oct 13:59 mon_echo.class ./resultats: -rw-r--r-- 1 bertrand staff 36 25 oct 14:23 mon_echo.out ./src: -rw-r--r-- 1 bertrand staff 211 25 oct 13:48 mon_echo.java Organisation système correspondante: |
Fin du TP0, TP suivant