システムにユーザーを追加します*存在しない場合のみ*


47

useradd {user}システムにユーザーを追加するコマンドを実行しましたが、自動環境でこれを実行する予定であり、ユーザーが既に存在していても、再び実行される可能性があります。

ユーザーがまだ存在しない場合にのみ実行できる方法はありますか?ユーザーにはホームフォルダーがありません。


adduserDebian / Ubuntuシステムでは一般的に推奨されます。
ファヒムミタ

@FaheemMitha自動スクリプトでは、おそらくより一貫性のあるを使用する方が良いでしょうuseradd
帽子の男

回答:


69

id -u somename ユーザーが存在しない場合、ゼロ以外の終了コードを返します。

非常に簡単にテストできます...(&>/dev/null通常の出力/警告を抑制するだけです)

id -u somename &>/dev/null || useradd somename 

1
"ID -u somenameの>を/ dev / null 2>&1 || useraddをsomenameの":ポータブルな方法で
トリスタン

13

これを試して:

useradd {user} || echo "User already exists."

またはこれでさえ:

useradd {user} || true

ユーザーが既に存在する場合は安全に失敗するため、これによりチェックが保存されます。
CoverosGene 14年

8

少数のシステムしか持っていない限り、間違った質問をしていることになります。答えはuseraddをまったく実行しないことですが、代わりにこの作業をpuppetやchefなどの構成管理ソリューションに任せます。これにより、ユーザー定義を集中化して、ループを実行したり、システムを構成するためにrootユーザーでsshを使用したりするのを防ぐことができます。システムは常に既知の構成状態になります。

puppetのドキュメントは、http://docs.puppetlabs.comで入手できます。

パペットの例として:

user { "bob" : 
  password   => "$1$yv3n066X$Vpb05Ac/fHTicNdT9T5vz1", # generated with `openssl passwd -1`
  ensure     => present,                              # ensure => absent to remove
  managehome => true,
}

4
Puppetは素晴らしいプロジェクトですが、OPが実際に何を求めているのかを推測することはできません:)
rahmu

1
OPは目標を非常に明確に説明しました-ユーザーが存在していても自動化され、再び実行できる(等電位)。これらは、構成管理ツールの正確な使用例です。誰かがこれらの問題を解決するツールが既に存在することを知らない場合、把握するより大きな概念がある場合、非常に具体的で狭い焦点の問題を解決することを含む質問をする傾向があります。
アーロンブラウン

私はすでにChefを使用しています。
タルンフェルド

1
Chefは、ユーザーが存在しない場合にのみユーザーを追加します。それがi等性であるため、私はこの質問を理解していません(1.5年後)。
アーロンブラウン

4

useraddは、ユーザーが既に存在する場合、ユーザーを再度追加しません。uid番号とuidログインが一意であることを確認します。バッチを実行することを計画している場合、使用されているuidが一意であることを確認してください。useraddは問題のあるエントリに対して文句を言います。エラー/ stderrをキャプチャして、どのユーザーアカウントがアカウントシステム(/ etc / passwd、group、shadow)に入るのに問題があるかを確認する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.