其实当时看到网上很多的文章都说这两个命令其实效果是完全一样的,但是我在Ubuntu10.04上尝试的时候发现并不一样。那时候还吐槽过网上的文章乱作呢。现在,经过自己的实验之后发现,原来不同版本的Linux系统,对这两个命令的解释不完全一样。我是在Centos下与在Ubuntu下进行比较的。 首先可以看一下在Centos下,我们进入/usr/sbin目录下,用命令
- [cpp]
- [root@localhostsbin]#ll|grepuseradd
可以看到如下的结果:
观察上面结果中的***条和第三条,我们可以发现,原来adduser是链接到了useradd的,于是,在Centos里面,useradd和adduser的作用是完全一样的。都是在创建了用户之后,会在/etc/passwd文件中加一条新建用户的记录,然后在/home目录下创建新用户的主目录,并把/etc/skel目录中的文件复制到这个主目录下面。 注意:这种方法创建的新用户,在设置密码之前是不能登陆到系统上的,你需要在root权限下使用“passwd 用户名”的方法为指定的用户设置密码。下次才能以该用户名和密码登陆到系统中。 接着来看一下Ubuntu系统下,还是先进入到/usr/sbin目录下,用命令:
- [cpp]
- [root@localhostsbin]#ll|grepuseradd
可以看到如下的结果:
可以看得出来,在Ubuntu下,useradd和adduser是分别独立的命令,并没有链接的关系。我尝试这用useradd这个命令创建一个新用户(并没有加useradd的任何参数)。结果跟之前的博文(文章链接在本文开始处)是一样的,在/home下还是没有新用户的主目录。但是这次我还查看了一个文件,就是/etc/passwd这个文件。我打开之后发现在/etc/passwd中确实增加了我新创建的用户的信息,但是,该用户的登陆Shell跟其他用户不一样,是“/bin/sh”,其他用户的登陆Shell是/bin/bash。如下图所示:
我们可以通过在root权限下修改此文件,使得example的登陆Shell为/bin/bash,然后还需要用mkdir命令为该用户创建一个用户目录,即/home/example,并将/etc/skel目录下的文件复制到该用户目录下,设置密码之后,新建用户就能想普通用户一样登陆系统了。
注意:上面的情况是没有使用useradd的任何指定参数,才需要手动做额外的工作。如果在用useradd的时候加一个参数“-m”,并设置好密码,那么该用户就能正常登陆系统了(具体的看我之前的博文,链接在本文的开头处)。还有就是,貌似useradd创建的用户默认的登陆Shell都是/bin/sh,可以在root权限下修改成/bin/bash,或者在使用useradd的时候用参数“-s”指定。
现在来看看Ubuntu10.04下的adduser,还是在/usr/sbin里面,使用下面命令查看结果得到:
- [cpp]
- [root@localhostsbin]#ll|grepadduser
观察上面的结果发现,adduser和addgroup也是同一个命令。而对于adduser这个命令,我之前的博文(链接在本文开头处)也详细的讲过了。在这里就不再介绍了。在Ubuntu下,adduser这个命令创建的用户默认的登陆Shell是/bin/bash,与useradd不同。
综合上面的两种版本,发现useradd和adduser这一组命令,也是根据系统版本而不同的。其他版本的Linux系统还没有做过测试,期望能有更多的发现。