Во-первых, я знаю, что ~/
это домашний каталог. Компакт-диск ~
или ~/
переносит меня в домашний каталог.
Однако cd ~X
переносит меня в особое место, где X
вроде бы что угодно.
В bash, если я нажимаю " cd ~
" и нажимаю вкладку, появляется множество возможных ~X
вариантов, таких как ~mail
и ~postgres
и ~ssh
. Переход к этим папкам и выполнение операций pwd
показывает мне, что этих папок нет в домашнем каталоге; они повсюду.
Это не псевдонимы. Я проверил. Они не являются env.
переменными, иначе они потребовали бы $
.
Что устанавливает эти ссылки и где я могу найти, где они устанавливаются?
Ответы:
Это функция Bash, которая называется « тильда». ». Это функция оболочки, а не ОС. Например, вы получите другое поведение с csh.
Чтобы ответить на ваш вопрос о том, откуда берется информация: ваш домашний каталог берется из переменной
$HOME
(независимо от того, что вы там храните), в то время как дома других пользователей извлекаются в реальном времени с использованиемgetpwent()
. Эта функция обычно контролируется NSS ; поэтому по умолчанию значения извлекаются/etc/passwd
, хотя его можно настроить для получения информации из любого желаемого источника, такого как NIS, LDAP или база данных SQL.Расширение тильды - это больше, чем поиск в домашнем каталоге. Вот краткое изложение:
dirs
и~1
,~-1
и т.д., используются вместе сpushd
иpopd
.источник
~+
? кажется бесполезным.Это домашние каталоги пользователей. Попробуйте
cd ~(your username)
, например.источник
Это домашние каталоги пользователей
/etc/passwd
? Такие службы, как postgres, sendmail, apache и т. Д., Создают пользователей системы, у которых есть домашние каталоги, как и у обычных пользователей.источник
Это пользователи. Проверьте свой
/etc/passwd
.cd ~username
перенесет вас в домашний каталог этого пользователя.источник
На моей машине, из-за того, как я все настроил, делаю:
Первый обращает внимание на значение переменной окружения
$HOME
; Я намеренно установил$HOME
локальную файловую систему, а не файловую систему, смонтированную по NFS. Второй читает из файла паролей (примерно; NIS немного усложняет ситуацию) и обнаруживает, что в файле паролей указано, что мой домашний каталог находится,/u/jleffler
и переходит в этот каталог.Раздражает то, что большая часть программного обеспечения ведет себя так, как указано выше (и спецификация POSIX для оболочки требует такого поведения). Я использую некоторое программное обеспечение (и у меня нет особого выбора), которое обрабатывает информацию из файла паролей как текущее значение $ HOME, что неверно.
Применяя это к вопросу - как указывали другие, '
cd ~x
' переходит в домашний каталог пользователя 'x' и, в более общем смысле, всякий раз, когда выполняется расширение тильды,~x
означает домашний каталог пользователя 'x' (и это ошибка если пользователь 'x' не существует).Возможно, стоит упомянуть следующее:
Я не могу сразу найти применение для '
~+
', если только вы не сделаете какие-то странные вещи с перемещением символических ссылок по пути, ведущему к текущему каталогу.Вы также можете:
Это означает то же, что и
~-
.источник
cd ~+
: вы потенциально можете использовать его, чтобы проверить, существует ли каталог, в котором вы сейчас находитесь, даже если это довольно неортодоксальный способ сделать это.Расширение тильды в Bash:
http://bash-hackers.org/wiki/doku.php/syntax/expansion/tilde
источник
Если вы используете,
autofs
то расширение может быть получено/etc/auto.home
(или похоже на ваш дистрибутив). Например, мой/etc/auto.master
выглядит так:и
/etc/auto.home
выглядит так:источник
Возможно, вы видите, что пользователи OpenDirectory / ActiveDirectory / LDAP "автоматически монтируются" в ваш домашний каталог.
В * nix
~
разрешается в ваш домашний каталог. Таким же образом~X
разрешится «пользователь X».Подобно автоматическому монтированию каталогов, OpenDirectory / ActiveDirectory / LDAP используется в более крупных / корпоративных средах для автоматического монтирования пользовательских каталогов. Эти пользователи могут быть реальными людьми или могут быть учетными записями компьютеров, созданными для предоставления различных функций.
Если вы введете, ~Tabвы увидите список пользователей на вашем компьютере.
источник