回答:
このスクリプトはそれを行います:
#!/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、グループの1つです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') ます。これにより、部分的な文字列の一致ではなく、正確なユーザーグループ名が適切に削除されます。例 ユーザーのIDが「pi」で、ユーザーが「pi、gpio、spiなど」を含むグループを持っている場合、「pi」のみが削除され、他の部分的な文字列は一致しません。
passwd newuserして、パスワードを変更します。システム的には両方のユーザーが同じ(同じUID)であることに注意してください。そのため、一方が他方のホームディレクトリに入り、自由に変更できます。
useradd。考えてみると、別の方法でそれを実行し、新しいユーザーを作成し、useraddUIDとGIDを変更して最初のユーザーを複製できます。
Linux Mint 18 Mateの場合
Mike Andersonのスクリプトに基づいて、新しいユーザー、古いユーザー、新しいパスワードについて質問し、古いユーザーのホームディレクトリをコピーし、新しいホームディレクトリにある古いユーザーの名前のすべてのインスタンスを新しいものに置き換えます。ユーザーの名前。
useradd行に関する私のスクリプトの主な違いは、Linux Mint 18でpasswdが失敗し、chpasswdに置き換えられることです。パスワードを機能させるために、新しい行を作成しました:echo $ newuser:$ newpassword | chpasswd。
もう1つの違いは、--create-homeを動作させることができなかったため、代わりに新しい行でmkdirを使用しただけです。
巨大な古いユーザーのホームディレクトリがある場合は注意してください。
必要なものを取り、残りはそのままにします。コピーするコードはすべてあなたの責任です。バックアップを作成してください。
#!/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')ます。これにより、部分的な文字列の一致ではなく、正確なユーザーグループ名が適切に削除されます。例 ユーザーのIDが「pi」で、ユーザーが「pi、gpio、spiなど」を含むグループを持っている場合、「pi」のみが削除され、他の部分的な文字列は一致しません。
ご存知のように、Unixユーザーは名前ではなくUIDとして、例:1001として知られるmohsenまたは1001として知られるグループmohsen
。
/etc/suduersと状態。scp ターゲットに。注:スクリプトを使用せず、上記のメモを段階的に使用してください。上記に挿入することもできます。