W takich przypadkach najlepiej jest poszukać „kropkowanego ukośnika”, który dał bardzo użyteczny wynik: linfo.org/dot_slash.html
heltonbiker
Odpowiedzi:
29
./lub po prostu .jest skrótem unix dla bieżącego katalogu.
Musisz go podać, gdy bieżący katalog nie znajduje się w ŚCIEŻCE. ŚCIEŻKA jest listą folderów przeszukiwanych podczas uruchamiania programu. (Możesz to ustalić pisząc echo $PATH.) Jeśli plik wykonywalny nie znajduje się w ŚCIEŻCE, aby go uruchomić, musisz określić folder, w którym się on znajduje. Możesz to zrobić, podając pełną ścieżkę do pliku, ale jeśli plik jest w bieżący katalog, którego możesz użyć ./jako skrótu.
Podobnie, ../lub po prostu ..jest skrótem dla katalogu powyżej bieżącego.
Ktoś powinien podać w swojej odpowiedzi, dlaczego $ PATH nie zawiera .. Jest tak, ponieważ automatyczne korzystanie z bieżącego katalogu jest luką w zabezpieczeniach. Wyobraź sobie, że ktoś inny tworzy program, nazwał go, lsa ty cddo jego katalogu, a następnie wpiszls
Zan Lynx
1
@Zan Zawsze się nad tym zastanawiałem, dziękuję za odpowiedź na pytanie, którego nikt nie zadał, ale ktoś powinien.
crasic
@ZanLynx świetny komentarz / dodatek, należy go edytować w odpowiedzi, ponieważ komentarze mogą się zgubić.
NSGaga,
15
Każdy katalog w wierszu poleceń ma wywołane dwa „katalogi specjalne” .i ... Są one skrótem odpowiednio dla bieżącego katalogu i katalogu zawierającego bieżący katalog.
Na przykład cd ./more/directory/namesoznacza po prostu: „zacznij od bieżącego katalogu i kontynuuj ścieżkę”. Podobnie polecenie cd ..oznacza „zmień jeden katalog w górę.
Jeśli chcesz nazwę bieżącego katalogu, możesz użyć pwdpolecenia. Ponadto, jeśli użyjesz -aflagi dla ls, możesz zobaczyć te dwa specjalne katalogi. Oznacza to, ls -aże wyświetli listę zaczynającą się od .i ...
Inni już wyjaśnili co .i co ..oznacza (odpowiednio katalog bieżący i katalog nadrzędny). Dotyczy to wszystkich nazw ścieżek.
Kiedy otwierasz terminal, zwykle zaczynasz w swoim katalogu domowym: ~(który rozwija się do /home/username). Wszystkie poniższe ścieżki są równoważne, pod warunkiem, że bieżący katalog roboczy to /home/username:
/home/username
.
../username
../../home/username
../../../home/username(katalog macierzysty /jest nadal /)
./././././. (bieżący katalog w bieżącym katalogu w ...)
./ (końcowe ukośniki są dozwolone dla katalogów)
/home////username/// (podobnie jak wiele ukośników)
Czy nie mylić ./programz . program. ./programuruchamia plik w bieżącym katalogu z ustawionym bitem wykonania. . ./programjest rzeczą bashową i można ją alternatywnie zapisać jako source ./programodczytywanie poleceń bash z programpliku w bieżącym katalogu i wykonywanie ich w bieżącej powłoce.
Jeśli zastanawiasz się, dlaczego możesz po prostu uruchomić geditzamiast, /usr/bin/gedita nie programzamiast ./programlub /home/username/program, zobacz powiązane pytanie:
Ok ... ale wciąż nie rozumiem. Powiedzmy, że mam yiica w środku /home/mysuser/i nawiguję tam za pomocą cd /home/myuser. Będąc w środku, wierzyłem, że robienie tylko yiic powinno działać, ponieważ zadzwoniłem, gdy byłem w tym katalogu. Ale mówi, że polecenie nie archiwizuje. Jeśli zrobię to samo i użyję ./, to będzie działać poprawnie ... Czy możesz wyjaśnić trochę więcej?
MEM
@frabjous as również odpowiedział na ten komentarz.
MEM
Nie! zawsze będzie szukać w dyrektywie PATH, chyba że powiesz mu, aby używał bieżącego katalogu (używając ./). Spójrz na odpowiedź użytkownika45: .to specjalny plik w folderze, który możesz zobaczyć podczas robienia ls -law katalogu;)
Odpowiedzi:
./
lub po prostu.
jest skrótem unix dla bieżącego katalogu.Musisz go podać, gdy bieżący katalog nie znajduje się w ŚCIEŻCE. ŚCIEŻKA jest listą folderów przeszukiwanych podczas uruchamiania programu. (Możesz to ustalić pisząc
echo $PATH
.) Jeśli plik wykonywalny nie znajduje się w ŚCIEŻCE, aby go uruchomić, musisz określić folder, w którym się on znajduje. Możesz to zrobić, podając pełną ścieżkę do pliku, ale jeśli plik jest w bieżący katalog, którego możesz użyć./
jako skrótu.Podobnie,
../
lub po prostu..
jest skrótem dla katalogu powyżej bieżącego.źródło
.
. Jest tak, ponieważ automatyczne korzystanie z bieżącego katalogu jest luką w zabezpieczeniach. Wyobraź sobie, że ktoś inny tworzy program, nazwał go,ls
a tycd
do jego katalogu, a następnie wpiszls
Każdy katalog w wierszu poleceń ma wywołane dwa „katalogi specjalne”
.
i..
. Są one skrótem odpowiednio dla bieżącego katalogu i katalogu zawierającego bieżący katalog.Na przykład
cd ./more/directory/names
oznacza po prostu: „zacznij od bieżącego katalogu i kontynuuj ścieżkę”. Podobnie poleceniecd ..
oznacza „zmień jeden katalog w górę.Jeśli chcesz nazwę bieżącego katalogu, możesz użyć
pwd
polecenia. Ponadto, jeśli użyjesz-a
flagi dlals
, możesz zobaczyć te dwa specjalne katalogi. Oznacza to,ls -a
że wyświetli listę zaczynającą się od.
i..
.źródło
Inni już wyjaśnili co
.
i co..
oznacza (odpowiednio katalog bieżący i katalog nadrzędny). Dotyczy to wszystkich nazw ścieżek.Kiedy otwierasz terminal, zwykle zaczynasz w swoim katalogu domowym:
~
(który rozwija się do/home/username
). Wszystkie poniższe ścieżki są równoważne, pod warunkiem, że bieżący katalog roboczy to/home/username
:/home/username
.
../username
../../home/username
../../../home/username
(katalog macierzysty/
jest nadal/
)./././././.
(bieżący katalog w bieżącym katalogu w ...)./
(końcowe ukośniki są dozwolone dla katalogów)/home////username///
(podobnie jak wiele ukośników)Czy nie mylić
./program
z. program
../program
uruchamia plik w bieżącym katalogu z ustawionym bitem wykonania.. ./program
jest rzeczą bashową i można ją alternatywnie zapisać jakosource ./program
odczytywanie poleceń bash zprogram
pliku w bieżącym katalogu i wykonywanie ich w bieżącej powłoce.Jeśli zastanawiasz się, dlaczego możesz po prostu uruchomić
gedit
zamiast,/usr/bin/gedit
a nieprogram
zamiast./program
lub/home/username/program
, zobacz powiązane pytanie:źródło
Oznacza zacząć od
current directory path
.Załóżmy, że masz coś
path
takiego:a wewnątrz
/usr/bin/
znajduje się plik wykonywalny o nazwieyiic
.Jeśli wydasz
yiic
, uruchomi się ten w/usr/bin/
.Wydając polecenie
./yiic
, każ systemowi zajrzeć do bieżącego katalogu tego pliku wykonywalnego.źródło
/home/mysuser/
i nawiguję tam za pomocącd /home/myuser
. Będąc w środku, wierzyłem, że robienie tylko yiic powinno działać, ponieważ zadzwoniłem, gdy byłem w tym katalogu. Ale mówi, że polecenie nie archiwizuje. Jeśli zrobię to samo i użyję ./, to będzie działać poprawnie ... Czy możesz wyjaśnić trochę więcej?.
to specjalny plik w folderze, który możesz zobaczyć podczas robienials -la
w katalogu;)