Używanie / podczas używania cd

12

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?

LukasKawerau
źródło
11
Myślę, że pytania o ścieżki względne i absolutne były spytał przed
adamczi
6
@adamczi Jest całkiem oczywiste, że OP nie wie, jaka jest ścieżka względna, ani jak jej składnia jest, więc nie może jej sprawdzić.
K. Gkinis
12
@ K.Gkinis Co nie jest powodem, aby nie zamykać się jako duplikat. Pomaga pytającym uzyskać dobre odpowiedzi (zakładając, że odpowiedzi są dobre) i odpowiadać, aby utrzymać mniej wersji tej samej treści.
user202729
9
@ K.Gkinis I, w pewnym sensie, jest to znaczna część zamknięcia jako duplikat: ludzie będą zadawać pytania na wiele różnych sposobów, więc wiele pytań (pasujących do tych sposobów) wskazujących na jedną odpowiedź Dobra rzecz. W takich przypadkach (gdzie OP nie zna terminu wyszukiwania), zamknięcie jako duplikat nie jest ich krytyką, tylko najlepszym sposobem radzenia sobie z wieloma sposobami zadawania pytań przez ludzi.
TripeHound
1
@adamczi Zostali wcześniej zapytani (dziękuję za linki!), ale moje pytanie, a zwłaszcza wspaniałe odpowiedzi podane tutaj, są sposób bardziej szczegółowe i lepiej wyjaśnij koncepcję niż odpowiedzi, które podłączyłeś. Nie wiem, czy ma to znaczenie przy zamykaniu jako duplikat, ale może być rozważane.
LukasKawerau

Odpowiedzi:

45

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 jak Documents 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ć polecenie cd ../../Janes/Documents - za pomocą .. cofnie cię o jeden poziom - więc zrobisz to dwa razy, zanim przejdziesz do nowej ścieżki względnej.

davidgo
źródło
1
Uwaga: jak powiedział @davidgo, kiedy jest 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).
Shan-x
1
Chociaż pytanie dotyczy Maca, który jest systemem uniksowym, jest to również standardowe zachowanie MS-DOS / Windows (zastępowanie / z ``), ponieważ DOS pożyczył ją (przez długą, zawiłą historię) z Uniksa.
FreeMan
2
Również w zależności od używanej powłoki, cd $ HOME / Documents lub cd ~ / Documents również będzie działać. Zmienna powłoki HOME (dostępna za pomocą $ HOME) jest zwykłym miejscem przechowywania twojego katalogu domowego (~ będącym specjalnym aliasem dla $ HOME).
pboss3010
13

/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 z lukas w nim) to się nie powiedzie.

Przyjrzyjmy się przykładom, zakładając, że jesteś /Users/lukas:

$ cd Documents/
/Users/lukas/Documents

Podana ścieżka względna = & gt; przejdź do katalogu „Dokumenty”, który jest w środku /Users/lukas.

$ cd /Documents
-bash: cd: /Documents: No such file or directory

Podana ścieżka bezwzględna = & gt; przejdź do katalogu /Documents.

$ pwd
/

To pokazuje, że zmieniłeś teraz katalog roboczy na katalog główny, / (choć cd polecenie to nie zostało pokazane).

$ cd Users
/Users

Podana ścieżka względna = & gt; przejdź do katalogu „Użytkownicy”, który jest w środku /.

$ cd /Users
/Users

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:

MakePathAbsolute(path):
   if <path> starts with '/'
      return <path>
   else
      return <current directory>/<path>

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:

Lightness Races in Orbit
źródło
To także jest świetny przejście i naprawdę pomaga w zrozumieniu tego zachowania. Dziękuję Ci! :)
LukasKawerau