Jestem w moim katalogu domowym na moim komputerze Mac:
$ pwd
/Users/lukas
Kiedy ja cd
wokół, nie (i nie mogę) rozpocząć ścieżki /
:
$ cd Documents/
/Users/lukas/Documents
$ cd /Documents
-bash: cd: /Documents: No such file or directory
Z wyjątkiem kiedy jestem /
:
$ pwd
/
$ cd Users
/Users
$ cd /Users
/Users
Dlaczego mogę korzystać /
przed ścieżką, z której wychodzisz /
do /Users
ale nie na kolejnych poziomach? Czy jest to specyficzne dla macOS, czy jest to standardowe zachowanie Uniksa?
linux
command-line
mac
terminal
LukasKawerau
źródło
źródło
Odpowiedzi:
To jest standardowe zachowanie Uniksa.
The
/
na początku ścieżki reprezentuje korzeń dysku (lub poziom początkowy / najwyższy drzewa systemu plików). Tak jakDocuments
nie jest wyłączony/Documents
nie można znaleźć./Users
jest wyłączony z katalogu głównego, więc ten problem nie występuje.Możesz użyć
cd /Users/lukas/Documents
zmienić na tę ścieżkę.Alternatywnie możesz użyć adresowania względnego. Systemy plików oparte na Uniksie mają 2 specjalne katalogi:
.
co oznacza „ten katalog”,..
co oznacza katalog nadrzędny.Jeśli jesteś w środku
/Users/lukas
,cd ./Documents
zabrałby cię we właściwe miejsce.Załóżmy, że byłeś
/Users/Lukas/Documents
i chciałem iść do/Users/Janes/Documents
, możesz wydać poleceniecd ../../Janes/Documents
- za pomocą..
cofnie cię o jeden poziom - więc zrobisz to dwa razy, zanim przejdziesz do nowej ścieżki względnej.źródło
Users/lukas
,cd Documents
wzywa do względna ścieżka dostępu ;cd /Users/Lukas/Documents
wzywa do absolutna ścieżka (który działałby niezależnie od repertuaru, w którym się znajdujesz podczas wywoływania tego polecenia)./
z ``), ponieważ DOS pożyczył ją (przez długą, zawiłą historię) z Uniksa./Users/lukas
jest ścieżką „absolutną”. Prowadzenie/
reprezentuje katalog główny twojego systemu plików.lukas
jest ścieżką „względną”. Ponieważ nie jest zakotwiczony w katalogu głównym, oznacza to „szukaj tego w obecny katalog. ”O ile katalog bieżący nie jest/Users
(lub jakiś inny katalog zlukas
w nim) to się nie powiedzie.Przyjrzyjmy się przykładom, zakładając, że jesteś
/Users/lukas
:Podana ścieżka względna = & gt; przejdź do katalogu „Dokumenty”, który jest w środku
/Users/lukas
.Podana ścieżka bezwzględna = & gt; przejdź do katalogu
/Documents
.To pokazuje, że zmieniłeś teraz katalog roboczy na katalog główny,
/
(choćcd
polecenie to nie zostało pokazane).Podana ścieżka względna = & gt; przejdź do katalogu „Użytkownicy”, który jest w środku
/
.Podana ścieżka bezwzględna = & gt; przejdź do katalogu
/Users
.Kluczem jest za każdym razem to prowadzenie
/
. Dzięki niemu ścieżka jest absolutna. Bez tego ścieżka jest względna. Ta reguła jest jednoznaczna, ponieważ zaczynają się wszystkie ścieżki bezwzględne/
(ponieważ katalog główny jest zawsze nazywany/
).Oto kilka pseudokodów luźno opisujących ten algorytm:
Argument, który przekazujesz
cd
przechodzi przez ten algorytm; katalog, w którym kończy się zmiana, jest ścieżką zwracaną przez algorytm.Dalsza lektura:
Joseph L. Zachary
„Wprowadzenie do programowania naukowego”
źródło