Значение тильды в Linux bash (не домашний каталог) - PullRequest
100 голосов
/ 16 июня 2009

Прежде всего, я знаю, что ~/ это домашний каталог. Запись на ~ или ~/ переносит меня в домашний каталог.

Однако cd ~X переносит меня в особое место, где X кажется чем-то.

В bash, если я нажму "cd ~" и нажму на вкладку, отобразится множество возможных ~X вариантов, таких как ~mail и ~postgres и ~ssh. Переход к этим папкам и выполнение pwd показывает, что эти папки не находятся в домашнем каталоге; они повсюду.

Они не псевдонимы. Я проверил Они не env. переменные, иначе им потребуется $.

Что такое настройка этих ссылок и где я могу найти, где они устанавливаются?

Ответы [ 8 ]

67 голосов
/ 02 ноября 2009

Это функция Bash, которая называется " расширение тильды ". Это функция оболочки, а не ОС. Например, с csh вы будете вести себя по-другому.

Чтобы ответить на ваш вопрос о том, откуда поступает информация: ваш домашний каталог поступает из переменной $HOME (независимо от того, что вы там храните), в то время как дома других пользователей извлекаются в режиме реального времени с использованием getpwent(). Эта функция обычно контролируется NSS ; поэтому по умолчанию значения извлекаются из /etc/passwd, хотя его можно настроить для получения информации с использованием любого желаемого источника, такого как NIS, LDAP или база данных SQL.

Расширение Tilde - это больше, чем поиск в домашнем каталоге. Вот резюме:

~              $HOME
~fred          (freds home dir)

~+             $PWD   (same effect as ./)
~-             $OLDPWD (your previous directory)
~1             `dirs +1`
~2             `dirs +2`
~-1            `dirs -1`

dirs и ~1, ~-1 и т. Д. Используются вместе с pushd и popd.

33 голосов
/ 16 июня 2009

Это домашние каталоги пользователей. Попробуйте cd ~(your username), например.

16 голосов
/ 16 июня 2009

Являются ли они домашними каталогами пользователей в /etc/passwd? Такие службы, как postgres, sendmail, apache и т. Д., Создают системных пользователей, которые имеют домашние каталоги, как обычные пользователи.

13 голосов
/ 16 июня 2009

это пользователи, проверьте ваш / etc / passwd

cd ~ username

ведет вас к этому домашнему каталогу пользователей

9 голосов
/ 16 июня 2009

На моей машине, из-за того, как у меня все настроено, делаем:

cd ~             # /work1/jleffler
cd ~jleffler     # /u/jleffler

Первый обращает внимание на значение переменной среды $HOME; Я намеренно установил $HOME на локальную файловую систему вместо файловой системы, смонтированной на NFS. Второй читает из файла паролей (приблизительно; NIS немного усложняет) и обнаруживает, что файл паролей говорит, что мой домашний каталог - /u/jleffler и изменяется на этот каталог.

Раздражает то, что большая часть программного обеспечения ведет себя так, как описано выше (и POSIX-спецификация для оболочки требует такого поведения). Я использую некоторое программное обеспечение (и у меня нет особого выбора в его использовании), которое обрабатывает информацию из файла паролей как текущее значение $ HOME, что неверно.

Применяя это к вопросу - как уже отмечали другие, 'cd ~x' отправляется в домашний каталог пользователя 'x', а в более общем случае, когда выполняется расширение тильды, ~x означает домашний каталог пользователя. 'x' (и это ошибка, если пользователь 'x' не существует).


Возможно, стоит упомянуть, что:

cd ~-       # Change to previous directory ($OLDPWD)
cd ~+       # Change to current directory ($PWD)

Я не могу сразу найти применение для '~+', если вы не сделаете несколько странных вещей с перемещением символических ссылок в пути, ведущем к текущему каталогу.

Вы также можете сделать:

cd -

То же самое, что и ~-.

5 голосов
/ 16 июня 2009
1 голос
/ 21 ноября 2014

Если вы используете autofs, то расширение может фактически исходить из /etc/auto.home (или аналогичного для вашего дистрибутива). Например, мой /etc/auto.master выглядит так:

/home2 auto.home --timeout 60

и /etc/auto.home выглядит так:

mgalgs -rw,noquota,intr space:/space/mgalgs
0 голосов
/ 27 апреля 2016

Возможно, вы видите, что пользователи OpenDirectory / ActiveDirectory / LDAP автоматически подключаются к вашему домашнему каталогу.

В * nix ~ будет преобразован в ваш домашний каталог. Аналогично ~X будет преобразован в 'пользователя X'.

Аналогично автоматическому монтированию для каталогов, OpenDirectory / ActiveDirectory / LDAP используется в больших / корпоративных средах для автоматического монтирования пользовательских каталогов. Эти пользователи могут быть настоящими людьми или учетными записями компьютеров, созданными для предоставления различных функций.

Если вы введете ~ Tab , вы увидите список пользователей на вашем компьютере.

...