Pourquoi utilisons-nous ./filename
pour exécuter un fichier sous Linux?
Pourquoi ne pas simplement entrer comme d'autres commandes gcc
, ls
etc ...
command-line
executable
Renjith G
la source
la source
./command_name
pour exécuter une commande sous Linux?"Réponses:
Sous Linux, UNIX et les systèmes d'exploitation associés,
.
désigne le répertoire actuel. Puisque vous voulez exécuter un fichier dans votre répertoire actuel et que ce répertoire ne se trouve pas dans votre$PATH
, vous avez besoin du./
bit pour indiquer au shell où se trouve l'exécutable. Donc,./foo
signifie exécuter le fichier exécutable appeléfoo
qui se trouve dans ce répertoire.Vous pouvez utiliser
type
ouwhich
pour obtenir le chemin complet de toutes les commandes trouvées dans votre$PATH
.la source
alias
es qui peuvent gêner, pas seulement$PATH
..
premier, il s'agirait d'un problème de sécurité. Vous ou une autre personne pourriezls
par exemple le remplacer (un simple virus / trojen: créez un fichier zip avec un exécutable nomméls
, pendant que quelqu'un effectue une recherche. , ils exécutent cet exécutable, ça…). Si la recherche a été effectuée en.
dernier, vous pouvez passer beaucoup de temps à devenir fou en ne sachant pas pourquoi votre programme ne fonctionne pas (par exemple, vous créez un programme appelé test, au lieu d'exécuter votre programme, il exécute le programme de test du système. Ce qui ne produit aucun résultat).export PATH="$PATH:."
pour exécuter une commande dans le répertoire en cours s’il n’est pas trouvé ailleurs dans PATH, vous pouvez l’ajouter dans votre fichier .bashrcLa réponse littérale est la même que celle donnée par d’autres: parce que le répertoire actuel n’est pas dans votre
$PATH
.Mais pourquoi En bref, c'est pour la sécurité. Si vous cherchez dans le répertoire personnel de quelqu'un (ou / tmp), et tapez juste
gcc
ouls
, vous voulez savoir que vous utilisez le vrai, pas une version malicieuse que votre ami farceur a écrite et qui efface tous vos fichiers. Un autre exemple seraittest
ou[
, qui pourrait remplacer ces commandes dans des scripts de shell, si votre shell n'en contient pas.Avoir
.
comme dernière entrée sur votre chemin est un peu plus sûr, mais il y a d'autres attaques qui l'utilisent. Une solution simple consiste à exploiter les fautes de frappe courantes, commesl
ouls-l
. Vous pouvez également rechercher une commande commune qui n'est pas installée sur ce systèmevim
, par exemple, car les administrateurs système ont une probabilité supérieure à la moyenne de la taper.la source
PATH
variable d'environnement.Si vous voulez dire, pourquoi avez-vous besoin de ./ au début - c'est parce que (contrairement à Windows), le répertoire actuel ne fait pas partie de votre chemin par défaut. Si vous courez:
votre shell cherche
ls
dans les répertoires de votre variable d'environnement PATH (echo $PATH
pour la voir) et exécute le premier exécutable appeléls
qu'il trouve. Si vous tapez:le shell fera de même - mais il ne trouvera probablement pas d’exécutable appelé a.out. Vous devez dire au shell où se trouve a.out - si c'est dans le répertoire en cours (.) Puis le chemin est
./a.out
.Si vous demandez pourquoi il s'appelle "a.out", c'est simplement le nom du fichier de sortie par défaut pour gcc. Vous pouvez le changer avec l'argument de ligne de commande -o. Par exemple:
la source
touch .a.out; ls -lA
de voir ça.)<dir>/<file>
vous dites donc essentiellement exécuter un fichier dans le répertoire actuel, ce qui est indiqué par./test
Vous pouvez essayer d’ajouter
:.
à votre variable $ PATH.Essayez ALT + F2 et tapez:
gksudo gedit /etc/environment
si vous utilisez Linux / GTK (c'est ce que vous avez si vous utilisez Ubuntu).Cependant, je vous déconseille vivement de le faire. C'est mauvais, mauvais, mauvais.
Vous savez, ce genre de choses fonctionne de la sorte depuis 1970. Il y a une raison pour laquelle le répertoire actuel n'est pas inclus dans le $ PATH.
.
est le répertoire courant.something
serait un fichier caché (tapez "ALT +" pour les faire apparaître dans Nautilus, ou essayez "ls -la
"../someProgram.sh
est ce que vous tapez pour exécuter un exécutable someProgram.sh dans le répertoire en cours..somethingElse
signifierait que vous avez un exécutable caché dans le répertoire en cours, ce qui est une mauvaise idée.la source