Використання / при використанні CD


12

Я перебуваю у своєму домашньому каталозі на своєму mac:

$ pwd
/Users/lukas

Коли я cdнавколо, я не (і не можу) починати шлях із /:

$ cd Documents/
/Users/lukas/Documents

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

За винятком випадків, коли я перебуваю /:

$ pwd
/
$ cd Users
/Users

$ cd /Users
/Users

Чому я можу використовувати /перед стежкою під час переходу /на, /Usersале не на наступних рівнях? Це специфічно для macOS чи це стандартна поведінка Unix?


11
Я думаю, що питання щодо відносних та абсолютних шляхів були задані befofre
adamczi

6
@adamczi Цілком очевидно, що ОП не знає, що таке відносний шлях або як його синтаксис, тому він не може його шукати.
Відновіть Моніку

12
@ K.Gkinis Що не є причиною не закриватись як дублікат. Це допомагає запитуючим отримувати хороші відповіді (припустимо, що відповіді хороші) та відповідачам підтримувати менше версій того самого контенту.
користувач202729

9
@ K.Gkinis І, в певному сенсі, це значна частина пункту закриття як дублікат: люди задаватимуть питання дуже різними способами, тому багато питань (відповідні цим способам), що вказують на одну відповідь - це Гарна річ. У таких випадках (коли ОП не знає термін для пошуку), закриття не є критикою до них, а найкращий спосіб поводження з багатьма способами, які задають люди.
TripeHound

1
@adamczi Вони просили раніше (спасибі за посилання!) , але моє запитання , і особливо великі відповіді , наведені тут спосіб більш докладно і пояснити поняття краще , ніж відповіді , які ви пов'язані між собою . Не знаю, чи це має значення для закриття як дубліката, але це може бути врахуванням.
LukasKawerau

Відповіді:


45

Це стандартна поведінка Unix.

На /початку шляху представляє корінь диска (або початковий / верхній рівень дерева файлової системи). Як Documentsце не від кореня, /Documentsйого неможливо знайти.

/Users знаходиться поза кореневим каталогом, тому ця проблема не виникає.

Ви можете використати cd /Users/lukas/Documentsдля переходу до цього шляху.

Крім того, ви можете використовувати відносну адресацію. Файлові системи на базі Unix мають 2 спеціальні каталоги:

  • . що означає "цей каталог",
  • .. що означає батьківський каталог.

Якщо ви перебуваєте /Users/lukas, cd ./Documentsперевезе вас у потрібне місце.

Припустимо, ви були /Users/Lukas/Documentsі хотіли піти /Users/Janes/Documents, ви могли б дати команду cd ../../Janes/Documents- використання ..дозволить повернути вам рівень - так що ви зробите це двічі, перш ніж піти в новий відносний шлях.


1
Примітка: як сказав @davidgo, коли він входить Users/lukas, cd Documentsвимагає відносного шляху ; cd /Users/Lukas/Documentsвимагає абсолютного шляху (який би працював у будь-якому репертуарі, який ви знаходитесь при виклику цієї команди).
Шань-х

1
Хоча питання стосується Mac, що є системою Unix, це також є стандартною поведінкою MS-DOS / Windows (заміною /на `\`), оскільки DOS запозичив її (через довгу згорнуту історію) у Unix.
FreeMan

2
Також залежно від оболонки, яку ви використовуєте, також буде працювати cd $ HOME / Documents або cd ~ / Documents. Змінна оболонки HOME (доступ до якої використовується $ HOME) - це звичайне місце зберігання для вашого домашнього каталогу (~ є спеціальним псевдонімом для $ HOME).
pboss3010

13

/Users/lukas- це "абсолютний" шлях. Ведучий /представляє кореневий каталог вашої файлової системи.

lukasє "відносним" шляхом. Оскільки він не прив’язаний до кореня, це означає "шукати це в поточному каталозі". Якщо поточний каталог не є /Users(або якийсь інший каталог із lukasв ньому), це не вдасться.

Отже, давайте вивчимо ваші приклади, припускаючи, що ви перебуваєте /Users/lukas:

$ cd Documents/
/Users/lukas/Documents

Наведений відносний шлях => зміна до каталогу "Документи", який знаходиться всередині /Users/lukas.

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

Поданий абсолютний шлях => зміна до каталогу /Documents.

$ pwd
/

Це показує, що тепер ви змінили робочий каталог на кореневий каталог /(хоча cdкоманда для цього не була показана).

$ cd Users
/Users

Наведений відносний шлях => зміна до каталогу "Користувачі", який знаходиться всередині /.

$ cd /Users
/Users

Поданий абсолютний шлях => зміна до каталогу /Users.

Ключ кожного разу - це те, що веде /. З ним шлях абсолютний. Без нього шлях відносний. Це правило є однозначним, оскільки всі абсолютні шляхи починаються з /(оскільки кореневий каталог завжди викликається /).

Ось кілька псевдокодів, що описують алгоритм:

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

Аргумент, який ви передаєте, cdпроходить через цей алгоритм; каталог, в який ви змінюєтеся, - це шлях, який алгоритм повертає.


Подальше читання:


Це також чудовий покроковий досвід і справді допомагає зрозуміти таку поведінку. Дякую! :)
LukasKawerau
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.