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


106

По-перше, я знаю, що ~/це домашній каталог. Відтворення на CD ~або перенесе ~/мене до домашнього каталогу.

Однак cd ~Xперевозить мене в особливе місце, де Xздається, що завгодно.

Якщо у випадку, якщо я натиснув " cd ~" та натиснув вкладку, вона відображає купу можливих ~Xваріантів, таких як ~mailі ~postgresта ~ssh. Якщо зайти до цих папок і зробити pwdпокази, мені показано, що цих папок немає в домашньому каталозі; вони всюди.

Вони не псевдоніми. Я перевірив. Вони не є env.змінними, інакше їм потрібно буде $.

Що встановлює ці посилання, і де я можу знайти, де вони встановлюються?


~ X просто повертає буквальне "~ X", але ~ повертає $ HOME і ~ + повертає $ PWD - вони не особливі, крім того, що вони отримують змінні оболонки. тобто вони не зберігають значення і не виконують команди для їх пошуку. Вони вже визначені. Ви пробували ~ -? Я не можу придумати його використання, але знову ж таки, він повертає змінну оболонки $ OLDPWD
SDsolar

Відповіді:


71

Це функція Bash під назвою " розширення тильди ". Це функція оболонки, а не ОС. Ви отримаєте різну поведінку, наприклад, з csh.

Щоб відповісти на ваше запитання про те, звідки походить інформація: ваш домашній каталог походить із змінної $HOME(незалежно від того, що ви там зберігаєте), а домівки інших користувачів отримують у режимі реального часу за допомогою getpwent(). Зазвичай ця функція управляється НСС ; тому за замовчуванням значення витягуються /etc/passwd, хоча його можна налаштувати для отримання інформації за допомогою будь-якого потрібного джерела, наприклад, NIS, LDAP або бази даних SQL.

Розширення Tilde - це більше, ніж пошук домашнього каталогу. Ось підсумок:

~              $HOME
~fred          (freds home dir)

~+             $PWD       (your current working directory)
~-             $OLDPWD    (your previous directory)
~1             `dirs +1`
~2             `dirs +2`
~-1            `dirs -1`

dirsі ~1, ~-1тощо, використовуються спільно з pushdта popd.


як примітка, риба не підтримує жодного з них, крім простого тильду (~)

чому вони придумали ~+? здається досить марним.
Крегокс

3
~ + приблизно такий, як. Однак, щоб використовувати щось на кшталт ./file, потрібно перейти до файлової системи та з'ясувати, куди. знаходиться - це займає кілька циклів. Використання ~ + зберігає його роботу, просто повертаючи вміст змінної оболонки $ PWD, яка вже визначена під час проходження файлової системи.
SDsolar

32

Це домашні каталоги користувачів. Спробуйте cd ~(your username), наприклад.


1
Вони не є посиланнями, в облікових записах служб немає домашніх каталогів / home
Ana Betts

Найкраща відповідь у моєму випадку. Крім того, в моєму конкретному випадку це був кореневий каталог / папка, а не домашня папка.
wlwl2

16

Це домашні каталоги користувачів /etc/passwd? Такі сервіси, як postgres, sendmail, apache тощо, створюють користувачів системи, які мають домашні каталоги, як звичайні користувачі.


2
Дійсно, це ~ ім'я користувача - це домашній каталог вказаного користувача
Стів Вет

14

Це користувачі. Перевірте своє /etc/passwd.

cd ~username перенесе вас до домашнього каталогу цього користувача.


FTW. Оновлення TNX для очищення цього. Цікаво, скільки циклів і, можливо, навіть нижня частина корпусу беруть участь у цьому. Уявіть собі, якщо у вашій системі є 3K користувачів, як у невеликого провайдера. Yikes.
SDsolar

9

На моїй машині через те, як я налаштував речі:

cd ~             # /work1/jleffler
cd ~jleffler     # /u/jleffler

Перший звертає увагу на значення змінної середовища $HOME; Я навмисно встановив свою $HOMEлокальну файлову систему замість файлової системи, встановленої NFS. Другий читає з файлу паролів (приблизно; NIS трохи ускладнює речі) і виявляє, що файл пароля говорить, що мій домашній каталог /u/jlefflerі змінює цей каталог.

Прикро, що більшість програмного забезпечення поводиться як вище (і специфікація POSIX для оболонки вимагає такої поведінки). Я використовую деяке програмне забезпечення (і у мене немає великого вибору щодо його використання), яке трактує інформацію з файлу паролів як поточне значення $ HOME, що є неправильним.

Застосовуючи це до питання - як уже вказували інші, " cd ~x" переходить до домашнього каталогу користувача "x", і загальніше, коли відбувається розширення tilde, ~xозначає домашній каталог користувача "x" (і це помилка якщо користувача "x" не існує).


Можливо, варто згадати, що:

cd ~-       # Change to previous directory ($OLDPWD)
cd ~+       # Change to current directory ($PWD)

Я не можу відразу знайти використання для '~+ ', якщо ви не зробите якісь дивні речі з рухомими посиланнями на шляху, що веде до поточного каталогу.

Ви також можете зробити:

cd -

Це означає те саме, що ~-.


1
Про cd ~+: ви потенційно можете використовувати його, щоб перевірити, чи існує каталог, який ви зараз перебуваєте - навіть якщо це досить неортодоксальний спосіб зробити це.
професора


1

Якщо ви використовуєте, autofsто розширення може бути насправді з /etc/auto.home(або подібним для вашого дистрибутива). Наприклад, моє /etc/auto.masterвиглядає так:

/home2 auto.home --timeout 60

і /etc/auto.homeвиглядає так:

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

0

Можливо, ви бачите, що користувачі OpenDirectory / ActiveDirectory / LDAP "автоматизовані" у свій домашній каталог.

В * nix, ~буде вирішено у вашому домашньому каталозі. Так само ~Xбуде вирішено "користувач X".

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

Якщо ви введете, ~Tabви побачите список користувачів на вашій машині.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.