Aide gameshell

Bonjour,

Je suis en train d'apprendre les commandes avec gameshell, mais je n'arrive vraiment pas à faire ce niveau. Pouvez-vous m'expliquer, s'il vous plaît ?

2 réponses

  1. Bonjour il est drôle ce jeu.

    Ok donc ~ représente le répertoire qui est le tiens quand tu te connecte sur ton terminal celui ou tu à par exemple ton .bashrc mais tu ne le vois pas.

    Ca te dit de mettre les pièces dans ta hutte, ma question ou se trouve hutte dans arborescence des fichier et ou se trouve le dossier qui contiens piece ?

    Tu peut tester cette commande pour voir ou se trouve hutte, vu que c'est un jeu pas dit que ca fonctionne.

    find -name hutte

    1. Modérateur

      Bonjour,

      Merci de copier coller le contenu de ton terminal et de le partager avec un extrait de code (9ème bouton au dessus de la boîte dans laquelle tu écris ton message) plutôt que de partager une photo, peu pratique pour tout le monde.

      Pour répondre exactement à ton problème, il faudrait connaître comme l'indique iniuc le répertoire dans lequel sont les pièces et celui dans lequel tu veux les déplacer. La commande find peut effectivement t'y aider.

      À défaut de pouvoir répondre exactement à la question, je te donne ci-dessous des éléments qui devraient suffire à maîtriser les chemins en bash de manière générale.

      Quelques rappels préalables

      Les chemins

      Sous Linux, les chemins sont une séquence de dossier séparés par des /. Tous les dossiers sont organisés dans une même hiérarchie (pas de notion de lecteur comme sous Windows) appelée VFS (Virtual FileSystem). L'idée est que peut importe la provenance d'un fichier (partage réseau, disque local, qu'il s'agisse d'un disque dur, optique, ou autre), tout est organisé dans cette même arborescence.

      La racine de cette arborescence est notée /. Cet opérateur sert aussi de séparateur entre les noms de dossiers impliqués dans un même chemin. À cela s'ajoute d'autres opérateurs

      Opérateurs ~, ~login

      • L'opérateur ~toto désigne le home directory (dossier personnel) de l'utilisateur toto (typiquement /home/toto pour un utilisateur local à la machine). Exception notable : ~root n'est pas /home/root, mais /root. Il est spécifié dans /etc/passwd.
      • L'opérateur ~ est un raccourci de ~toto si tu es loggué en toto. La signification de ~ dépend donc de quel est l'utilisateur courant. Tu peux aussi récupérer le chemin de ce dossier avec la commande :
        echo $HOME
        La plupart du temps il est indiqué dans l'invite de commande (par exemple toto si ton invite de commande est toto@machine:~$) mais tu peux aussi le récupérer avec l'une de ces commandes : 
        whoami
        echo $USER

      Ces quelques commandes montrent qu'en shell, des variables d'environnement (ici USER, HOME) sont maintenues et peuvent être réutiliser dans des commandes. Ainsi, si ton dossier personnel est /home/toto, ces commandes sont équivalentes :

      ls /home/toto
      ls $HOME
      ls ~toto

      Si tu es loggué en toto, on peut ajouter à cette liste :

      ls /home/$USER
      ls ~
      ls /home/`whoami`   # Avec n'importe quel shell
      ls /home/$(whoami)  # Avec un shell bash

      Chemins absolus et relatifs

      Tous les chemins évoqués jusqu'à présent sont absolus, car une fois "résolus" ils commencent par /. Ils ne dépendant pas du dossier courant dans lequel le shell est positionné

      Tout autre chemin est dit relatif et dépend du dossier courant dans lequel est positionné ton shell. Pour rappel, le dossier courant peut s'afficher avec :

      echo $PWD
      pwd  # Comme "Print Working Directory, voir: man pwd"

      Opérateurs . et ..

      Le dossier courant est noté ".". Le dossier parent est noté "..".

      Donc par exemple, si ton dossier courant est /home, toutes ces commandes désignent /home/toto :

      ls toto
      ls ./toto
      ls ../home/toto

      Ces deux opérateurs peuvent aussi être impliqué au milieu d'un chemin. Dans ce cas, leur sens est relatif conformément à ce qui leur précède. Par exemple ../.. désigne parent du parent, donc le dossier grand parent.

      Ainsi le chemin ci-dessous, aussi tordu soit-il, désigne bien /home/toto :

      ls /home/toto/../../home/./toto

      Alternatives ({,}) et wildcards (*)

      Il est souvent pratique de désigner plusieurs fichiers d'un coup plutôt que les énumérer. C'est là que ces opérateurs entrent en jeu.

      Par exemple si tu veux déplacer /home/toto/piece1.txt, /home/toto/piece22.txt et /home/toto/piece333.txt dans /tmp tu peux écrire :

      mv /home/toto/piece1.txt /home/toto/piece22.txt /home/toto/piece333.txt.txt /tmp
      mv ~toto/piece1.txt ~toto/piece22.txt ~toto/piece333.txt.txt /tmp
      mv ~/piece1.txt ~/piece22.txt ~/piece333.txt.txt /tmp  # Si tu es loggué en toto
      
      mv /home/toto/piece_{1,22,333}.txt /tmp
      mv ~toto/piece_{1,22,333}.txt /tmp
      mv ~/piece_{1,22,333}.txt /tmp  # Si tu es loggué en toto
      
      # S'il n'y a que ces trois pieces
      mv /home/toto/piece*.txt /tmp
      mv ~toto/piece*.txt /tmp
      mv ~/piece*.txt /tmp  # Si tu es loggué en toto
      
      # S'il n'y a pas d'autres fichiers qui commence piece
      mv /home/toto/piece* /tmp
      mv ~toto/piece* /tmp
      mv ~/piece /tmp  # Si tu es loggué en toto

      Attention pour l'opérateur { ... } à ne pas mettre d'espace.

      Auto-complétion

      Pour ne pas se tromper dans les chemins sous Linux (et gagner beaucoup de temps), la touche tab (auto complétion) est notre meilleure amie.

      En effet, si tu tapes le début d'une commande ou d'un chemin, la touche tabulation (tab) permet de la compléter aussi loin que possible tant qu'il n'y a pas d'ambiguïté. Par exemple, si tu tapes /home/to (puis tab), cela se completera en /home/toto.

      En cas d'ambiguïté, si tu appuies une seconde fois sur tab, tu verras les candidats entre lesquels le shell hésite. Ajoute quelques caractères pour "débloquer" la situation.

      Pages de manuel (man)

      Sous Linux, toutes les commandes shell (même man) sont documentées et correspondent à la section 2. Donc par exemple pour voir ce que fait la commande ls et quelles sont ses options, tu peux lancer au choix :

      man ls
      man 2 ls

      (q pour quitter). Note que préciser la section de shell importe si un mot apparaît dans différentes section de man. Par exemple :

      man 2 passwd  # Documente la commande 'passwd'
      man 5 passwd  # Documente le fichier '/etc/passwd'

      Bonne chance