原文网址:Linux权限系列--修改主机名、用户名的方法(有示例)_IT利刃出鞘的博客-CSDN博客
说明
本文介绍Linux系统如何修改主机名和用户名。(本文以Ubuntu为例,其他系统是一样的)。
用户名和主机名会显示在命令行上,形式为:用户名@主机名。如下图所示(用户名为test;主机名为knife):
![]()
需求
现在的用户名和主机名如下:
![]()
想把用户名(test) 改为aaa,主机名(knife)改为bbb。
查看当前主机名和用户名
上边直接通过命令行的标记即可确定主机名和用户名。也可以通过命令进一步确定。
查看主机名
查看用户名
su
然后输入密码即可切换到root用户。
(使用su root也可以)
法1:修改/etc/hostname(需要重启才生效)
将/etc/hostname里的内容改为新主机名。
原来:
![]()
可以用vi、gedit等修改。这里我用个更快的命令:
echo 'bbb' > /etc/hostname
注意,此法修改完后,/etc/hostname里确实是“bbb”了,但hostname命令结果仍然是“knife”。重启后hostname才是bbb。
法2:用命令修改(不需要重启)
hostnamectl set-hostname bbb
此法修改完后,/etc/hostname是“bbb”了,而且hostname命令结果也是“bbb”。无需重启
修改/etc/hosts文件,将原主机名改成新主机名。

修改后:

将/etc/passwd里边的原用户名改为新用户名。
![]()
本处将test改为aaa。
将/etc/shadow里边的原用户名改为新用户名。
![]()
本处将test改为aaa。
将/home/下边原用户名对应的文件夹改为新用户名对应的文件夹。
![]()
本处将test文件夹改为aaa文件夹。
命令:
mv /home/test /home/aaa
将/etc/group里边的所有的原用户名改为新用户名。

可以发现,有多行包含test用户名,将它们全部改为aaa。
将/etc/passwd里边的原用户名改为新用户名。如果没有,可以不操作,或者直接添加新用户名(模仿root复制一行,root改为想要加的用户名)。

本处我没有找到test用户,所以不操作sudoers。
重启机器并登录:

修改主机名整理为脚本
- hostnamectl set-hostname ubuntu \
- && \
- sed -i 's/\
/newHostName/g' /etc/hosts
上边命令里:oldHostName为原主机名,newHostName为新主机名。
修改用户名整理为脚本
- sed -i 's/\
/newUserName/g' /etc/passwd \ - && \
- sed -i 's/\
/newUserName/g' /etc/shadow \ - && \
- mv /home/oldUserName /home/newUserName \
- && \
- sed -i 's/\
/newUserName/g' /etc/group \ - && \
- sed -i 's/\
/newUserName/g' /etc/sudoers
直接执行上边脚本即可,oldUserName为原用户名,newUserName为新用户名。 (\<和\>是正则表达式,分别表示词首和词尾,保证只匹配整个主机名,不匹配包含主机名的其他字符串,不能去掉)
备注:
上边脚本我自己试过。用本例中的knife替换oldHostName,bbb替换newHostName;用本例中的test替换oldUserName,aaa替换newUserName。
\<和\>是正则表达式,分别表示词首和词尾,保证只匹配整个主机名(或用户名),不匹配包含主机名(或用户名)的其他字符串,不能去掉。