Antworten:
Unter Linux bezeichnet UNIX und verwandte Betriebssysteme .
das aktuelle Verzeichnis. Da Sie eine Datei in Ihrem aktuellen Verzeichnis ausführen möchten und dieses Verzeichnis sich nicht in Ihrem befindet $PATH
, benötigen Sie das ./
Bit, um der Shell mitzuteilen, wo sich die ausführbare Datei befindet. Das ./foo
heißt, Sie führen die aufgerufene ausführbare Datei aus foo
, die sich in diesem Verzeichnis befindet.
Sie können type
oder verwenden which
, um den vollständigen Pfad aller Befehle in Ihrem abzurufen $PATH
.
alias
es, die im weg stehen können, nicht nur $PATH
.
.
es sich um ein Sicherheitsproblem, das Sie oder eine andere Person ls
beispielsweise ersetzen könnten (ein einfacher Virus / Trojaner: Erstellen Sie eine Zip-Datei mit einer darin genannten ausführbaren Datei , während eine andere ls
Person sucht , sie führen diese ausführbare Datei aus, die…). Wenn es zuletzt durchsucht wurde .
, können Sie lange Zeit verrückt werden, ohne zu wissen, warum Ihr Programm nicht funktioniert (z. B. erstellen Sie ein Programm mit dem Namen test, statt Ihr Programm auszuführen, wird das Systemtestprogramm ausgeführt. Dies erzeugt keine Ausgabe).
export PATH="$PATH:."
Befehl in der aktuellen Verzeichnis auszuführen , wenn nicht an anderer Stelle in PATH gefunden, können Sie dies in Ihrer .bashrc Datei hinzufügen können
Die wörtliche Antwort lautet wie von anderen angegeben: weil sich das aktuelle Verzeichnis nicht in Ihrem befindet $PATH
.
Aber warum? Kurz gesagt, es dient der Sicherheit. Wenn Sie im Home-Verzeichnis (oder / tmp) einer anderen Person suchen und nur gcc
oder eingeben, ls
möchten Sie wissen, dass Sie die echte Version ausführen, nicht eine bösartige Version, die Ihr Prankster-Freund geschrieben hat und die alle Ihre Dateien löscht. Ein anderes Beispiel wäre test
oder [
, das diese Befehle in Shell-Skripten überschreiben könnte, wenn Ihre Shell diese nicht als integrierte Befehle enthält.
Nachdem .
als letzte in Ihrem Pfad Eintrag ist ein wenig sicherer, aber es gibt auch andere Angriffe , die Verwendung davon machen. Eine einfache Möglichkeit besteht darin, gängige Tippfehler wie sl
oder auszunutzen ls-l
. Oder suchen Sie einen allgemeinen Befehl, der zufällig nicht auf diesem System installiert ist - vim
zum Beispiel, weil Sysadmins mit überdurchschnittlicher Wahrscheinlichkeit diesen Befehl eingeben.
PATH
Umgebungsvariablen.
Wenn Sie meinen, warum brauchen Sie ./ am Anfang - das liegt daran, dass (im Gegensatz zu Windows) das aktuelle Verzeichnis standardmäßig nicht in Ihrem Pfad enthalten ist. Wenn du läufst:
$ ls
Ihre Shell sucht ls
in den Verzeichnissen in Ihrer PATH-Umgebungsvariablen nach ( echo $PATH
um sie anzuzeigen ) und führt die erste ausführbare Datei aus ls
, die sie findet. Wenn Sie Folgendes eingeben:
$ a.out
Die Shell funktioniert genauso - findet aber wahrscheinlich keine ausführbare Datei mit dem Namen a.out. Sie müssen der Shell mitteilen, wo sich a.out befindet - es befindet sich im aktuellen Verzeichnis (.), Dann lautet der Pfad ./a.out
.
Wenn Sie fragen, warum es "a.out" heißt, ist dies nur der Standardname der Ausgabedatei für gcc. Sie können es mit dem Befehlszeilenargument -o ändern. Zum Beispiel:
$ gcc test.c -o test
$ ./test
touch .a.out; ls -lA
zu sehen.)
<dir>/<file>
sodass Sie im Grunde genommen sagen , dass Sie eine Datei im aktuellen Verzeichnis ausführen, das durch./test
Sie können versuchen :.
, Ihrer $ PATH-Variablen etwas hinzuzufügen .
Versuchen Sie ALT + F2 und geben Sie Folgendes ein: gksudo gedit /etc/environment
wenn Sie Linux / GTK ausführen (dies ist das, was Sie haben, wenn Sie Ubuntu verwenden).
Ich rate Ihnen jedoch dringend, dies NICHT zu tun. Es ist schlimm, schlimm, schlimm und schlimm.
Sie wissen, dass solche Dinge seit 1970 so funktionieren. Es gibt einen Grund, warum das aktuelle Verzeichnis nicht in $ PATH enthalten ist.
.
ist das aktuelle Verzeichnis
.something
wäre eine versteckte Datei (Tippe "ALT +", um sie in Nautilus erscheinen zu lassen, oder versuche " ls -la
".
./someProgram.sh
Geben Sie Folgendes ein, um eine ausführbare Datei someProgram.sh im aktuellen Verzeichnis AUSZUFÜHREN.
.somethingElse
würde bedeuten, dass Sie eine versteckte ausführbare Datei im aktuellen Verzeichnis haben, was eine schlechte Idee ist.
./command_name
einen Befehl unter Linux aus?"