Environnement de Travail du CREMI
Au programme :
- Editeurs de commandes (shell)
- Système de gestion de fichiers Unix
- Système de gestion de processus
- Archivage de fichiers
Remerciements
Merci à l'UF d'info et tout particulièrement à Aurélien Esnard, Laurent Reveillere et Pierre-Andre Wacrenier pour le partage de ressources (ce tutoriel s'inspire des niveaux 2 et 4 du stage environnement de travail proposé par l'UF info : https://stage-env.gitlabpages.inria.fr/support/index.html)
Interpréteur de commandes Bash
Introduction
Un interpréteur de commandes est un processus dont le rôle est de fournir une interface textuelle avec le système d'exploitation. Il peut être lancé dans une fenêtre (appelée terminal ou console) ou directement lorsqu'on travaille sans interface graphique (de haut niveau). Un peu de vocabulaire : les interpréteurs de commandes Unix sont appelés des shells.
- Lancez un interpréteur de commande en cliquant sur l'icône symbolisant un écran d'ordinateur (des années soixante).
- Tapez ce qu'il vous passe dans la tête puis la touche entrée, simplement pour voir ce qu'il se passe.
Un interpréteur de commandes en mode console exécute en boucle la séquence d'actions suivante :
- affichage de l'invite de commande (prompt) signalant qu'il est en attente d'une nouvelle commande de la part de l'utilisateur ;
- aide à la saisie de la nouvelle commande, en fournissant à l'utilisateur des fonctions d'édition de texte en mode ligne : accès à l'historique des commandes précédentes, copie et remplacement rapides, complétion de noms de fichiers, etc. ;
- analyse et vérification syntaxique de la commande tapée par l'utilisateur, et affichage d'un message d'erreur en cas de problème ;
- si la commande est conforme, un appel au système d'exploitation est effectué pour réaliser les opérations demandées : lancement d'un nouveau processus, etc. ;
- attente de la fin de la commande en cours.
Plus d'info : http://fr.wikipedia.org/wiki/Bourne-Again_shell
Édition des Commandes
Dans une utilisation interactive du shell, c’est-à-dire lorsque le shell interprète ligne à ligne les commandes soumises par l'utilisateur, il est important de pouvoir corriger au besoin la ligne de commande avant de la soumettre. Cela se fait à l'aide de commandes similaires à celles d'un éditeur de texte (déplacement du curseur, suppression de caratères, etc).
- Tapez
who
puis sur la toucheEnter
, puis recommencez avec la commandewhoami
.- Tapez la commande
cal
suivi de votre année de naissance puis sur la toucheEnter
.- Tapez
whoa
puis sur la touche de tabulation (Tab
, à gauche du clavier avec les deux flèches en sens opposés) puis sur entrée. Cela permet ainsi de compléter automatiquement sans avoir besoin de tout taper. C'est très efficace quand on en prend l'habitude !
Il existe plusieurs manières de rechercher une commande déjà utilisée dans l'historique
des commandes.
La commande history
affiche à l'écran les (quelques 2000 ?) dernières
commandes qui ont été utilisées, chacune d'elles précédée par un numéro. Il est possible
de relancer la commande en tapant son numéro précédé par un !
dans un terminal.
La combinaison Ctrl-r
suivie d'une chaîne de caractères vous permet de rechercher la
dernière commande utilisée contenant cette chaîne de caractères. En tapant de nouveau
plusieurs fois sur Ctrl-r
, vous pourrez parcourir l'ensemble des commandes utilisées
contenantette chaîne de caractères.
Enfin, l'utilisation des flèches haut et bas vous permet également de parcourir l'historique
récent des commandes utilisées.
- Tapez la commande
history
et consultez les dernières commandes utilisées.- Retrouvez le numéro de la dernière utilisation de la commande
cal
puis tapez dansle terminal!num
où vous remplacereznum
par le numéro de la commande.- Tapez la combinaison de touches
Ctrl-r
puis la lettrew
. Tapez plusieurs foisCtrl-r
pour retrouver l'utilisation de la commandewho
. Une fois trouvée, tapez sur la toucheEnter
.- Utilisez les touches de déplacement du curseur pour naviguer dans la ligne de commande ainsi que dans l'historique des commandes.
Quelle que soit la position du curseur sur la ligne de commande, la touche
Enter
lance l'interprétation de la ligne par le shell. Une autre
possibilité de bash, qui concerne encore une fois la construction d'une
commande, permet la complétion du mot commencé grâce à la touche Tab
.
- Tapez
cd
puis tapez deux fois la toucheTab
pour voir l'action de la complétion.- Complétez l'argument de votre commande avec les caractères
es
:cd es
puis tapez une seule fois surTab
. Constatez le résultat.
Format et manuel d'une commande
Voici la syntaxe classique d'une commande Unix (ici appelée cmd, à remplacer par les noms de commandes décrites plus bas) :
où :
cmd
correspond au nom de la commande ;-opt
correspond à une option possible (les crochets[]
, indiquant que c'est une option, n'apparaissent pas lors de l'écriture de la commande ;arg
correspond à un argument.
Notons que les arguments sont le plus souvent un nom de fichier que la
commande manipule. On peut utiliser --
pour séparer explicitement
les options des arguments quand la commande est ambiguë.
- Tapez les commandes
ls ~/.bash*
ls -l ~/.bash*
Pour obtenir l'aide en ligne, et notamment ce que permet de faire une commande,
il suffit d'utiliser le manuel accessible avec la commande man
.
- Tapez
man ls
Faire défiler avec les flèches haut/bas, utiliser "q" pour quitter. Pour chercher plus rapidement ce qui vous intéresse, taper "/" puis le texte à chercher, puis entrée, ce qui vous amène à la première occurrence. Pour passer aux occurrences suivantes, taper "n" (comme next).
Attention ! L'aide est écrite en anglais et les version traduites sont souvent de moindre qualité. Un conseil : s'habituer dès maintenant à lire la documentation en anglais ;-)
- Demandez l'aide de la commande mkdir.
- Demandez l'aide de la commande man.
Par la suite, si vous vous posez des questions sur une commande n'hésitez plus à consulter le manuel.
Système de Gestion de Fichiers Unix
Introduction
Le système de gestion de fichiers (SGF) d'Unix procure à l'utilisateur un moyen efficace pour conserver et manipuler aisément des informations. En outre, il offre un système de sécurité, notamment sur les droits d'accès aux fichiers. Il existe trois principaux types de fichiers :
- les fichiers de données (ordinary files),
- les répertoires (directories),
- les périphériques (devices).
Ce SGF est simple et permet de manipuler de manière uniforme les fichiers comme les périphériques. Sous Unix, on a coutume de dire que "tout est fichier !".
Le système de gestion de fichiers utilise une structure hiérarchique (arborescence) composée de répertoires et de fichiers. Chaque répertoire contient des fichiers ordinaires ou d'autres répertoires.
/
├──net/
│ ├── cremi/
│ │ ├── A/
│ │ ├── B/
│ │ │ └── quux
│ │ └── C/
| :
├──etc/
| ├── ...
: :
├──boot/
: :
Par convention, on identifie un répertoire en ajoutant un /
à la fin
de son nom, même s'il ne fait pas partie de celui-ci. Ainsi dans la hiérarchie
précédente, cremi
est un (sous-)répertoire contenu dansle répertoire net
.
Nom de Fichier
Les noms de fichiers sont limités à 256 caractères sous Unix. De préférence,
n'utilisez pas d'espace mais "_"
ou "-"
à la place. Evitez les caractères
spéciaux (&, @, $, #, ...). Le plus simple est de toujours utiliser des lettres et des
chiffres.
Attention le système Unix fait la différence entre majuscules et minuscules !
Les fichiers toto
, Toto
et TOTO
ont des noms différents, contrairement à Windows.
L'extension ou suffixe (optionnel) fait partie du nom, il commence par .
et n'a pas de limite de taille (.txt
, .html
, .tar.gz
,
.ps.gz
, etc.). Il permet d'indiquer le type du fichier. Il ne s'agit que
d'une convention sous Unix. Aussi changer l'extension d'un fichier ne modifie
pas son contenu : c'est simplement un changement de nom qui peut, cependant,
modifier le comportement des programmes tenant compte des extensions.
Pour connaître le type d'un fichier, il faut utiliser la commande file
.
Par exemple :
- Tapez les commandes
file ~/.bashrc
file ~/Documents
Les fichiers dont le nom commence par un .
(tel que .bashrc
) sont considérés
comme des fichiers cachés. Ils n'apparaissent pas par défaut lorsqu'on liste
les fichiers d'un répertoire. Ce sont générallement des fichiers de configuration.
Les répertoires
Il existe un certains nombre de répertoires particuliers :
/ racine de l'arborescence,
. répertoire courant,
.. répertoire père du répertoire courant,
~ votre répertoire utilisateur (home directory)
Votre répertoire utilisateur, également appelé répertoire de connexion, est en quelque sorte votre maison (home), c'est à dire là où vous pouvez stocker vos fichiers. Au CREMI, sauf changement de votre part, vous êtes le seul à pouvoir y accèder et le modifier.
Chemins Relatif et Absolu
Un chemin (path) est la succession de répertoires qu’il faut traverser
jusqu’à l’objet que l’on veut atteindre. Ce chemin peut être absolu s’il part
de la racine (notée /
) du système de fichier, ou encore relatif s’il part
du répertoire d’où l’on effectue la commande (répertoire courant du processus
exécutant la commande).
/
├──net/
│ ├── cremi/
│ │ ├── A/
│ │ ├── B/
│ │ │ └── quux
│ │ └── C/
| :
├──etc/
| ├── ...
: :
├──boot/
: :
Ainsi /net/cremi/B/quux
est un chemin absolu qui désigne le fichier quux
.
Le chemin relatif ../B/quux
désigne le fichier quux lorsque le répertoire
courant est soit /net/cremi/A
, soit /net/cremi/B
ou encore
/net/cremi/C
. Notons également que le chemin quux
désigne le fichier
quux lorsque le répertoire courant est /net/cremi/B
.
Quelques mots sur le SGF du CREMI
Le SGF du CREMI est réparti sur les disques des machines de travail et différents ensembles de disques de données (baies de stockage) pour des raisons de performance, de coût, de sécurité et de fiabilité. Votre répertoire d'utilisateur est stocké sur la baie la plus rapide, cependant vous n'avez droit d'y conserver que 2000 Mo de données. Pour stocker jusqu'à 75Go, vous pouvez utiliser le répertoire ~/espaces/travail qui désigne un répertoire stocké sur une baie un peu plus lente mais de capacité supérieure.
├── ~
│ ├── espaces/
│ │ ├── doc/
│ │ ├── ens/
│ │ ├── travail/ # stockez ici tous vos projets
│ │ └── www/
Le SGF du CREMI est présenté dans cet article https://services.emi.u-bordeaux.fr/intranet/spip.php?article6 où l'on vous indique, par exemple, où stocker vos pages html pour les publier sur le web du CREMI.
Gestion de l'arborescence
Les principales commandes permettant de gérer une arborescence de répertoires sont les suivantes
cd changer de répertoire courant (change directory)
mkdir Crée un répertoire (make directory)
rmdir Supprime un répertoire (remove directory)
ls Liste le contenu d'un répertoire (list)
pwd Affiche le chemin du répertoire courant (path working directory)
du Affiche la taille du répertoire courant et de tous ses sous-répertoires
- Dans quel répertoire se trouve l'interpréteur de commande ?
- Listez les fichiers contenus dans ce répertoire.
- Tapez la commande
cd
. Cette commande, sans argument, a pour effet de vous re-positionner dans votre répertoire utilisateur.- Que fait la commande
ls -a
?- Que fait la commande
ls -l
?- Combinez les options
l
eth
afin d'avoir un affichage plus clair de la taille de vos fichiers :ls -lh
- Tapez la commande
du -h
Les caractères suivants ont une signification particulière pour l'interpréteur de commandes (i.e. le shell) : ? * [ ] \ ˜.
- le caractère
?
permet de remplacer un caractère quelconque ; par exemple, la commandels fic?
donnera tous les noms de quatre lettres dont les trois premières sont fic ; - le caractère
*
remplace n'importe quelle chaîne de caractères (y compris la chaîne vide) ; par exemple, la commandels fic*
donnera tous les noms de trois lettres ou plus, dont les trois premières lettres sont fic ; - une suite de caractères entre crochets
[ ]
désigne un seul caractère de la suite ; par exemple, en supposant que vous disposiez dans votre répertoire courant des fichiers fic1, fic2 et fic3, alorsls fic[123]
sera équivalent àls fic1 fic2 fic3
; - deux caractères séparés par un - entre crochets [ ] (par exemple [a-e])
désigne un seul caractère de l'intervalle de caractères ; par exemple, en
supposant que vous disposiez dans votre répertoire courant des fichiers fica,
ficb, ficc, ficd, et fice, alors la commande
ls fic[a-e]
est équivalente àls fica ficb ficc ficd fice
.
- Déplacez-vous dans le répertoire
/bin
(ou/usr/bin
) avec la commandecd
.- Listez tous les fichiers dont le nom commence par
r
- Listez tous les fichiers dont le nom finit par
e
Listez tous les fichiers dont le nom contient
mod
Revenez dans votre répertoire utilisateur.
- Créez un répertoire
AOT
avec la commandemkdir
- Déplacez-vous dans ce répertoire avec la commande
cd
- Créez un répertoire
TOTO
dans le répertoireAOT
et déplacez-vous dedans.- Revenez dans le répertoire
AOT
avec la commandecd ..
(Rappel :..
est le répertoire père du répertoire courant.)- Supprimer le répertoire
TOTO
avec la commandermdir
Edition de fichiers
libreoffice Logiciel de traitement de texte
kate Editeur de texte
less Affiche le contenu de fichiers de façon interactive
Il est important de différencier les logiciels de traitement de texte et les éditeurs de texte. Les premiers, tels que Microsoft Word, LibreOffice ou encore OpenOffice, enregistrent les documents dans un format élaboré, souvent propriétaire, contenant les informations de mise en page, de formatage du texte, etc. Seuls des logiciels de traitement de texte peuvent consulter ces fichiers. Quant aux éditeurs de texte, tels que gedit, kate ou encore emacs, ils sauvegardent les documents sour la forme de fichiers textes natifs sans auncune mise en forme comme une simple succession de caractères. Ces fichiers peuvent être consultés avec de simples commandes.
- Dans le répertoire
AOT
, lancez la commandekate adresse.txt
- Dans la fenêtre qui s'ouvre, tapez vos nom, prénom et adresse mail. Enregistrez et quittez.
- Dans la fenêtre de commandes, vérifiez la présence du fichier
adresse.txt
dans le répertoireAOT
.- Affichez le contenu du fichier
adresse.txt
avec la commandeless
- En passant par les menus de linux, ouvrez un nouveau document LibreOffice ; entrez-y vos nom, prénom et adresse mail ; enregistrez-le avec le nom
adresse.odt
dans votre répertoireAOT
; et quittez.- Dans la fenêtre de commandes, vérifiez la présence du fichier
adresse.odt
dans le répertoireAOT
.- Affichez le contenu du fichier
adresse.odt
avec la commandeless
. Que se passe-t-il ?
Manipulation de Fichiers
cp Copie des fichiers ou des répertoires (copy)
mv Déplace ou renomme un fichier ou un répertoire (move)
rm Supprime un fichier (remove)
Pour les questions suivantes, vérifiez les résultats des commandes en listant les fichiers des différents répertoires concernés.
- Copiez le fichier
adresse.txt
dans votre répertoire utilisateur avec la commandecp
- Dans le répertoire
AOT
, créez un répertoireconfig
.- Copiez tous les fichiers finissant par
.conf
du répertoire/etc/
dans le répertoireconfig
que vous venez de créer. Utilisez la commandemv
et le caractère*
présenté dans la section "gestion de l'arborescence".- Dans votre répertoire
config
, supprimez en une seule commande tous les fichiers contenant la séquence de lettreser
- Déplacez-vous dans votre répertoire utilisateur.
- Renommez le fichier
adresse.txt
en.signature
Attention !!! : N'utilisez jamais, sauf en toute connaissance de cause,
la commande rm -r *
. Cette commande supprimera tout le contenu du répertoire
courant (dont tous les sous-répertoires). C'est le meilleur moyen de perdre
toutes vos données.
Système de gestion de processus
Introduction
En première approche, un processus est une occurrence d'un programme en cours d'exécution. Les processus ont en quelque sorte une vie ; ils naissent (lorsque vous lancez un programme ou tapez une commande), ils vivent (lorsqu'ils s'exécutent) et meurent (lorsqu'ils ont terminé leur exécution). A leur naissance, chaque processus se voit attribuer par le système un PID unique (process identifier), il s'agit d'un entier identifiant le processus. Ainsi, à un instant donné, tous les processus vivants ont un PID différent, qui permet de les identifier sans ambiguïté. Enfin, lorsqu'un processus meurt, son PID redevient disponible et pourra être réattribué par le système à un nouveau processus.
Gestion des processus
bg Relancer en arrière plan un processus stoppé
fg Mettre en avant plan un processus
ps Lister les processus occupant le terminal et/ou la machine
top Observer et gérer les processus occupant la machine
kill Envoyer un signal à un processus ou à un groupe de processus
Ctrl-z suspend un processus en premier plan
Ctrl-c tue un processus en premier plan
Comme indiqué en début de document, lorsqu'une commande est lancée, un processus est créé et s'exécute sur le processeur. L'interpréteur de commande attend la fin du processus pour redonner la main à l'utilisateur. On dit que le processus est en premier plan (foreground) sur le terminal de commande. Il est possible de lancer un nouveau processus ou de placer un processus arrếté en arrière plan afin de garder la main sur le terminal de commande.
- Tapez la commande
xeyes
. Avez-vous toujours le contrôle de votre terminal ?- Notez le comportement de
xeyes
en fonction du déplacement de votre pointeur.- Testez la commande
Ctrl-c
dans votre terminal. Que s'est-il passé ?- Relancez
xeyes
dans votre terminal.- Testez maintenant la commande
Ctrl-z
dans votre terminal. Que se passe-t-il
dans le terminal ?
dans xeyes ?- Testez la commande
fg
dans le terminal. Que se passe-t-il ?- Interrompez à nouveau le processus avec Ctrl-z. Testez la commande
bg
. Que se passe-t-il avecxeyes
? Avez-vous toujours le contrôle de votre terminal ?- Testez la commande
ps
. Avez-vous trouvé le PID de votre processusxeyes
?- Tuez le processus
xeyes
avec la commandekill -9 numpid
où vous remplaceznnumpid
par le PID dexeyes
. Quel est le résultat ?- Testez la commande
ps -ef
. Elle permet de lister l'ensemble des processus en train de s'exécuter sur l'ordinateur.
Notez qu'il est possible de lancer un processus directement en arrière plan (sans
combiner Ctrl-z
puis bg
) en ajoutant simplement un &
à la fin de la commande.
- Tapez la commande
xeyes &
- Constatez la mise automatique en arrière plan de
xeyes
- retrouvez le PID de
xeyes
et tuez-le.
Les Mécanismes de Redirection
Sous Unix, les processus peuvent lire et écrire sur la console. Techniquement cela se fait au moyen de fichiers. Par défaut un processus lancé depuis la console exploite trois fichiers :
- un fichier pour lire les caractères écrits depuis le clavier sur la console ;
- un fichier pour écrire les affichages demandés par le processus sur la console ;
- un fichier pour écrire sur la console les messages d'erreurs rapportés par le processus.
Ces trois fichiers sont appelés repectivement entrée standard (par défaut un fichier correspondant au périphérique clavier), sortie standard (par défaut un fichier correspondant au périphérique écran), et sortie d'erreur standard (par défaut un fichier correspondant au périphérique écran) du processus. Il est possible de modifier, de rediriger, l'entrée et les sorties standards d'un processus :
cmd < file # 'cmd' utilise le contenu de 'file' comme entrée standard
cmd > file # Écrit la sortie de ’cmd’ en écrasant le fichier ’file’
cmd >> file # Écrit la sortie de ’cmd’ en l’ajoutant à la suite du fichier ’file’
cmd 2> file # Écrit la sortie d’erreur de ’cmd’ dans ’file’
cmd &> file # Écrit la sortie standard et d’erreur de ’cmd’ dans ’file’
Ces commandes permettent surtout de rediriger dans un fichier les résultats d'une commande générant beaucoup de lignes tels que les compilations de gros programmes.
Dans un terminal
- Déplacez-vous dans le répertoire
AOT
- Exécutez la commande
ps -ef
- Réexécutez la commande en redirigeant la sortie standard dans un fichier dont le nom est
output
- Vérifiez l'existence du fichier
output
dans votre répertoire. Vous pouvez consulter son contenu (par exemple avec la commandeless
vue plus haut)
Recherche de chaînes de caractères
- Recherchez l'ensemble des lignes contenant votre nom d'utilisateur dans le fichier
output
avec la commandegrep login output
où vous remplacerezlogin
par votre nom d'utilisateur.
Enchaînement des Processus
cmd1 ; cmd2 # Exécute cmd1 puis cmd2
cmd1 & cmd2 # Exécute cmd1 et cmd2 en parallèle
cmd1 | cmd2 # Exécute cmd1 et cmd2 en parallèle en redirigeant la sortie standard de cmd1 vers l'entrée standard de cmd2
- Lancez la commande
ls -l /usr/bin > output ; cat -n output ; rm output
Si on regarde attentivement ligne de commande, on se rend compte que :
ls -l /usr/bin > output
écrit dans le fichier output par redirection de la sortie standard la liste des fichiers du répertoire/usr/bin
;cat -n
lit dans le fichier output et affiche le résultat en numérotant les ligne ;output
sert de fichier temporaire et peut être supprimé à l'issue ducat
.
Il est possible de faire bien mieux car Unix met à votre disposition un
mécanisme particulier appelé tube (pipe en anglais). C'est un opérateur
permettant de connecter directement la sortie standard d'un premier programme à
l'entrée standard d'un second sans devoir spécifier de fichier temporaire tout
en les exécutant en parallèle. L'opérateur de pipe est |
.
Exemple : Reprenons l'exemple précédent, et réécrivons-le en utilisant cette
fois-ci un pipe :
- Tapez la commande
ls -l /usr/bin | cat -n
Le processus exécutant ls -l /bin
envoie son résultat sur l'entrée
standard du processus cat -n
, ainsi, il n'est plus nécessaire d'utiliser
un fichier temporaire comme dans l'exemple précédent (fichier output
). Un
tube offre un mécanisme de communication puissant qui permet d'échanger des
informations entre processus. Il faut bien comprendre que, contrairement à
l'enchaînement séquentiel des processus, lors de l'exécution de
commande-1 | commande-2
, deux processus sont créés puis s'exécutent
simultanément en se synchronisant.
---------------------------
Processus 1 ---> ( TUBE () ---> Processus 2
---------------------------
(Ecriture) (Lecture)
- Combinez le résultat de la commande
ps -ef
avec la commandeless
afin de parcourir facilement la liste des processus de l'ordinateur.- Combinez cette fois-ci la commande
ps -ef
avec la commandegrep
afin de ne faire apparaître que les processus qui vous appartiennent.
Archivage
L'utilitaire tar
permet d'archiver et de compresser des fichiers en une archive
de taille réduite, utile pour transférer le fichier par mail ou par clé à un autre utilisateur,
ou tout simplement sauvegarder ses données sur un support électronique.
Ainsi, la commande :
permet d'archiver (avectar
) puis de compresser (avec gzip
) tout le répertoire source_dir
(et son contenu) en un fichier src.tar.gz
.
Pour lister le contenu d'une archive, on peut utiliser la commande
Enfin, pour extraire le contenu d'une archive à l'endroit où elle se trouve, on utilisera la commande
Dans votre répertoire utilisateur :
- Archivez et compressez votre répertoire
AOT
en un fichiersauve.tar.gz
- Vérifiez l'existence et le contenu de votre archive
sauve.tar.gz
- Supprimez le répertoire
AOT
- Vérifiez qu'il a bien été supprimé
- Restaurez-le à partir de l'archive
sauve.tar.gz
Nettoyage
Vous pouvez maintenant nettoyer votre répertoire utilisateur en supprimant le fichier
sauve.tar.gz
ainsi que le répertoireAOT
.