Значение тильды в Linux bash (не домашний каталог)

Во-первых, я знаю, что ~/ это домашний каталог. CDing к ~ или же ~/ берет меня в домашний каталог.

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

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

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

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

8 ответов

Это функция 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,

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

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

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

cd ~ username

берет вас к тому, что пользователи дома реж

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

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 -

Это означает так же, как ~-,

Расширение тильды в Баше:

http://bash-hackers.org/wiki/doku.php/syntax/expansion/tilde

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

/home2 auto.home --timeout 60

а также /etc/auto.home похоже:

mgalgs -rw,noquota,intr space:/space/mgalgs

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

В *nix, ~ разрешит в ваш домашний каталог. также ~X будет разрешать "пользователь X".

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

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

Другие вопросы по тегам