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?

2 ответа2

45

Это стандартное поведение Unix.

/ В начале пути представляет корень диска (или начальный / самый верхний уровень дерева файловой системы). Поскольку Documents не вне корня, /Documents не могут быть найдены.

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

Вы можете использовать cd /Users/lukas/Documents чтобы перейти на этот путь.

В качестве альтернативы вы можете использовать относительную адресацию. Файловые системы на основе Unix имеют 2 специальные директории:

  • . что означает "этот каталог",
  • .. что означает родительский каталог.

Если вы находитесь в /Users/lukas , cd ./Documents доставят вас в нужное место.

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

13

/Users/lukas - это "абсолютный" путь. Ведущий / представляет корневой каталог вашей файловой системы.

lukas - это "относительный" путь. Поскольку он не привязан к корню, это означает «искать это в текущем каталоге». Если текущим каталогом не является /Users (или какой-либо другой каталог с lukas в нем), это не удастся.

Итак, давайте рассмотрим ваши примеры, предполагая, что вы находитесь в /Users/lukas:

$ cd Documents/
/Users/lukas/Documents

Относительный путь указан => перейти в каталог "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 проходит через этот алгоритм; каталог, в который вы в конечном итоге меняете, - это путь, который возвращает алгоритм.


Дальнейшее чтение:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .