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

「その他の」フィンガー (/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)にとって、この情報を取得する最適な方法はどれでしょうか?

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

答え1

私が見つけた最良の方法は、getentLDAP/NISまたは非ローカルユーザーの他の方法で機能するため、使用することです。

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

答え2

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

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

このオプションは、-F fs入力フィールドセパレータとして fs を使用します (この場合は:)。
詳細については、たとえば GNU awk ホームページ [1]。awkに
は文字列を分割する機能がありますsplit()(この場合、5 番目のフィールドを文字列として使用し、,区切り文字として使用します)。これについては他の回答を参考にしてください[2] ...。

答え3

ネストされた 2 つの cut コマンドを使用するだけです。

  • まずフィールドセパレータとして「:」を使用し、フィールド1と5を切り取ります。
  • 2番目に、フィールド区切り文字として「,」を使用し、フィールド1と5-Nを切り取ります。

関連情報