首先指出:新人在Ubuntu系统下(我使用的是12.04LTS版本)更改用户名、普通用户名有一定的风险,操作需谨慎。这是我的亲身经历带来的感悟,期间惊心动魄,在快要放弃的时候,我使用了我的最后一根稻草,认真的阅读了Recovery mode的操作说明,最终成功复原了我的错误操作,让我的Ubuntu系统呈现出问题前的状态。接下来讲我的经历,以供后来者少走弯路。
1 问题出现
由于我最近需要用一台专门的机器跑Ubuntu下面的程序,我就把旁边闲置多年的台式机用上了。两年前我的师弟在上面装了单系统---Ubuntu系统,我就接着他安装的系统使用。但有一个不爽的感觉是,电脑的用户名时师弟的英文名david,我就想把用户名改为我的英文名robert。人都有一个共性是,想让自己的使用的东西处处体现出自己的特色。我也不例外。于是,在Google上面搜索更改用户名的方法,经过比较鉴别,我认为一个比较好的描述该方法的blog为http://my.oschina.net/arvinjones/blog/139480,其中的方法为(摘录):
1)打开一个终端,输入 sudo su转为root用户。 注意,必须先转为root用户!!!
2)gedit /etc/passwd ,找到代表你的那一行,修改用户名为新的用户名。 注意:只修改用户名!后面的全名、目录等不要动!
3)gedit /etc/shadow,找到代表你的那一行,修改用户名为新用户名
4)gedit /etc/group,你应该发现你的用户名在很多个组中,全部修改!
完毕,修改的时候要格外小心,不要打错一个字母。修改完,保存,重启
我就按照该方法的步骤操作。但步骤到为什么,我没严格按照该博客的第1)步方法说的那样操作,我使用的是sudo gedit /etc/passwd命令,也就是说没有转为root用户,而是获取root权限来更改passwd的内容。我顺利完成了第2)步,Terminal下的用户名也变成了robert。可正当我为此沾沾自喜的时候,噩梦开始了。我无论采用什么方法都不能完成3)步的操作,更别提4)了。提示说是密码错误。我就想出来了,改后的名字robert并没有设置上面密码,我就不输任何密码试试,结果任然不成功。我用david的密码不行,用空密码也不行,这可把我难为住了。怎么办?重新启动。重新启动后的用户登录名为david,这证明我修改用户的任务并没有完成,由于3)和4)没有做。情况进一步恶化,我在登录界面的david下输入先前的david密码时,提示密码错误,登录不了。这到底是什么情况?难道我要重新装系统不行?david用户名就这样凭空消失了吗?我只是简简单单的更改了/etc/passwd文件的内容而已。
2 求助于Ubuntu系统的recoverymode模式
我就在Google里面上节出现的问题,果然一位也遇到了与我类似的情况,在修改用户名的时候仅仅修改了/etc/passwd中的用户名。他采用Ubuntu系统下的recovery mode解决和复原了他的问题。他的博文地址是http://www.cnblogs.com/strider/articles/2018648.html。更改用户名的出发点虽然不同,但最后出现的问题类似。
我就重新启动Ubuntu就入Recoverymode(关于如何重新启动后进入Recovery mode,请参考https://wiki.ubuntu.com/RecoveryMode),在该模式下就运行在root用户下面,于是我就迫不及待地要将/etc/passwd文件改回原来的样子,即将robert改回david。我利用的是vi编辑器,调用该编辑器的方法如下:
$vi /etc/passwd
注意,vi默认进入的模式是default模式,这是你可以利用上下左右箭头按钮将光标转移到你要修改的字符下面,我将光标移动到了robert单词下的r下面;在默认模式下,按x即可删除相应的字符,我通过该按钮删除了robert;接下来需要插入字符,在默认模式下,你输入i就会进入编辑模式,i表示的是在当前字符的前面插入新的字符,于是我就在原来robert的地方插入了david,将文件内容复原到问题前的状态;最后,按esc见退出到命令模式,按shift+:进入到最底端,输入wq!,表示保存更改并退出。
可是,terminal提示说,/etc/passwd是readonly,我无权进行更改。
3 借助先前建立的另外一个用户登录
我无语了,在实在没有办法的情况下,我请教了梁师弟,问他会不会使用Ubuntu系统,他说不会,他给推荐了坐在他旁边赖师弟,让他来帮我。他整了半天,各种方法都试了,还是不成功。他问我是否还有其他用户名可以登录,我说有。我留了一手,就是为了防止出现这种情况的,我在做更改用户事前,就新建了一个用户chgzhi,就是以防万一。
顺利进入Ubuntu,利用chgzhi用户名。于是师弟和我就试着在用户名为chgzhi的terminal下来更改/etc/passwd文件,我们的命令是这样的:
chgzhixxxx$sudo gedit /etc/passwd
提示输入密码,输入密码后,提示密码错误。我所记忆的所有关于Ubuntu系统的密码都试了一遍,还是提示密码错误。我泪崩了,师弟也蒙了。师弟说,他也没办法了,就离开了。我不甘心,继续寻找解决方案。
4 认真阅读Recovery mode介绍,问题解决
我在想是不是使用recoverymode上面没到位。于是重新认真阅读https://wiki.ubuntu.com/RecoveryMode中的介绍,我找到了这样一句话:
The root partition is mounted read-only.To mount it read/write, enter the command
mount -o remount,rw/
我安装上面的描述,授予recoverymode下root用户以读写权限。最终问题顺利解决。
5 总结
通过上面的经历,我认为,在Ubuntu下面最后学会一种编辑器,例如vi。在Recovery mode的情况下,它能够帮助你编辑和修改你曾经操作错误的文件。而gedit之类的图形化的编辑器在recovery mode下是不会起作用的。还有就是,在搜索到相关的知识介绍时,最好认真的阅读,而不要浅尝辄止,就像我没有认真阅读recovery mode 介绍那样。还有网络上blog的介绍的解决方案介绍比较简略,它们本身并不是self-contained,可能会漏掉背景知识,最好在借鉴它们时自己多动动脑筋。