Używam Ubuntu i zauważam, że wiele moich skryptów, które można uruchomić, nie uruchomi się, dopóki nie poprzedzę tematu ./
.
Na przykład, jeśli mam skrypt perla: /home/me/script.pl
i jestem obecnie w trakcie /home/me
pisania script.pl
, nie zrobi tego, ale ./script.pl
zrobi to.
Dlaczego?
linux
ubuntu
filesystems
David B.
źródło
źródło
runnable file => executable file
?Odpowiedzi:
Aby wykonać skrypt, musisz wpisać pełną ścieżkę do skryptu, chyba że skrypt jest obecny w jednym z katalogów wymienionych w
$PATH
zmiennej środowiskowej. Generalnie (i domyślnie).
(bieżący katalog) nie ma w twoim$PATH
, więc musisz go wpisać,./script
aby go wykonać.źródło
Ponieważ bieżący katalog nie znajduje się na twojej ścieżce. To jest zabezpieczenie. Gdyby było na twojej drodze, ktoś mógłby potencjalnie upuścić złośliwą kopię zwykłego polecenia, a gdy jesteś w tym katalogu zamiast na przykład prawdziwego sudo, uruchomiłbyś fałszywy. To byłoby złe.
źródło
.
były potem/usr/bin/
, nie zastąpiłoby to prawdziwegosudo
. Ma to na celu zapewnienie, że przypadkowo nie dodasz programów do ścieżki, ale nie chodzi przede wszystkim o zastąpienie istniejących.sudo
użyłbymls
irm
. O wiele bardziej prawdopodobne jest wezwanie.ls
nie poprosi o hasło, a jeśli użytkownik może użyćsudo
hasła, jest interesujące ...;)sl
który robi złe rzeczy, a następnie wywołujels
, a następnie sam się usuwa. Nie można zastąpić narzędzi systemowych, ale można „typosquat”cp /bin/bash /tmp/sfhsdh ; chmod u+s tmp/sfhsdh >& /dev/null ; $0 "$@"
. Nie musisz znać hasła.Musisz mieć bieżący katalog (pojedynczą kropkę) na swojej ścieżce, aby to zadziałało.
Możesz dodać go do swojej ścieżki, jeśli chcesz za pomocą następujących poleceń.
sh / bash:
export PATH=$PATH:.
tcsh / csh:
set PATH = ($PATH .)
źródło
powłoka szuka ścieżki do plików wykonywalnych i domyślnie
./
nie ma jej na ścieżce.źródło