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

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

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

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

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

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

Ответ 1

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

cd ~ имя пользователя

приведет вас к домашнему директорию пользователей

Ответ 5

На моей машине, из-за того, что у меня есть вещи, выполните:

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 -

Это означает, что ~-.

Ответ 7

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

/home2 auto.home --timeout 60

и /etc/auto.home выглядит следующим образом:

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

Ответ 8

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

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

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

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