web-dev-qa-db-ja.com

「その他」の指(/ etc / passwdのGECOSフィールド)

ファイル/etc/passwdには、いわゆるGECOS fields( "General Electric Comprehensive Operating System"の略)があります。

username:password:userid:groupid:gecos:home-dir:Shell 

ここで、GECOSは次のように分割されます。

:FullName,RoomAddress,WorkPhone,HomePhone,Others:

そして、Othersは、必要な数のコンマで分割されます。

:FullName,RoomAddress,WorkPhone,HomePhone,Other1,Other2,Other3:

man chfnページで読むことができます:

他のフィールドは、他のアプリケーションで使用されるアカウンティング情報を格納するために使用されます。

さて、アプリケーション開発者(私はC languagesystem callsおよび/またはbash scriptに興味があります)にとって、これはこの情報を取得するための最良の方法ですか?

そして、Bash環境だけを考えると、fingerコマンドがothersフィールドを表示できない場合(または少なくとも方法がわかりません)、他のコマンドにはどのようなものがありますか? chfnは表示されるだけでなく、変更できることを知っています。 stdoutに出力するだけの場合はどうなりますか?

6
Dr Beco

私が見つけた最良の方法はgetentを使用することです。これはLDAP/NISまたは非ローカルユーザーの他の方法で動作するためです。

getent passwd $UID| awk -F ":" '{print $5}'
3
Tim Hughes

たとえば、bashスクリプトでは、ファイルの5番目のフィールド_/etc/passwd_をawk/gawkで印刷できます。

_awk -F ":" '{print $5}' /etc/passwd
_

オプション_-F fs_は、入力フィールドセパレーター(この場合は_:_)にfsを使用します。
たとえば、GNU awkホームページで詳細を読むことができます [ 1 ]
Awkには、文字列を分割する関数split()があります(この場合、5番目のフィールドを文字列として使用し、_,_を区切り文字として使用します)。それについての他のいくつかの答えからインスピレーションを取ります [ 2 ].。

1
Hastur