Jaka jest różnica między filename
i ./filename
? W jakich okolicznościach jedna jest preferowana względem drugiej?
W przypadku plików danych nie robi to różnicy - obie instrukcje będą odwoływać się do pliku danych w bieżącym katalogu. (Na przykład cat filename
i cat ./filename
są semantycznie identyczne.)
To inna historia, jeśli nazwa pliku odnosi się do pliku wykonywalnego , tj. Jest pierwszą (lub nawet jedyną) rzeczą, którą wpisujesz w wierszu poleceń. ./filename
szuka pliku wykonywalnego w bieżącym katalogu i nigdzie indziej. filename
, z drugiej strony, oceni zmienną środowiskową PATH
i poszuka filename
w każdym katalogu w niej przechowywanym (który może, ale nie musi zawierać bieżący katalog).
./filename
(lub dowolny inny /path/to/filename
) jest zatem preferowany, gdy chcesz wykonać określony plik wykonywalny, a nie pierwszy znaleziony w ŚCIEŻCE.
Jeśli uruchamiasz program, filename
mówi o uruchomieniu pierwszego z nich, $PATH
a drugi mówi o uruchomieniu tego z bieżącego katalogu.
Jeśli używasz tego pliku jako argument do programu jak w do_something filename
lub do_something ./filename
wtedy one oznaczają to samo.
Masz na myśli wykonywanie poleceń, prawda?
Istnieje zmienna środowiskowa, PATH
która zawiera niektóre katalogi systemowe, oddzielone średnikiem. Po wpisaniu command
system szuka w tych katalogach kolejności, w jakiej są one określone, aby znaleźć plik wykonywalny o nazwie <polecenie> Jeśli go znajdzie, próbuje go wykonać. Możesz zobaczyć swoją ŚCIEŻKĘ echo $PATH
w trybie bash. Na przykład:
$ 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
Podczas pisania ./filename
podajesz dokładną ścieżkę: bieżący katalog. Możesz zobaczyć, że bieżący katalog rzadko znajduje się w twojej $ PATH (ze względów bezpieczeństwa). Więc jeśli chcesz wykonać plik z bieżącego katalogu, użyj ./filename
.
Aby wykonać plik według jego ścieżki (szczególnie jeśli nie ma go w $ PATH), możesz także wpisać <path>/file
:
/ sbin / ifconfig
Zabezpieczenia wykonywalne są głównym powodem tej różnicy.
Nie chcesz . (obecny katalog roboczy lub PWD) na twojej ścieżce, ponieważ ktoś może trojana http://en.wikipedia.org/wiki/Trojan_horse_%28computing%29 kluczowego pliku wykonywalnego, takiego jak ps lub ls, w twoim PWD i oszukać cię, prezentując złe dane.
To zależy, w jakich okolicznościach go użyjesz.
Jako argument, np. „Nazwa pliku programu”, to zależy od programu, ale ogólnie są one identyczne.
Jako nazwa programu, np. „Argumenty nazwy pliku”, następnie „argumenty nazwy pliku” przeszukuje ścieżkę PATH w celu znalezienia pliku binarnego, a „argumenty nazwy pliku .//” użyją programu w bieżącym katalogu. Jest to oczywiście przydatne, jeśli. nie znajduje się w ŚCIEŻCE, ale warto go również użyć, nawet jeśli. znajduje się na ścieżce, być może dlatego, że pasuje do wcześniejszego wpisu.