Значение тильды в 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, вы увидите список пользователей на вашем компьютере.