Système d'exploitation
Présentation de l'environnement
Le programme de NSI prévoit que "les élèves utilisent un système d'exploitation libre", et l'examen des sujets 0 et des annales d'E3C montre qu'une certaine connaissance des commandes de base de Linux est attendue.
A défaut de pouvoir pour le moment utiliser le système d'exploitation Linux sur les ordinateurs disponibles au lycée, nous allons utiliser un émulateur en ligne.
Celui-ci nous permet d'utiliser un environnement Linux installé sur un serveur.
Pour un utilisateur non-payant comme nous, il pourra présenter de temps à autre une lenteur de réaction : en cas de blocage apparent, inutile de taper sur le clavier à l'aveuglette, attendre simplement quelques instants que le serveur réponde.
En cas d'inaction prolongée vous serez peut-être amenés à cliquer sur 'start project' pour retrouver l'usage du terminal.
Il est possible de s'enregistrer sur le site pour pouvoir retrouver son travail (nécessite une adresse mail valide). Vous pouvez le faire mais ce n'est pas indispensable.
Pour accéder au terminal :
Aller sur le site cocalc.com
Cliquer sur le menu 'Linux' puis sur le bouton 'Run Linux Now'
Patienter quelques instants....
On a maintenant accès à un 'terminal' Linux, qu'on appelle aussi 'console'.
Ces termes renvoient à une période de votre point de vue fort reculée de l'informatique, préexistante aux interfaces graphiques commandées via la souris ou l'écran tactile. Les interfaces graphiques sont apparues dans les années 1980 et ont largement contribué à la popularisation de l'informatique. Auparavant, néamoins, l'utilisateur interagissait avec l'ordinateur uniquement via un clavier et un écran capable d'afficher seulement du texte, cet ensemble constituant la console de commande.
Le comportement de la console est similaire à celui de la vue interactive sous Pyzo : toute commande écrite dans la console et validée par la touche Entrée est exécutée immédiatement, la différence étant qu'elle n'est pas interprétée par Python mais par un interpréteur de commandes Linux.
Une partie importante des commandes de la console permet de gérer le système de fichier. CoCalc nous permet de travailler avec une arborescence de fichiers typique d'un système Linux, mais qui se trouve sur un serveur et non sur l'ordinateur local.
Dans la console apparaît en début de ligne une invite de commande se terminant par $. Sous Cocalc, au lancement, le signe $ est simplement précédé du signe ~.
Exploration de l'arborescence des fichiers
Racine, répertoires, fichiers,
Dans le cours sur l'architecture logicielle des ordinateurs, nous avons décrit la structure arborescente des systèmes de fichiers.
Sous Linux cette arborescence s'organise à partir d'une unique racine désignée par le symbole /.
La racine est un répertoire (directory) , c'est à dire un type de fichier particulier contenant une liste de fichiers, qui peuvent eux-mêmes être soit des répertoires (sous-répertoires, sub-directories), soit contenir tout autre type d'information (texte, programme) .
Ecrire dans la console :
~$ cd /
Il ne se passe apparemment pas grand-chose, à ceci près que l'invite de commande est maintenant
/$ au lieu de
~$.
Que s'est-il passé ?
Lors du démarrage de la console, le répertoire actif est par défaut le répertoire personnel de l'utilisateur, désigné par le symbole ~. La commande cd permet de changer de répertoire (c'est l'abréviation de 'change directory'). cd / nous a placés à la racine /.
Sous Linux la racine du système de fichier est désignée par /
Très logiquement, il suffit donc de taper
/$ cd ~
pour se retrouver de nouveau dans le répertoire initial. Faites-le et vous constaterez que l'invite de commande change à nouveau.
Mais où sommes-nous exactement dans l'arborescence ? Entrer la commande
~$ pwd
La console affiche le
chemin absolu (chemin depuis la racine) du répertoire courant, c'est à dire
/home/user.
"user" est l'identifiant utilisateur ('login') qui nous est attribué par défaut sous CoCalc, c'est aussi le nom de notre répertoire personnel.
/home est le répertoire
parent de
user. C'est un des sous-répertoires de la racine.
Comme nous l'avions vu en cours, les différents répertoires composant un chemin sont séparés par des slashs / sous Linux.
Le premier / du chemin
/home/user désigne en revanche la racine, et nous montre qu'il s'agit bien d'un chemin absolu.
Aller de nouveau à la racine et entrer la commande pwd, noter le résultat.
La commande pwd permet d'afficher le chemin absolu du répertoire courant.
La commande
/$ cd -
permet de retourner au répertoire d'où l'on vient : tester cette commande pour retourner dans le répertoire personnel, puis revenir à la racine.
Le répertoire personnel d'un utilisateur est un sous-répertoire du répertoire
/home, portant le nom de l'utilisateur. Il peut aussi être désigné par le raccourci ~.
On peut donc aller à son répertoire personnel depuis n'importe quel endroit de l'arborescence en écrivant
$ cd ~
(on obtient le même résultant en écrivant simplement la commande
cd sans paramètre ni option)
La racine contient-elle autre chose que le répertoire home ?
Pour le savoir, on utilise depuis la racine la commande
/$ ls
(pour liste ).
On obtient alors la liste des répertoires contenus dans la racine, parmi lesquels nous retrouvons le répertoire
home.
Nous pouvons explorer certains de ces autres dossiers.
Par exemple la commande
$ cd var
nous permet de nous rendre dans le répertoire
var contenu dans la racine
La commande cd peut être suivi d'un chemin relatif, c'est à dire d'un chemin dont le point de départ est le répertoire actuel.
Par exemple sous CoCalc
/var$ cd log/firebird
exécuté depuis le répertoire
var, nous conduit dans le répertoire
firebird, qui est un sous-répertoire de
log, lui-même un sous-répertoire de
var. En revanche si nous exécutons cette commande depuis n'importe quel autre répertoire, nous obtiendrons un message d'erreur.
La commande cd peut aussi être suivie d'un chemin absolu (chemin complet depuis la racine, commençant par / )
Par exemple la commande
cd /var/tmp
exécutée depuis n'importe quel répertoire , vous conduira dans le sous-répertoire
tmp du répertoire
var qui se trouve dans la racine.
Depuis le répertoire /var/tmp, nous pouvons utiliser encore une autre méthode pour retourner à la racine. Exécuter la commande
/var/tmp$ cd ..
une première fois : on se trouve alors dans le répertoire
var : on est 'remonté d'un niveau' dans l'arborescence. En exécutant une deuxième fois cette commande on se retrouve dans la racine.
Le raccourci .. désigne le répertoire parent du répertoire actuel.
Ce raccourci peut être utilisé dans un chemin relatif.
Par exemple, retourner dans le répertoire /var/tmp et exécuter la commande
/var/tmp$ cd ../log
. On se retrouve alors dans
/var/log.
Remarque : la commande ls utilisée seule donne le contenu du répertoire courant mais, comme pour la commande cd, on peut la faire suivre du chemin relatif ou absolu d'un autre répertoire que le répertoire courant : c'est alors le contenu du répertoire indiqué qui sera affiché.
La commande tree
La commande tree permet d'afficher une partie de l'arborescence des fichiers. Par exemple
/$ tree /home
nous donne le contenu du répertoire
home et de ses sous-répertoires, qui dans notre cas se limitent à
user, lequel pour le moment ne contient qu'un seul fichier.
La commande
tree est à utiliser avec précautions car l'arborescence à partir de certains emplacement peut contenir énormément d'éléments et être très longue à s'afficher. La combinaison de touches Ctrl+C permet dans un tel cas d'interrompre l'exécution.
Pour limiter l'affichage à une partie de l'arborescence, il est intéressant d'utiliser l'option -L qui permet d'indiquer la profondeur d'arborescence à parcourir.
Par exemple
tree -L 2 /var
permet d'afficher les deux premies niveaux de l'arborescence à partir du répertoire
var (vous pouvez essayer d'autres valeurs à la place de 2, pour voir).
Si aucun nom de répertoire n'est indiqué, tree donne l'arborescence du répertoire actuel, représenté par un point . à la base de l'arbre.
Gestion des fichiers et répertoires
La console fournit un certain nombre de commandes permettant d'effectuer les opérations de gestion de fichiers et répertoires : création, copie, renommage, suppression...
Gestion des fichiers
Création de quelques fichiers d'exemple
Les fichiers sont usuellement créés par les programmes d'application. Cependant à des fins d'apprentissage nous pouvons utiliser deux manières de créer simplement des fichiers depuis la console.
Nous devons d'abord nous placer dans un répertoire où nous avons le droit de créer des fichiers : aller au répertoire personnel ~.
La commande touch permet de créer un fichier vide. Par exemple exécuter les commandes
~$ touch toto
puis
~$ ls
On constate qu'un fichier 'toto' a bien été créé dans le répertoire personnel. (il s'agit d'un détournement de la commande
touch dont l'objectif premier est de modifier la date et l'heure d'un fichier existant).
Une autre façon de créer un fichier, contenant cette fois du texte, est d'utiliser une redirection depuis la console vers un fichier.
On va par exemple rediriger le résultat de la commande echo, qui permet d'afficher du texte sur la console. Si on exécute par exemple
~$ echo "Bonjour tout le monde"
le texte "Bonjour tout le monde" est répété sur la console.
La redirection vers un fichier peut se faire gràce au signe > suivi du nom de fichier qu'on veut créer (éviter d'utiliser un nom existant sous peine de l'écraser).
Exécuter
~$ echo "Bonjour tout le monde" > montexte
et vérifier qu'un nouveau fichier
montexte a bien été créé.
Exécuter maintenant la commande
~$ cat montexte
La commande cat permet d'afficher le contenu d'un fichier texte.
Copie de fichier
Exécuter la commande
~$ cp montexte sondouble
Vérifier qu'on vient de créer un nouveau fichier appelé
sondouble dont le contenu est identique à celui de
montexte
La commande cp (copy) permet de créer une copie d'un fichier. Sa syntaxe est cp [source] [copie]
Attention si le nom indiqué pour la copie est celui d'un fichier existant, il sera écrasé sans demande de confirmation.
Le nouveau nom peut être ou inclure un chemin vers un répertoire destination, ce qui permet de copier un fichier vers un autre emplacement.
Renommer un fichier
La commande mv (move) permet de changer le nom d'un fichier. Sa syntaxe est mv [nom actuel] [nouveau nom]
Exemple :
~$ mv montexte untexte
Attention si le nouveau nom celui d'un fichier existant, il sera écrasé sans demande de confirmation.
mv peut également être utilisée pour déplacer un fichier. Dans ce cas on indique à la place du nouveau nom le chemin vers le nouvel emplacement. Nous l'utiliserons un peu plus loin quand nous aurons vu comment créer de nouveaux sous-répertoires.
Supprimer un fichier
La commande
rm (remove) permet de supprimer le fichier indiqué. Attention, comme généralement sous Linux, elle ne vous demandera par défaut pas de confirmation!
Par exemple
~$ rm toto
La commande rm permet de supprimer un fichier.
Les jokers
Les jokers sont des caractères utilisés pour remplacer n'importe quel caractère dans un nom de fichier. ils permettent de traiter en une seule commande plusieurs fichiers dont le nom correspond au modèle décrit à l'aide des jokers.
le caractère * permet de remplacer un nombre quelconque de caractères quelconques.
Par exemple, créer dans le répertoire personnel trois fichiers toto,titi et toutou puis entrer la commande
~$ ls t*
On obtient la liste de tous les fichiers dont le nom répond au modèle 't*' c'est à dire 't suivi d'un nombre quelconque de caractères quelconques', autrement dit tous les fichiers dont le nom commence par t.
La commande
~$ ls to*
nous renverra les noms des deux fichiers commençant par to.
Le caractère ? remplace un caractère unique quelconque.
Par exemple
~$ ls t?t?
nous renverra ici
toto et
titi.
Commandes spécifiques aux répertoires
Sous Linux les répertoires sont des fichiers spéciaux. Beaucoup des commandes qui s'appliquent aux fichiers s'appliquent aussi aux répertoires, comme
mv et
cp. Toutefois il existe des commandes spécifiques pour la création et la suppression de répertoires.
La commande mkdir (make directory) permet de créer un répertoire dans le répertoire courant.
La commande rmdir permet de supprimer un répertoire, à condition qu'il soit vide.
Exemple :
~$ mkdir monrep
~$ rmdir monrep
Déplacement d'un fichier vers un répertoire
Après l'exécution des opérations listées dans l'exercice ci-dessus, la commande
tree montre qu'une partie de l'arborescence du répertoire personnel ressemble à ceci (les
xxxxxxxxxx représentent les autres fichiers et répertoires éventuellement préexistants ):
.
├── xxxxxxxxxx
├── expedie
└── local
├── zone1
│ └── message
└── zone2
└── message
Pour déplacer le fichier
expedie dans le répertoire zone2 depuis son emplacement actuel, on écrira, si on se trouve dans le répertoire personnel :
~$ mv expedie local/zone2/
Le fichier est alors déplacé mais garde son nom, comme vous pourrez le constater en exécutant cette commande puis
tree depuis le répertoire personnel.
Le slash final est facultatif, mais l'ajouter est une bonne habitude à prendre. En effet si par hasard on a fait une erreur (étourdie ou faute de frappe) dans le nom du dernier répertoire et qu'il n'est pas suivi d'un /, le système va comprendre qu'il doit renommer le fichier sous ce nom là. On va donc se retrouver avec un fichier qui n'est pas à l'emplacement voulu, et qui de plus a été déplacé vers un autre emplacement (au niveau supérieur dans l'arborescence) sous un nom imprévu... En revanche si on met le slash l'intepréteur sait que le dernier nom figurant dans le chemin doit être celui d'un répertoire, et s'il ne trouve pas celui-ci il renvoie un message d'erreur sans aller plus loin. La même remarque vaut pour la commande cp.
On peut également changer le nom du fichier tout en le déplaçant. Pour déplacer le fichier expedie qui se trouve maintenant dans zone2 dans le répertoire zone1 tout en changeant son nom en voyageur, on écrira, si on se trouve dans le répertoire personnel :
~$ mv local/zone2/expedie local/zone1/voyageur
(cette fois, impérativement sans / à la fin!)
Dans toutes les commandes agissant sur un fichier ou un répertoire, le fichier ou le répertoire peut être désigné par - Un chemin absolu, partant de la racine et commençant par /
- un chemin relatif, partant du répertoire courant
Le répertoire parent du répertoire courant est désigné par deux points .. côte à côte.
Le raccourci ~ peut être utilisé pour remplacer le chemin absolu du répertoire personnel.
Un point unique . peut-être utilisé pour désigner le répertoire courant lorsque c'est nécessaire.
Options et manuel des commandes
Beaucoup de commandes Linux peuvent être utilisées avec des options qui permettent de modifier leur comportement par défaut.
Il existe deux formats d'options : - Les options courtes (les plus nombreuses) composées d'un tiret - suivi d'une lettre
- les options longues, composées de deux tirets -- suivis d'un 'mot' (plus de deux lettres)
.
La liste complète des options pouvant être utilisées avec une commande donnée est répertoriée dans le manuel de la commande. On peut afficher le manuel d'une commande à l'aide de la commande man suivie du nom de la commande. Par exemple
~$ man cp
ouvre le manuel de la commande
cp. Le manuel donne (en anglais) une description de la commande , son 'synopsis' qui indique les éléments qu'elle peut ou doit comporter, et la liste des options possibles.
Pour cp les options les plus intéressantes dans un premier temps sont - -r , qui permet de copier un répertoire et son contenu
- -n qui permet de ne pas écraser un fichier déjà existant
- -i qui permet de devoir confirmer avant d'écraser un fichier existant,
- -u qui permet de n'écraser un fichier existant que si la nouvelle version est plus récente.
Attention à bien respecter la casse (majuscules ou minuscules ne sont pas équivalentes).
On peut utiliser plusieurs options en même temps, auquel cas on peut les grouper à la suite après un seul tiret. Par exemple
~$ cp monrep double -riv
pour utiliser
cp avec les trois options -r, -i et -v.
Utilisateurs et droits
Les profils d'utilisateurs sous Linux
Les aficionados de Linux mettent souvent en avant, et avec raison, qu'il s'agit d'un système très sécurisé. Le principe de base est que chaque utilisateur 'ordinaire' dispose d'un répertoire personnel dans lequel il peut effectuer toutes les opérations qu'il souhaite avec les fichiers et répertoires, mais qu'en revanche ses droits sont très limités en dehors de cet espace. Cela l'empêche ainsi d'intervenir sur le système d'exploitation, qui est donc protégé contre les mésaventures et les malveillances.
Il ne peut pas non plus aller fouiller dans les répertoires personnels des autres utilisateurs.
Un utilisateur peut appartenir à un ou plusieurs groupes d'utilisateurs, ce qui permet de partager des ressources de manière contrôlée avec un groupe restreint de personnes. C'est surtout utile si l'ordinateur est utilisé dans un réseau. Par défaut un utilisateur appartient à un groupe dont le nom est identique à son nom d'utilisateur. Ainsi sur Cocalc nous appartenons au groupe
user.
Il existe toutefois un profil particulier appelé 'superutilisateur' ou 'utilisateur root' qui a tous les droits : ce profil est le seul à pouvoir installer des programmes ou mettre à jour le système. Il peut aussi gérer les utilisateurs et les groupes. Ce profil possède un 'répertoire personnel' appelé également root mais celui-ci n'est pas dans le répertoire home, comme ceux des utilisateurs ordinaires, mais dans la racine (root signifie racine en anglais).
Le profil du superutilisateur doit être utilisé uniquement lorsque cela est nécessaire, c'est à dire pour des installations ou des mises à jour. Ce n'est pas un profil 'de travail' (nide jeu...). On peut effectuer des opérations en tant que superutilisateur (root) si on connaît le mot de passe de superutilisateur. En ligne de commande, une commande non autorisée pour un utilisateur 'ordinaire' pourra être effectuée si on la fait précéder de sudo ('as superutilisateur do) (il faudra bien sûr saisir le mot de passe root lorsqu'il sera demandé). Sous Cocalc nous ne pouvons pas utiliser cette commande, ce qui est assez normal...
Droits d'accès aux fichiers et répertoires
La commande
ls utilisée avec l'option -l permet de connaître toutes les propriétés des fichiers et répertoires.
Par exemple si nous voulons examiner le contenu du répertoire personnel :
~$ ls -l
Chaque ligne correspond à un fichier. Les informations sont dans l'ordre, séparées par des espaces,
à partir de la droite :
le nom du fichier ou du répertoire, son heure et sa date de création, sa taille en octets, un nom de
groupe , un nom d'
utilisateur, un chiffre, et une série de 10 lettres et tirets, dont nous allons voir la signification maintenant.
Cette série commence par d si on a affaire à un répertoire (directory) , - si on a affaire à un fichier (elle peut aussi commencer par l, comme link ou lien, mais nous n'en parlerons pas pour le moment).
Les neufs caractères qui suivent sont en fait trois groupes de trois caractères, chacun pouvant être soit un r, soit un w, soit un x, soit un tiret.
Ces caractères indiquent quels sont les droits, sur chaque fichier, de chacun des types de profils utilisateur. La lettre r indique un droit en lecture (read), la lettre w un droit en écriture (write), la lettre x un droit d'exécution.
Les droits sont toujours écrits dans l'ordre rwx. Si la lettre est remplacée par un -, le droit n'est pas actif.
La première triplette concerne le propriétaire du fichier, dans notre cas user, qui a très logiquement par défaut le droit de lire et d'écrire ses propres fichiers.
Il a également par défaut le droit de parcourir l'arborescence de ses propres répertoires, ce qui est indiqué par la lettre x pour les répertoire.
Pour les fichiers, le droit d'exécution n'a de sens que s'il s'agit d'une commande (programme compilé ou script) et il n'est donc pas actif par défaut.
La seconde triplette décrit de la même façon les droits pour les utilisateurs membres du groupe propriétaire du fichier.
La troisième triplette concerne les autres utilisateurs.
Vous pouvez regarder à l'aide de la commande ls -l qui sont les utilisateurs et groupes propriétaires de votre répertoire personnel home/user et des répertoires qui sont dans la racine. Il est possible de préciser le nom d'un fichier ou d'un répertoire après ls -l. Pour un répertoire, on obtient avec l'option -l les propriétés des fichiers et répertoires qu'il contient. Pour obtenir les propriétés du répertoire lui-même, ajouter l'option -d (combinaison -dl).
Commande chmod
La commande
chmod permet de changer les droits d'accès à un fichier ou à un répertoire dont on est propriétaire.
Par exemple pour ajouter des droits en lecture sur le fichier
toto pour le groupe qui en est propriétaire, on écrira
chmod g-r toto
et pour redonner ces mêmes droite
chmod g+r toto
La lettre g est utilisée pour désigner le groupe, la lettre u pour l'utilisateur, la lettre o (others) pour les autres utilisateurs. Si on ne précise pas, les droits sont changés pour tous les utilisateurs (on peut obtenir le même résultat en utilisant la lettre a, pour all).
Par exemple
chmod +w toto
ajoute des droits en écriture pour tout le monde.
On peut effectuer plusieurs changements en même temps :
chmod o-w,g+w toto
(ajoute des droits en écriture pour le groupe et les enlève pour les autres).
Code numérique pour les droits
Les droits peuvent également être codés sous forme d'un triplet de chiffres.
Le premier chiffre code les droits de l'utilisateur, le second du groupe, le troisième des autres.
La valeur du droit en lecture est 4, celle du droit en écriture 2, celle du droit d'exécution est 1.
Par exemple l'équivalent de rw- est 4+2+0 = 6 , celui de r-x 4+0+1 = 5.
La commande find
Comme son nom le laisse supposer, la commande
find permet de rechercher des fichiers ou des répertoires, en fonction de certains critères, dans toute une arborescence.
La syntaxe de la commande find est de la forme
find [répertoire de départ de la recherche] [critères de recherche]
La recherche est effectuée dans toute l'arborescence à partir du répertoire de départ indiqué, ou à défaut à partir du répertoire courant.
les possibilités offertes par find sont très vastes, car elle permet de combiner des critères portant sur toutes les propriétés des fichiers : nom, type, droits d'accès, taille...
Par exemple, pour rechercher tous les fichiers appelés 'image' dans le répertoire 'martin' et ses sous-répertoires, on écrit :
~$ find martin -name "image"
On peut utiliser les jokers * et ? dans le nom du fichier. Par exemple pour rechercher tous les fichiers dont le nom commence par la lettre 'p' dans le répertoire 'martin' et ses sous-répertoire :
~$ find martin -name "p*"
Pour rechercher seulement parmi les fichiers, on utilise le critère -type f, et type -d pour rechercher seulement parmi les répertoires..
On peut inverser un critère en le faisant précéder de ! , et combiner des critères. Par exemple
~$ find martin -type f ! -name "*m*"
renverra tous les fichiers (mais pas les répertoires) contenus dans le répertoire 'martin' et ses sous-répertoires, et dont le nom ne contient pas la lettre m.
IMPORTANT : Si vous utilisez la commande find depuis votre répertoire personnel sous Cocalc vous risquez d'être surpris car ce répertoire contient un nombre plus ou moins important de fichiers cachés, dont le nom commence par un point. Pour les éliminer du résultat des recherches vous avez tout intérêt à ajouter le critère suivant ! -path "./.*"
qui signifie qu'il ne faut pas ("!") que le chemin (path) vers le fichier (ou le répertoire) commence par la séquence './.".
On peut également rechercher les fichiers en fonction de leur propriétaire (-user) ou de leur groupe propriétaire (-group), de leurs droits (-perm , les droits étant décrits comme avec chmod)...
Fichiers scripts
L'intérêt d'utiliser les lignes de commande est aussi (et surtout) de pouvoir créer des fichiers de commandes, ou scripts, pour automatiser des opérations.
Un premier script exécutable
Pour un premier essai, exécuter la lignez suivant :
~$ echo "echo 'bonjour tout le monde'" > test
puis afficher son contenu avec cat. Le fichier doit contenir la ligne
echo 'Bonjour tout le monde'
qui est une commande Linux valide.
On peut exécuter cette commande en écrivant :
~$ bash test
bash est l'interpréteur de commandes Linux utilisé par Cocalc.
Il a ici interprété et exécuté la commande contenue dans le fichier.
On peut faire encore mieux: rendre le fichier test exécutable, au moins pour son utilisateur, à l'aide de la commande chmod.
On peut alors exécuter le fichier en tapant simplement
~$ ./test
Encore mieux: créer dans le répertoire utilisateur un sous-répertoire appelé
bin et y déplacer le fichier
test.
Vous pouvez maintenant déclencher son exécution en tapant simplement son nom :
~$ test
Vous venez de créer une nouvelle commande...
Script avec paramètre
La plupart des commandes que nous avons vues pouvaient prendre des paramètres (par exemple un nom de fichier ou de répertoire à traiter) . Il est possible de passer des paramètres à un script.
Entrer la commande :
~$ echo 'ls $1 -lSr' > listet
et vérifier que le fichier listet contient bien la ligne
ls $1 -lSr.
Dans ce script, le symbole $1 désigne le (premier) paramètre qui sera passé au script.
Rendre le fichier exécutable comme vu précédemment et entrer la commande :
~$ listet /home/user
On obtient le même résultat que par la commande
~$ ls /home/user -lSr
car lors de l'exécution du script
listet, le paramètre
/home/user que nous lui avons passé a remplacé le symbole $1.
Un peu d'interaction
L'écriture des scripts en redirigeant la commande echo vers un fichier, comme nous l'avons fait ci-dessus, n'est pas très commode. La console Linux permet d'utiliser un petit éditeur de texte pur d'usage simple,
nano. Pour créer le fichier
interact avec nano, entrer la commande :
~$ nano interact
.
Entrer les lignes suivantes :
echo "Bonjour quel est ton nom ?"
read nom
echo "Salut" $nom
En cas d'erreur, utilisez les flèches de direction (à l'ancienne!) pour vous déplacer dans le texte.
Enregistrer le fichier à l'aide de la combinaison de touches Ctrl+o (Write Out), appuyer sur Entrée pour confirmer le nom du fichier, puis Ctrl +x pour quitter.
Vérifier que le fichier inter contient bien les lignes ci-dessus, puis le rendre exécutable, et l'exécuter.
Ci-dessous la version commentée
echo "Bonjour quel est ton nom ?" # affiche le message à l'écran
read nom # attend que l'utilisateur donne une réponse et l'affecte à la variable nom
echo "Salut" $nom # affiche le message suivi de la valeur de la variable nom