更改用户默认主目录的命令

274

我想知道是否有任何简单的Shell命令可在Linux/Unix中更改用户主目录(类似于 chsh ,可以更改现有有效用户的默认登录Shell),而不必操作/etc/passwd 文件。谢谢。


为什么你不想去碰 /etc/passwd 文件呢?你需要的! - Basile Starynkevitch
12
根据 http://stackoverflow.com/questions/20071714/change-linux-user-default-login-directory 上的回答,使用命令 usermod -d /home/userxx /home/useryy 可以将 Linux 默认登录目录更改为 /home/useryy。 - Ibrahim Quraish
2
你为什么要询问“默认”家目录?你是想更改一个特定现有用户的家目录,还是所有未来添加的用户的家目录?请注意,chsh 不会更改“默认”的登录 shell,而只会更改给定用户的登录 shell... 要更改特定用户的 HOME,只需编辑 /etc/passwd - Basile Starynkevitch
4
我投票关闭这个问题,因为它与编程无关,最适合发布在 [unix.se] 或 [su] 上。 - tink
7个回答

476

Ibrahim的评论对修改现有用户的主目录是正确的方式。

更改用户的主目录:

usermod -d /newhome/username username

usermod 是编辑现有用户的命令。
-d(缩写为 --home)将更改用户的主目录。

更改用户的主目录+移动用户当前目录的内容:

usermod -m -d /newhome/username username

-m--move-home的缩写)将把内容从用户当前目录移动到新目录。


3
不仅仅是移动内容,我更倾向于认为是将整个文件夹移动 = 原始文件夹(通常为/home/username)被删除。 - Betlista
4
第二个命令的选项顺序错误。usermod -m -d /newhome/username username 是正确的。 - domids
3
这样做很无用 - 登录用户后无法更改东西。 - Mdev
2
@MDev 这怎么会没用呢?只需登录另一个用户或root账户即可... - Maciej Krawczyk
3
@KolonUK,因为那是唯一正确的方法。当您以用户身份登录时,已打开依赖于该主目录的应用程序。在所有程序运行时更改位置是不可取的。因此,创建一个新用户帐户并删除原有帐户并没有那么糟糕。或者您可以为root设置密码,在新的TTY中以root身份登录。 - Maciej Krawczyk
显示剩余4条评论

33

来自 Linux添加新用户时更改默认用户家目录:

Simply open this file using a text editor, type:

vi /etc/default/useradd

The default home directory defined by HOME variable, find line that read as follows:

HOME=/home

Replace with:

HOME=/iscsi/user

Save and close the file. Now you can add user using regular useradd command:

# useradd vivek
# passwd vivek

Verify user information:

# finger vivek

89
usermod -m -d /path/to/new/login/home/dir user 这个命令可以将现有用户的家目录更改为一个新的登录目录,如果该目录不存在则会创建它。选项"-m"会移动当前家目录的内容到新的家目录中。 - Ibrahim Quraish

28

被接受的答案是有缺陷的,因为它并没有移动来自初始用户文件夹的内容。我将添加另一个答案以进行更正:

sudo usermod -d /newhome/username -m username

您不需要使用用户名创建文件夹,这也会将您的文件从初始用户文件夹移动到 /newhome/用户名 文件夹中。


6

如果其他读者在寻找有关adduser命令的信息。

编辑/etc/adduser.conf

设置DHOME变量


5

您可以使用以下方法完成此操作:

/etc/passwd

编辑用户主目录,然后将所需的文件和目录移动到其中:

cp/mv -r /home/$user/.bash* /home/newdir

.bash_profile
.ssh/ 

设置正确的权限

chmod -R $user:$user /home/newdir/.bash*

2

发现这种方法会导致某些应用程序出现问题,更好的方法是

除了符号链接外,在较新的发行版和文件系统中,作为根用户,您还可以使用绑定挂载:

mkdir /home/username 
mount --bind --verbose /extra-home/username /home/username

这对于允许通过守护进程访问子目录的/home目录是有用的,否则配置为避免通过符号链接进行路径(如apache、ftpd等)。

当然,在重启时需要记住(或初始化脚本)来绑定。

/etc/fstab中的一个示例init脚本是

/extra-home/username /home/username none defaults,bind 0 0

-4

usermod -m -d /newhome 用户名


8
请详细解释您的答案。 - T. Short

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接