Использование / при использовании CD

3567
LukasKawerau

Я нахожусь в моем домашнем каталоге на моем 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
Я думаю, что вопросы об относительных и абсолютных путях были [заданы] (https://stackoverflow.com/questions/46121000/what-is-an-absolute-pathname-vs-a-relative-pathname) [befofre] (https: //superuser.com/questions/153165/what-does-represent-while-giving-path) adamczi 5 лет назад 11
@adamczi Совершенно очевидно, что ОП не знает, что такое относительный путь или каков его синтаксис, поэтому он не может его найти. K. Gkinis 5 лет назад 6
@ K.Gkinis Что не является причиной, чтобы не закрывать как дубликат. Это помогает спрашивающим получить хорошие ответы (предположим, что ответы хорошие), а ответчикам - поддерживать меньше версий одного и того же контента. user202729 5 лет назад 11
@ K.Gkinis И, в некотором смысле, это большая часть замыкания в виде дубликата: люди будут задавать вопросы множеством разных способов, поэтому множество вопросов (соответствующих этим путям), указывающих на один ответ, Хорошая вещь. В подобных случаях (когда ОП не знает термин для поиска), закрытие-как-обман не является их критикой, это просто лучший способ справиться с тем, как люди задают вопросы. TripeHound 5 лет назад 8
как правило, мы используем ./ но это избыточно. как было бы ~ / mckenzm 5 лет назад 0
@adamczi Их уже спрашивали (спасибо за ссылки!), но мой вопрос и особенно отличные ответы, приведенные здесь, более подробны и объясняют концепцию лучше, чем ответы, на которые вы ссылались. Не знаю, имеет ли это значение для закрытия как дубликат, но это может быть соображением. LukasKawerau 5 лет назад 1
Я полностью понимаю, что трудно искать, когда вы не знаете, что это за термин, но я все еще поддерживаю слово "это можно легко найти" - [это] (https://www.google.com/search? client = ubuntu & hs = XcU & channel = fs & ei = Pob2W4MUkbWwB57RntAI & q = linux + paths + начиная с + косой черты & oq = linux + path + начиная с + косой черты) возвращает [что] (https://askubuntu.com/questions/607413/when- -use-a-previousing-slash-in-path-names-eg-for-the-cd-command) в качестве первого результата с еще более полным ответом. adamczi 5 лет назад 0

2 ответа на вопрос

44
davidgo

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

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

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

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

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

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

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

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

Примечание: как сказал @davidgo, когда в `Users / lukas`,` cd Documents` вызывает _relative path_; `cd / Users / Lukas / Documents` вызывает _absolute path_ (который будет работать независимо от того, в каком репертуаре вы находитесь при вызове этой команды). Shan-x 5 лет назад 1
Хотя вопрос касается Mac, который является системой Unix, это также стандартное поведение MS-DOS / Windows (замена `/` на `\\`), поскольку DOS позаимствовал его (через длинную запутанную историю) из Unix. FreeMan 5 лет назад 1
Также, в зависимости от используемой вами оболочки, cd $ HOME / Documents или cd ~ / Documents также будут работать. Переменная оболочки HOME (доступ к которой осуществляется с помощью $ HOME) является обычным местом хранения вашего домашнего каталога (~ является специальным псевдонимом для $ HOME). pboss3010 5 лет назад 2
12
Lightness Races in Orbit

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


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

Это также _great_ прохождение и действительно помогает в понимании этого поведения. Спасибо! :) LukasKawerau 5 лет назад 0