web-dev-qa-db-ja.com

ユーザー名が存在するかどうか調べます

与えられたユーザー名が現在のシステムに存在するかどうか、どうやってシェルスクリプトで見つけることができますか?


/etc/passwd/etc/shadowは不完全です。 OS Xのディレクトリサービス、または同様にActive Directoryと統合されたLinuxを検討してください。

65
Daniel Beck

そのために使用される最も基本的なツールの1つはおそらくidです。

#!/bin/bash
if id "$1" >/dev/null 2>&1; then
        echo "user exists"
else
        echo "user does not exist"
fi

どれが生成されます

$ ./userexists root
user exists
$ ./userexists alice
user does not exist
$ ./userexists
user does not exist
98
barbaz

getent

このコマンドは、/ etcファイルと、LDAP、AD、NIS /イエローページ、DNSなどのさまざまなリモートサービスによってバックアップできるデータベースのエントリを収集するように設計されています。

ユーザー名がパスワードネームサービスの1つによって認識されているかどうかを判断するには、単に実行します。

getent passwd username

これは、OSや実装によっては、グループ、ホスト、その他にも働きます。

19
jlliagre

finger

finger -m <username>の出力を解析します。残念ながら、ユーザーが見つからなかった場合はエラーコードは表示されませんが、見つからなかった場合はエラー出力が書き込まれます。これまでのところ何の問題もありません。

finger -ms <username> 2>&1 1>/dev/null | wc -l

ユーザーが見つかった場合は0を出力します(エラー出力がないため)。それ以外の場合は大きい数字を出力します。

chown

実行します(任意のユーザーとして、驚くほど):

T=$( mktemp -t foo.XXX ) ; chown <username> $T

rootとして失敗した場合、アカウント名は無効です。

rootユーザーとして失敗した場合、ローカライズされた可能性のある出力を解析して操作が許可されていないまたは無効なユーザー(または同等のもの)を探します。確実にこれを行うには、事前にLANGを設定してください。

6
Daniel Beck

/etc/passwdなどに頼りたいと思うでしょう(例えば、Shadowベースのシステムでは/etc/shadow、話題にならないサイドノートでは、/etc/master.passwdまたは他のそのようなファイルを使うかもしれません)。

/etc/passwdは通常、ユーザーが存在するかどうかについての絶対的な権威のある決定として扱われます。このページで説明されている他の方法のいずれかを使用し、それらの他の方法が既存のユーザを指しているが/etc/passwdが指していない場合、そのユーザは最も一般的な標準の定義でシステムに適切に存在しないと言えます。そのソフトウェアはおそらく信頼しているでしょう。

そうは言っても、私は別の方法で投げかけて、使用できる他のオプションをいくつか追加します。

ls -l /home | grep ^customUserName$<BR> echo $?

明らかに、 "customuserName"をチェックしたいユーザーの名前に置き換えてください。システムがそれを使用している場合は、/ homeを/ usersに置き換えます。特定のユーザーのホームディレクトリが作成されていない場合(つまり、ユーザーのテキスト行を/ etc/passwdにインポートした場合)、ホームディレクトリが作成されていない場合は、/ etc/passwd内のすべてのユーザーが検出されないことがあります。人がログインしない限り/できない限り作られる。

0
TOOGAM