Какой каталог '~', когда я набираю 'cd ~'? - PullRequest
4 голосов
/ 14 февраля 2009

Я только новичок в использовании SSH, но когда я вхожу в систему, я оказываюсь в каталоге ~, который в общем случае является тем же самым каталогом при входе по FTP. Я все еще могу перейти к /, но я не знаю, что ~ означает. Главная? Где это по отношению к / или как я могу узнать?

Ответы [ 11 ]

17 голосов
/ 14 февраля 2009

~ - псевдоним текущей домашней папки пользователей, вошедших в систему. Чтобы узнать, где это на самом деле, введите pwd (расшифровывается как: Print Working Directory) сразу после входа в систему , что должно дать вам местоположение относительно /. Это, вероятно, что-то вроде:

/home/myusername
8 голосов
/ 14 февраля 2009

~ это ваш домашний каталог, да. Что очень хорошо, так как ваш домашний каталог не всегда там, где вы думаете, это должно быть (/home/).

Кроме того, интересный факт: вы можете использовать «cd ~ myuser», чтобы попасть в домашний каталог пользователя «myuser».

7 голосов
/ 14 февраля 2009

Как прокомментировали другие, тильда указывает ваш текущий каталог $HOME. Это может совпадать или не совпадать со значением ~username для вашего имени пользователя. На моей машине $HOME и ~ оба обозначают /work1/jleffler. Однако ~jleffler является ссылкой на смонтированный каталог NFS, /u/jleffler, как указано в файле /etc/passwd (или любой эквивалентной базе данных - стандарт POSIX определяет поведение в терминах функции getpwnam(); см. Ниже) , Мой профиль тщательно устанавливает $HOME. Интересно (или раздражающе) определить, какие программные пакеты используют неправильное определение домашнего каталога.

Для большинства людей ~ и ~username одинаковы для их имени пользователя, но это не обязательно. Учитывая, что вы задаете вопрос, почти наверняка все случаи ~ и ~username одинаковы.

Цитата из раздела 2.6.1 «Расширение тильды» POSIX.1-2008:

«Префикс тильды» состоит из символа <tilde> без кавычек в начале слова, за которым следуют все символы, предшествующие первой без кавычки <slash> в слове, или все символы в слове, если есть нет <slash>. [...] Если имя для входа в систему равно нулю (т. Е. Префикс тильды содержит только тильду), префикс тильды заменяется значением переменной HOME. Если HOME не установлен, результаты не уточняются. В противном случае префикс тильды должен быть заменен путем к исходному рабочему каталогу, связанному с именем входа, полученным с использованием функции getpwnam() [...]. Если система не распознает имя для входа, результаты не определены.

3 голосов
/ 14 февраля 2009

Вы можете попробовать realpath

realpath ~
2 голосов
/ 14 февраля 2009

~ расширяется до вашего домашнего каталога, как было указано, но я думаю, что стоит отметить, что это не особенность самого ssh.

ssh (среди многих других замечательных функций!) Позволяет вам установить удаленную оболочку , и эта оболочка может быть предоставлена ​​многими различными частями программного обеспечения.

В системе * nix ваша учетная запись будет связана с определенной оболочкой, GNU bash является популярным выбором. И так бывает, чем в bash и большинстве других POSIX-совместимых оболочек, символ тильды расширяется как ярлык для вашего домашнего каталога .

2 голосов
/ 14 февраля 2009

Да, это домашний каталог пользователя, в который вы вошли. Вы можете использовать команду pwd (распечатать рабочий каталог), чтобы увидеть, где она находится в файловой системе.

1 голос
/ 17 февраля 2009

~ это ваш домашний каталог. Чтобы увидеть тип пути:

echo ~

в терминале

1 голос
/ 17 февраля 2009

Различные оболочки могут или не могут справиться с этим по-разному, но Джонатан получил самое близкое, не выходя и не говоря это. Оболочка расширяет «~» до того, что хранится в переменной окружения $ HOME. Оболочка расширяет ~ username до того, что указано в поле оболочки / etc / passwd для данного имени пользователя. Если вы не переопределите его, оболочка (или ssh, в зависимости от реализации) установит $ HOME в качестве домашнего поля из / etc / passwd, поэтому они оба одинаковы (при условии, что вы «username») пока вы не измените один.

Относительно того, почему вы видите ~ в ssh ...

В приглашении говорится, что «~» является вашим текущим каталогом, скорее всего, потому что вы используете Bash в качестве оболочки и значение $ PS1 (строка приглашения, которую вы видите - она ​​установлена ​​в / etc / profile или / etc / profile .d / *, скорее всего) где-то содержит \ w или \ W. Строка \ w в приглашении показывает текущий каталог и сворачивается в «~», когда вы находитесь в каталоге, указанном в $ HOME. Вот небольшая демонстрация, начинающаяся с моего homedir - обратите внимание, как «\ w» заменяется либо текущим каталогом, либо символом ~, в зависимости от того, какое значение HOME установлено. Также обратите внимание, что косая черта не работает - HOME не может заканчиваться косой чертой, чтобы это работало. :)

danny@machine ~ > export PS1='\w > '     # change my prompt (effective on next line)
~ > cd /tmp                              # move to /tmp to demonstrate
/tmp > export HOME=/tmp/                 # set HOME to include trailing /
/tmp > export HOME=/tmp                  # try again without trailing /
~ >                                      # notice that this works
~ > cd /home/danny                       # back to homedir
/home/danny > export HOME=/home/danny    # see how it's /home/danny, not ~
~ > export PS1='danny@machine \w > '     # after resetting $HOME, it should work ok
danny@machine ~ >                        # hooray!
1 голос
/ 14 февраля 2009

/ является корнем файловой системы ~ / или ~ является корнем вашего профиля, ~ / всегда / home / username

0 голосов
/ 14 февраля 2009

Домашний каталог не обязательно должен быть в каталоге / home, как указал kigurai .

...