উত্তর:
আপনি যদি নিজের হোম সংশোধন করার চেষ্টা করছেন, আপনি এটি করতে পারেন
export HOME=/home/...
হয় আপনার শেল, বা আপনার ~ /। প্রোফাইল ফাইল এবং / অথবা or / .bashrc (বা উপযুক্ত লগইন শেল)।
(উপরের কোডটি ব্যাশ এবং অনুরূপ শেলের জন্য কাজ করবে, যা ডিবিয়ানে ডিফল্ট; আপনি অন্যথায় dist সেটেনভ হোম $ হোম: / অতিরিক্ত / পাথ আমি অন্যান্য ডিস্রোসের সিএস-এর মতো শেলগুলি নিয়ে ভাবেন))
সম্পাদনা করুন - তবে এটি সম্ভবত এটি করার উপায় নয়। অন্যান্য উত্তর দেখুন। এই উত্তরটি ব্যবহার করবেন না।
লগইন প্রোগ্রামটি আপনার শেলটিতে এক্সিকিউটিভ কল করার আগে এটিকে সাজায় (এক্সিকিউটে আর্গুমেন্টে এটি অন্তর্ভুক্ত করে) / ইত্যাদি / পাসডাব্লুডির মানের উপর ভিত্তি করে।
চলমান এই সম্পাদনা করুন: 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
এবং দেখতে পারি:
আমার বাড়িটি: / হোম / ব্যবহারকারী user
স্ট্রেস সহ ফণা নীচে একটি উঁকি নেওয়া যাক।
$ strace ./test.sh |& grep '^open[a-z]*'
ওপেনাট (AT_FDCWD, "/etc/ld.so.cache", O_RDONLY | O_CLOEXEC) = 3
ওপেনাট (AT_FDCWD, "/lib/x86_64-linux-gnu/libtinfo.so.5", O_RDONLY | O_CLOEXEC) = 3
ওপেন্যাট ( 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 | O_CLOEX) = 3
ওপেনাট (এএফডিসিডাব্লুডি, "/ দেব / টিটি", ও_আরডিডাব্লুআর | ও_নোনব্লক) = 3 টি
ওপেনট (এ এসএফডিসিডাব্লুডি, "/ ইউএসআর / লিব / লোকেল / লোকেল-সংরক্ষণাগার", ও_আরডোনলি | ও_সিওএলসিইসি) = 3
ওপেনট lib / x86_64-linux-gnu / gconv / gconv-modules.cache ", O_RDONLY) = 3
ওপেনাট (AT_FDCWD," ./test.sh ", O_RDONLY) = 3
আমি হোম, আরসি ফাইল, বা পাসডাব্লুডির কোনও উল্লেখ দেখতে পাচ্ছি না। এটি একটি পরিষ্কার env সঙ্গে চেষ্টা করুন:
env -i bash
echo $HOME #this will be blank since we cleared the env
প্রত্যাশিত হিসাবে কিছুই না। আসুন স্ক্রিপ্টটি ফাঁকা env এ চালানো যাক।
env -i bash
./test.sh
আমার বাড়িটি: / হোম / ব্যবহারকারী user
আকর্ষণীয়, স্ক্রিপ্টটি বাড়ি পেতে সক্ষম। এখন ট্রেস করা যাক।
strace ./test.sh |& grep '^open[a-z]*'
এখন আমরা দেখতে পাচ্ছি:
ওপেনাট (AT_FDCWD, "/etc/ld.so.cache", O_RDONLY | O_CLOEXEC) = 3
ওপেনাট (AT_FDCWD, "/lib/x86_64-linux-gnu/libtinfo.so.5", O_RDONLY | O_CLOEXEC) = 3
ওপেন্যাট ( 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 | O_CLOEX) = 3
ওপেনাট (AT_FDCWD, "/ dev / tty", O_RDWR | O_NONBLOCK) = 3
ওপেনাট (AT_FDCWD, "/etc/nsswitch.conf", O_RDONLY | ও_সিএলএক্সইসিইসি) = 3
ওপেনাট (AT_FDCWD, "/etc/ld.so। ক্যাশে ", O_RDONLY | O_CLOEXEC) = 3
ওপেনাট (AT_FDCWD," /lib/x86_64-linux-gnu/libnss_compat.so.2 ", ও_আরডোনলি | ও_সিএলএক্সইসি) = 3 ওপেনাট (এএফডিসিডব্লিউডি," / লিবি / এক্সক্স 86 libnsl.so.1 ", O_RDONLY | O_CLOEXEC) = 3
ওপেনাট (AT_FDCWD," /etc/ld.so.c , O_RDONLY | O_CLOEXEC) = 3 টি
ওপেনাট (AT_FDCWD, "/lib/x86_64-linux-gnu/libnss_nis.so.2 ", O_RDONLY | O_CLOEXEC) = 3
ওপেনাট (AT_FDCWD, "/lib/x86_64-linux-gnu/libnss_files.so.2", O_RDONL | O_CLOEXEC) = 3
ওপেনাট (AT_FDCWD, "/ etc / passwd", O_RDONLY | O_CLOEXEC) = 3
খোলা
আমি আকর্ষণীয় লাইন সাহসী করেছি। আমরা দেখতে পাচ্ছি, এটি প্রদর্শিত হবে যখন $HOME
সংজ্ঞায়িত না হয়, শেলটি এটি পূরণ করার চেষ্টা করবে, এমনকি লগইন বা ইন্টারেক্টিভ মোডে না থাকলেও।
$HOME
করছেন$PATH
। একাধিক পাথ$HOME
(পুরো মানটি একক পথের নাম হিসাবে বিবেচিত হবে) বা বেশিরভাগ ক্ষেত্রে একেবারে সংশোধন করার কোনও অর্থ নেই$HOME
।