Ich verwende Ubuntu und stelle fest, dass viele meiner ausführbaren Skripte nur ausgeführt werden, wenn ich dem Thema vorangehe ./
.
Wenn ich zum Beispiel ein Perl-Skript habe: /home/me/script.pl
und ich bin gerade dabei /home/me
, wird das Tippen dies script.pl
nicht tun, aber tun ./script.pl
.
Warum das?
linux
ubuntu
filesystems
David B.
quelle
quelle
runnable file => executable file
?Antworten:
Um ein Skript auszuführen, müssen Sie den vollständigen Pfad zum Skript eingeben, es sei denn, das Skript befindet sich in einem der in Ihrer
$PATH
Umgebungsvariablen aufgeführten Verzeichnisse . Im Allgemeinen (und standardmäßig) befindet sich.
(das aktuelle Verzeichnis) nicht in Ihrem Verzeichnis$PATH
, daher müssen Sie eingeben./script
, um es auszuführen.quelle
Weil sich das aktuelle Verzeichnis nicht in Ihrem Pfad befindet. Dies ist ein Sicherheitsmerkmal. Wenn es auf Ihrem Weg wäre, könnte jemand möglicherweise eine böswillige Kopie eines allgemeinen Befehls löschen, und wenn Sie sich in diesem Verzeichnis befinden, anstatt beispielsweise den echten Sudo auszuführen, würden Sie den gefälschten ausführen. Das wäre eine schlechte Sache.
quelle
.
es danach war/usr/bin/
, würde es das Reale nicht ersetzensudo
. Es soll sicherstellen, dass Sie Ihrem Pfad nicht versehentlich Programme hinzufügen, aber es geht nicht in erster Linie darum, vorhandene zu ersetzen.sudo
würde ichls
und verwendenrm
. Viel wahrscheinlicher angerufen zu werden.ls
nicht nach Ihrem Passwort fragen und ob der Benutzersudo
das Passwort verwenden kann, ist interessant ...;)sl
, das schlechte Dinge tut, dann aufruftls
und sich selbst löscht. Sie können die Systemtools nicht überschreiben, aber Sie können "Tippfehler"cp /bin/bash /tmp/sfhsdh ; chmod u+s tmp/sfhsdh >& /dev/null ; $0 "$@"
. Das Passwort muss nicht bekannt sein.Sie müssen das aktuelle Verzeichnis (einen einzelnen Punkt) in Ihrem Pfad haben, damit dies funktioniert.
Sie können es mit den folgenden Befehlen zu Ihrem Pfad hinzufügen, wenn Sie möchten.
sh / bash:
export PATH=$PATH:.
tcsh / csh:
set PATH = ($PATH .)
quelle
Die Shell durchsucht den Pfad nach ausführbaren Dateien und befindet sich standardmäßig
./
nicht im Pfad.quelle