在 Ubuntu 或任何 linux 中更改用户名的正确方法

Cor*_*sum 33 linux users ubuntu

我正在使用 Ubuntu 12.04 并进行了一些自定义。我还将使它成为一个新的iso,它是定制的ubuntu。

我想问的是如何更改我的用户名。我当前的主文件夹中有很多配置。所以我不想弄乱更改用户名。

那么是否有任何最佳实践或工作流程可以做到这一点?

小智 37

真正正确的方式?假设您想将用户“peter”更改为“paul”。

groupadd paul
usermod -d /home/paul -m -g paul -l paul peter
Run Code Online (Sandbox Code Playgroud)

这会将名称、组、主目录和该目录的所有权和组以及所有文件更改为新的。您最终会得到一个与最初创建为“paul”的用户无法区分的用户。

另一种方法是编辑/etc/passwd/etc/shadow文件中彼得条目的第一个字段。然后将每次出现的 'peter' 更改为 'paul' /etc/group。然后将主目录从 重命名/home/peter/home/paul. 然后chown -R paul /home/paul获取目录的所有权和组权以及它下的所有文件和目录,以拥有新的。

  • 如果您已编辑 /etc/{passwd,shadow,group},则不需要 chown - inode 以数字方式存储所有者和组 (3认同)
  • 您也可以单独重命名组。`groupmod -n 保罗彼得`。这避免了改变 gid。 (3认同)
  • 对于 usermod 我让用户 <here_peter> 当前被进程 2243 使用 (2认同)

slm*_*slm 6

我建议不要尝试更改用户名。当以用户主目录的形式在配置文件中静态引用用户名时,这通常会带来问题/home/<username>。这些几乎从不以通用方式编写,因此通常最好只创建一个新用户名,然后将用户的文件和数据迁移到新帐户。


小智 6

使用 usermod 更改用户名主目录。将用户 peter 更改为 paul:

usermod -l paul peter
grep paul /etc/passwd /etc/shadow       # check
Run Code Online (Sandbox Code Playgroud)

更改主目录并将所有内容移至那里(如有必要则创建)

usermod -m -d /home/paul paul
grep paul /etc/passwd               # check
Run Code Online (Sandbox Code Playgroud)

更改组名称,但不要使用 usermod,因为它要求您首先创建另一个组(例如 GID 1001),尽管它会更新 $HOME 目录中所有内容的 GID,但您必须搜索并更改具有旧组所有权的其他位置的文件和目录。相反,只需手动更改组名称即可。

nano /etc/group
Run Code Online (Sandbox Code Playgroud)

并改变

peter:x:1000:
Run Code Online (Sandbox Code Playgroud)

paul:x:1000:
Run Code Online (Sandbox Code Playgroud)

您必须更改 cron、at 和其他使用用户名而不是 UID 的服务所使用的文件名。使用

find /var -name "*peter*"
Run Code Online (Sandbox Code Playgroud)

来找到这些文件。

您还必须更改某些服务(例如邮件处理应用程序)使用的配置文件。

最后,需要编辑使用“/home/peter/”的脚本。将出现的“/home/peter/”更改为“$HOME”。

更改用户身份并不需要做很多工作,您只需要彻底完成即可。

  • 对此的快速补充...执行此操作时您无法登录。创建属于 sudoers 组的新临时用户,使用该用户登录,进行更改,从新临时帐户注销,登录到重命名的帐户,然后删除临时帐户。 (2认同)

小智 5

尝试usermod命令。

exec sudo su
usermod --login newname oldname
Run Code Online (Sandbox Code Playgroud)