如何重命名Linux用户?

RHEL-Like

1 前言

一个问题,一篇文章,一出故事。
笔者今天遇到用户需要更改Linux用户名的情况,于是整理了一套更改命令以便以后可以批量操作。

2 最佳实践

2.1 测试环境

如何安装Oracle Linux 10.x?

2.2 脚本实现步骤

2.2.1 创建脚本

vim ~/scripts/reNameUser.sh

加入如下配置,

#!/bin/bash

oldName="$1"
newName="$2"

reNameUser() {
  local oldUser="$1"
  local newUser="$2"

  # Check empty parameters and show usage
  if [[ -z "$oldUser" || -z "$newUser" ]]; then
    echo "Usage: $0  "
    exit 1
  fi

  # Check if old user exists
  if ! id -u "${oldUser}" >/dev/null 2>&1; then
    echo "ERROR: Old user '${oldUser}' does not exist. Exiting script!"
    exit 1
  fi

  # Check if new user already exists
  if id -u "${newUser}" >/dev/null 2>&1; then
    echo "ERROR: New user '${newUser}' already exists. Cannot rename!"
    exit 1
  fi

  # Kill processes and rename user/group/home directory
  sudo pkill -9 -u "$oldUser" 2>/dev/null
  sudo usermod -l "$newUser" "$oldUser" >/dev/null 2>&1
  sudo groupmod -n "$newUser" "$oldUser" >/dev/null 2>&1
  sudo usermod -d "/home/$newUser" -m "$newUser" >/dev/null 2>&1

  # Handle symbolic link if exists
  if [ -L "/home/$newUser" ]; then
    realPath=$(realpath "/home/$newUser")
    sudo mv "$realPath" "$(dirname $realPath)/$newUser" >/dev/null 2>&1
    sudo rm -f "/home/$newUser"
    sudo ln -s "$(dirname $realPath)/$newUser" "/home/$newUser"
  fi

  echo "SUCCESS: User renamed from '$oldUser' to '$newUser' successfully."
}

reNameUser "$oldName" "$newName"

2.2.2 测试脚本

bash ~/scripts/reNameUser.sh "user" "user01"
没有评论

发表回复

RHEL-Like
如何二进制部署Oracle Linux 10.x GO v1.26.4?

1 基础知识 1.1 简介 Go是一种开放源代码编程语言 Go可轻松构建简单、可靠且高效的软件 1. …

RHEL-Like
如何发现并附加iSCSI存储?

1 前言 一个问题,一篇文章,一出故事。 笔者今天需要给服务器附加一台iSCSI存储,因此本章总结附 …

RHEL-Like
如何使用nsupdate动态更新dns?

1 前言 一个问题,一篇文章,一出故事。 今天有同事提出让我们批量将Linux的hostname自动 …