尝试更改用户名时,终端告诉我用户当前正在被进程使用

Par*_*dox 27 linux users ubuntu linux-mint

我正在尝试根据此处的建议更改我的用户名,但是在运行以下命令后:

CurrentName@HostName ~ $ sudo usermod -l TheNameIWantToChange -d /home/TheNameIWantToChange -m CurrentName
Run Code Online (Sandbox Code Playgroud)

终端响应:

CurrentName@HostName ~ $ usermod: user CurrentName is currently used by process 2491
Run Code Online (Sandbox Code Playgroud)

并且用户名保持不变。有谁知道我如何解决这个问题并更改我的用户名?

seu*_*mac 15

引用man usermod

CAVEATS
   You must make certain that the named user is not executing any 
   processes when this command is being executed
   if the user's numerical user ID, the user's name, or the user's home 
   directory is being changed.  usermod
   checks this on Linux, but only check if the user is logged in 
   according to utmp on other architectures.
Run Code Online (Sandbox Code Playgroud)

因此,您需要确保您重命名的用户未登录。

另外,我注意到您没有以 root 身份运行它。要么以 root 身份运行它,要么使用“sudo usermod”运行。

  • 如果您不能在不重新启动的情况下终止进程,请结合命令,例如`kill -9 23162 && sudo usermod -l TheNameIWantToChange -d /home/TheNameIWantToChange -m CurrentName` (6认同)
  • 那么呃...如果您是系统上唯一的帐户,如何更改您的用户 ID?我假设您无法直接以 root 身份登录(例如只能通过 ssh 登录),并且可能有许多自动启动的进程,您无法在不丢失连接的情况下杀死这些进程。@RichardFrank 你的解决方案是为了解决这个问题吗? (4认同)
  • 程序`usermod` 似乎被设计破坏了。如果用户管理在 LDAP 服务器中完成,则始终可以更改用户属性,并且不依赖于正在运行的系统。我正在使用 Ansible,它使用 `usermod` 并且漏洞系统不可靠,因为更改被登录的用户阻止。 (3认同)

小智 8

尝试以下步骤:

  1. 设置root用户的密码:
    sudo passwd root
    
    Run Code Online (Sandbox Code Playgroud)
  2. 重启ubuntu
  3. root开机后登录。这将允许 Ubuntu 不为当前用户生成任何进程。
  4. 更改用户名
    usermod -l newuser -d /home/newuser -m olduser
    
    Run Code Online (Sandbox Code Playgroud)
  5. 通过检查目录中新用户名的文件夹名称来验证用户名是否已更改/home


wal*_*tor 6

与其手动编辑您知道的文件(糟糕),或打开root密码(非常糟糕),只需使用at. 阅读,并使用( )man at的完整路径:usermodtype -p usermod

sudo at "now +5 minutes"
your usermod command goes here
^D
Run Code Online (Sandbox Code Playgroud)

^DCtrl-D

然后,快速注销,等待 7 分钟,然后登录。