Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 13/01/2008, à 17:00

SiscoL

Pour lancer l'exécutable, pourquoi "./" est-il nécessaire ?

Bonjour à  tous et désolé par avance pour cette question de débutant.

J'explique le titre. Quand je compile test.c un programme C (basique comme affiche "Hello world") avec la commande :

 gcc -o test.exe test.c

j'obtiens bien sûr l'exécutable text.exe que je peux lancer par ces deux commandes :

/home/francois/Bureau/test.exe

./test.exe

à‰videmment la seconde ne fonctionne que si je suis dans le répertoire courant (à  savoir le Bureau).

Mais pourquoi est-ce que, quand je suis dans le répertoire courant, la simple commande :

test.exe

ne marche-t-elle pas ?

Je précise que
a) je sais bien que "./" signifie "répertoire courant". Je constate qu'en fait le système a besoin de l'adresse complète de l'exécutable car la commande text.exe ne lui est pas connue par avance.
b) Je sais bien que seules les commandes qui sont dans le PATH lui sont connues par avance.

Mais quand on est déjà  dans le répertoire courant, le système ne va-t-il pas d'abord chercher la commande dans le répertoire courant, même si elle n'est pas dans le PATH ?

Sinon, comment faire alors pou que Linux pense à  regarder dans le répertoire courant le nom d'une commande avant de dire qu'il ne la connaà®t pas sous prétexte qu'il ne la trouve pas dans le PATH ?

Ou alors : peut-on rajouter dans le PATH le répertoire courant et comment ?


J'espère être clair. Merci d'avance.

François


François

Hors ligne

#2 Le 13/01/2008, à 17:44

SiscoL

Re : Pour lancer l'exécutable, pourquoi "./" est-il nécessaire ?

Après quelques recherches, j'ai vu que sous linux le répertoire courant "./" ne faisait pas partie du PATH par défaut alors que c'est le cas sous Windows. Cette ergonomie est typique de Windows apparemment (là  d'o๠je viens bien sûr et dont j'essaye de me débarrasser) et n'existe pas sous linux par défaut pour des raison de sécurité semble-t-il.

Il est apparemment parfaitement possible de rajouter "./" dans le PATH.

Est-ce si dangereux que ça de le faire ?


François


François

Hors ligne

#3 Le 13/01/2008, à 18:18

abetsic

Re : Pour lancer l'exécutable, pourquoi "./" est-il nécessaire ?

Mettons que tu sois dans le répertoire /tmp o๠tout les utilisateurs ont le droit d'écriture et qu'un petit malin s'est amusé à  mettre un script avec les droits d'execution qui s'appelle "ls" qui fait plein de mauvaises choses.
Si tu tapes "ls" c'est le script qui sera executé si dans la définition de la variable d'environnement PATH "." se situe en premier. Sinon le petit malin appelle son script "sl" et attend une faute de frappe de l'utilisateur.

Voilà  pourquoi il est déconseillé de mettre . dans le PATH.

Hors ligne

#4 Le 13/01/2008, à 18:48

SiscoL

Re : Pour lancer l'exécutable, pourquoi "./" est-il nécessaire ?

Très bien. Merci beaucoup, je comprends parfaitement. J'ai alors deux questions :

1) Si effectivement le nom d'un exécutable (du répertoire courant) est identique à  une commande déjà  existante (ls par exemple). Comment fait le système pour choisir celle à  exécuter ? Il cherche dans le PATH, dans un certain ordre et il exécute la commande correspondant à  la première occurrence trouvée. Est-ce correct ?

2) Il s'avère que je suis le seul utilisateur de mon ordinateur et a priori c'est pas prêt de changer. Donc je souhaite modifier le PATH malgré tout. Quel fichier faut-il éditer ? D'après mes recherches, ce serait le fichier .profile de mon home. Il ressemble à  cela :

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile
#umask 022

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f ~/.bashrc ]; then
	. ~/.bashrc
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d ~/bin ] ; then
    PATH=~/bin:"${PATH}"
fi

Que dois-je modifier (et oà¹) pour ajouter par exemple le dossier /home/francois/toto/ dans le PATH et le répertoire courant "." ?

Merci d'avance.

François


François

Hors ligne

#5 Le 13/01/2008, à 18:54

Aurel34

Re : Pour lancer l'exécutable, pourquoi "./" est-il nécessaire ?

1) il lit le PATH dans l'ordre

2) /etc/environment

#6 Le 13/01/2008, à 19:03

Link31

Re : Pour lancer l'exécutable, pourquoi "./" est-il nécessaire ?

SiscoL a écrit :

Que dois-je modifier (et oà¹) pour ajouter par exemple le dossier /home/francois/toto/ dans le PATH et le répertoire courant "." ?

Rajoute

PATH=~/toto:"${PATH}"

à  la fin de ton fichier que tu viens de poster (~/.profile semble-t-il).

Le répertoire courant, ne l'ajoute pas. à‡a ne sert à  rien, et ça ouvre une faille de sécurité, donc ce n'est pas dans l'esprit d'UNIX.

Hors ligne

#7 Le 13/01/2008, à 19:05

SiscoL

Re : Pour lancer l'exécutable, pourquoi "./" est-il nécessaire ?

Tiens, effectivement, ce fichier /etc/environment doit marcher.
Pourtant, j'avais lu quelque part que c'était le fichier /home/francois/.profile qui fallait modifier. D'alleurs, dans mon .profile j'ai rajouté ceci :

PATH=.:"${PATH}"

à  la fin, ce qui donne le fichier .profile exactement comme ceci :

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile
#umask 022

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f ~/.bashrc ]; then
    . ~/.bashrc
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d ~/bin ] ; then
    PATH=~/bin:"${PATH}"
fi

PATH=.:"${PATH}"

et tout à  l'air de bien marcher comme ça :

Dites moi si je dis une bêtise.
En modifiant le .profile, la modification ne s'applique que pour l'utilisateur francois.
En modifiant environment, la modification s'applique pour tout les utilisateurs.

Est-ce correct ?


François


François

Hors ligne

#8 Le 13/01/2008, à 19:08

Aurel34

Re : Pour lancer l'exécutable, pourquoi "./" est-il nécessaire ?

oui

#9 Le 13/01/2008, à 19:11

SiscoL

Re : Pour lancer l'exécutable, pourquoi "./" est-il nécessaire ?

Je viens de voir ton message link31 seulement après avoir poster le mien. Pour la modification du PATH, je m'aperçois que j'ai fait exactement comme tu m'as dit (enfin je crois).

Pour, ton conseil de sécurité (ne pas mettre . dans le PATH), je vais le suivre. Après tout, taper ./truc.exe au lieu de truc.exe ce n'est pas la mort. Et puis, l'expérience m'a montré qu'il valait mieux écouter les gens qui s'y connaissent, un jour ou l'autre ça fait gagner beaucoup de temps.

Pour ceci :

Dites moi si je dis une bêtise.
En modifiant le .profile, la modification ne s'applique que pour l'utilisateur francois.
En modifiant environment, la modification s'applique pour tout les utilisateurs.

Vous confirmez ?


François


François

Hors ligne

#10 Le 13/01/2008, à 19:22

SiscoL

Re : Pour lancer l'exécutable, pourquoi "./" est-il nécessaire ?

Arggg ! Je ne suis pas synchrone avec les réponses.

Et bien du coup, je crois que pour moi le sujet est définitivement résolu ...

... à  moins bien sûr que vous aillez une précision à  apporter que je m'empresserai de lire bien sûr et sur laquelle je m'empresserai de rebondir peut-être.

En fait, mais ceci est facultatif, j'aurais bien aimé avoir des ou une bonne référence de livre sur l'administration de base Linux (ou l'on parle des commandes de base, du PATH, des droits, des processus, de ce qu'est un script bash [un petit peu] etc.). Un livre qui soit clair, pour débutant ou du moins qui parte de zéro et pas un truc qui soit un immonde copié/collé de docs internet comme ça arrive si souvent. Je m'aperçoit que je butte assez souvent sur des problèmes du genre et que je suis souvent obliger de demander de l'aide.


Merci beaucoup d'avoir consacré un peu de temps à  un débutant comme moi.



François


François

Hors ligne

#11 Le 13/01/2008, à 19:38

Link31

Re : Pour lancer l'exécutable, pourquoi "./" est-il nécessaire ?

SiscoL a écrit :

Pour ceci :

Dites moi si je dis une bêtise.
En modifiant le .profile, la modification ne s'applique que pour l'utilisateur francois.
En modifiant environment, la modification s'applique pour tout les utilisateurs.

Vous confirmez ?

Je confirme smile

Pour le livre que tu cherches, je n'ai lu que le livre du labo Linux de SUPINFO sur l'administration des systèmes Linux (chez Dunod), qui me semble couvrir à  peu près tous les aspects de ce que tu cherches. Mais je ne sais pas s'il convient pour débuter, n'étant moi-même pas vraiment débutant, difficile de m'en faire une idée.

Hors ligne

#12 Le 13/01/2008, à 21:09

abetsic

Re : Pour lancer l'exécutable, pourquoi "./" est-il nécessaire ?

Une petite chose que je voudrais rajouter, ce n'est pas parce que tu es le seul utilisateur de ton ordinateur que personne ne pourra jamais y mettre quelque chose dans /tmp, il suffit que il y ait une faille dans un des logiciels que tu utilisent qui permettent une connexion à distance et ça peut suffire pour glisser un executable dans /tmp.

Hors ligne

#13 Le 13/01/2008, à 21:22

SiscoL

Re : Pour lancer l'exécutable, pourquoi "./" est-il nécessaire ?

D'accord en effet.

Au départ, je me disais : "certes, mais après tout un logiciel pourrait très bien écrire dans /bin qui est dans le PATH et notre problème de sécurité reste entier".

Sauf que /bin est protégé par défaut en écriture et seul le root peut écrire dedans. /tmp lui n'est pas dans le PATH, mais j'ai l'impression que tout le monde peut écrire dessus. Donc il ne faut pas qu'il se retrouve dans le PATH d'une manière ou d'une autre (par exemple en ajoutant "." dans le PATH).

Est-ce correct ?

François


François

Hors ligne

#14 Le 13/01/2008, à 21:31

abetsic

Re : Pour lancer l'exécutable, pourquoi "./" est-il nécessaire ?

Exactement. smile

Hors ligne

#15 Le 13/01/2008, à 21:36

SiscoL

Re : Pour lancer l'exécutable, pourquoi "./" est-il nécessaire ?

OK, c'est parfait. J'ai appris des choses aujourd'hui.

Merci pour vos réponses à tous, si vous avez un bon livre à me proposer, n'hésitez pas ...


François


François

Hors ligne