如何更改我的用户名?


324

前一段时间,当我安装Ubuntu时,我为我的帐户选择了一个非常愚蠢的用户名,不想再使用了。

如何在不丢失应用程序设置的情况下更改此名称(包括主目录名称和终端名称)?
如何保留各种身份验证的权限和密钥(例如电子邮件,SSH,GPG等)?
如果更改用户名,哪些设置可能会丢失?


为什么我们不能导航到/usr/share/applications/users.desktop >>单击必须更改名称的用户。>>单击更改用户名>>更改名称>>单击确定。我认为,这将是更改用户名的最简单方法,不是吗?
阿南德

Answers:


323

类似于Unix的操作系统将用户名与用户身份分离,因此您可以安全地更改名称而不影响ID。所有权限,文件等都与您的身份(uid)绑定,而不与您的用户名绑定。

要管理用户数据库的各个方面,请使用该usermod工具。

要更改用户名(最好不要登录即可执行此操作):

sudo usermod -l newUsername oldUsername

但是,这不会重命名主文件夹。

要更改家庭文件夹,请使用

sudo usermod -d /home/newHomeDir -m newUsername

更改用户名后。

例如,您可以注销,放入控制台(Ctrl+ Alt+ F1),并sudo su -成为真正的root(与相对sudo -s,其中$ HOME仍然是/ home / yourname。)也许您还必须杀死该用户中一些仍在运行的进程第一。为此,请输入ps -u username,找到匹配的PID并用杀死它们kill PID-number

更新:如前所述,某些文件可能引用了您的旧主目录。您可以保留符号链接以实现向后兼容,例如ln -s /home/newname /home/oldname,也可以使用更改文件内容。sed -i.bak 's/*oldname*/*newname*/g' *list of files*它为每个扩展名为.bak的文件创建一个备份。

针对像我这样经验不足的用户的一些其他信息:
由于我只有一个用户帐户(管理员),因此不会让我更改用户名(TTY1(Ctrl+ Alt+ F1)中的响应是“您已经登录” 。围绕这个:

  1. 使用您的旧凭据登录并添加一个新用户,例如TTY1中的“临时”用户:

    sudo adduser temporary
    

    设置密码。

  2. 通过将临时用户添加到sudo组,允许临时用户运行sudo:

    sudo adduser temporary sudo
    
  3. 使用命令注销exit
  4. 返回到tty1:使用“临时”用户帐户和密码登录。如上所述,更改用户名和文件夹。exit(直到出现登录提示)
  5. 返回TTY7(Ctrl+ Alt+ F7)以在GUI /普通桌面屏幕上登录,然后查看是否可行。
  6. 删除临时用户和文件夹:

    sudo deluser temporary
    sudo rm -r /home/temporary
    

10
不幸的是,对于$ HOME下的不同配置文件,情况并非如此,请尝试运行类似的内容grep -IRFl /home/username ~,您将看到其中存储了对主目录的引用。
安排

1
是一个简单的解决方法-只需统一使用“用户帐户”编辑器,然后重新启动即可。
史蒂夫·科赫

6
对于具有加密主文件夹的用户,您必须进行编辑/home/.ecryptfs/oldusername/.ecryptfs/Private.mnt以指向新的主文件夹,否则您将无法通过Unity登录。
拉斐尔

2
sudo usermod -d /home/edge -m edge收益:usermod: Directory /home/empedokles could not be renamed in /home/edge即第4步不起作用。
empedokles

2
@JTC 永远不要sudoers使用plain进行编辑nano。始终使用visudo
发泡胶飞

107

放在一起:

  1. 在开始屏幕上,按Ctrl+ Alt+ F1
  2. 使用您的用户名和密码登录。
  3. 为“ root”帐户设置密码。

    sudo passwd root
    
  4. 登出。

    exit
    
  5. 使用“ root”帐户和您先前设置的密码登录。

  6. 将用户名和主文件夹更改为所需的新名称。

    usermod -l <newname> -d /home/<newname> -m <oldname>
    
  7. 将组名更改为所需的新名称。

    groupmod -n <newgroup> <oldgroup>
    
  8. 锁定“ root”帐户。

    passwd -l root
    
  9. 如果您使用的是ecryptfs(加密的主目录)。使用ecryptfs-recover-private并挂载加密的目录,然后进行编辑<mountpoint>/.ecryptfs/Private.mnt以反映新的主目录。

  10. 登出。

    exit
    
  11. Ctrl+ Alt+ F7

现在,您可以使用新用户名登录了。


6
如果usermod -l 获得user <oldname> is currently used by process <processno>,您可以使用来找到该进程(可能是守护进程,或tmux / screen)ps aux | grep <processno>。您可能需要优雅地停止该过程,否则可以kill <processno>
RedPixel

1
多谢您提出意见。这非常有用。可能会提到两件事。在第4步之后,我重新启动,因此在第6步中不会出现错误消息。此外,在此过程完成之后,/ etc / passwd文件将具有与旧用户名匹配的ID注释。这将使登录屏幕显示旧的登录名。我找不到从命令行修复它的不错方法,但是我确实通过登录用户帐户,转到帐户设置并将“登录名”更改为用户名来修复它。这样就更新了/ etc / passwd文件并解决了该问题。
Jibbers

1
这是最简单,最简单的方法。最好按照@Jibbers的建议在步骤4之后重新启动。
Yerke '16

我提到“文件浏览器窗口中的书签”现在指向旧文件夹,因此我必须删除这些书签。
ollydbg23年

不行 如果在开始时按Ctrl + Alt + F1组合键,则尝试登录不允许的新创建用户。
empedokles

27

在恢复模式下重新启动,然后转到root提示符shell(“拖放到root shell提示符”)

首先重新安装根

mount -o remount,rw /

要更改用户名和主文件夹名称,

usermod -l <newname> -d /home/<newname> -m <oldname>

对于组名,

groupmod -n <newgroup> <oldgroup>

1
当我使用usermod -l <newname> -d /home/<newname> -m <oldname>它给我一个错误usermod: user oldusername is currently used by process 3170,如果我杀死进程仍然给我同样的错误。使用ubuntu 13.10
Waqas

4
如果您的家庭目录已被加密,请勿这样做!我遵循了此过程,这让我花了2个小时的漫漫跋涉……唯一的恢复方法是再次执行此过程,然后将原始(不喜欢的)名称重新放入。您将遇到的问题是“无法将chdir装入挂载点”
Mike

为什么我们不能导航到/usr/share/applications/users.desktop >>单击必须更改名称的用户。>>单击更改用户名>>更改名称>>单击确定。我认为,这将是更改用户名的最简单方法,不是吗?
阿南德

9

在Ubuntu 13.10、14.04、16.04上:

  1. 单击“系统设置”图标。
  2. 点击“用户帐户”。
  3. 您的管理员帐户应显示。
  4. 点击“解锁”按钮。
  5. 根据要求输入您的用户密码,以允许更改您的帐户。
  6. 解锁后,您可以单击要更改的旧用户名,然后键入新用户名来替换它。
  7. 输入新名称后,单击“锁定”按钮以使更改永久生效。
  8. 重新启动Ubuntu。

2
这并没有更改我的用户名,只是名称。旧的用户名仍然显示在终端中,并作为主目录和组(即使在重新启动后)。
DougC

3

收到时,usermod: can't change /etc/password只需运行以下命令:

在根恢复控制台中运行:

mount -o remount,rw /

然后重新运行:

usermod -l <newname> -d /home/<newname> -m <oldname>

为什么我们不能导航到/usr/share/applications/users.desktop >>单击必须更改名称的用户。>>单击更改用户名>>更改名称>>单击确定。我认为,这将是更改用户名的最简单方法,不是吗?
阿南德

1

@ karthick87在这里列出的答案可以很好地工作,但是为了安全起见并避免所有故障,这是我会做的事情:

  1. 创建一个单独的帐户/用户,并确保此帐户/用户具有root用户权限或以任何可root用户身份登录。
  2. 使用当前帐户注销,然后使用步骤1中提到的帐户登录。
  3. 杀死前一个用户的所有进程。
  4. 现在,按照@ karthick87提及的步骤操作,并更改用户名以及主目录所有者。
  5. 然后按照@Sriraj Hebbar的答案更改组名。
  6. 使用备用用户注销并使用您的用户登录。如果您创建了一个额外的用户,请将其删除。

0

当您执行此操作时usermod -l <newname> -d /home/<newname> -m <oldname>,将收到 useradd: can't change /etc/passwd错误消息,以避免发生这种情况,只需将其添加sudo --到上述命令中即可

sudo -- usermod -l <newname> -d /home/<newname> -m <oldname>

sudo --  groupmod -n <newgroup> <oldgroup>

-3

由于并非所有PC都具有该usermod应用程序,因此您可以手动进行操作。从root开始/etc/passwd编辑:

sudo vim /etc/passwd

并在行首更改用户名:

user:x:500:501:username:home/user:/bin/bash

至:

newuser:x:500:501:username:home/user:/bin/bash

那么如果您是root用户,则只需登录,并且已经登录user,注销并重新登录。


我尝试过这种方式(在发现usermod命令之前),并且不再接受用户密码。
Ben Voigt

@BenVoigt不是所有的PC都在usermod命令
МалъСкрылевъ

3
这是Ubuntu!如果没有usermod安装,则由于安装是passwd软件包的一部分,因此安装失败,这是必需的
Auspex
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.