Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
doc:programmation:shell:illustration-navigation-shell [28/01/2014 16:36] Hypathie [Chemin relatif ou absolu illustrés par quelques commandes] |
doc:programmation:shell:illustration-navigation-shell [03/07/2014 00:06] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Chemin relatif ou absolu illustrés par quelques commandes ====== | ||
- | |||
- | * Objet : Exercices sur les chemins relatif ou absolu | ||
- | * Niveau requis : {{tag>débutants}} | ||
- | * Commentaires : //les bases du bash, rappels et exercices // | ||
- | * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | ||
- | * Suivi : {{tag>en-chantier}} - Pour choisir, voir les autres Tags possibles dans [[:atelier:#tags|l'Atelier]]. | ||
- | * Création par **Hypathie** 24/01/2014 | ||
- | * Testé par <...> le <...> FIXME | ||
- | * Commentaires sur le forum : [[http://forum.debian-facile.org/viewtopic.php?id=8313| Lien vers le forum concernant ce tutoial]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) | ||
- | |||
- | === Nota === | ||
- | |||
- | Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! | ||
- | |||
- | ===== Introduction ===== | ||
- | |||
- | ====Objectifs ==== | ||
- | |||
- | S'exercer sur quelques commandes en vue d'assimiler les notions de **chemin relatif** et de **chemin absolu**.\\ | ||
- | Ou se servir de différentes expressions syntaxiques pour écrire des commandes équivalentes. | ||
- | ==== À voir :==== | ||
- | |||
- | sur le shell : [[doc:programmation:shell:shell]] | ||
- | |||
- | sur répertoires et chemins : [[doc:programmation:shell:repertoires#chemin-relatif|chemins relatif]] | ||
- | |||
- | sur chemin relatif et absolu : [[doc:programmation:shell:repertoires]] | ||
- | |||
- | sur système droits:fichiers : [[doc:systeme:droits-unix-bis?&#modification-des-droits]] | ||
- | |||
- | sur la commande cd : [[doc:programmation:shell:cd| doc:programmation shell:cd]] | ||
- | |||
- | sur système:commandes:gnu : [[doc:systeme:commandes:gnu_linux]] | ||
- | |||
- | ==== À savoir :==== | ||
- | |||
- | * **Le répertoire courant** est le répertoire dans lequel on se trouve. \\ | ||
- | Attention à la confusion entraînée par l'utilisation de l'expression "son home", préférerez plutôt "**son répertoire personnel**". \\ | ||
- | A l'ouverture d'une session de terminal, le répertoire courant est notre répertoire personnel, \\ | ||
- | comme nous l'indique le prompt de l'utilisateur ''toto'' ci-dessous: | ||
- | <code=user> toto@debian:~$ </code> | ||
- | |||
- | Mais ici : | ||
- | <code=user> toto@debian:~/Documents$ </code> | ||
- | le prompt indique que le répertoire courant est le fichier de type répertoire "Documents" situé dans le répertoire personnel de l'utilisateur "toto" : | ||
- | |||
- | **Ainsi par exemple :** | ||
- | |||
- | => Après l'ouverture du terminal entrez la commande **ls** puis validez votre commande en tapant sur la touche "entrée" : vous obtiendrez la liste des fichiers contenus dans votre répertoire personnel. | ||
- | |||
- | Puis en entrant: cd "Documents" (sans les guillemets sur Documents) et en validant votre saisie par la touche "entrée", le **répertoire courant** sera alors le répertoire "Documents". | ||
- | |||
- | |||
- | |||
- | * **Le tilde : ~/** est une variable de l'interpréteur de commande **bas** qui sera interprété, s'il n'est pas entouré de guillemets ou d'apostrophes, comme le répertoire personnel de l'utilisateur qui a lancé la commande. Ainsi, par exemple, l'utilisateur ''toto'' pourra utiliser le caractère tilde dans une ligne de commande en remplacement du chemin absolu de son répertoire personnel : **/home/toto** | ||
- | |||
- | Il permet donc d'écrire dans les commandes le chemin relatif à son répertoire personnel d'un fichier de type-répertoire ou d'un fichier-ordinaire ((Cette distinction parce que sous Linux tout est "fichier", mais en pratique, on peut dire fichier de type-répertoire pour désigner les fichiers qui peuvent contenir d'autres fichiers ; tandis que fichier-ordinaire renvoie aux fichiers dans lesquels on peut écrire du texte, par exemple. | ||
- | Pour une explication très approfondie de cette différence, voir [[http://www.linux-france.org/article/dalox/unix02.htm]] | ||
- | |||
- | Et bien sûr en tapant "fichier" dans la fenêtre rechercher de la documentation de **Debian-Facile** vous aurez une idée sur les différentes sortes de texte que l'on peut inscrire sur un fichier. )) | ||
- | |||
- | L'utilisateur ''toto'' peut ainsi écrire : | ||
- | |||
- | en utilisant un chemin absolu (pour un utilisateur "toto") | ||
- | <code=user> cd /home/toto/Documents</code> | ||
- | ou | ||
- | <code=user> cd ~/Documents </code> | ||
- | |||
- | <code user>~$ echo ~ | ||
- | /home/toto</code> | ||
- | (//Pour aller plus loin, voir// [[doc:programmation:shell:tilde]]) | ||
- | |||
- | ====Autres précisions :==== | ||
- | |||
- | **1) Le point "."** représente le répertoire courant (où l'on se trouve). \\ | ||
- | Et deux points "**..**" indiquent le répertoire parent de celui dans lequel on se trouve. | ||
- | |||
- | **2) Le slash "/"** représente la racine mais il sert aussi à séparer les composants d'un nom de fichier (comme dans /home/toto/Documents/fiche-anglais)((C'est donc un caractère qu'il est interdit d'utiliser dans les noms de fichiers de tout type (normaux, répertoires, de périphériques.)) | ||
- | |||
- | **Ainsi par exemple:** | ||
- | |||
- | **cd ..** : permet de retourner dans le répertoire parent du répertoire courant ou actuel (depuis le répertoire "Documents" par exemple **les deux points** signifient remonte au répertoire parent du répertoire "Documents") | ||
- | |||
- | **cd .** : permet de rester dans le répertoire courant ( **le point** indiquera le répertoire où l'on se trouve) | ||
- | |||
- | **cd ** et ** cd ~ ** : permettent de retourner dans son répertoire personnel, depuis n'importe quel répertoire. | ||
- | ( le tilde ''~'' étant interprété comme le chemin du répertoire personnel de l'utilisateur). | ||
- | |||
- | **cd /** : permet d'aller à la racine du système de fichier. | ||
- | |||
- | |||
- | ===== Énoncé des questions ci-dessous ===== | ||
- | ====Soit le répertoire personnel d'un utilisateur "toto" (également appelé "home" de "toto")==== | ||
- | |||
- | le prompt à l'ouverture du terminal est alors : | ||
- | <code=user> toto@debian:~$ </code> | ||
- | <code=user> toto@debian:~$ pwd </code> | ||
- | |||
- | <file txt retour de la commande pwd>/home/toto </file> | ||
- | |||
- | <note> vocabulaire : Ce n'est pas le prompt qui répond, il ne sert que d'indicateur. C'est le programme de la commande qui retourne le texte affiché.\\ | ||
- | => **Entrainez-vous en entrant pwd, après avoir rentré chacune les trois utilisations de cd indiquées ci-dessus. Puis en les entrant après avoir avancé jusqu'où vous le souhaitez dans l'arborescence des fichiers !** | ||
- | </note> | ||
- | |||
- | |||
- | ====Soit la création dans ce répertoire personnel d'un fichier de type répertoire nommé essai1==== | ||
- | <code=user> mkdir essai1</code> | ||
- | |||
- | ==== Soit la création d'un autre fichier de type répertoire nommé « essai2 » ==== | ||
- | après les commandes suivantes : | ||
- | |||
- | __1) pour avancer dans l'arborescence et créer « essai2 » dans « essai1 »__ | ||
- | <code=user>cd essai1</code> | ||
- | |||
- | <note>À remarquer : le prompt est alors\\ | ||
- | toto@debian:~/essai1$ []</note> | ||
- | |||
- | après **pwd** le lieu indiqué est bien : | ||
- | |||
- | <file txt retour de la commande>/home/toto/essai1</file> | ||
- | |||
- | __2) Pour créer un fichier de type répertoire « essai2 » depuis son répertoire parent ("essai1")__ | ||
- | |||
- | Entrez alors : | ||
- | <code=user> mkdir essai2</code> | ||
- | <note> Depuis "essai1" on aurait pu créer "essai2" en faisant\\ | ||
- | <code user> cd /home/toto/essai1/essai2</code> | ||
- | </note> | ||
- | |||
- | __3) Pour créer le fichier normal "lili" dans le fichier de type répertoire "essai2"__\\ | ||
- | (reconnu aussi sous l'écriture "/home/toto/essai1/essai2" ou "~/essai1/essai2") | ||
- | Utilisons la commande **echo** pour y inscrire le mot « bonjour » comme ceci : | ||
- | |||
- | depuis le répertoire parent « essai1 » du fichier "lili" on peut faire : | ||
- | <code=user>cd essai2/</code> | ||
- | |||
- | depuis le répertoire parent « essai1 » du fichier "lili" on aurait pu faire aussi : | ||
- | <code=user>cd /home/toto/essai1/essai2/</code> | ||
- | |||
- | <note>Remarquez le changement du prompt qui indique le répertoire actuel comme étant "essai2"\\ | ||
- | toto@debian:~/essai1/essai2$ [] </note> | ||
- | |||
- | Pour créer le fichier ordinaire "lili", dans le répertoire "essai2" :\\ | ||
- | <note> utilisez la commande echo selon la syntaxe suivante\\ | ||
- | (avec ou sans les guillemets sur le mot "bonjour") : \\ | ||
- | <code> echo "texte à écrire dans un fichier" > /chemin-absolu-du-fichier-à-créer/nom-du-fichier-créé</code> | ||
- | </note> | ||
- | |||
- | <code>echo bonjour > lili</code> | ||
- | |||
- | Ou encore | ||
- | <code user> echo bonjour > /home/hypathie/essai1/essai2/lili</code> | ||
- | |||
- | __4) Retour au niveau dans son répertoire personnel en faisant :__ | ||
- | |||
- | <code=user>cd ~ </code> | ||
- | |||
- | ====À la place de ce long énoncé==== | ||
- | |||
- | On aurait pu créer en une seule commande les deux répertoires "essai1" et "essai2" ainsi | ||
- | <code=user>mkdir -p /home/toto/essai1/essai2</code> | ||
- | |||
- | puis pour créer le fichier ordinaire "lili" | ||
- | |||
- | <code=user> echo "bonjour" > /home/toto/essai1/essai2/lili</code> | ||
- | |||
- | |||
- | ===== Questions sur cette base : ===== | ||
- | |||
- | //Afin d'assimiler les notions de chemin relatif et absolu, je vous propose d'essayer de répondre de vous-mêmes aux questions avant d'aller regarder la réponse.// | ||
- | |||
- | ====1) Reformulez l'énoncé au moyen du chemin relatif==== | ||
- | |||
- | En faisant : | ||
- | |||
- | <code=user>mkdir -p ~/essai1/essai2</code> | ||
- | |||
- | puis | ||
- | |||
- | <code=user>echo "Bonjour" > ~/essai1/essai2/lili</code> | ||
- | |||
- | ====2) Comment aller directement (sans une succession de cd, puis de cd ..) de son répertoire personnel à "lili", puis retourner du répertoire contenant "lili" à son répertoire personnel ?==== | ||
- | |||
- | __a) si on connaît où est "lili" : utiliser l'autocomplétion (touche tabulation) :__ | ||
- | |||
- | <code=user>cd essai1/essai2/</code> | ||
- | |||
- | <note> le prompt est maintenant: | ||
- | toto@debian:~/essai1/essai2$ []</note> | ||
- | |||
- | |||
- | __b) on a malheureusement oublié dans quel répertoire est rangé "lili" :__ | ||
- | |||
- | *** __astuce pour que soit indiqué le chemin absolu d'un fichier:__** | ||
- | |||
- | <note>depuis n'importe où (car le programme "locate" n'utilise pas, pour ses recherches, l'arborescence du système de fichiers, | ||
- | mais une base de données, mise à jour régulièrement par le programme "updatedb") : | ||
- | |||
- | <code root> updatedb && locate lili</code> | ||
- | |||
- | <file txt retour de la commande>/home/toto/essai1/essai2/lili</file> | ||
- | </note> | ||
- | |||
- | |||
- | **Puis du répertoire contenant "lili" à mon répertoire personnel ?** | ||
- | <code=user> | ||
- | toto@debian:~$ cd essai1/essai2/ | ||
- | toto@debian:~/essai1/essai2$ cd ~ </code> | ||
- | |||
- | ==== 3) Corriger la faute d'orthographe sur "bonjour" en écrasant "lili", depuis son home ? ==== | ||
- | Pour ce faire utiliser la commande echo. | ||
- | |||
- | <note> On est au niveau de son répertoire personnel\\ | ||
- | le prompt est \\ | ||
- | toto@debian:~$ []</note> | ||
- | |||
- | <code=user> | ||
- | echo Bonjour > ~/essai1/essai2/lili | ||
- | </code> | ||
- | |||
- | ==== 4) Trouvez deux façons d'écrire le chemin relatif de la commande ci-dessus ? ==== | ||
- | <code=> | ||
- | cd /home/toto/essaie1/essai2 | ||
- | </code> | ||
- | |||
- | => | ||
- | <code=> | ||
- | cd ~/essaie1/essai2 | ||
- | </code> | ||
- | |||
- | <code> | ||
- | ./essaie1/essai2 | ||
- | </code> | ||
- | |||
- | ===== Écritures équivalentes d'une commande ===== | ||
- | ==== 1) Pour aller du home à la racine avec cd puis avec l'usage des points ?==== | ||
- | |||
- | <code=user>cd /</code> | ||
- | puis | ||
- | <code=user>pwd</code> | ||
- | <file txt retour de cette commande>/</file> | ||
- | |||
- | <note> Et le prompt ! \\ | ||
- | toto@debian:/$ []</note> | ||
- | |||
- | ou encore | ||
- | <code=user>cd ../..</code> | ||
- | <code=user>pwd</code> | ||
- | <file txt retour de cette commande>/</file> | ||
- | |||
- | ==== 2) Retourner dans son home depuis la racine à l'aide du tilde ? ==== | ||
- | |||
- | <code=user>cd ~</code> | ||
- | |||
- | ou | ||
- | <code=user>cd ~</code> | ||
- | |||
- | <note>le prompt ! \\ | ||
- | toto@debian:~$ []</note> | ||
- | |||
- | ==== 3) Utiliser le point avec une autre commande que cd :==== | ||
- | |||
- | ** Depuis son home : copier de trois façons différentes "lili" dans le fichier de type répertoires nommé « essai1 » ? ** | ||
- | |||
- | **en absolu :** | ||
- | |||
- | <code=user> | ||
- | cp /home/toto/essai1/essai2/lili /home/toto/essai1/lili | ||
- | </code> | ||
- | |||
- | **en relatif (depuis n'importe où) : ** | ||
- | |||
- | <code=user> | ||
- | cp ~/essai1/essai2/lili ~/essai1/lili | ||
- | </code> | ||
- | |||
- | **en relatif (depuis son répertoire personnel) : ** | ||
- | |||
- | <code=user> | ||
- | cp ./essai1/essai2/lili ./essai1/lili | ||
- | </code> | ||
- | |||
- | |||