Я нахожусь в моем домашнем каталоге на моем 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?
linux
command-line
mac
terminal
LukasKawerau
источник
источник
Ответы:
Это стандартное поведение Unix.
Путь
/
в начале пути представляет корень диска (или начальный / самый верхний уровень дерева файловой системы). КакDocuments
не по корню,/Documents
не может быть найден./Users
находится вне корневого каталога, поэтому эта проблема не возникает.Вы можете использовать,
cd /Users/lukas/Documents
чтобы перейти на этот путь.В качестве альтернативы вы можете использовать относительную адресацию. Файловые системы на основе Unix имеют 2 специальные директории:
.
что означает «этот каталог»,..
что означает родительский каталог.Если вы находитесь
/Users/lukas
,cd ./Documents
доставит вас в нужное место.Давайте предположим, что вы были
/Users/Lukas/Documents
и хотели пойти/Users/Janes/Documents
, вы могли бы выполнить командуcd ../../Janes/Documents
- использование..
вернуло бы вас обратно на уровень - так что вы сделали бы это дважды, прежде чем идти по новому относительному пути.источник
Users/lukas
,cd Documents
призывает к относительному пути ;cd /Users/Lukas/Documents
требует абсолютного пути (который будет работать независимо от того, в каком репертуаре вы находитесь при вызове этой команды)./
на `\`), поскольку DOS позаимствовал его (через длинную запутанную историю) из Unix./Users/lukas
это «абсолютный» путь. Ведущий/
представляет корневой каталог вашей файловой системы.lukas
это «относительный» путь. Поскольку он не привязан к корню, это означает «искать это в текущем каталоге». Если текущим каталогом не является/Users
(или не является каким-либо другим каталогом, содержащимlukas
в нем), это не удастся.Итак, давайте рассмотрим ваши примеры, предполагая, что вы находитесь в
/Users/lukas
:Относительный путь указан => перейти в каталог «Документы», который находится внутри
/Users/lukas
.Указан абсолютный путь => изменить каталог
/Documents
.Это показывает, что вы изменили рабочий каталог на корневой каталог
/
(хотяcd
команда для этого не была показана).Относительный путь указан => изменить каталог «Пользователи», который находится внутри
/
.Указан абсолютный путь => изменить каталог
/Users
.Ключ каждый раз, что ведущий
/
. С ним путь абсолютен. Без этого путь относительный. Это правило однозначно, потому что все абсолютные пути начинаются с/
(потому что корневой каталог всегда вызывается/
).Вот некоторый псевдокод, свободно описывающий этот алгоритм:
Аргумент, который вы передаете,
cd
проходит через этот алгоритм; каталог, в который вы в конечном итоге меняете, - это путь, который возвращает алгоритм.Дальнейшее чтение:
Джозеф Л. Захари
"Введение в научное программирование"
источник