useraddとadduserとgroupaddとaddgroupの秘事
全然大したことじゃないんだけどね。
linuxに触れた事がある人なら、この秘事が一度は気になったことがあるはず!
僕は気になったことないけど。ついさっき気になったので調べてみた次第です。
気になってから打ってみたコマンドとその結果たちが以下だーーーーー!!!
あーれ!きゅーずぃーーーーーん!!!(古)
あ、その前に。
root@wordpress02:~#cat /etc/issue Ubuntu 12.04 LTS \n \l
です。
気を取り直して、、、
ぐーーっど・がすとろのみーーーーー!(一回もみたことない)
root@wordpress02:~# which addgroup /usr/sbin/addgroup root@wordpress02:~# file /usr/sbin/addgroup /usr/sbin/addgroup: symbolic link to `adduser' root@wordpress02:~# which adduser /usr/sbin/adduser root@wordpress02:~# file /usr/sbin/adduser /usr/sbin/adduser: a /usr/bin/perl script, ASCII text executable root@wordpress02:~# which groupadd /usr/sbin/groupadd root@wordpress02:~# file /usr/sbin/groupadd /usr/sbin/groupadd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xd2c9e28771ae1c99b242c23dd7648b9727fde877, stripped root@wordpress02:~# which useradd /usr/sbin/useradd root@wordpress02:~# file /usr/sbin/useradd /usr/sbin/useradd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x04b3f08924906fb1f1ef8752694414ab8bab3d9a, stripped root@wordpress02:~# grep useradd /usr/sbin/adduser my $useradd = &which('useradd'); &systemcall($useradd, '-d', $home_dir, '-g', $ingroup_name, '-s', my $useradd = &which('useradd'); &systemcall($useradd, '-d', $home_dir, '-g', $ingroup_name, '-s', # useradd without -p has left the account disabled (password string is '!')
つまりだね、
useradd ← ちゃんとしたバイナリ
adduser ← useraddのラッパっぱ
groupadd ← ちゃんとしたバイナリ
addgroup ← adduserへのsymbolyc link
ふーん。なるほどー。
えーーーーーー。なんか最後のだけ「????」なんですけどw
ちょっと意地悪なコマンドを実行してみよう・・・addgroupに、--uidを渡してみる。
root@wordpress02:~# addgroup --uid 11111 testuser Adding group `testuser' (GID 1003) ... Done. root@wordpress02:~# adduser --uid 11111 testuser adduser: The group `testuser' already exists. root@wordpress02:~# grep testuser /etc/group testuser:x:1003:
あら・・・なんだか・・・よくわからん挙動だわこれ・・・
adduserはそもそもperlのスクリプトということなので、中身探検してみる。
(略) # detect the right mode my $action = $0 eq "addgroup" ? "addgroup" : "adduser"; if (defined($found_sys_opt)) { $action = "addsysuser" if ($action eq "adduser"); $action = "addsysgroup" if ($action eq "addgroup"); } (略)
入り口で振り分けてます。
で、もっとよくみると、中では、groupaddも使ってる、と。
ということで、Ubuntu12.04LTSでは、groupadd/useraddが本体で、
adduserはそのラッパー、addgroupはラッパーですらない、
ということがわかりましたとさ。
ちゃんちゃん。