"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)에 적합합니다.

관련 정보