最稳妥方式是用 usermod -d -m 一步迁移家目录,需确保用户未登录、目标路径已存在且权限正确;手动迁移则必须用 rsync -av --delete 并及时修正属主与 selinux 上下文。

直接用 usermod -d -m 一步到位,别手动改 /etc/passwd,否则大概率登录失败。
为什么不能直接编辑 /etc/passwd
改完只是路径变了,/home/xxx 里的文件还在原地,用户一登录就卡在 “Could not chdir to home directory” 错误里;更糟的是,如果漏掉 . 开头的隐藏文件(比如 .bashrc、.ssh),shell 会降级成基本模式,连 ls 都可能没颜色。手动同步还得自己处理硬链接、ACL、SELinux 上下文——这些 cp -r 全丢光。
usermod -d /new/path -m username 的实操要点
这条命令看似简单,但几个条件不满足就会静默失败(没报错,但家目录没动):
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 目标路径必须提前存在:
sudo mkdir -p /data/users/testuser - 用户不能处于登录状态:用
loginctl list-users或who确认,有活跃 session 就先pkill -u testuser -
-m必须紧跟-d后面,且中间不能有空格:sudo usermod -d /data/users/testuser -m testuser(顺序颠倒或写成-m -d无效) - 执行后旧目录
/home/testuser会被清空(内容已移走),但目录本身保留——这是正常现象
手动迁移只在跨文件系统时才考虑
比如从 /dev/sda1 换到 /dev/sdb1,usermod -m 无法跨设备移动,这时必须用 rsync:
- 源路径末尾带
/:sudo rsync -av --delete --progress /home/testuser/ /data/users/testuser/ -
-a保证权限、时间戳、符号链接、扩展属性全保留;--delete防止旧配置残留干扰 - 同步完立刻
sudo chown -R testuser:testuser /data/users/testuser,再sudo chmod 700 /data/users/testuser - 别跳过验证:
su - testuser -c 'echo $HOME',图形界面登录可能缓存旧路径,不可信
最常被忽略的是 SELinux 上下文和 .Xauthority 这类临时文件——如果用户已失败登录过,新目录里可能混着 root 属主的临时文件,得一起 chown 掉。










