Значение 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 -
Это означает, что ~-
.
Ответ 6
Расширение тильды в Bash:
http://bash-hackers.org/wiki/doku.php/syntax/expansion/tilde
Ответ 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, вы увидите список пользователей на вашем компьютере.