Forum Linux.débutant Shell - renseignement

Posté par .
Tags : aucun
3
30
sept.
2011

Bonjour,
Je me débrouille avec linux depuis quelques mois, tout se passe assez bien.
J'ai quand même une question con :(de culture ???)

en ligne de commande, dans un terminal : pourquoi doit-on écrire "./monprog" pour lancer le programme 'monprog' ? pourquoi ne puis-je pas écrire directement "monprog" sans le faire précéder de ./ ???

Ok, ok, c'est une question con... N'empêche, si vous pouvez m'expliquer, parce qu'il y a bien des progs ou des scripts qu'on peut exécuter sans taper ce ./ ...

merci par avance !

  • # $PATH

    Posté par . Évalué à 3.

    Le shell va chercher les programmes dans les répertoires listés dans $PATH, et seulement dans ceux-là. le répertoire ./, soit le répertoire courant, n'y est généralement pas ajouté. Tu peux le faire dans ton fichier d'initialisation ~/.bashrc (ou autre selon ton shell) en ajoutant la ligne :

    PATH=./:$PATH:

    L'autocomplètement ajoute alors les exécutables du répertoire courant. Je pense que ce n'est pas le défaut parce que du coup, ta ligne de commande a un comportement différent selon dans quel répertoire tu te trouves.

    Sous DOS, les exécutables étaient rangés dans des dizaines de répertoire (chaque programme ayant son répertoire d'installation). Dans les *nix, les répertoires avec exécutables sont en nombre limité et connu à l'avance (essentiellement /usr/bin et /usr/local/bin pour l'utilisateur normal, plus /sbin et /usr/sbin pour root). Comme tous les programmes y sont rassemblés, il n'est pas usuel d'avoir à exécuter des binaires placés dans des répertoires n'importe où, sauf quelques petits scripts maison. Personnellement j'ai rassemblé mes scripts dans un répertoire /home/jgo/bin/, que j'ai ajouté à $PATH, ils sont ainsi exécutables depuis n'importe quel répertoire.

    • [^] # Re: $PATH

      Posté par . Évalué à 9.

      _e shell va chercher les programmes dans les répertoires listés dans $PATH, et seulement dans ceux-là. le répertoire ./, soit le répertoire courant, n'y est généralement pas ajouté. Tu peux le faire dans ton fichier d'initialisation ~/.bashrc (ou autre selon ton shell) en ajoutant la ligne :

      PATH=./:$PATH:_

      Et c'est bien sur une des pires choses à faire, surtout en tant que root.

      Suppose que tu te trouves dans un répertoire toto et qu'un virus ou une personne malveillante ait mis un exécutable nommé ls par exemple (ou n'importe quelle commande couramment lancée en interactif et qui n'est pas intégrée au shell, et que ce ls contienne un rootkit ou une commande qui fasse un équivalent de rm -fr ~/* ou rm -fr /* : comme dans le path tu as . qui est en premier, c'est le premier répertoire qui va être scruté pour trouver la commande, et tu vas avoir des problèmes ....

      Donc, la moralité est de ne JAMAIS mettre "." dans le path.

      • [^] # Re: $PATH

        Posté par . Évalué à 1.

        Juste histoire de ne pas faire avancer le Schmilblick, pour éviter ce problème, il suffit de mettre le point à la fin du PATH ( PATH=$PATH:./ ) le shell s'arrêtant de chercher parmi les répertoires du PATH dès qu'il trouve une correspondance.
        Cependant, je suis d'accord, rajouter le répertoire courant au PATH est une mauvaise idée.

        Et puisque l'on parle de PATH, je ne peux m'empêcher de donner ce lien vers geekscotte : PATH le chemin

        • [^] # Re: $PATH

          Posté par . Évalué à 5.

          C'est en tout cas un truc qu'il faut absolument éviter en tant que root. Et en tant qu'utilisateur lambda aussi d'ailleurs : un truc tordu : tu mets une commande avec une faute de frappe ou inversion de caractères qui te fait un rm dans ton homedir : par exemple tpo au lieu de top. Il y a moins de probabilité qu'elle s'exécute mais ça reste dangereux.

    • [^] # Re: $PATH

      Posté par . Évalué à 1.

      Ok, j'ai compris.
      Merci pour cette réponse limpide !

      cdlt

      • [^] # Re: $PATH

        Posté par . Évalué à 9.

        J'insiste bien sur le point qu'ajouter « ./ » n'est pas une chose à faire. Les cas où tu auras besoin de lancer des exécutables depuis d'autres dépôts que les répertoires par défaut sont limités. Dans ces cas-là, c'est un bon garde-fou que de demander explicitement à les lancer, en utilisant ./ C'est également très répandu dans le monde Unix, donc autant ne pas prendre d'emblée de mauvaises habitudes, surtout si c'est simplement pour reproduire un comportement issu du monde DOS.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.