আমি কীভাবে একটি নতুন সিস্টেম ব্যবহারকারী তৈরি করতে পারি, অন্যজনের একটি সঠিক অনুলিপি (একই গোষ্ঠী, অনুমতি, সুবিধাগুলি এবং সেটিংস থাকা), তবে বিভিন্ন ব্যবহারকারী নাম, পাসওয়ার্ড এবং হোম ডিরেক্টরি সহ?
আমি কীভাবে একটি নতুন সিস্টেম ব্যবহারকারী তৈরি করতে পারি, অন্যজনের একটি সঠিক অনুলিপি (একই গোষ্ঠী, অনুমতি, সুবিধাগুলি এবং সেটিংস থাকা), তবে বিভিন্ন ব্যবহারকারী নাম, পাসওয়ার্ড এবং হোম ডিরেক্টরি সহ?
উত্তর:
এই স্ক্রিপ্ট এটি করবে:
#!/bin/bash
SRC=$1
DEST=$2
SRC_GROUPS=$(id -Gn ${SRC} | sed "s/${SRC} //g" | sed "s/ ${SRC}//g" | sed "s/ /,/g")
SRC_SHELL=$(awk -F : -v name=${SRC} '(name == $1) { print $7 }' /etc/passwd)
useradd --groups ${SRC_GROUPS} --shell ${SRC_SHELL} --create-home ${DEST}
passwd ${DEST}
এটি উত্স ব্যবহারকারীর গোষ্ঠীগুলি (তাদের লগইনের সমান গ্রুপটি অন্তর্ভুক্ত নয়) এবং শেল পেয়েছে, তারপরে একই শেল এবং গৌণ গ্রুপগুলির সাথে একটি নতুন ব্যবহারকারী তৈরি করবে।
Usage: clone-user src_user_name new_user_name
চেক করার কোনও ত্রুটি নেই, এটি কেবলমাত্র একটি দ্রুত এবং নোংরা ক্লোন স্ক্রিপ্ট।
john
, গ্রুপগুলির মধ্যে একটি johnny
। এখানে যা ঘটেছিল তা এখানে: SRC=john ; echo "$SRC group1 johnny group3" | sed "s/ ${SRC}//g" | sed "s/ /,/g"
আউটপুট:john,group1ny,group3
SRC_GROUPS=$(id -Gn ${SRC} | sed "s/ /,/g" | sed -r 's/\<'${SRC}'\>\b,?//g')
যা আংশিক স্ট্রিং ম্যাচের বিপরীতে সঠিক ব্যবহারকারী গ্রুপের নামটি যথাযথভাবে সরিয়ে ফেলবে। যাত্রা। যদি কোনও ব্যবহারকারীর আইডি 'পাই' হয় এবং কোনও ব্যবহারকারীর মধ্যে 'পাই, জিপিও, স্পি, ইত্যাদি' সহ গোষ্ঠী থাকে তবে এটি কেবল 'পাই' সরিয়ে ফেলবে, অন্য আংশিক স্ট্রিংয়ের মিলগুলি নয়।
passwd newuser
পর্যন্ত পাসওয়ার্ডটি পরিবর্তন করতে কার্যকর করুন execসচেতন হন যে সিস্টেমের ভিত্তিতে উভয় ব্যবহারকারীই একই (একই ইউআইডি), তাই একজন অন্যের হোম ডিরেক্টরিতে প্রবেশ করতে এবং ইচ্ছায় পরিবর্তন করতে সক্ষম হবে।
useradd
। এখন যেহেতু আমি এটি সম্পর্কে ভাবছি, আপনি এটি অন্য উপায়ে করতে পারেন, একটি নতুন ব্যবহারকারী তৈরি করতে পারেন useradd
এবং তারপরে প্রথমটির ক্লোন করতে ইউআইডি এবং জিআইডি সংশোধন করতে পারেন।
লিনাক্স মিন্টের 18 মেটের জন্য
মাইক অ্যান্ডারসনের স্ক্রিপ্টের উপর ভিত্তি করে, আমি এমন একটি তৈরি করেছি যা নতুন ব্যবহারকারী, পুরানো ব্যবহারকারী, নতুন পাসওয়ার্ড সম্পর্কে প্রশ্ন জিজ্ঞাসা করে এবং তারপরে পুরানো ব্যবহারকারীর হোম ডিরেক্টরিটি অনুলিপি করে এবং নতুন হোম ডিরেক্টরিতে পুরানো ব্যবহারকারীর নামের সমস্ত উদাহরণকে নতুন দিয়ে প্রতিস্থাপন করে ব্যবহারকারীর নাম
ইউজারডড লাইনটি সম্পর্কে আমার স্ক্রিপ্টের মূল পার্থক্যটি হ'ল chpasswd দ্বারা প্রতিস্থাপিত লিনাক্স মিন্ট 18 এ পাসডব্লুড ব্যর্থ হয়। কাজের পাসওয়ার্ড পেতে আমার একটি নতুন লাইন তৈরি হয়েছিল: প্রতিধ্বনি $ নতুন ব্যবহারকারী: $ নতুন পাসওয়ার্ড | chpasswd।
আর একটি পার্থক্য হ'ল আমি কাজ করতে - ক্রিয়েট-হোম পাব না তাই আমি পরিবর্তে একটি নতুন লাইনে এমকিডির ব্যবহার করেছি।
আপনার যদি কোনও বিশাল পুরানো ব্যবহারকারীর হোম ডিরেক্টরি থাকে তবে দেখুন।
আপনার যা প্রয়োজন তা নিন এবং বাকীটি রেখে দিন। আপনার অনুলিপি করা কোনও কোডের জন্য আপনি দায়বদ্ধ - ব্যাকআপ করুন!
#!/bin/bash
# clone a user
# usage:
# if you named this as below then
# change to the directory and run this command
# sudo bash clone-user.sh
echo "============="
echo "this script will create a new user"
echo "based on an existing user's data"
echo
echo "You will be shown a list of users who can currently log on"
echo "Remember which user you would like to clone."
echo "You will be asked for the new user's name, their password"
echo "and the old user to clone".
echo "============="
echo
echo -n "New user's name: "
read newuser
echo -n "New user's password: "
read newpassword
echo
echo "Current users you can clone:"
echo "----"
awk -F'[/:]' '{if ($3 >= 1000 && $3 != 65534) print $1}' /etc/passwd
echo
echo -n "Old user to clone: "
read olduser
echo
echo "You have selected: "
echo "----"
echo "new user: $newuser"
echo "new user password: $newpassword"
echo "old user: $olduser"
echo
olduser_GROUPS=$(id -Gn ${olduser} | sed "s/${olduser} //g" | sed "s/ ${olduser}//g" | sed "s/ /,/g")
olduser_SHELL=$(awk -F : -v name=${olduser} '(name == $1) { print $7 }' /etc/passwd)
echo "old user groups: "
echo "----"
echo $olduser_GROUPS
echo "olduser shell: "
echo $olduser_SHELL
read -rsp $'Press any key to continue or ctrl-c to exit...\n' -n1 key
useradd --groups $olduser_GROUPS --shell $olduser_SHELL $newuser
echo $newuser:$newpassword | chpasswd
read -rsp $'ready to make home direcoty -- ctrl-c to exit...\n' -n1 key
mkdir /home/$newuser
chown -R $newuser:$newuser /home/$newuser
echo
echo "Script should be done now."
echo
echo "Do you see your new users name below?"
echo
awk -F'[/:]' '{if ($3 >= 1000 && $3 != 65534) print $1}' /etc/passwd
echo
echo "We are now going to copy the old user's home folder to the new user"
echo "then change ownership to the new user"
echo
read -rsp $'Ready to copy home folder --- or ctrl-c to exit...\n' -n1 key
rsync -aPv /home/$olduser/. /home/$newuser/
chown -R --from=$olduser $newuser:$newuser /home/$newuser
echo
echo "Now we are going to change the names of files and folders to the new user"
echo
grep -rlI $olduser /home/$newuser/ . | sudo xargs sed -i 's/$olduser/$newuser/g'
echo
echo "Done now."
echo
read -rsp $'Press any key to exit...\n' -n1 key
echo
echo
বিশ্বের প্রত্যেককে ধন্যবাদ যারা এই স্ক্রিপ্টটি দিয়ে আমাকে সহায়তা করেছেন। ওরেগনে জন
olduser_GROUPS=$(id -Gn ${olduser} | sed "s/ /,/g" | sed -r 's/\<'${olduser}'\>\b,?//g')
যা আংশিক স্ট্রিং ম্যাচের বিপরীতে সঠিক ব্যবহারকারী গ্রুপের নামটি যথাযথভাবে সরিয়ে ফেলবে। যাত্রা। যদি কোনও ব্যবহারকারীর আইডি 'পাই' হয় এবং কোনও ব্যবহারকারীর মধ্যে 'পাই, জিপিও, স্পি, ইত্যাদি' সহ গোষ্ঠী থাকে তবে এটি কেবল 'পাই' সরিয়ে ফেলবে, অন্য আংশিক স্ট্রিংয়ের মিলগুলি নয়।
যেমন আপনি জানেন, ইউআইডি হিসাবে ইউনিক্স ব্যবহারকারী নাম রাখেন না, উদাহরণের জন্য: মোহসেন ১০০১ নামে পরিচিত বা গ্রুপ মোহসেন ১০০১ নামে পরিচিত
You আপনাকে একটি স্ক্রিপ্ট লিখে ধাপে ধাপে নিম্নলিখিত পদক্ষেপগুলি করতে হবে:
/etc/suduers
আপনার ব্যবহারকারীর পড়া এবং স্থিতি।scp
আপনার টার্গেটেদ্রষ্টব্য: স্ক্রিপ্টটি ব্যবহার করবেন না এবং উপরে নোটগুলি ধাপে ধাপে ব্যবহার করবেন না। এমনকি আপনি উপরে সন্নিবেশ করতে পারেন।
এই আদেশ ব্যবহার করে দেখুন
useradd -N -g gid -G gid2,gid3 -m