「passwd」と「chpasswd」の違いは何ですか?

「passwd」と「chpasswd」の違いは何ですか?

私は本からこのコマンドの説明を読んだ。
パスワード:

既存のユーザーのパスワードを変更します。

chpasswd:

ログインとパスワードのペアファイルを読み、パスワードを更新します。

このコマンドは同じことをするようです。それらの間に違いがありますか?

編集する:

私たちがファイルを使用するときにどのファイルが変更されたかを知りたいです。同じファイルを変更しますか、それとも別のファイルを変更しますか?他のファイルを変更した場合は何でしたか?

答え1

からman chpasswd

「このコマンドは、一度に多数のアカウントが作成される大規模なシステム環境で使用するためのものです。」

passwd通常、(私の経験では)シングルユーザーの対話に使用されます。

答え2

簡単に言うと:

  • passwd.を使用してSTDIN(ファイル記述子0)が端末に接続されていることを確認しますisatty(0)。それ以外の場合はpasswd終了できます。つまり、passwdインタラクティブな作業しかできません。

  • chpasswd一方、STDINで(ユーザー名と)パスワードを読むことを目的とすることをバッチモード(一度に複数のユーザー資格情報を生成/更新)と呼びます。 STDINからパスワード(デフォルトではプレーンテキスト)とユーザー名を読みます。user_name:password項目は改行文字で区切られた形式で提供されます。

答え3

該当するマニュアルページを参照してください。

名前

    chpasswd - バッチモードでパスワードを更新する

要約

    chpasswd[オプション]

説明する

    このchpasswdコマンドは、標準入力からユーザー名とパスワードのペアのリストを読み取り、この情報で既存のユーザーセットを更新します。各行の形式は次のとおりです。

       ユーザー名パスワード


名前

    passwd - ユーザーパスワードの変更

要約

    passwd[オプション] [ログイン]

説明する

    このpasswdコマンドはユーザーアカウントのパスワードを変更します。一般ユーザーは自分のアカウントのパスワードのみを変更でき、スーパーユーザーはすべてのアカウントのパスワードを変更できます。  passwdアカウントまたは関連パスワードの有効期限も変更されます。

答え4

私はそれを見つけた。

echo user:password | chpasswd

一部のオペレーティングシステムでは動作しますが、一部のオペレーティングシステム(debian9,10など)は、パスワードが保存される場所を決定するために使用されるため、can not connect to /var/run/nscd/socketエラーを表示します。/etc/nsswitch.conf

一方、このpasswdコマンドには対話型シェルは必要ないようです。

(echo user; echo password) | passwd

物理ホストとコンテナに適しており、さまざまなオペレーティングシステム(ubuntu xenial-bionic、debian9-10、centos75-76、coreos1855-2135)に適しています。

関連情報