Использование / при использовании 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?

LukasKawerau
источник
11
Я думаю, что вопросы об относительных и абсолютных путях задавались до этого
adamczi
6
@adamczi Совершенно очевидно, что ОП не знает, что такое относительный путь или каков его синтаксис, поэтому он не может его найти.
Восстановить Монику
12
@ K.Gkinis Что не является причиной, чтобы не закрывать как дубликат. Это помогает спрашивающим получить хорошие ответы (предположим, что ответы хорошие), а ответчикам - поддерживать меньше версий одного и того же контента.
user202729
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- использование ..вернуло бы вас обратно на уровень - так что вы сделали бы это дважды, прежде чем идти по новому относительному пути.

davidgo
источник
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