TP Initiation UNIX

Serge Gadret & Réda Dehak

Support de cours

Connexion

Se connecter au système:
	login: "Votre nom de login"
	Password: "votre mot de passe"

Aprés vérification de votre identité dans le fichier passwd, le système va procéder à l'ouverture de la session, laquelle va (en mode standard) lancer l'environnement de travail Gnome.

Le but de ce TP étant l'utilisation des commandes de base, il vous faut utiliser l'outil Terminal.
Cet outil suivant les systèmes dans des menus différents.

Systéme Linux disribution Debian (Salle c128/c129/c130)
Dans la barre des menus en haut de l'écran, clic gauche sur le symbole de Gnome:
sélectionner Accessoires --> Terminal
Si vous avez déjà un terminal ouvert, le menu File vous permet d'ouvrir un nouveau Terminal.

Système Linux disribution Fedora (Salle c133)
Dans la barre des menus en haut à gauche de l'écran:
Outils Systèmes --> Terminal
Si vous avez déjà un terminal ouvert, le menu File vous permet d'ouvrir un nouveau Terminal.
Remarque: On constate avec la commande ps que l'on dispose comme shell de /bin/zsh , si ce n'est pas le cas et pour plus de commodités, et notamment pour disposer de l'historique et du mécanisme de complétion, lancer la commande zsh .

Pour réaliser ce TP vous trouverez tous les renseignements nécessaires dans le poly Initiation au système UNIX, disponible en ligne en tapant après votre connexion la commande suivante dans une fenêtre Terminal
Soit au format Pdf

  evince   ~rdehak/public_html/unix/Init_Unix.pdf &

Soit au format PostScript
  gv  ~rdehak/public_html/unix/Init_Unix.ps  &

Pour essayer les commandes ci-dessous,Vous trouverez un manuel simplifié pour toutes ces commandes dans le chapitre 4.1( Page 37) du poly "Initiation au système UNIX". logname, id, date, cal, sleep, tty, echo, uname, which, whereis

Ces commandes seront utilisées dans la suite de ce TP, et sont pour la plupart indispensables à tout utilisateur d'UNIX.
Pour plus de détails avoir toujours à l'esprit la commande man qui vous permet d'avoir le manuel en ligne pour toutes les commandes. Le manuel des fonctions C est dans la section 3 du man et s'obtien par la commande man -s3
Testez également les commandes suivantes:


	w 
Similaire à la commande who avec en entête des infos sur le système.

	top
Génère une liste de 15 processus suivant le pourcentage d'utilisation du CPU, avec mise à jour régulière. En entête, quelques paramètres système. Cette commande est interactive, taper h pour voir les différentes options dans ce mode interactif.

	ssh "autre_machine"
Permet d'établir une connexion vers une autre machine, à la différence de la commande telnet les données échangées sont cryptées. Avec cette syntaxe la connexion est réalisée au nom de l'utilisateur de la machine locale, seul le passwd vous sera demandé.

	ssh "user"@"autre_machine"
Dans cet exemple la connexion sera réalisée au nom de l'utilisateur donné sur la ligne de comande. Dans cet exemple il s'agit de user .
Ces commandes ne sont pas décrites dans le manuel, utiliser la commande man pour plus de détails.
Si vous avez empilé des connexions sucessives de machine à machine, sortir de chaque connexion par la commande exit jusqu'au retour sur la machine locale.

Parcours de l'arborescence, répertoires et fichiers.

Cette partie utilise principalement les commandes situées à la fin du chapitre 1 (Système de fichiers Page:9).

Après l'essai des commandes élémentaires, vérifier que vous êtes bien revenu sur la machine sur laquelle vous avez ouvert votre première session. Sortir eventuellement des connexions distantes par exit.

Avec la commande pwd vérifier votre position dans l'arborescence, et éventuellement revenir sous son répertoire de connexion avec la commande cd.

Pour que l'emploi des commandes de base avec leurs options garde tout son sens, vérifier avec la commande alias qu'aucune commande de base n'a été renommée.
Dans les exemples suivants, on retrouvera la chaine de caractères valjean ~ $, il s'agit du prompt ou l'invite du shell pour taper sa commande, bien que paramétrable, par défaut vous aurez nom_de_login@nom_de_machine.


valjean ~ $ alias
	a.out=./a.out
	del='/bin/rm -i'
	df=/usr/ucb/df
	dir='/bin/ls -la'
	du=/usr/ucb/du
	h='history -300'
	la='/bin/ls -la'
	ll='/bin/ls -lg'
	ls='/bin/ls -F'
	 ........


Si des alias existent, les supprimer avec la commande unalias (voir zsh parag 3.5.3, page 33). Dans votre environnement vous devriez trouver les commandes ls et ps comme alias.
Cette commande unalias est active localement, c'est à dire uniquement dans la fenêtre où elle est exécutée.Nous verrons ce mecanisme des alias plus en détail dans le chapitre sur l'interpréteur de commandes.

valjean~ $ unalias ls 

Recopier le contenu du répertoire TP-shell de l'utilisateur domeo avec la commande suivante:

Attention !! Le point dans la commande suivante n'est pas un point de fin de ligne, mais désigne la destination, soit le répertoire courant.

	
valjean ~ $ cp -r ~domeo/TP-shell .
Le ~ (tilde) défini dans le poly au chapitre Redirections 3.3.1 (page 28) permet, suivi d'un nom de login, de désigner le chemin d'accès au répertoire d'un utilisateur.
Pour aller directement dans le répertoire de base (home directory) /infres/invi/rdehak de utilisateur rdehak on utilise la commande suivante:
       
valjean ~ $ cd  ~rdehak  
Lorsque l'on utilise le ~ (tilde) dans une adresse web (url), le répertoire public_html est implicitement ajouté au chemin d'accès au répertoire de l'utilisateur.
Si on veut accéder au fichier index.html fichier chez ~rdehak depuis votre navigateur:
On utilise l'url suivante:
www.infres.enst.fr/~rdehak/unix/index.html
alors que la visualisation du contenu de index.html par la commande cat de Unix permettant l'affichage du contenu d'un fichier sur la sortie standard (poly: page 11), on utilisera le chemin suivant:
~rdehak/public_html/unix/index.html
soit:
       
valjean ~ $ cat  ~rdehak/public_html/unix/index.html  

La commande ls

Placez vous dans le répertoire TP-shell.
       
valjean ~ $ cd TP-shell  
En utilisant la commande ls et ses différentes options, visualiser le contenu du répertoire TP-shell.

Suggestions:

Parcours de l'arborescence

Utilisation des commandes pwd et cd (poly: page 9 et 10).
Pour spécifier le chemin d'accès à un répertoire, vous pouvez utiliser les deux types d'adressage absolu ou relatif décrits Page 9 du poly.
Rappel:
Si vous êtes dans votre répertoire et que vous voulez aller dans /etc,on utilise le mode absolu
	 cd /etc 
plutôt que le relatif
	 cd ../../../../etc 
par contre si vous êtes sous dans ~/TP-shell/meta-car et que vous remontez sous ~, c'est à dire votre "racine", on utilisera le mode relatif
	 cd ../.. 
Positionnez-vous sous la racine (/), et lister son contenu. Vous retrouverez les différents répertoires standards cités dans le poly (Arborescence locale 1.1.3 page 6).etc dev usr tmp var.

On retrouve également les répertoires cal infres comelec tsi stud sous lesquels on retrouve les références des disques des machines des différents départements de l'ENST.

Dans /etc on trouve les fichiers passwd group, lister leur contenu. Vous ne trouverez pas d'entrée correspondant à votre nom, en effet il s'agit de fichiers locaux à la machine.

Dans les répertoires /bin et /usr/bin vous devez retrouver l'exécutable des commandes que vous venez d'utiliser.

Dans le répertoire /usr/bin on trouve de nombreuses commandes et applications. Le nombre de commandes étant de plusieurs milliers, si vous listez ce répertoire avec la commande ls , vous ne voyez que la dernière page. Pour avoir un listing page par page, utiliser la commnde less avec le mécanisme de tube (pipe) de communication entre deux commandes, suivant le modéle ci-dessous. Le symbole du pipe est | .
Si ce symbole est, suivant le type de clavier, sur une touche à trois symboles, on l'affiche en appuyant simultanément sur alt_graph et |

	 ls | less 

Sous /usr vous trouverez notamment le répertoire include dans lequel on trouve les fichiers xxx.h que vous inclurez dans vos programmes C afin d'utiliser les bibliothèques de fonctions ainsi que des éléments prédéfinis.
Si vous listez ce fichier avec la commande cat vue précédemment, on ne voit que la fin du fichier.
Pour lister le contenu de stdio.h page par page, on utilisera la commande more ou less à peu prés identiques en utilisation de base, la commande less offrant plus de possibilités.
Ces commande sont interactives, taper h pour voir les différentes actions possibles.

Brancher une clé USB à votre machine et voir ou elle est montée avec la commande mount. Trouver le chemin de la clé et utiliser la commande cd et ls pour parcourir votre clé. Copier le répertoire TP-SHELL de votre compte vers la clé USB en se servant de la commande cp. Vérifier que vous avez bien réussi à le faire

Utilisation des méta-caractères

Voir le Chapitre Interpréteur de commandes (Chap 3.3.4 page 29). Déplacez-vous dans ~/TP-shell/meta-car
Dans la suite, le mot lister supposera l'option "l" pour avoir les caractéristiques complétes des fichiers. La commande touch permettant de modifier la date d'un fichier, sera utilisée ici simplement pour créer un fichier vide s'il n'existe pas.
	touch toto   
Créer à l'aide de la commande touch deux fichiers fic? et fic*. Détruire ces deux fichiers et uniquement ceux-ci, en une commande et en ne désignant pas explicitement ces deux fichiers.On utilisera [....]. En effet les caractères * et ? perdent leurs valeurs de méta-caractères à l'intérieur des crochets.

mv mkdir cp rm rmdir chmod ln rmdir

Processus

Commande ps

Sur chaque système on trouve la commande ps soit dans /bin.

Les signaux

En utilisant la commande kill, lister les signaux disponibles (Option l).
La commande kill supporte pour désigner le signal utilisé, soit le numéro du signal, soit le symbole correspondant au numéro vu avec l'option l.
Remarque:
Dans le poly vous trouverez d'autres symboles, il s'agit de ceux utilisables lors d'écriture de programme en langage C, que vous verrez en module "Architecture et Systéme".
Avec la commande sleep, tester les signaux 2 (int) et 3 (quit) attachés aux touches clavier ctrl c et ctrl \ .
La commande sleep ne génére aucune action, elle est utilisée pour des temporisations, et dans notre cas pour créer un processus.
Exécuter la commande sleep en arrière plan (Background :&) Récupérer le numéro de processus.
Le détruire à l'aide de la commande kill.On pourra essayer les signaux 2, 3, 9.
Lancer une fenêtre xterm, l'identifier puis la détruire.
Si vous avez lancé l'exécution d'un processus en oubliant le &; Vous serez obligé d'attendre la fin de son exécution pour que le shell vous redonne la main. Si vous désirez reprendre le controle immédiatement, stopper le processus par le signal SIGSTOP , correspondant aux touches clavier ctrl z . Vous récupérez le contrôle de votre terminal. Pour redémarrer, en background le processus stoppé, exécuter la commande bg.
Lancer la commande xterm pour ouvrir un nouveau terminal.
Vérifier le bon fonctionnement de cette fenêtre.
Stopper le processus par crtl z, vérifier que la fenêtre n'est plus active.
Relancer l'exécution en arrière plan avec bg.
Si le ctrl z ne réagit pas, avec la commande stty -a vérifier que susp est bien attaché au crtl z. Sinon exécuter : stty susp ^z, puis recommencer les opérations précédentes.

L'interpréteur de commandes

Les variables

Créez-vous quelques alias.

Exemples:


ls -> ls -lag
ps -> ps -aux ou -ef
rm -> rm -i

Redirections

L'environnement

L'exécution d'un fichier quelque soit sa position dans l'arborescence, nécessite que le chemin d'accès à ce répertoire soit contenu dans la variable PATH comme nous l'avons vu ci-dessus. Mais la modification de PATH était locale. En vous référant au chap 3.6 (l'environnement ENST Page 36) faire la modification de manière à ce que la variable PATH soit modifiée dès le début de la session et qu'ainsi les fichiers contenus dans script soient accesibles, d'une part quelque soit votre position dans l'arborescence, et que ce soit valable dans toute fenêtre xterm. De même que nous avions défini des alias localement, définir ces alias pour qu'ils soient connus dans tout nouveau shell.

Script Shell

Ecrire un script qui prend en paramètre un répertoire et remplace la première lettre de tous les fichiers de ce répertoire en majuscule et le reste en minucule. Tester votre script sur le dossier TP-shell.

Autres commandes

En utilisant le Chapître 4.2 page 43 (AUTRES COMMNANDES) tester les différentes commandes. Essayer les exercices page 50.