mor*_*a42 79 users adduser home-directory
我创建了一个新用户,但useradd name
忘记-d -m
用来创建他们的主目录。我尝试制作一个,复制 /etc/skel 的内容,并将chown
所有内容都发给新用户。
别名不起作用,例如ll
, 而我$
在命令提示符下只有一个,而不是name@server ~$
. 此外,使用滚轮在命令行上转储垃圾:(
我该如何解决这个问题,或者删除用户并重新开始是否更容易?
iri*_*ent 77
您$
在命令提示符处有,因为您正在使用sh
shell。
shell withname@server
是基于bash
shell的。
您必须通过 : 更改新创建用户的默认 shell usermod -s /bin/bash
。
如果 usermod
用户主目录不存在,则再次使用它来添加用户主目录。usermod -d /home/username
如果用户没有在 中指定主目录/etc/passwd
:
运行mkhomedir_helper <username>
以创建主目录。mkhomedir_helper
将创建用户主目录并复制内容/etc/skel
。
如果用户已经在 中指定了主目录/etc/passwd
:
例如 via usermod -d /some/directory
,mkhomedir_helper
将不起作用。唯一的方法是为受影响的用户手动创建主目录。
小智 20
如果您忘记使用-d -m
,最好和快速的选择是运行
sudo mkhomedir_helper username
Run Code Online (Sandbox Code Playgroud)
with 创建主目录,就像您提供了缺少的选项一样。
这是一个快速的 bash 脚本。以 root 身份运行sudo
。它接受任意数量的参数,每个参数都是需要主目录的用户名。这做出了一些假设:您的主目录在 中/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
Run Code Online (Sandbox Code Playgroud)
要更改新用户主目录的默认值,您可以给出
sudo useradd -D --base-dir /home/new_user
Run Code Online (Sandbox Code Playgroud)
命令。请参阅useradd -D [选项]来自
man useradd
Run Code Online (Sandbox Code Playgroud)
小智 5
看一下xdg-user-dirs-update
命令。它将创建默认的 X windows 目录:桌面、下载等...
没有默认目录的用户可以运行xdg-user-dirs-update --force
以创建目录。我必须为我的一个用户帐户执行此操作。
我建议在运行xdg-user-dirs-update
命令之前阅读手册页。的手册页 xdg-user-dir
添加了更多详细信息。
“XDG 基本目录规范”是 freedesktop.org 规范的一部分。
小智 3
我刚刚遇到这个问题(Ubuntu 12.04),我通过创建一个临时用户,复制用户目录,chowning它,最后删除临时用户来解决它。
sudo adduser temp
sudo cp -r /home/temp /home/name
sudo chown -R name.name /home/name
sudo deluser temp
Run Code Online (Sandbox Code Playgroud)