TP Initiation UNIX
Serge Gadret & Réda Dehak
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 est présent dans les menus du système
Systéme Linux disribution Debian
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 Ubuntu
Dans la barre des menu de gauche de l'écran, clic gauche sur boutton en bas à gauche
Tapez terminal dans la recherche et valider
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 ou changer le définitivement avec la commande chsh
.
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
$ evince ~rdehak/public_html/unix/Init_Unix.pdf &
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 $ ,
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.
$ 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.
$ unalias ls
Recopier le contenu du répertoire TP-shell de l'utilisateur rdehak avec la
commande suivante:
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.
$ cp -r ~rdehak/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:
$ 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.
La commande ls
Placez vous dans le répertoire TP-shell.
$ cd TP-shell
En utilisant la commande ls et ses différentes options, visualiser le contenu
du répertoire TP-shell.
Suggestions:
- Liste simple (sans option).
- Liste y compris les fichiers cachés, ceux qui commencent par "."
(option a).
On remarquera la présence des 2 fichiers "." et ".."
- Liste avec descriptif complet de chaque référence: droits, nombres de liens,
dates, taille user group ...( option l).
- Si vous avez des sous répertoires: liste récursive (Option R).
- Liste par ordre chronologique, et inverse (Options lt et ltr).
- Liste simple du contenu de TP-shell, avec spécification du type de
fichier: répertoire /, lien symbolique @, exécutable * (Option F).
- Enfin avec la commande file vous obtiendrez la liste des fichiers
avec l'indication de leur contenu (scrip-shell, exécutable sparc, fichier
audio ...)
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.
- Lister son contenu.
- Lister également les fichiers cachés.
- Lister les fichiers commençant par "f".
- Lister tous les fichiers commençant par "f" et comprenant un "c"
- Idem ci-dessus mais uniquement ceux qui ont un seul caractère entre le
"f" et le "c".
- Lister tous les fichiers commençant par "fic".
- Lister tous les fichiers commençant par "fic" et se terminant par un
chiffre, puis ceux se terminant par une lettre.
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.
- Liste de vos processus: ps
- Liste de vos processus avec l'option f puis l pour avoir une description
complète de chaque processus. Vous vous intéresserez principalement aux champs suivants :
PID UID PPID TTY .
PID Numéro du processus.
UID Identification de l'utilisateur, champ 2 de l'entrée password.
PPID Numéro du processus père, un processus a pour père le shell de la fenêtre xterm
où il est exécuté.
TTY Terminal d'attachement du processus, On récupére le nom du terminal par la
commande tty .
- Liste de tous les processus (option e).
- Autre façcon de lister de tous les processus ps -aux
- Liste des processus appartenant à un utilisateur, option u suivi
du nom de login de l'utilisateur.
- Liste des processus attachés à un terminal.(option t) Récupérer le nom du terminal
avec la commande tty..Cette commande indique le nom du tgerminal
sous la forme suivante:/dev/pts/3. Pour désigner le terminal, on supprime /dev/,
soit pts/3 . Ainsi la commande devient:
ps -t pts/3
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
- Avec la commande tty récupérer le nom du terminal.
- Avec la commande ps -t ... vérifier le shell attaché à votre terminal.
Si tty renvoi /dev/pts/5 derrière l'option -t on spécifie pts/5 .
- En utilisant la commande echo, visualiser les variables prédéfinies suivantes:
PATH, HOME, TERM, SHELL, ...
Faire précéder l'identificateur de $
echo $PATH
- Définir une variable, par exemple var
- Visualiser cette variable
- Lancer l'exécution d'un nouveau shell.
- Visualiser à nouveau la variable précédemment définie ainsi que quelques variables
prédéfinies (PATH, HOME).
On constate que var est une variable locale qui n'est pas intégrée à
l'environnement contrairement aux variables PATH, HOME ...
- Par la commande exit revenir au shell précédent.
- Vérifier l'existence de var.
- L 'intégrer dans l'environnement, commande export .
export var
- Relancer un nouveau shell afin de vérifier que cette fois votre variable var existe bien dans ce nouveau shell.
$ zsh
- Modifier cette variable, puis sortir du shell, afficher le contenu de var.
- En une commande et en utilisant read saisir plusieurs variables.
- En supposant que vous rangez vos utilitaires sous le répertoire $HOME/script,
on doit pouvoir accèder à ces utilitaires quelle que soit votre position dans
l'arborescence.
- Créer ce répertoire.
- Copier le script-shell ding se trouvant dans ~domeo/TP-shell dans
script.
- En vous positionnant dans ce répertoire, exécuter ce script. Ça ne doit pas marcher.
- Faire les modifications en conséquence.
- Ensuite essayer d'exécuter ce script quelque soit votre position dans l'arborescence.
- Cela fonctionnera si vous utilisez, pour accéder à votre fichier ding , un chemin
en absolu.
- Faire les modifications de façon à pouvoir l'exécuter simplement en tapant le nom du
fichier (Variable PATH).
Créez-vous quelques alias.
Exemples:
ls -> ls -lag
ps -> ps -aux ou -ef
rm -> rm -i
Redirections
- Choisir un fichier existant, lister ses caractéristiques avec l'option l.
- Recommencer l'opération avec un nom de fichier n'existant pas (bidon, inconnu).
- Effectuer les mêmes opération que ci-dessus, mais en sauvegardant les résultats
dans respectivement out-normal et out-err.
- lister les caractéristiques d'un second fichier existant avec l'option l, et en
ajoutant ce résultat au fichier out-normal.
- Enfin lister deux fichiers, l'un connu, l'autre inconnu et récupérer les
informations dans un même fichier (out) et cela bien entendu en une
seule commande.
- Les redirections peuvent s'effectuer sur un fichier, mais étant donné qu'UNIX
voit ses périphériques comme des fichiers, on peut rediriger la sortie d'une
commande vers un périphérique quelconque (/dev/...).
- Ouvrir deux fenêtres xterm.
- Exécuter quelques commandes dans une fenêtre et afficher le résultat dans la seconde
et éventuellement la sortie erreur dans une troisième.
- Envoyez-vous le contenu de out.normal par la commande mail en utilisant la
redirection de l'entrée standard.
$ mail -s essai ...
$
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.