जवाबों:
यदि आप अपने गृह को संशोधित करने का प्रयास कर रहे हैं, तो आप कर सकते हैं
export HOME=/home/...
या तो आपके शेल में, या आपकी ~ / .profile फ़ाइल और / या ~ / .bashrc (या उपयुक्त लॉगिन शेल) में।
(उपरोक्त कोड बैश और इसी तरह के गोले के लिए काम करेगा, जो डेबियन में डिफ़ॉल्ट हैं; आप अन्यथा `सेटेनव घर $ घर: / अतिरिक्त / पथ मैं अन्य डिस्ट्रो में csh- जैसे गोले पर सोचते हैं।)
संपादित करें - हालांकि यह शायद ऐसा करने का तरीका नहीं है। अन्य उत्तर देखें। इस उत्तर का उपयोग न करें।
लॉगिन प्रोग्राम आपके शेल पर निष्पादन को कॉल करने से पहले व्यवस्थित करता है (/ इसे निष्पादित करने के लिए तर्कों में शामिल करता है), / etc / passwd के मान के आधार पर।
इसे चलाकर संपादित करें usermod -d /home/whatever_dir whatever_user
:।
कृपया ध्यान दें कि यह (जाहिर है) नई होम डायरेक्टरी होगी। cd
लॉगिन पर बैश करना होगा , इसलिए सुनिश्चित करें कि यह मौजूद है और अनुमतियाँ सही हैं। इसके अलावा, के बारे में भूल नहीं है .bashrc
, .profile
, .xinitrc
, आदि; यदि वे होम डायरेक्टरी में नहीं हैं, तो उन्हें पढ़ा नहीं जाएगा।
से usermod
:
Usage: usermod [options] LOGIN
Options:
-c, --comment COMMENT new value of the GECOS field
-d, --home HOME_DIR new home directory for the user account
-e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE
-f, --inactive INACTIVE set password inactive after expiration
to INACTIVE
-g, --gid GROUP force use GROUP as new primary group
-G, --groups GROUPS new list of supplementary GROUPS
-a, --append append the user to the supplemental GROUPS
mentioned by the -G option without removing
him/her from other groups
-h, --help display this help message and exit
-l, --login NEW_LOGIN new value of the login name
-L, --lock lock the user account
-m, --move-home move contents of the home directory to the
new location (use only with -d)
-o, --non-unique allow using duplicate (non-unique) UID
-p, --password PASSWORD use encrypted password for the new password
-R, --root CHROOT_DIR directory to chroot into
-s, --shell SHELL new login shell for the user account
-u, --uid UID new UID for the user account
-U, --unlock unlock the user account
मैंने कुछ खुदाई की, और इसका जवाब थोड़ा आश्चर्यचकित करने वाला है। निम्नलिखित परीक्षण स्क्रिप्ट लें और chmod +x
इसे:
#!/bin/bash
printf 'My home is: '
echo ~ || echo 'nowhere'
हम इसे चला सकते हैं ./test.sh
और देख सकते हैं:
मेरा घर है: / घर / उपयोगकर्ता
आइए स्ट्रीप के साथ हुड के नीचे एक नज़र डालें।
$ strace ./test.sh |& grep '^open[a-z]*'
openat (AT_FDCWD, "/etc/ld.so.cache", O_RDONLY | O_CLOEXEC) = 3
openat (AT_FDCWD, "/lib/x86_64-linux-gnu/libtinfo.so.5", O_RDONLY | O_CLOEXEC) = 3
openat ( AT_FDCWD, "/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY | O_CLOEXEC) = 3
ओपनैट (AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY OCL = 3
ओपेनट (AT_FDCWD, "/ dev / tty", O_RDWR | O_NONBLOCK) = 3
ओपेनैट (AT_FDCWD, "/ usr / lib / locale-आर्काइव, O_RDONLY | O_CLOEXEC) = 3
ओलाट (AT_FDCWD," lib / x86_64-linux-gnu / gconv / gconv-मॉड्यूल.cache ", O_RDONLY) = 3
ओपनैट (AT_FDCWD," .test.sh ", O_RDONLY) = 3
मुझे गृह, आरसी फ़ाइलों या पासवार्ड का कोई उल्लेख नहीं दिखता है। आइए इसे एक स्वच्छ वातावरण के साथ आज़माएँ:
env -i bash
echo $HOME #this will be blank since we cleared the env
अपेक्षा के अनुरूप कुछ भी नहीं। रिक्त एनवी में स्क्रिप्ट चलाते हैं।
env -i bash
./test.sh
मेरा घर है: / घर / उपयोगकर्ता
दिलचस्प है, स्क्रिप्ट घर पाने में सक्षम है। अब ट्रेस करें।
strace ./test.sh |& grep '^open[a-z]*'
अब हम देखते हैं:
openat (AT_FDCWD, "/etc/ld.so.cache", O_RDONLY | O_CLOEXEC) = 3
openat (AT_FDCWD, "/lib/x86_64-linux-gnu/libtinfo.so.5", O_RDONLY | O_CLOEXEC) = 3
openat ( AT_FDCWD, "/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY | O_CLOEXEC) = 3
ओपनैट (AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY OCL = 3
ओपेनट (AT_FDCWD, "/ dev / tty", O_RDWR | O_NONBLOCK) = 3
ओपेनट (AT_FDCWD, "/etc/nsswitch.conf", O_RDONLY | O_CLOEXEC) = 3
ओपेनटेट (AT_FDCWD, "/ etcld) । कैश ", O_RDONLY | O_CLOEXEC) = 3
ओपेनैट (AT_FDCWD," /lib/x86_64-linux-gnu/libnss_compat.so.2 ", O_RDONLY | O_CLOEXEC) = 3
ओपेनटेट (AT_FDCWD," /etc/ , O_RDONLY | O_CLOEXEC) = 3
ओपनैट (AT_FDCWD, "M/lib/x86_64-linux-gnu/libnss_nis.so.2 ", O_RDONLY | O_CLOEXEC) = 3 |
Openat (AT_FDCWD, "/lib/x86_64-linux-gnu/libnsl.so.1", O_RDONLY | O_CLOEXEC) = 3
openat (AT_FDCWD ) , /lib/x86_64-linux-gnu/libnss_files.2so.2.2.2 O_CLOEXEC) = 3
ओपनैट (AT_FDCWD, "/ etc / passwd", O_RDONLY | O_CLOEXEC) = 3
ओपेनट (AT_FDCWD, ".test.sh", O_RDONLY) = 3
मैंने दिलचस्प पंक्तियों को बोल्ड किया है। जैसा कि हम देख सकते हैं, यह दिखाई देगा कि जब $HOME
परिभाषित नहीं किया जाता है, तो शेल इसे भरने की कोशिश करेगा, तब भी जब लॉगिन या इंटरैक्टिव मोड में नहीं।
$HOME
साथ भ्रमित होने की संभावना है$PATH
। इसका मतलब यह नहीं है कि$HOME
(पूरे मूल्य को एक ही मार्गनाम माना जाएगा) या, ज्यादातर मामलों में,$HOME
सभी को संशोधित करने के लिए ।