UNIX : utilisation d'un terminal et commandes de bases


Cliquez ici pour retirer la feuille de style si vous souhaitez imprimer ce document (ou en cas de problème d'affichage).

Commencez par redémarer vos PCs sous Linux si ils sont sous windows. Interdiction d'utiliser konqueror, nautilus ou tout autre logiciel graphique d'exploration du système de fichiers. Le but de ce tp est de vous familiariser avec l'utilisation de la console. Après un peu de pratique vous vous convainquerez que c'est un outils bien plus puissant que n'importe quelle interface graphique...

Utilisation du terminal

  • Ouvrez un terminal (xterm, konsole, gnome-terminal, ...). Par exemple menu/accesoire/terminal. Ou Alt+F2 et tapez xterm.
  • Qu'affiche l'invite de commande ? que signifie-t-elle ?
  • Tapez la commande bash. Si l'invite de commande a changée re-répondez à la question précédante. L'explication vous sera révélée lors du cours sur bash.
  • Tapez les lettres "fir" puis pressez la touche tabulation. Essayez juste en tapant "fi" puis en pressant deux fois tabulation.
  • Lancez gedit depuis le terminal
  • Avez vous toujours la main sur le terminal ? pressez simultanément les touches "controle" et "z" (Ctrl+z). Avez vous de nouveau la main sur le terminal ? Gedit fonctionne-t-il ?
  • executez la commande bg. Avez vous la main sur le terminal ? Gedit fonctionne-t-il ?
  • executez la commande fg, que se passe-t-il ?
  • Fermez gedit, puis relancez le en tapant la commande "gedit &". Dans quel état se trouve-t-on ?

Manipulation de répertoires

  • À l'aide de la commande mkdir ("man mkdir" pour de l'aide), créez un répertoire "prog"
  • Testez les différentes commandes : "ls", "ls -l", "pwd", "ls prog"
  • À l'aide de la commande cd, placez vous maintenant dans le repertoire "prog". Retestez les commandes ci-dessus.
  • En une seule commande créez un sous-répertoire C d'un sous-répertoire B d'un sous-répertoire A du répertoire prog (man mkdir).
  • Sans changer de répertoire (pas de "cd" donc), comment affiche-t-on le contenu de C ?
  • Toujours sans changer de répertoire, supprimer toute l'arborescence (A/B/C)
  • Créez un répertoire tp1 (vous le mettez où vous voulez, mais je vous conseille de creer une arborescence par exemple prog/tps/tp1/) et placez vous dedans (cd). À partir d'ici vous travaillez dans ce répertoire.

Manipulation de fichiers

  • À l'aide de la commande wget, téléchargez l'archive stockée à l'adresse http://igm.univ-mlv.fr/~masson/Teaching/I3FRProg/tp1/files.tgz (si ca ne marche pas, vérifier dans système/préférence/serveur mandataire que la configuration du proxy est bien automatique grace au script http://cache.esiee.fr/scripts/proxy.pac et s'applique à l'ensemble du système. Alternativement vous pouvez rajouter devant la commande : http_proxy=http://cache.esiee.fr:3128)
  • Executez la commande tar xzf files.tgz
  • Testez les commandes ls puis ls -R
  • Comment n'afficher que les fichiers du répertoire A/B/ (sans changer de répertoire) ?
  • Quelle différence entre ls A/* et ls -R A/* ?
  • En une seule commande, la plus courte possible, déplacez les fichiers e3, e4 et e5 dans le répertoire A/C/E/
  • Utilisez la commande tar czf nouvelleArchive.tgz A pour créer une archive de la nouvelle arborescence.
  • Copiez cette archive dans le répertoire /tmp de la machine, décompressez la pour vérifier son contenu. Les repertoires /tmp sont des repertoires locaux qui sont effacés lorsque la machine redémarre. N'y placez jamais de fichier que vous souhaitez pouvoir récupérer plus tard.

Gérer les droits

  • Essayez de vous placer dans le répertoire ./droits/repBloque/
  • ca ne marche pas ? essayez ls -l pour comprendre. La première colonne à gauche indique les droits d'acces aux fichiers. Vous trouverez l'explication ici
  • Ajoutez les droits en exécution pour le propriétaires (chmod u+x fichier) puis réessayez
  • Vous êtes maintenant en principe dans le répertoire. Vérifiez avec pwd puis essayez de creer un fichier dans le répertoire (touch test)
  • Sans changer de répertoire, ajouter les droits en écriture (chmod u+w) sur le répertoire (pensez au chemin relatif) et rééssayez.

Visionner et éditer un fichier

  • Testez les commandes suivantes sur le fichier Ulysse.txt : cat, more, less, head, tail
  • À l'aide de la commande grep, n'affichez que les lignes qui contiennent le mot Ulysse
  • Testez la commande vi Ulysse.txt. Vous pouvez par exemple aller voir ici pour de l'aide.
  • Testez la commande gvim Ulysse.txt. Un peu mieux ?
  • Vous avez également les éditeurs emacs et gedit à votre disposition. A vous de choisir ce que vous préférez.

Tous premiers pas en C

  • Creez un fichier hello.c et copiez y le code suivant :
  • #include <stdio.h>
    int main(void){
    	printf("Hello !\n");
    	return 0;
    }
     
    • La première ligne permet d'inclure la librairie qui contient la fonction printf, qui permet d'écrire sur la sortie standard (l'écran).
    • La deuxième sert à définir une fonction main, qui est le point d'entré dans un programme C (voir prochain cours).
    • La troisième ligne permet d'afficher Hello sur la sortie standard, en utilisant printf.
    • La quatrième ligne spécifie ce que le programme doit renvoyer au terminal quand il a terminé.
    • La dernière ligne contient le '}' qui marque la fin de la fonction main.
  • exectutez la commande "gcc hello.c" puis "ls". Quel(s) nouveau(x) fichier(s) sont apparu ?
  • executez la commande "./a.out"
  • executez la commande "echo $?".
  • Modifiez hello.c pour transformer "return 0;" en "return 100;", recompilez, executez, et refaites echo $? . Si ca n'affiche pas 100, il y a quelque chose que vous faites de travers. Par convention, les programmes sous UNIX renvoient 0 quand tout va bien, et sinon une valeur qui sert de code d'erreur et qui est censée être documenté (pour expliquer ce qui ne s'est pas bien passé).
  • Essayez de compiler et de tester le code suivant :
    #include <stdio.h>
    int main(void){
      int a = 5;
      printf("%d\n",a);
      int b = 5;
      printf("%d\n",b);
      return 0;
    }
     
    Expliquez.
  • Réessayez en compilant avec la commande : gcc -pedantic test.c
  • Essayez de compiler et de tester le code suivant :
    #include <stdio.h>
    int main(void){
    	int a = 5;
    	if(a==5){
    		int a = 3;
    		printf("%d\n",a);
    	}
    	printf("%d\n",a);
    	return 0;
    }
     
    Expliquez
  • Toutes les fonctions en C peuvent renvoyer une valeur, mais aussi prendre des paramètres.
    • Écrire une fonction affiche_add qui prend en paramètre deux nombres et affiche leur somme (Écrivez également le main correspondant).
    • Écrire une fonction add qui prend en paramètre deux nombres et renvoie leur somme (Écrivez également le main correspondant).

Plus de ls (À finir "à la maison")

  • placez vous à la racine de votre compte (cd ou cd ~/)
  • Exécuter la commande *, et expliquer le résultat
  • Afficher tous les fichiers cachés du répertoire courant
  • (Pour l'exercice suivant, créer un fichier répondant à la question avant de traiter chaque question).Afficher tous les fichiers du répertoire courant
    • dont le suffixe est .c,
    • dont le nom est constitué de six caractères,
    • dont le nom est constitué de au moins six caract\`eres,
    • dont le nom commence par une majuscule,
    • dont le nom ne commence par tp,
    • dont le nom contient un chiffre,
    • dont le nom contient trois caractères dont un chiffre,
    • dont le suffixe est .h ou .c (donner deux solutions),
    • dont le nom contient *.
    • dont le nom contient deux chiffres entre crochets,
  • Créer le répertoire sauvegarde et y copier tous les fichiers dont le suffixe est .c,
  • Changer l'extension de tous les fichiers du répertoire sauvegarde de .c en .h (man rename),
  • Afficher les répertoires, sous-répertoires, et les fichiers classés par ordre dernière modification

Pour les rois du C qui s'ennuient

vous pouvez faire ces exercices