フリーランチ食べたい

機械学習、Python、ソフトウェアエンジニアリング、プロダクティビティなど

Linuxで `adduser` に `-gecos` を指定したら何ができるか。なぜ `gecos` という名前なのか。

あるソフトウェアのセットアップで adduser -gecos を設定するExampleがあって、何をしているか理解していなかったので調べてみました。

TLDR

  • -gecos optiongecos field を設定するときに使うもの
  • なぜ gecos というかは歴史的経緯があった
  • システムとしてのみ使う場合に便利

GECOSとは

まず man で調べてみると gecos field を設定するときに使うオプションらしいです。

# man adduser
--gecos GECOS
          Set  the  gecos field for the new entry generated.  adduser will 
          not ask for finger information if this option is given.

それでは gecos field は何かと言うと

GECOSフィールド - UnixClassWiki

本サイトでのパスワードファイル中のコメントをかけるフィールドに関してはコメントフィールドと呼んでいますが、ここは伝統的にはGECOSフィールドあるいはGECOS情報と呼ばれています。 これはGECOSとは米ジェネラル・エレクトリック社が1960年代前期に開発したオペレーティングシステム GCOS(General Comprehensive Operating System) のことです。 なぜUNIXのコメントフィールドがGECOSフィールドと呼ばれているかというと、むかしベル研究所の頃にGCOSに接続するために必要な情報がこのフィールドにかかれていたためです。 ここはカンマで区切られたリストで、特に何を書くか正確に定義づけられているわけではありませんが、慣習的に次のようになっています。

  • ユーザのフルネーム
  • 部屋番号やビル名
  • オフィスの電話番号
  • その他のコンタクト先(FAX番号など)

不意にめっちゃ面白い豆知識に当たってしまいました。 俗に言う歴史的経緯ってやつですね。

コメントフィールドと言われるくらいなのでシステム的に必要なものではないということですね。

検証

環境

docker上で行いました

# cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.4 LTS (Xenial Xerus)"

通常通り adduser してみる

# adduser test
Adding user `test' ...
Adding new group `test' (1000) ...
Adding new user `test' (1000) with group `test' ...
Creating home directory `/home/test' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for test
Enter the new value, or press ENTER for the default
        Full Name []: myoji namae
        Room Number []: 123
        Work Phone []: 456
        Home Phone []: 789
        Other []: 000
Is the information correct? [Y/n] Y

チェックしてみる

# grep test /etc/passwd
test:x:1000:1000:myoji namae,123,456,789,000:/home/test:/bin/bash

この

myoji namae,123,123,123,123

の部分がgecos fieldです。

--gecos optionを付けてみる

Exampleにあった --gecos "" を試してみました。

# adduser --gecos "" test
Adding user `test' ...
Adding new group `test' (1000) ...
Adding new user `test' (1000) with group `test' ...
Creating home directory `/home/test' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

先程と違い、Full NameやRoom Number...などなどは聞かれてませんでした。 では中身をチェックしてみましょう。

# grep test /etc/passwd
test:x:1000:1000:,,,:/home/test:/bin/bash

さきほど入っていたFull NameからOtherまでの番号がなくなりました。 システム的にしか使わない場合(Chefで動的にユーザーを作成するときなど)に重宝しそうですね。 だからちょくちょく出てくるのか。スッキリしました。

参考リンク

sharadchhetri.com