我创建了一个新用户,useradd name
但忘记使用-d -m
来创建他们的主目录。我尝试创建一个,复制 /etc/skel 的内容,并将chown
所有内容都分配给新用户。
别名不起作用,例如,我在命令提示符下ll
只使用,而不是。此外,使用滚轮会在命令行上转储垃圾 :($
name@server ~$
我该如何解决这个问题,或者删除用户并重新开始是否更容易?
答案1
因为您正在使用 shell,所以您已经$
在命令提示符下使用了sh
。
带有的shellname@server
是基于bash
shell的。
您必须通过以下方式更改新创建的用户的默认 shell usermod -s /bin/bash
:。
usermod
如果不存在,则再次使用来添加用户主目录。usermod -d /home/username
如果用户没有指定主目录/etc/passwd
:
运行mkhomedir_helper <username>
以创建主目录。mkhomedir_helper
将创建用户主目录并复制其中的内容/etc/skel
。
如果用户已经有指定的主目录/etc/passwd
:
例如通过usermod -d /some/directory
,mkhomedir_helper
将不起作用。唯一的方法是为受影响的用户手动创建主目录。
答案2
如果你忘记使用-d -m
,最好的和最快的选择是运行
sudo mkhomedir_helper username
创建主目录,就像您提供了缺少的选项一样。
答案3
这是一个快速的 bash 脚本。使用 以 root 身份运行sudo
。它接受任意数量的参数,每个参数都是需要主目录的用户名。这有几个假设:您的主目录在/home
,您的骨架目录在/etc/skel
。这些是 Ubuntu 上的默认设置。您可以从以下位置下载或wget
/curl
此脚本要旨。
#!/bin/bash
if [ $# -lt 1 ]; then
echo "Syntax: $_ USER[ USER[ ...]]" >&2
exit 1
fi
exit_code=0
for user in "$@"; do
home="/home/$user"
cp -R /etc/skel "$home" && echo $'\e[32m'"Copied skeleton to: $home"$'\e[m' || ( exit_code=$?; echo $'\e[31m'"Failed to create: $home"$'\e[m' ) >&2
chown -R "$user:$user" "$home" && echo $'\e[32m'"Set owner on: $home"$'\e[m' || ( exit_code=$?; echo $'\e[31m'"Failed to set owner on: $home"$'\e[m' ) >&2
done
exit $exit_code
答案4
要更改新用户主目录的默认值,您可以给出
sudo useradd -D --base-dir /home/new_user
命令。请参阅useradd -D [选项]从
man useradd