Archi Commandes

Identification

Infoforall

12 - Gestion des répertoires sous Linux


Vous savez ce qu'est un système d'exploitation GNU-Linux maintenant.

Vous avez vu quelques commandes (cd, cat, ls notamment).

Aujourd'hui, nous allons aborder l'un des points forts des systèmes UNIX dont dérive Linux : la gestion des droits des utilisateurs sur les fichiers et les répertoires.

Cela vous permettra de créer vos premiers scripts exécutables sur le poste par n'importe quel utilisateur.

Attention, cette activité reste une activité de découverte qui vous permettra de comprendre les nombreux tutos et cours en ligne. Les seules connaissances exigibles sont résumées en fin d'activité.

Prérequis : les deux premières activités sur les systèmes d'exploitation

Evaluation ✎ : questions 03-06-10. Tout est fourni ensuite mais les connaissances ne sont pas optionnelles pour autant.

Documents de cours :

1 - Rappel des commandes de base

Nous en étions arrivé à ceci :

Récapitulatif des notions et commandes

Les notions abordées :

Notion Explication
Racine  /  La racine est le point de départ de l'arborescence.
Adresse absolue Il s'agit d'une adresse dont le point de départ est la racine.
L'adresse commence donc par  / .
Utilisateur root Le super-administrateur de la machine. Il a tous les droits sur la machine. Son répertoire personnel est situé à l'adresse absolue /root.
Répertoire personnel d'un utilisateur Il s'agit du répertoire qui appartient à un utilisateur. Il est situé à l'adresse absolue /home/NOM_UTILISATEUR. Il peut être adressé plus facilement en utilisant le raccourci Tilde  ~ .
Adresse relative Une adresse qui prend comme point de départ le répertoire courant, le répertoire sur lequel pointe actuellement le terminal.
Répertoire parent  ..  Il s'agit du répertoire "contenant" le répertoire courant. Par définition, seule la racine ne possède pas de parent.

Les commandes à connaître :

Commande Explication
ls Liste le contenu du répertoire dont l'adresse (relative ou absolue) est fournie juste après.
ls www : liste le contenu d'un répertoire www contenu dans le répertoire courant.
ls /home/utilisateur/www : idem mais avec une adresse absolue.
Si on ne fournit rien(ls), il s'agira du répertoire courant.
Quelques options :
ls -a pour afficher les objets cachés (ceux qui commencent par un point)
ls -l pour afficher des informations plus longues
cd Change directory : permet de changer de repertoire.
cd ~ permet d'atteindre son propre répertoire.
cd / permet d'atteindre la racine.
cd .. permet de remonter d'un cran dans l'arborescence.
cat Permet de concaténer une entrée vers une sortie.
La forme générale pour écraser l'ancien contenu est cat entree > sortie
La forme générale pour rajouter du contenu est cat entree >> sortie
Si on omet l'entrée, il s'agit par défaut du terminal.
Si on omet la sortie, il s'agit par défaut du terminal.

Les commandes qui ne sont pas à connaître mais que nous avons vu :

Commande Explication
which Permet d'obtenir l'adresse absolue du fichier qui est reconnu comme étant l'exécutable d'une commande. Exemple which python3
type Permet d'obtenir le type d'une commande (interne ou externe au Shell-Noyau)
whoami Permet de récupérer le nom de l'utilisateur du terminal
pwd Print working directory, permet de récupérer le répertoire sur lequel pointe actuellement le terminal.

Pour tester ces commandes, vous avez utilisé un terminal Linux en utilisant l'une des ces solutions :

2 - Création de fichiers et répertoires

01° Se placer au début de votre répertoire personnel (~ qui est un alias de /home/nom_utilisateur)

Nous allons voir comment créer des répertoires avec en lignes de commandes. La commande se nomme mkdir pour make directory en anglais. En français, ça se traduit par créer un répertoire.

02° En ayant un terminal pointant sur ~, lancer les commandes suivantes 

rv@rv-HP2:~$ mkdir droits rv@rv-HP2:~$ ls rv@rv-HP2:~$ cat > droits/fichier1.txt Bonjour. Premier test. ^C

Expliquer ce que font les commandes ci-dessus.

Rappel : ^C désigne l'appui CTRL + C.

...CORRECTION...

Avec mkdir droits, on crée un répertoire nommé droits dans votre répertoire personnel.

La commande ls vous permet de visualiser la présence d'un nouveau répertoire portant ce nom.

La commande cat > droits/fichier1.txt permet d'envoyer le texte crée sur le terminal (entrée par défaut car on n'avait donné aucune entrée) et de l'envoyer vers un fichier nommé fichier1.txt se situant dans le répertoire droits

✎ 03° Créer deux autres fichiers textes dans ce répertoire droits en les nommant fichier2.txt et fichier3. Le dernier fichier n'a pas d'extension : c'est volontaire.

Fournir les codes dans votre copie numérique. Il ne s'agit pas d'un script Python [ #!python ] mais d'un script Bash [ #!bash ].

Vous devriez normalement obtenir une structure de ce type :

📁 / (la racine de l'ordinateur)

📁 home

📁 testprofad (dont l'alias est donc  ~ )

📁 droits

📄 fichier1.txt

📄 fichier2.txt

📄 fichier3

Dans la suite de cette activité, nous allons utiliser le répertoire droits comme répertoire de travail.

04° Vérifier qu'on parvient bien à créer également des répertoires dans droits en restant dans le répertoire personnel.

rv@rv-HP2:~$ mkdir droits/animaux rv@rv-HP2:~$ mkdir droits/vegetaux rv@rv-HP2:~$ ls droits animaux fichier1.txt fichier2.txt fichier3 vegetaux

On obtient alors ceci :

📁 / (la racine de l'ordinateur)

📁 home

📁 testprofad (dont l'alias est donc  ~ )

📁 droits

📁 animaux

📄 fichier1.txt

📄 fichier2.txt

📄 fichier3

📁 vegetaux

3 - Déplacement et changement de nom

On peut déplacer les fichiers et les répertoires. Il faut utiliser la commande mv, pour move. La commande s'écrit sous la forme mv SOURCE CIBLE.

Un exemple où on part de ceci :

📁 / (la racine de l'ordinateur)

📁 home

📁 testprofad Terminal pointant ce dossier

📁 droits

📁 animaux

📄 fichier1.txt

📄 fichier2.txt

📄 fichier3

📁 vegetaux

05° Lire et comprendre la documentation ci-dessous. Il faudra appliquer les connaissances vues ici à la question 06.

Exemple d'utilisation de mv

On commence par changer de répertoire courant :

rv@rv-HP2:~$ cd droits rv@rv-HP2:~/droits$ ls animaux fichier1.txt fichier2.txt fichier3 vegetaux

Maintenant, le terminal pointe donc sur le répertoire droits :

📁 / (la racine de l'ordinateur)

📁 home

📁 testprofad

📁 droits Terminal pointant ce dossier

📁 animaux

📄 fichier1.txt

📄 fichier2.txt

📄 fichier3

📁 vegetaux

On déplace alors fichier1.txt pour le placer dans le répertoire animaux :

rv@rv-HP2:~/droits$ mv fichier1.txt animaux rv@rv-HP2:~/droits$ ls animaux fichier2.txt fichier3 vegetaux rv@rv-HP2:~/droits$ ls animaux fichier1.txt

Nous avons vu le raccourci  ..  qui désigne le répertoire parent. Il nous restait à voir le lien  .  : il désigne le répertoire courant, le répertoire sur lequel pointe le terminal. Pour ramener un fichier dans le répertoire courant, il suffit donc de taper ceci :

rv@rv-HP2:~/droits$ mv animaux/fichier1.txt . rv@rv-HP2:~/droits$ ls animaux fichier1.txt fichier2.txt fichier3 vegetaux rv@rv-HP2:~/droits$ ls animaux (vide !)

Le plus beau, c'est qu'on peut également changer le nom du fichier lors du transfert. Il suffit de fournir un nom derrière le répertoire de destination :

rv@rv-HP2:~/droits$ mv fichier1.txt animaux/newnew.log rv@rv-HP2:~/droits$ ls animaux fichier2.txt fichier3 vegetaux rv@rv-HP2:~/droits$ ls animaux newnew.log

Si on veut revenir à la configuration de départ, on peut alors taper ceci :

rv@rv-HP2:~/droits$ mv animaux/newnew.log ./fichier1.txt rv@rv-HP2:~/droits$ ls animaux fichier1.txt fichier2.txt fichier3 vegetaux rv@rv-HP2:~/droits$ ls animaux (vide !)

On peut même faire plus simple : on pourrait juste taper ceci (si on ne donne pas de destination, mv prend le répertoire courant  .  par défaut) :

rv@rv-HP2:~/droits$ mv animaux/newnew.log fichier1.txt rv@rv-HP2:~/droits$ ls animaux fichier1.txt fichier2.txt fichier3 vegetaux rv@rv-HP2:~/droits$ ls animaux (vide !)

✎ 06° Fournir les 3 instructions qui permettent de réaliser successivement les choses suivantes en partant de la structure de base :

Etape 1 : on déplace fichier2.txt dans le répertoire vegetaux.

📁 / (la racine de l'ordinateur)

📁 home

📁 testprofad

📁 droits Terminal pointant ce dossier

📁 animaux

📄 fichier1.txt

📄 fichier3

📁 vegetaux

📄 fichier2.txt

Etape 2 : on déplace fichier3 dans le répertoire vegetaux en le renommant fichier3.txt.

📁 / (la racine de l'ordinateur)

📁 home

📁 testprofad

📁 droits Terminal pointant ce dossier

📁 animaux

📄 fichier1.txt

📁 vegetaux

📄 fichier2.txt

📄 fichier3.txt

Etape 3 : on déplace fichier3.txt dans le répertoire courant droits en le renommant historique.log.

📁 / (la racine de l'ordinateur)

📁 home

📁 testprofad

📁 droits Terminal pointant ce dossier

📁 animaux

📄 historique.log

📄 fichier1.txt

📁 vegetaux

📄 fichier2.txt

Maintenant que vous savez déplacer, déplacer et renommer et renommer, comment faire pour juste renommer ? Il suffit de déplacer le fichier de son répertoire vers le même répertoire mais en changer le nom.

rv@rv-HP2:~/droits$ ls animaux historique.log fichier1.txt vegetaux rv@rv-HP2:~/droits$ mv historique.log fichier3 rv@rv-HP2:~/droits$ ls animaux fichier1.txt fichier3 vegetaux

Bien entendu, on aurait pu faire pareil avec le  .  :

rv@rv-HP2:~/droits$ mv ./historique.log ./fichier3

Et si nous tentions de bouger l'un de nos fichiers vers les répertoires hors de notre répertoire personnel ?

07° Réaliser les tests ci-dessous (sans être l'utilisateur root si vous êtes sur votre propre OS) :

rv@rv-HP2:~/droits$ mv fichier1.txt /
rv@rv-HP2:~/droits$ mv fichier1.txt /bin

Rappel :  /  désigne la racine du système.

...CORRECTION...

rv@rv-HP2:~/droits$ mv fichier1.txt / mv: impossible de déplacer 'fichier1.txt' vers '/fichier1.txt': Permission non accordée
rv@rv-HP2:~/droits$ mv fichier1.txt /bin mv: impossible de déplacer 'fichier1.txt' vers '/fichier1.txt': Permission non accordée

Et oui. Vous n'avez pas les droits de tout faire en tant qu'utilisateur lambda. Nous allons voir plus loin comment gérer ces situations et comment règler précisement qui a le droit de faire quoi.

4 - Copie

Ca va être rapide, c'est presque pareil que mv (move). On laisse juste le fichier de base en place.

Pour réaliser une copie, il faut utiliser la commande cp, pour copy.

Voici normalement la situation dans vos répertoires à ce moment de l'acitivité :

📁 / (la racine de l'ordinateur)

📁 home

📁 testprofad

📁 droits Terminal pointant ce dossier

📁 animaux

📄 fichier1.txt

📄 fichier3

📁 vegetaux

📄 fichier2.txt

08° Appliquer les instructions suivantes pour obtenir des copies de certains fichiers.

Remarque : si vous avez encore un fichier nommé historique.log, il est temps d'utiliser mv historique.log fichier3.

rv@rv-HP2:~/droits$ cp fichier1.txt animaux rv@rv-HP2:~/droits$ cp fichier1.txt vegetaux rv@rv-HP2:~/droits$ cp fichier1.txt vegetaux/fichier4.zzz rv@rv-HP2:~/droits$ ls animaux fichier1.txt fichier3 vegetaux rv@rv-HP2:~/droits$ ls animaux fichier1.txt rv@rv-HP2:~/droits$ ls ./vegetaux fichier1.txt fichier2.txt ficher4.zzz

Au final, vos dossiers devraient donner ceci :

📁 / (la racine de l'ordinateur)

📁 home

📁 testprofad

📁 droits Terminal pointant ce dossier

📁 animaux

📄 fichier1.txt

📄 fichier1.txt

📄 fichier3

📁 vegetaux

📄 fichier1.txt

📄 fichier2.txt

📄 fichier4.zzz

Ok, nous savons dupliquer des fichiers. Et les répertoires ?

Il faut juste rajouter une option.

Imaginons qu'on veuille copie le répertoire vegetaux dans le répertoire courant (droits) sous le nom vegetaux2.

rv@rv-HP2:~/droits$ cp vegetaux vegetaux2 cp: -r non spécifié ; omission du répertoire 'vegetaux'

Et voilà : Linux vous explique comment faire. Il faut rajouter l'option courte r, r pour récursif : on applique la copie de tout le contenu.

09° Appliquer les instructions suivantes pour obtenir des copies de certains répertoires.

rv@rv-HP2:~/droits$ ls animaux fichier1.txt fichier3 vegetaux rv@rv-HP2:~/droits$ cp -r vegetaux vegetaux2 rv@rv-HP2:~/droits$ ls animaux fichier1.txt fichier3 vegetaux vegetaux2

On remarque donc que le système parvient bien à créer un nouveau répertoire. Comme on ne précise aucun chemin, le système prend par défaut le répertoire courant : il va copier le répertoire vegetaux du répertoire courant et en créer une copie nommée vegetaux2, également par défaut dans le répertoire courant.

On peut aussi copier un répertoire et son contenu dans un autre répertoire : ici, on copie le répertoire vegetaux dans le répertoire animaux en donnant à la copie le nom vegetaux2 :

rv@rv-HP2:~/droits$ cp -r vegetaux animaux/vegetaux2 rv@rv-HP2:~/droits$ ls animaux fichier1.txt vegetaux2 rv@rv-HP2:~/droits$ ls animaux/vegetaux2 fichier1.txt fichier2.txt ficher4.zzz
Astuce : vous pouvez commencer à écrire le nom d'un fichier ou d'un répertoire et taper sur TAB pour que le système complète automatiquement ce nom s'il n'en trouve qu'un qui corresponde.

5 - Petit supplément

Juste un petit mot sur le caractère magique * qui remplace n'importe quoi dans une demande.

Exemple 1 : lister tous les contenus d'un répertoire finissant par .txt.

rv@rv-HP2:~/droits$ ls vegetaux/*.txt vegetaux/fichier1.txt vegetaux/fichier2.txt

Exemple 2 : lister tous les contenus d'un répertoire commençant par f ?

rv@rv-HP2:~/droits$ ls f* fichier1.txt fichier3

6 - Supprimer

Dernière chose à gérer : la suppression des fichiers et des répertoires.

La commande gérant les deux est la commande rm, pour remove, enlever en français.

rv@rv-HP2:~/droits$ ls animaux fichier1.txt fichier3 vegetaux2 rv@rv-HP2:~/droits$ rm fichier3 rv@rv-HP2:~/droits$ ls animaux fichier1.txt vegetaux2

✎ 10° Fournir la commande à fournir pour supprimer fichier1.txt. Idem avec un fichier imaginaire nommé toto.zip qui se trouverait dans ~/testtoto.

Passons au cas des répertoires. La tentation serait de juste fournir le nom du répertoire.

rv@rv-HP2:~/droits$ ls animaux fichier1.txt vegetaux2 rv@rv-HP2:~/droits$ rm animaux rm: impossible de supprimer 'animaux': est un dossier

Encore une fois, il faut rajouter l'option courte r pour parvenir à supprimer le répertoire et son contenu.

11° Tester les instructions suivantes qui vous permettront de constater qu'on parvient à supprimer les répertoires.

rv@rv-HP2:~/droits$ ls animaux fichier1.txt vegetaux2 rv@rv-HP2:~/droits$ rm -r animaux rv@rv-HP2:~/droits$ ls fichier1.txt vegetaux2

Dernière chose : comment supprimer l'intégralité des fichiers contenus dans un répertoire en ne touchant pas aux sous-répertoires ?

12° Tester ceci et vérifier avec une commande ls que les fichiers contenus dans droits ont bien disparus.

rv@rv-HP2:~/droits$ rm *

Et si vous voulez supprimer également les répertoires contenus dans un répertoire ?

13° Tester ceci et vérifier avec une commande ls que tout le contenu de droits a bien disparu (mais pas le répertoire lui-même).

rv@rv-HP2:~/droits$ rm -r *
Pour la fin

Commande rmdir : sachez qu'il existe aussi une commande nommée rmdir qui permet de supprimer un répertoire uniquement s'il est vide. Cela évite les problèmes et oblige à être certain qu'il ne reste rien qu'on voudrait au final bien garder dans ce répertoire.

Poubelle ? ? non. Aucun poubelle par défaut sur les systèmes de ce genre. Il faut donc vraiment faire attention à ce qu'on détruit. Si vraiment vous n'êtes pas certain de vouloir faire disparaitre quelque chose, il faut mieux le placer dans un dossier dédié à récupérer les fichiers supposés supprimables. Cela vous laissera le temps de réflechir...

7 - Puissance du Shell

Vu comme ça, on peut avoir du mal à se demander pourquoi les informaticiens continuent à utiliser des interfaces de type Bah qui émulent l'accès au Shell.

Ce qui suit n'est absolument pas à savoir. Il s'agit juste de vous montrer que vous n'avez fait que découvrir les opérations basiques de ce qu'il est possible de faire avec le Bash.

Voici un premier exemple : on veut créer dans dans le répertoire droits 5 fichiers textes qu'on nommera ls_avec_a.txt, ls_avec_b.txt, ls_avec_c.txt, ls_avec_da.txt et ls_avec_e.txt.

Chacun de ces fichiers sera créé les uns après les autres.

Nous voulons que ces fichiers contiennent la description précise du répertoire droits au moment de la création du fichier.

On remarquera qu'on tape ceci avec un terminal pointant sur droits.

14° Tester ceci :

rv@rv-HP2:~/droits$ for x in a b c d e > do > ls -l | cat > avec_$x.txt > done

Après cette exécution, on peut alors lire le contenu du répertoire :

rv@rv-HP2:~/droits$ ls avec_a.txt avec_b.txt avec_c.txt avec_d.txt avec_e.txt rv@rv-HP2:~/droits$ cat avec_a.txt total 0 -rw-r--r-- 1 rv rv 0 avril 3 19:38 avec_a.txt rv@rv-HP2:~/droits$ cat avec_b.txt total 4 -rw-r--r-- 1 rv rv 55 avril 3 19:38 avec_a.txt -rw-r--r-- 1 rv rv 0 avril 3 19:38 avec_b.txt rv@rv-HP2:~/droits$ cat avec_c.txt total 8 -rw-r--r-- 1 rv rv 55 avril 3 19:38 avec_a.txt -rw-r--r-- 1 rv rv 104 avril 3 19:38 avec_b.txt -rw-r--r-- 1 rv rv 0 avril 3 19:38 avec_c.txt ect ect ..

Nous verrons la signification des caractères -rw-r--r-- la prochaine fois.

L'explication de ce code se trouve dans la FAQ.

Enfin, on peut faire des scripts Bash ou même lancer directement des codes Python ou C avec une commande textuelle. Nous verrons cela également avec la dernière activité, car il faut parfois savoir gérer les droits d'exécuter. Vous avez vu aujourd'hui qu'avec Linux, vous n'avez pas le droit de déplacer ou de supprimer n'importe quoi. Et bien, on peut également contrôler l'exécution des programmes.

Dernière chose que je présente ici : les scripts Shell. Pour l'instant, on travaille en commandes instantannées comme dans le Shell de Python. Mais on peut, comme avec Python, stocker des programmes qu'on peut alors exécuter autant de fois qu'on veut. Et on les nomme des scripts Shell.

Voici un exemple de script Shell : en lançant le script, il va pouvoir juste créer deux répertoires documents et programmes.

Voici comment créer un tel script.

Pas d'extension obligatoire avec Linux. L'information donnée par l'extension n'est bien ici qu'une indication : aucune certitude.

Les scripts Shell ont souvent l'extension sh.

15° Utiliser le code suivant qui vous permettra de créer ce script :

rv@rv-HP2:~/droits$ cd ~/droits rv@rv-HP2:~/droits$ cat > premier_script.sh rv@rv-HP2:~/droits$ mkdir documents rv@rv-HP2:~/droits$ mkdir programmes ^C

Pour voir le contenu de notre script :

rv@rv-HP2:~/droits$ cat premier_script.sh mkdir documents mkdir programmes

Pour l'instant, le script n'a pas été lancé. Il s'agit d'un simple fichier texte en réalité. Pour l'utiliser, il faut l'envoyer vers le bon interpréteur.

Le programme bash est un interpréteur assez courant pour les scripts Shell.

Pour lancer un script shell, ça donne quelque chose comme ça :

rv@rv-HP2:~/droits$ bash chemin_de_mon_script

Pour lancer un script Python 3, ça donne quelque chose comme ça :

rv@rv-HP2:~/droits$ python3 chemin_de_mon_script

16° Vérifier avec  ls  que le répertoire ne possède pas encore les répertoires voulus. Utiliser la commande suivante pour lancer le scipt :

rv@rv-HP2:~/droits$ bash premier_script.sh

Vérifier avec un second  ls  que les répertoires existent à présent.

On peut même lancer directement l'exécution d'un fichier. Comme avec Windows lorsqu'on double clique dessus. Sauf qu'ici l'extension n'est pas obligatoire mais juste informative. Alors, comment le système peut-il savoir quel programme utiliser pour interpréter le contenu d'un fichier ?

Et bien, on le signale sur la première ligne du fichier. On nomme cette ligne le SHEBANG. Elle contient un dièse # suivi du chemin permettant de localiser le programme interpréteur voulu.

17° Utiliser le code suivant qui vous permettra de créer un script qui affiche juste "Cool un script !" dans le terminal :

rv@rv-HP2:~/droits$ cd ~/droits rv@rv-HP2:~/droits$ cat > second_script.sh rv@rv-HP2:~/droits$ #!/usr/bin/env bash rv@rv-HP2:~/droits$ echo Cool, un script ! ^C

18° Utiliser la commande suivante pour lancer le scipt :

rv@rv-HP2:~/droits$ bash second_script.sh

Et pour lancer automatiquement le script ?

19° Tenter ceci :

rv@rv-HP2:~/droits$ second_script.sh second_script.sh : commande introuvable

Et oui : Linux cherche dans quelques dossiers les commandes. Or, votre script n'apparaît pas dans l'un des ces répertoires puisqu'il est dans un répertoire de votre répertoire personnel (et pas dans /bin ou autre).

Pour voir les répertoires que surveille votre système :

rv@rv-HP2:~/droits$ echo $PATH /home/rv/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/texlive/2019/bin/x86_64-linux:/snap/bin

On obtient la liste des répertoires avec  :  comme caractère de séparation. Les répertoires surveillés sont donc :

/home/rv/.local/bin /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /usr/games /usr/local/games /usr/local/texlive/2019/bin/x86_64-linux /snap/bin

Du coup, trois solutions :

  • Soit on place notre script dans un des répertoires ci-dessus
  • Soit on rajoute dans PATH le chemin de notre répertoire personnel
  • Soit on indique clairement et gentiment l'adresse du script à Linux : c'est ce que nous allons faire.

Comment ? En utilisant le raccourci que nous avons vu aujourd'hui  . .

20° Tenter ceci :

rv@rv-HP2:~/droits$ ./second_script.sh bash: ./second_script.sh: Permission non accordée

Malédiction : cette fois, il trouve le script mais refuse de le lancer. Encore des autorisations non accordées. Il va vraiment falloir faire la dernière activité pour comprendre comment régler cette situation. C'est pénible, mais c'est le prix de la sécurité.

Avant de regarder précisement comment ça marche voilà ce qu'il faut taper pour permettre à l'utilisateur-propriétaire d'un fichier d'exécuter directement ses scripts :

rv@rv-HP2:~/droits$ chmod u+x second_script.sh rv@rv-HP2:~/droits$ ./second_script.sh Cool, un script !

8 - Bilan

Récapitulatif des notions et commandes

Les notions abordées :

Notion Explication
Racine  /  La racine est le point de départ de l'arborescence.
Adresse absolue Il s'agit d'une adresse dont le point de départ est la racine.
L'adresse commence donc par  / .
Utilisateur root Le super-administrateur de la machine. Il a tous les droits sur la machine. Son répertoire personnel est situé à l'adresse absolue /root.
Répertoire personnel d'un utilisateur Il s'agit du répertoire qui appartient à un utilisateur. Il est situé à l'adresse absolue /home/NOM_UTILISATEUR. Il peut être adressé plus facilement en utilisant le raccourci Tilde  ~ .
Adresse relative Une adresse qui prend comme point de départ le répertoire courant, le répertoire sur lequel pointe actuellement le terminal.
Répertoire parent  ..  Il s'agit du répertoire "contenant" le répertoire courant. Par définition, seule la racine ne possède pas de parent.
Répertoire courant  .  new Il s'agit du répertoire en cours. Il sert de référence pour les adresses relatives.

Les commandes à connaître :

Commande Explication
ls Liste le contenu du répertoire dont l'adresse (relative ou absolue) est fournie juste après.
ls www : liste le contenu d'un répertoire www contenu dans le répertoire courant.
ls /home/utilisateur/www : idem mais avec une adresse absolue.
Si on ne fournit rien(ls), il s'agira du répertoire courant.
Quelques options :
ls -a pour afficher les objets cachés (ceux qui commencent par un point)
ls -l pour afficher des informations plus longues
cd Change directory : permet de changer de repertoire.
cd ~ permet d'atteindre son propre répertoire.
cd / permet d'atteindre la racine.
cd .. permet de remonter d'un cran dans l'arborescence.
cat Permet de concaténer une entrée vers une sortie.
La forme générale pour écraser l'ancien contenu est cat entree > sortie
La forme générale pour rajouter du contenu est cat entree >> sortie
Si on omet l'entrée, il s'agit par défaut du terminal.
Si on omet la sortie, il s'agit par défaut du terminal.
mkdir new Permet de créer un nouveau répertoire à l'adresse qu'on fournit juste derrière.
Exemple mkdir nouveau.
mv new Permet de déplacer d'une orgine vers une destination, un fichier ou un répertoire.
La forme générale est mv origine destination. Exemple mv fichier1 /home/moi/ici. Le fichier garde alors son nom et se retrouve dans le répertoire ici.
On peut changer le nom si on le fournit directement dans la destination. Exemple mv fichier1 /home/moi/ici/nouveau.txt. Le fichier change alors son nom (nouveau.txt) et se retrouve dans le répertoire ici.
cp new Permet de copier d'une orgine vers une destination.
La forme générale est cp origine destination. Exemple cp fichier1 /home/moi/ici.
On peut changer le nom si on le fournit directement dans la destination. Exemple cp fichier1 /home/moi/ici/nouveau.txt.
cp -r new Permet de copier un répertoire entier, d'une orgine vers une destination.
La forme générale est cp -r origine destination. Exemple cp -r www admin pour copier www en admin.
rm new Permet de supprimer des fichiers dont on fournit l'adresse.
La forme générale est rm adresse_du_fichier. Exemple rm fichier1.txt.
rm -r new Permet de supprimer un répertoire dont on fournit l'adresse, ainsi que son contenu.
La forme générale est rm -r adresse_du_repertoire. Exemple rm -r www.
rmdir new Permet de supprimer un répertoire vide.
La forme générale est rmdir adresse_du_repertoire. Exemple rmdir www.

Les commandes qui ne sont pas à connaître mais que nous avons vu :

Commande Explication
which Permet d'obtenir l'adresse absolue du fichier qui est reconnu comme étant l'exécutable d'une commande. Exemple which python3
type Permet d'obtenir le type d'une commande (interne ou externe au Shell-Noyau)
whoami Permet de récupérer le nom de l'utilisateur du terminal
pwd Print working directory, permet de récupérer le répertoire sur lequel pointe actuellement le terminal.

9 - Commandes Windows

Pour que vous puissiez voir un peu comment marche votre console si vous êtes chez Microsoft avec Windows, voilà quelques commandes équivalentes. Sur MacOS, vous devriez pouvoir utiliser la majorité des commandes présentées pour Linux, puisque MacOS est basé également sur UNIX.

Voici un tableau d'équivalence approximative. Toutes les commandes Linux ne sont pas disponibles avec Windows.

Linux Windows
Racine  /  Racine  C:\ .
cd (change directory) cd aussi.
ls (list) dir
cat (concaténation) edit ou editln pour le créer, type pour lire le contenu d'un fichier texte.
fichier document
répertoire dossier
mkdir (créer un répertoire) mkdir
rmdir (supprimer un répertoire) rmdir
rm (supprimer) del

10 - FAQ

Un peu d'explication sur ces lignes de code Shell ?

rv@rv-HP2:~/droits$ for x in a b c d e > do > ls -l | cat > avec_$x.txt > done
rv@rv-HP2:~/droits$ for x in a b c d e

Attention, ce n'est pas une boucle numérique mais plutôt une boucle "nominative". La variable x vaut d'abord a au premier tour de boucle, puis b, puis c ...

> do

On indique qu'on commence à donner les instructions de la boucle FOR.

> ls -l | cat > avec_$x.txt

On liste le contenu du répertoire avec beaucoup de détails (-l).

> ls -l | cat > avec_$x.txt

La présence de  |  indique un tunnel : on envoie la réponse de notre ls vers cat.

> ls -l | cat > avec_$x.txt

On concatène le résultat du ls dans le fichier avec_$x.txt.

Que vaut $x ? Le $ est un caractère d'échappement : il permet d'indiquer qu'on veut afficher le contenu de la variable w et pas un caractère x.

Nous allons donc d'abord envoyer le résultat vers avec_a.txt, puis avec_b.txt ...

> done

On indique qu'on a fini de donner les instructions de la boucle FOR.

Il nous reste maintenant à voir comment parvenir à régler les autorisations sur les droits et les dossiers. On parle des droits.

Activité publiée le 14 06 2020
Dernière modification : 14 06 2020
Auteur : ows. h.