Довольно глупый когда дело доходит до Linux и я пытаюсь выяснить навигацию с командной строкой. Я могу двинуться вперед-назад от своей домашней папки и папок внутри довольно легко с этим:
cd ~/Documents/
но когда я иду для открытия папки в документах, я получаю ошибку как это:
chance@asus:~/Documents$ cd ~/xmr-stak-cpu-1.3.0-1.5.0
bash: cd: /home/chance/xmr-stak-cpu-1.3.0-1.5.0: No such file or directory
Я смущен, потому что я должен использовать "~" для вхождения в документы, но я не могу перейти в последующую папку в то время как в документах.
~/
в пути означает Вашу домашнюю папку./
средства в этой папке или материал в текущем рабочем каталоге~
релевантно в командной строке только, не в GUI (как упомянуто в комментариях).Ответ редактируется, чтобы включать более формальное объяснение расширения тильды и удовлетворить новому отредактированному заголовку вопроса, поэтому считайте более формальное объяснение ниже. Сначала два раздела являются более или менее нежными объяснениями того, что OP сделал и не сделал.
Продвижение ~
(тильда), сопровождаемая наклонной чертой в пути, понята как ссылка на корневой каталог Вашего пользователя, т.е. ~/Documents
всегда средства /home/chance/Documents
. (Существуют исключения и особые случаи, но в целях объяснения основ, давайте сохраним его простым до сих пор; посмотрите ниже для более глубокого объяснения).
Таким образом, когда Вы делаете cd ~/xmr-stak-cpu-1.3.0-1.5.0
, Вы говорите, берут меня к xmr-stak-cpu-1.3.0-1.5.0
каталог, который расположен в моей домашней папке. То, что также важно для примечания, то, что путь всегда читается слева направо, разделяется наклонными чертами с крайним левым существом вершина дерева каталогов, на которое Вы ссылаетесь. Таким образом, если Вы хотите убывать из дома, к Документам, к Вашей папке, все части должны присутствовать в пути, разделенном наклонными чертами, и папка, Вы хотите закончить в, конечно, должна быть правом больше всего.
Посмотрите на сообщение об ошибке тесно:
bash: cd: **/home/chance/xmr-stak-cpu-1.3.0-1.5.0**: No such file or directory
Оболочка правильно расширена ~
быть /home/chance
и присоединенный, что с тем, что Вы дали ему. Конечно, потому что каталог, который Вы указали, не существует, Вы получили соответствующее сообщение об ошибке.
Можно сделать это одним из двух способов - дают полный путь или вскакивают ~/Documents
во-первых, затем перейдите к каталогу, который Вы хотите. Когда Вы cd ~/Documents
и хочу перейти к папке, которой это определило местоположение в текущем каталоге, в котором Вы, можно использовать ./
нотация. Таким образом, Вы сделали бы:
$ cd ~/Documents
$ cd ./xmr-stak-cpu-1.3.0-1.5.0/
Конечно, Вы не должны добавлять это ./
, когда Вы просто делаете cd xmr-stak-cpu-1.3.0-1.5.0
автоматически посмотрит в Вашем текущем рабочем каталоге. Однако лучше быть явным, и кроме того ./
помогает проблемам предотвращения с именами файлов, которые могли бы запуститься с -
(который является совершенно другим мешком проблем и является темой в течение другого дня).
С другой стороны, можно дать полный путь:
$ cd ~/Documents/xmr-stak-cpu-1.3.0-1.5.0/
Обратите внимание, что можно также использовать $HOME
переменная вместо ~
, который является в значительной степени тем же в действительности, однако они отличаются по своей природе и по дополнительному материалу, с которым можно сделать ~
. См. мой ответ на CD Различия и CD ~.
Хорошо, до сих пор мы сохранили вещи довольно простыми в целях объяснения основ новым пользователям. Но существует намного больше к тильде, точечной наклонной черте и навигации по дереву каталогов, чем это. Вопросы становятся более сложными, когда мы рассматриваем ту тильду и cd
ведите себя по-другому в других оболочках, и если мы также рассматриваем стандарт POSIX. Некоторые вещи здесь я уже затронул в моем связанном ответе на Unix & Linux, так убедиться проверить это также.
В подобных Границе оболочках (который является bash
, ksh
, ksh
- связанные реализации как mksh
, и значение по умолчанию Ubuntu /bin/sh
, который является на самом деле dash
) неупомянутая ведущая тильда показывает Расширение Тильды, которое на самом деле указано как стандартное поведение POSIX. В зависимости от того, что следует за неупомянутой ведущей тильдой, она имеет различные эффекты:
с неупомянутым продвижением ~
, когда нет никаких символов после него (или если нет ничего между ~
и затем закрыл кавычки /
, т.е. пустая строка), это расширяется до того же значения как $HOME
переменная среды, т.е. Ваша домашняя папка. Так cd ~
и cd ~/
значьте каталог изменения для своей домашней папки. Отметьте это ~
и /
должен закрыться кавычки:
$ bash -c 'cd /etc/; ls -d ~'
/home/xieerqi
$ bash -c 'cd /etc/; ls -d ~/'
/home/xieerqi/
$ bash -c 'cd /etc/; ls -d ~"/"'
ls: cannot access '~/': No such file or directory
$ bash -c 'cd /etc/; ls -d "~"/'
ls: cannot access '~/': No such file or directory
с неупомянутым продвижением ~
, набор символов, которые следуют за ним, считают возможным именем для входа в систему. Так cd ~testuser
или cd ~testuser/
означал бы, что Вы хотите вскочить testuser
текущий рабочий каталог. Снова, заключение в кавычки вопросов:
$ bash -c 'cd /etc/; ls -d ~testuser'
/home/testuser
$ bash -c 'cd /etc/; ls -d ~"testuser"'
ls: cannot access '~testuser': No such file or directory
$ bash -c 'cd /etc/; ls -d ~testuser"/"'
ls: cannot access '~testuser/': No such file or directory
Это - все стандартное поведение и работы через плату в dash
, ksh
, и конечно bash
. Однако существует несколько вещей, которые оболочки делают по-другому. В частности, bash
имеет дополнительные расширения, которые Вы можете выполнить с тильдой и обрабатываете сброс HOME
по-другому, чем другие оболочки. Вот дополнительные расширения, в которых можно выполнить bash
:
~+
ссылается на Ваш текущий рабочий каталог, то же как PWD
переменная. Это также работает в ksh
но нет dash
.
$ bash -c 'echo ~+; unset PWD;echo ~+'
/home/xieerqi
~+
~-
ссылается на Ваш предыдущий рабочий каталог, то же как OLDPWD
переменная. Также работы в ksh
но нет dash
.
$ bash -c 'cd /etc/;cd /usr; echo ~-; unset OLDPWD;echo ~-'
/etc
~-
В bash
можно переместиться И записать, где Вы были путем продвижения определенных каталогов на стопке каталога (или массив), и можно сослаться на них ~[+-]<NUMBER>
, где +
означал бы смотреть от левых массива, и -
справа. Это bash
конкретный и не работает работа в ksh
ни dash
.
$ bash -c 'pushd /etc/; pushd /usr; echo ~+1'
/etc ~
/usr /etc ~
/etc
См. схему в ответе muru на связанный вопрос, который показывает, как использовать индексы для ~+
и ~-
.
Другой вещью, на которую я уже намекнул, является сброс HOME
переменная среды. То, что это - переменная и может быть сброшено, создает проблему - как указано стандартом POSIX, расширение тильды зависит от переменных среды, но согласно стандарту", [я] РАЗМЕЩАЮ, сброшен, результаты неуказанные". В этом случае, ksh
и dash
просто повреждение:
$ ksh -c 'cd /usr; unset HOME; cd ~'
ksh: cd: xieerqi: [No such file or directory]
$ dash -c 'cd /usr; unset HOME; cd ~'
dash: 1: cd: can't cd to ~
На самом деле это соответствует стандарту для cd
также:
- Если никакой операнд каталога не дан, и переменная Домашней среды пуста или не определена, поведение по умолчанию определяется реализацией, и никакие дальнейшие шаги не должны быть предприняты.
В отличие от этого, bash
, вещи дескрипторов по-другому. Согласно руководству удара:
Если ДОМОЙ сброшен, корневым каталогом пользователя, выполняющего оболочку, заменяют вместо этого. Иначе префикс тильды заменяется корневым каталогом, связанным с указанным именем для входа в систему.
Другими словами, когда домой сброшен только, удар не повредится, но если HOME
установлен на пустую строку, она повредится:
$ bash -c 'cd /etc; unset HOME; cd ~; pwd'
/home/xieerqi
$ bash -c 'cd /etc; HOME=""; cd ~; pwd'
/etc
~
был выбран для представления корневого каталога пользователя потому что один на время ~
и HOME
ключи раньше находились на той же клавише на клавиатуре на терминале Lier-Siegler ADM-3A. (источник)
Тильда (~
) коротко для Вашего корневого каталога (как переменная среды $HOME
). Можно работать echo ~
лично убеждаться. В Вашем случае Вы будете видеть /home/chance
.
Абсолютный path1 каталога, к которому Вы хотите получить доступ, ~/Documents/xmr-stak-cpu-1.3.0-1.5.0
, таким образом, если Вы хотите, Вы можете cd
прямо там, и это будет работать независимо от того, где Вы:
cd ~/Documents/xmr-stak-cpu-1.3.0-1.5.0
Если Вы уже находитесь в ~/Documents
, можно использовать относительный path1:
cd xmr-stak-cpu-1.3.0-1.5.0
Или, более подробные, можно использовать ./
относиться к текущему каталогу:
cd ./xmr-stak-cpu-1.3.0-1.5.0
Также обратите внимание на это, если Вы в настоящее время находитесь в ~
, существует другой относительный путь:
cd Documents/xmr-stak-cpu-1.3.0-1.5.0
Сноски:
Из Википедии, полных путей по сравнению с относительными путями:
Полный или полный путь указывает на то же местоположение в файловой системе, независимо от текущего рабочего каталога. Чтобы сделать это, это должно включать корневой каталог.
В отличие от этого, относительный путь начинает с некоторого данного рабочего каталога, избегая потребности обеспечить полный полный путь.