Was ist der Unterschied zwischen Dateiname und ./Dateiname unter Linux?

10

Was ist der Unterschied zwischen filenameund ./filename? Unter welchen Umständen wird einer dem anderen vorgezogen?

gerade rechtzeitig
quelle

Antworten:

18

Bei Datendateien spielt dies keine Rolle - beide Anweisungen verweisen auf die Datendatei in Ihrem aktuellen Verzeichnis. (Zum Beispiel cat filenameund cat ./filenamesind semantisch identisch.)

Anders sieht es aus, wenn sich der betreffende Dateiname auf eine ausführbare Datei bezieht , dh das erste (oder sogar einzige), was Sie in die Befehlszeile eingeben. ./filenamesucht nach der ausführbaren Datei in Ihrem aktuellen Verzeichnis und nirgendwo anders. filenameAuf der anderen Seite wird die Umgebungsvariable ausgewertet PATHund filenamein jedem darin gespeicherten Verzeichnis gesucht (das möglicherweise Ihr aktuelles Verzeichnis enthält oder nicht).

./filename(oder eine andere /path/to/filename) wird daher bevorzugt, wenn Sie eine bestimmte ausführbare Datei ausführen möchten , nicht die erste, die in Ihrem PATH gefunden wird.

DevSolar
quelle
6

Wenn Sie ein Programm filenameausführen, müssen Sie das erste in Ihrem $PATHund das zweite Programm im aktuellen Verzeichnis ausführen.

Wenn Sie diesen Dateinamen als Argument für ein Programm wie in do_something filenameoder verwenden do_something ./filename, bedeuten sie dasselbe.

Bis auf weiteres angehalten.
quelle
5

Sie beziehen sich auf die Befehlsausführung, richtig?

Es gibt eine Umgebungsvariable PATH, die einige durch Semikolon getrennte Systemverzeichnisse enthält. Wenn Sie eingeben command, sucht das System in diesen Verzeichnissen in der angegebenen Reihenfolge, um eine ausführbare Datei mit dem Namen <Befehl> zu finden. Wenn es sie findet, versucht es, sie auszuführen. Sie können Ihren Pfad über echo $PATHin Bash sehen. Zum Beispiel:

$ echo $ PATH
/ sbin: / bin: / usr / sbin: / usr / bin: / usr / games: / usr / local / sbin: / usr / local / bin: / home / ivanatora / bin: / usr / local / kde4 / bin: / usr / local / kde4 / bin

Bei der Eingabe geben ./filenameSie den genauen Pfad an: das aktuelle Verzeichnis. Sie können sehen, dass sich das aktuelle Verzeichnis selten in Ihrem $ PATH befindet (aus Sicherheitsgründen). Wenn Sie also eine Datei aus dem aktuellen Verzeichnis ausführen möchten, verwenden Sie ./filename.

Um eine Datei über ihren Pfad auszuführen (insbesondere wenn sie nicht in $ PATH enthalten ist), können Sie auch Folgendes <path>/fileeingeben:

/ sbin / ifconfig

Ivan Petrushev
quelle
3

Ausführbare Sicherheit ist der Hauptgrund für diesen Unterschied.

Du willst nicht . (vorhandenes Arbeitsverzeichnis oder PWD) in Ihrem Pfad, weil jemand eine wichtige ausführbare Datei wie ps oder ls in Ihrem PWD als Trojaner http://en.wikipedia.org/wiki/Trojan_horse_%28computing%29 verwenden und Sie durch die Darstellung fehlerhafter Daten täuschen könnte.

Bit Bucket
quelle
1

Es hängt davon ab, unter welchen Umständen Sie es verwenden.

Als Argument, zB "Programmdateiname", liegt es dann am Programm, aber im Allgemeinen sind sie identisch.

Als Programmname, z. B. "Dateinamenargumente", durchsuchen "Dateinamenargumente" PATH, um die Binärdatei zu finden, während "./Dateinamenargumente" das Programm im aktuellen Verzeichnis verwenden. Dies ist natürlich nützlich, wenn. ist nicht im PFAD, aber es ist auch nützlich, diesen zu verwenden, selbst wenn. ist im Pfad, vielleicht weil es mit einem früheren Eintrag übereinstimmt.

Gorilla
quelle