SW/리눅스

Linux : 사용자를 나열하는 방법, 예제, 명령어

얇은생각 2020. 11. 18. 07:30
반응형

Linux 시스템의 모든 사용자를 나열하거나 시스템의 사용자 수를 세어 본 적이 있습니까? 사용자를 생성하고, 사용자를 삭제하고, 로그인한 사용자를 나열하는 명령이 있지만 Linux의 모든 사용자를 나열하는 명령은 무엇일까요?

이 튜토리얼에서는 Linux 시스템에서 사용자를 나열하는 방법을 보여 줍니다. 

 

 

 

/etc/passwd 파일을 사용하여 모든 사용자 목록을 가져오기

로컬 사용자 정보는 /etc/passwd 파일에 저장됩니다. 이 파일의 각 줄은 한 사용자에 대한 로그인 정보를 나타냅니다. 파일을 열려면 cat 또는 less를 사용할 수 있습니다.

less /etc/passwd

 

/etc/passwd 파일을 사용하여 모든 사용자 목록을 가져오기

 

 

파일의 각 줄에는 다음 정보를 포함하는 콜론으로 구분된 7개의 필드가 있습니다.

- 사용자 이름

- 암호화된 암호(x는 암호가 /etc/shadow 파일에 저장됨을 의미합니다).

- UID(사용자 ID 번호)

- 사용자의 그룹 ID 번호(GID)

- 사용자의 전체 이름입니다(GECOS)

- 사용자 홈 디렉토리

- 로그인 셸(기본값은 /bin/bash)

 

사용자 이름만 표시하려면 awk 또는 cut 명령을 사용하여 사용자 이름이 포함된 첫 번째 필드만 출력할 수 있습니다.

awk -F: '{ print $1}' /etc/passwd
cut -d: -f1 /etc/passwd

# root
# daemon
# bin
# sys
# sync
# ...
# ...
# sshd
# vagrant
# jack
# anne

 

 

 

getent 명령을 사용하여 모든 사용자 목록을 가져오기

getent 명령은 모든 사용자 목록을 쿼리하는 데 사용할 수 있는 passwd 데이터베이스를 포함하여 /etc/nsswitch.conf 파일에 구성된 데이터베이스의 항목을 표시합니다.

모든 Linux 사용자 목록을 가져오려면 다음 명령을 입력합니다.

getent passwd

 

getent 명령을 사용하여 모든 사용자 목록을 가져오기

 

보시다시피 출력은 /etc/passwd 파일의 내용을 표시할 때와 동일합니다. LDAP를 사용자 인증에 사용하는 경우 getent는 /etc/passwd 파일과 LDAP 데이터베이스의 모든 Linux 사용자를 표시합니다.

awk 또는 cut을 사용하여 사용자 이름이 포함된 첫 번째 필드만 인쇄할 수도 있습니다.

getent passwd | awk -F: '{ print $1}'
getent passwd | cut -d: -f1

 

 

 

Linux 시스템에 사용자가 있는지 확인

이제 모든 사용자를 나열하는 방법을 알게 되었으므로 Linux 상자에 사용자가 있는지 확인하기 위해 목록을 grep 명령에 연결하여 사용자 목록을 필터링할 수 있습니다.

예를 들어 Linux 시스템에 이름 잭을 가진 사용자가 있는지 확인하려면 다음 명령을 사용할 수 있습니다.

getent passwd | grep jack

 

 

Linux 시스템에 사용자가 있는지 확인

 

 

사용자가 있는 경우 위의 명령어는 사용자의 로그인 정보를 인쇄합니다. 사용자가 존재하지 않는다는 것을 의미하는 출력이 없습니다.

또한 아래와 같이 grep 명령을 사용하지 않고도 사용자가 존재하는지 확인할 수 있습니다.

getent passwd jack

 

 

 

이전과 동일하게 사용자가 있는 경우 명령어에 사용자의 로그인 정보가 표시됩니다.

시스템에 얼마나 많은 사용자 계정이 있는지 확인하려면 getent passwd 출력을 wc 명령으로 연결합니다.

getent passwd | wc -l

# 33

 

 

위의 출력에서 볼 수 있듯이 내 Linux 시스템에는 33개의 사용자 계정이 있습니다.

 

 

 

시스템 및 일반 사용자

시스템과 일반(일반) 사용자 사이에는 실질적인 기술적 차이가 없습니다. 일반적으로 시스템 사용자는 OS 및 새 패키지를 설치할 때 생성됩니다. 경우에 따라 일부 응용 프로그램에서 사용할 시스템 사용자를 만들 수 있습니다.

일반 사용자는 루트 또는 sudo 권한을 가진 다른 사용자가 만든 사용자입니다. 일반적으로 일반 사용자는 실제 로그인 셸과 홈 디렉토리를 가집니다.

각 사용자는 UID라는 숫자 사용자 ID를 가집니다. useradd 명령을 사용하여 새 사용자를 생성할 때 지정되지 않은 경우 UID_MIN 및 UID_MIN 값에 따라 /etc/login.defs 파일에서 UID가 자동으로 선택됩니다.

시스템에서 UID_MIN 및 UID_MIN 값을 확인하려면 다음 명령을 사용할 수 있습니다.

grep -E '^UID_MIN|^UID_MAX' /etc/login.defs

# UID_MIN          1000
# UID_MAX         60000

 

 

위의 출력에서 모든 일반 사용자는 1000~60000 사이의 UID를 가져야 한다는 것을 알 수 있습니다. 최소값과 최대값을 알면 시스템에 있는 모든 일반 사용자의 목록을 조회할 수 있습니다.

아래 명령에는 Linux 시스템의 모든 일반 사용자가 나열됩니다.

getent passwd {1000..60000}

# vagrant:x:1000:1000:vagrant,,,:/home/vagrant:/bin/bash
# jack:x:1001:1001:,,,:/home/jack:/bin/bash
# anne:x:1002:1002:Anne Stone,,,:/home/anne:/bin/bash
# patrick:x:1003:1003:Patrick Star,,,:/home/patrick:/usr/sbin/nologin

 

 

시스템 UID_MIN과 UID_MIN 값이 다를 수 있으므로 위의 명령의 일반 버전은 다음과 같습니다.

eval getent passwd {$(awk '/^UID_MIN/ {print $2}' /etc/login.defs)..$(awk '/^UID_MAX/ {print $2}' /etc/login.defs)}

 

 

 

사용자 이름만 인쇄하려면 출력을 잘라내기 명령으로 연결하기만 하면 됩니다.

eval getent passwd {$(awk '/^UID_MIN/ {print $2}' /etc/login.defs)..$(awk '/^UID_MAX/ {print $2}' /etc/login.defs)} | cut -d: -f1

 

반응형