问题描述
我创建了一个新用户useradd name
忘了使用-d -m
创建自己的主目录。我尝试制作一个,将/etc /skel和chown
的内容复制到新用户。
别名不起作用,例如ll
,我在命令提示符下只有一个$
,而不是name@server ~$
。此外,使用滚轮转储命令行上的垃圾:(
我该如何解决这个问题,还是更容易删除用户并重新开始?
最佳解决方案
您在命令提示符下有$
,因为您使用的是sh
shell。
具有name@server
的壳基于bash
壳。
您必须通过以下方式更改新创建的用户的默认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
将无法正常工作。唯一的方法是为受影响的用户手动创建主目录。
次佳解决方案
这是一个快速的bash脚本。使用sudo
以root用户身份运行。它需要任意数量的参数,每个参数都是需要主目录的用户名。这做了一些假设:您的主目录位于/home
中,并且您的骨架目录是/etc/skel
。这些是Ubuntu的默认设置。您可以从gist下载或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
第三种解决方案
要更改新用户主目录的默认值,您可以给
sudo useradd -D --base-dir /home/new_user
命令。请参阅useradd -D [options]
man useradd
第四种方案
看一下xdg-user-dirs-update
命令。它将创建默认的X windows目录:桌面,下载等…
没有默认目录的用户可以运行xdg-user-dirs-update --force
来创建目录。我必须为我的一个用户帐户执行此操作。
我建议在运行xdg-user-dirs-update
命令之前阅读手册页。 xdg-user-dir
的手册页增加了一些细节。
“XDG基本目录规范”是freedesktop.org规范的一部分。
第五种方案
如果您忘记使用-d -m
,最好和快速的选择是运行
sudo mkhomedir_helper username
with创建主目录,就好像您提供了缺少的选项一样。