Чи можливо повторно визначити тильду ('~', домашній каталог)?


13

Чи можна переглянути домашній каталог? наприклад , щоб /ext1/usernameзамість того , щоб /home/username, наприклад , розкладаючи ~в інший каталог (на відміну від зміни фактичного домашнього каталогу , де домашні файли користувачів розташовані).

(Це питання здебільшого є академічним, оскільки це здається поганою практикою робити це. У мене також немає вибору в питанні використання csh, незважаючи на те, що я прочитав Топ 10.)


11
Ви маєте на увазі зміни фактичного домашнього каталогу, або ви маєте на увазі змусити оболонку розширитись ~на щось інше, ніж власне домашній каталог?
derobert

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

2
Не всі домашні каталоги користувачів, ви можете змінити лише один, як показує slm у його відповіді.
derobert

Відповіді:


28

Тильда ~інтерпретується вашою оболонкою. Ваша оболонка буде тлумачити ~як коротку форму $HOME.

Спробуйте (echo ~; HOME=foo; echo ~). Спершу слід надрукувати справжній домашній каталог, а потім "foo", як ви це встановите $HOME.

Значення за замовчуванням $HOMEпоходить від вашої конфігурації системи. Використовуйте getent passwdдля переліку всіх відомих користувачів та їх домашніх каталогів. Залежно від конфігурації системи ці записи можуть надходити з /etc/passwdбудь-якої служби віддаленого каталогу.

Якщо ви хочете лише тимчасово змінити домашній каталог, просто встановіть інший $HOME.

Якщо ви постійно хочете змінити його, вам доведеться змінити запис passwd, наприклад, вручну редагуючи /etc/passwd.


Дякую, @michas. Не можу повірити, що я пропустив цю змінну. (BTW, виявляється, у cshвідповідній змінній є $home(малі регістри), і ви не setenv HOME /ext1/acheongможете — тільки ви можете set home=/ext1/acheong, і це працювало для мене.)
Andrew Cheong

2
Щоб назавжди змінити його, ви також можете скористатисяusermod -d
user606723

1
Використовуйте vipw(або будь-який графічний інтерфейс, який надає ваша ОС), а не /etc/passwdбезпосередньо редагуйте . Пряме редагування ризикує пошкодити файл, який може бути важко відновити.
Кіт Томпсон

11

Значення, яке використовується ~, визначається із значення, яке ви отримуєте з адміністративної бази даних ( getent passwd), як правило, у /etc/passwdфайлі, для домашнього каталогу кожного користувача, який там визначений.

$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
sam:x:500:500:Sam Mingolelli:/home/sam:/bin/bash
tracy:x:501:501::/home/tracy:/bin/bash

6-й стовпець у цьому файлі - це значення, яке використовується, коли хтось cd ~надходить.

nsswitch

Ви можете побачити, що система використовувала б для домашнього каталогу користувача за допомогою команди getent passwd:

$ getent passwd
root:x:0:0:root:/root:/bin/bash
sam:x:500:500:Sam Mingolelli:/home/sam:/bin/bash
tracy:x:501:501::/home/tracy:/bin/bash

"База даних", яка забезпечує це, контролюється за допомогою вашої системної резолюції, визначеної в /etc/nsswitch.conf.

$ grep passwd /etc/nsswitch.conf 
#passwd:    db files nisplus nis
passwd:     files

Файли вгорі означають /etc/passwd, але "база даних" може надходити, наприклад, з LDAP, NIS або інших локальних мереж.

Переміщення / переосмислення?

Виконувати цю операцію - трохи непросто після створення облікових записів. Якщо ви створюєте облікові записи з нуля, то неважко переосмислити місцезнаходження свого домашнього каталогу користувача. Під час виконання useraddкоманди ви можете вказати місце, яке буде використовуватися для домашнього каталогу користувача.

Приклад

$ useradd -d /ext1/acheong ...

уривок зі сторінки man

-d, --home HOME_DIR
   The new user will be created using HOME_DIR as the value for the users 
   login directory. The default is to append the LOGIN name to BASE_DIR and 
   use that as the login directory name. The directory HOME_DIR does not 
   have to exist but will not be created if it is missing.

Для існуючих облікових записів?

Це стає більш хірургічною операцією, оскільки часто додому в домашній каталог користувача статично включається файли конфігурації, що робить його складнішим.

Приклад

$ grep home /home/sam/.*
/home/sam/.gtkrc-1.2-gnome2:include "/home/sam/.gtkrc.mine"

Вони або повинні бути виправлені, або ви повинні будете надати посилання від /home/samна нове місце, /ext1/sam.

Переміщення, коли "база даних" відсутня /etc/passwd

Якщо система отримує домашні каталоги з LDAP, NIS тощо, вам потрібно буде виконати переїзд у цих системах та узгодити переміщення файлів з /home/samна /ext1/sam.

Список літератури


Звичайно, зміни, які потребують переміщення файлів користувача. І, ймовірно, залиште символьне посилання на старому місці (бо інакше багато чого зламається ...)
derobert

@derobert - так, зробивши це кілька разів, я намагаюся уникати цього, як чуми.
slm

@slm - Дякую за таку детальну відповідь (і трохи історії). Боюся, що я хотів зробити щось набагато простіше - і не знав про існування змінної середовища, що представляє домашній каталог сеансу. Я впевнений, що ваша відповідь допоможе іншому читачеві в майбутньому. Знову дякую.
Ендрю Чонг

1

Якщо причина полягає в поширенні користувачів на декілька файлових систем, ви також можете використовувати automounter. І навіть дозволяють мати інший "базовий" каталог для своїх користувачів.

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