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


68

シェルスクリプトで、現在のシステムに特定のユーザー名が存在するかどうかを確認するにはどうすればよいですか?


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

回答:


103

そのために使用される最も基本的なツールの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

2
あなたはここでバッククォートを必要としない-だけで使用if id -u "$1" >/dev/null 2>&1; then...
ゴードンDavisson

1
@Gordonはもちろん絶対に正しい。ありがとう:)
barbaz

「-u」も不要なようです
palacsint

if負の結果チェッカーのみで必要な場合はどうなりますか?
ユラシンカレフ

id -u $1 1>/dev/null 2>&1; echo $?パイプに使用できます
ジェイソンウェイン

20

つかまえる

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

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

getent passwd username

これは、OSや実装に応じて、グループ、ホストなどでも機能します。


1
SolarisとLinux、そして最近ではほとんどのBSDにもありますがgetentgetentMac OS X にはありません
barbaz

確かに、Mac OS / Xにgetentが不足しているのを逃しました。
jlliagre

それにもかかわらず、それがサポートするシステムでは非常に便利です。
ダニエルベック

1
getentは、idが1つのユーザー名のみをサポートする複数のユーザー名を照会できるため便利です。
ナル

6

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これを確実に行うために、事前に設定してください。


0

私はあなたが依存し/etc/passwd、類似したいことを言うだろう(例えば/etc/shadow、シャドウベースのシステムのために、オフトピックサイドノートでは、いくつかの類似したシステムが使用するかもしれない/etc/master.passwdまたは他のそのようなファイル)。

/etc/passwd典型的には、ユーザが存在するか否かに絶対的な権限の判定として扱われます。このページで説明されている他の方法のいずれかを使用し、それらの他の方法が既存のユーザーを指しているが/etc/passwdそうでない場合、そのユーザーはシステムに適切に存在しないと言うでしょう。ソフトウェアはおそらく依存しています。

そうは言っても、使用できる他のオプションの組み合わせに別の方法で追加します。

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

明らかに、「customuserName」を確認するユーザーの名前に置き換えます。システムで使用している場合は、/ homeを/ usersに置き換えます。特定のユーザーに対してホームディレクトリが作成されていない場合、/ etc / passwdにすべてのユーザーが見つからない場合があります。これは、ユーザーを単にインポートした場合(つまり、テキスト行を/ etc / passwdに)、ホームディレクトリが作成しない場合に発生する可能性があります人がログインしない限り/されるまで作成されます。


/ etc / passwordファイルにエントリがないが、どちらidかによって有効であると報告された、またはgetentシステムに「適切に」存在しないと報告されているユーザーを述べる理由がわかりません。考慮される。
jlliagre
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.