7

少なくとも、特定のユーザーにそのような文字列が存在する場合は、ユーザー名ではなく「わかりやすい」名前を取得したいと考えています。私が試したこと:

whoami
jamesarosen

id -un
jamesarosen

id -p
uid jamesarosen
groups  staff com.apple.access_screensharing ...

id -P
jamesarosen:********:501:20::0:0:James A. Rosen:/Users/jamesarosen:/bin/bash

その最後のものには私が探している情報がありますが、特に形式 (特に:s の数) が OS 間で一貫性を保つことを強く確信していないため、それを解析する必要はありません。

4

5 に答える 5

12

ユーザーの氏名の GECOS フィールドを解析する

/etc/passwd のフォーマットとほとんどのGECOS フィールドは、Unix ライクなシステム間で非常によく標準化されています。例外を見つけた場合は、ぜひお知らせください。一方、Unix ライクなシステムで必要なものを取得する最も簡単な方法は、getentcutを使用して GECOS フィールドを解析することです。例えば:

getent passwd $LOGNAME | cut -d: -f5 | cut -d, -f1
于 2012-11-05T23:24:24.443 に答える
2

私が知っている唯一の方法は、それを解析することです:

grep -P "^$(whoami):" /etc/passwd | cut -f5 -d:

/etc/passwd の形式はかなり確実です

于 2012-11-05T23:23:35.327 に答える
2

fingerその情報を取得するために使用できます。

finger `id -un` | head -1 | cut -d: -f3-

これには、ローカル以外のユーザーの情報も取得するという利点があります (要件によっては欠点もあります)。

から情報を取得したいだけの場合は/etc/passwd、他の人がすでに述べたように、おそらくファイルを何らかの方法で解析する必要があります。awk個人的には、このタスクを好むでしょう:

awk -F: -vid=`id -u` '{if ($3 == id) print $5}' /etc/passwd
于 2012-11-05T23:47:02.477 に答える
1

/etc/passwdファイルを見てください。このファイルは、ユーザー情報がどのように保管されているかを示しています。ユーザー情報はここに保存される場合と保存されない場合があります (Unix がユーザーを保存するために使用するいくつかの異なるデータベースがあります) が、形式は同じです。

基本的に、Unix はユーザー ID (UID) を使用して、どのユーザーが何なのかを格納します。次のエントリは古いパスワード エントリで、UID、プライマリ グループ ID、GECOSフィールド、$HOMEディレクトリ、およびユーザーのシェルです。(MacOS のコマンドには 3 つの余分なエントリが表示されますid -P。それらが何であるかはわかりませんが、GECOS フィールドを 5 番目のフィールドではなく 8 番目のフィールドにします)。

id -Pシステムでコマンドを使用すると、このエントリが得られました。一部のシステムではgetent、またはgetpwentをコマンドとして使用します。あなたがする必要があるのは、このエントリを解析することです。各フィールドはコロンで区切られているため、5 番目または 8 番目のエントリが必要です (使用するコマンドによって異なります)。

awkandコマンドは、cutこれを非常にうまく行います。cutおそらくより効率的ですが、awkより一般的であるため、私はそれを使用する傾向があります。

ではawk、標準のフィールド セパレータは空白ですが、-Fパラメータを使用してこれを変更できます。Awk では、行の各フィールドに数字が付けられ、先頭にドル記号が付きます。フィールドは$0行全体です。

を使用するawkと、次のようになります。

id -P | awk -F: '{print $8}'

これは、id -Pコマンドを受け取り、:をフィールドセパレータとして使用し、8 番目のフィールドを出力することを示しています。中括弧はすべてのAWK プログラムを囲みます。単一引用符は、シェルが$8.

BASH では$( )、コマンドを実行してその出力を返すために使用できるため、環境変数を設定できます。

$USER_NAME=$(id -P | awk -F: `{print $8}`)
echo $USER_NAME
于 2012-11-06T14:20:13.710 に答える
1

少なくとも macOS (およびおそらく他の *BSD 系) では、:id -Fを使用して完全な名前を取得できます。

于 2018-03-13T00:53:48.227 に答える