강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

/etc/passwd파일에서 필요한 정보만 뽑아내기

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

/etc/passwd파일에서 필요한 정보만 뽑아내기

 

 

 

이번에는 시스템관리자들에게 꼭 필요한 유용한팁 몇가지를 설명할까 한다.

 

 

 

 이번절에서 설명하는 유용한 활용팁을 알아두면 여러분들의 인생(?)에 큰 도움이 될 것이다.

 

 

 

 

 

서론빼고 시작해 보자. /etc/passwd파일에는 시스템을 사용하는 모든 계정들의 계정정보가 저장되어 있다.

 

 

 

 이파일을 이용하여 우리가 원하는 정보만을 뽑아서 확인해 볼 수 있다.

 

 

 

 물론 사용자가 많지 않을 경우에는 그냥 vi 또는 cat명령어로 확인하면 간단하겠지만 사용자수가 100명이상이 된다면 이를 정리하고 확인하는 작업만 해도 상당한 시간을 요할 것이다.

 

 

 

 이번 강좌의 설명을 잘 보고 활용해 보기 바란다.

 

 

 

 

 

다음은 /etc/passwd파일의 예이다.

 

 

 

 이번장의 실습을 위해 내용을 미리 확인한 것이다.

 

 

 

 

 

[root@sulinux ~]# cat /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin

rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin

nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

pcap:x:77:77::/var/arpwatch:/sbin/nologin

haldaemon:x:68:68:HAL daemon:/:/sbin/nologin

rpm:x:37:37::/var/lib/rpm:/sbin/nologin

xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin

gdm:x:42:42::/var/gdm:/sbin/nologin

distcache:x:94:94:Distcache:/:/sbin/nologin

named:x:25:25:Named:/var/named:/sbin/nologin

sspark:x:500:500::/home/sspark:/bin/bash

bible:x:501:501::/home/bible:/bin/bash

linux:x:502:502::/home/linux:/bin/bash

sulinux:x:503:503::/home/sulinux:/bin/bash

bible9:x:2001:2001::/home/bible9:/bin/bash

hostuser:x:2002:2002::/home/hostuser:/bin/bash

super:x:2003:2003::/home/super:/bin/bash

[root@sulinux ~]#

 

 

 

호스팅서버 또는 많은 사용자들이 사용하는 서버의 /etc/passwd파일에는 수많은 사용자의 계정정보가 저장되어 있다.

 

 

 

  이때 각 사용자의 ID만을 출력하고자 한다면 어떻게 하면 될까? awk를 사용하면 간단히 처리할 수 있다.

 

 

 

  , /etc/passwd파일의 내용을 살펴보면 ":"(콜론)으로 계정 사용자정보의 항목들이 구분되어있다는 것을 알고 있을 것이다.

 

 

 

 

 

, 간단히 /etc/passwd파일을 살펴보면 아래와 같이 관리자가 원하는 중요한 정보들이 많이 있다.

 

 

 

  , /etc/passwd파일에는 다음과 같은 정보들이 순서대로 기록되어 있다.

 

 

 

 

 

 계정명 : 패스워드부분 : UID : GID : 코멘트 : 홈디렉토리 : 기본사용쉘
   $1          $2         $3    $4      $5         $6           $7

 

 

이들 정보는 awk명령어의 필드분리명령에 의해 왼쪽에서 부터 차례대로 $1....$7에 대응된다.

 

 

 

 이런 점을 이용하여 /etc/passwd파일의 정보에서 원하는 부분만을 출력해주는 방법에 대해서 설명한다.

 

 

 

 

 

좀 더 상세히 설명하면 위와 같이 "cat /etc/passwd"명령어로 /etc/passwd파일의 각각의 행들이 "|"(파이프명령어)에 의해 차례대로 awk의 입력으로 들어오게 된다.

 

 

 

  이때 "-F:"에 의해 입력으로 들어온 /etc/passwd파일의 각각의 행들이 ":"(콜론)으로 구분된다.

 

 

 

  예를들어 /etc/passwd의 내용중 아래와 같은 행이 있다고 가정하겠다.

 

 

 

 

 

sspark:x:500:500::/home/sspark:/bin/bash

 

이 행은 "-F:"에 의해 각각의 항목들이 ":"(콜론)으로 구분되어 다음과 같은 awk의 입력변수로 작용한다.

 

 

 

 

 

$1에는 sspark이 할당되고,

 

$2에는 x가 할당되며,

 

$3에는 500이 할당되고,

 

$4에는 500이 할당되며,

 

$5에는 공백이 할당되며,

 

$6에는 /home/sspark이 할당되고

 

$7에는 /bin/bash가 각각 할당된다.

 

 

 

 

 

이것이 바로 "-F:"의 의미이다.

 

 

 

 이제 awk에서 사용된 "-F:"의 의미를 확실히 알았을 것이라 생각된다.

 

 

 

 

 

그렇다면 '{print $1}'는 어떤 의미일까?

 

위의 의미 그대로 $1만을 출력(print)하라는 의미이다.

 

 

 

 , 아래의 예는 awk를 이용하여 /etc/passwd파일에서 각 계정사용자들의 ID만을 출력하는 것이다.

 

 

 

[root@RockyLinux01 ~]# cat /etc/passwd | awk -F: '{print $1}'

root

bin

daemon

adm

sync

shutdown

halt

mail

operator

games

ftp

nobody

pegasus

systemd-coredump

dbus

qemu

sssd

polkitd

rtkit

saslauth

dnsmasq

unbound

libstoragemgmt

pipewire

tss

cockpit-ws

cockpit-wsinstance

rpc

rpcuser

setroubleshoot

clevis

geoclue

flatpak

systemd-oom

pesign

sshd

chrony

tcpdump

sspark

sulinux

apache

nginx

mysql

avahi

colord

gdm

gnome-initial-setup

radiusd

keylime

dirsrv

kdcproxy

ipaapi

pcp

bible

mailnull

smmsp

postgres

mongod

named

squid

bible2

ssaprk1

bible9

[root@RockyLinux01 ~]#

 

 

 

 

 

 

다음 예는 awk를 이용하여 /etc/passwd파일에서 각 계정사용자들의 홈디렉토리만을 출력하는 것이다.

 

 

 

 

 

[root@RockyLinux01 ~]# cat /etc/passwd | awk -F: '{print $6}'

/root

/bin

/sbin

/var/adm

/sbin

/sbin

/sbin

/var/spool/mail

/root

/usr/games

/var/ftp

/

/var/lib/Pegasus

/

/

/

/

/

/proc

/run/saslauthd

/var/lib/dnsmasq

/etc/unbound

/var/run/lsm

/var/run/pipewire

/dev/null

/nonexisting

/nonexisting

/var/lib/rpcbind

/var/lib/nfs

/var/lib/setroubleshoot

/var/cache/clevis

/var/lib/geoclue

/

/

/run/pesign

/usr/share/empty.sshd

/var/lib/chrony

/

/home/sspark

/home/sulinux

/usr/share/httpd

/var/lib/nginx

/var/lib/mysql

/var/run/avahi-daemon

/var/lib/colord

/var/lib/gdm

/run/gnome-initial-setup/

/var/lib/radiusd

/var/lib/keylime

/usr/share/dirsrv

/

/

/var/lib/pcp

/home/bible

/var/spool/mqueue

/var/spool/mqueue

/var/lib/pgsql

/var/lib/mongo

/var/named

/var/spool/squid

/user/bible2

/home/sspark1

/usr/bible9

[root@RockyLinux01 ~]#

 

 

 

 

 

이와 같은 방법을 이용하여 /etc/passwd파일에서 원하는 정보를 뽑아볼 수 있다.

 

 

 

 

awk 라는 명령어에 있는 옵션중 -F라는 옵션을 활용한 것으로 -F라는 옵션으로 특정한 문자를 구분자로 사용하여 구분된 부분을 $1, $2, $3, …,$n등의 인자로 사용할 수 있다.

 

 

 

/etc/passwd파일의 모든 행들에 있는 각 항목들은 “:”(colon)문자로 다음과 같이 구분되어 있다.

 

 

 

sspark:x:500:500::/home/sspark:/bin/bash

 

 

 

 

ID : 패스워드 : UID : GID : 설명자 : 홈디렉토리 : 사용하는쉘

 

 

 

따라서 패스워드 파일을 “:”(colon)으로 분리하여 첫번째인자만을 받아서 출력하면 ID만을 출력해 볼 수 있다는 결론이 나온다.

 

 

 

 위의 결과는 이렇게해서 출력된 것이다.

 

 

 

 

 

이번에는 이를 좀 응용하여 현재 사용자들의 계정명과 홈디렉토리만을 출력해보도록 하겠다.

 

 

 

 

 

[root@RockyLinux01 ~]# cat /etc/passwd | awk -F: '{print "계정명 : "$1"     " "홈디렉토리 : "$6}'

계정명 : root     홈디렉토리 : /root

계정명 : bin     홈디렉토리 : /bin

계정명 : daemon     홈디렉토리 : /sbin

계정명 : adm     홈디렉토리 : /var/adm

계정명 : sync     홈디렉토리 : /sbin

계정명 : shutdown     홈디렉토리 : /sbin

계정명 : halt     홈디렉토리 : /sbin

계정명 : mail     홈디렉토리 : /var/spool/mail

계정명 : operator     홈디렉토리 : /root

계정명 : games     홈디렉토리 : /usr/games

계정명 : ftp     홈디렉토리 : /var/ftp

계정명 : nobody     홈디렉토리 : /

계정명 : pegasus     홈디렉토리 : /var/lib/Pegasus

계정명 : systemd-coredump     홈디렉토리 : /

계정명 : dbus     홈디렉토리 : /

계정명 : qemu     홈디렉토리 : /

계정명 : sssd     홈디렉토리 : /

계정명 : polkitd     홈디렉토리 : /

계정명 : rtkit     홈디렉토리 : /proc

계정명 : saslauth     홈디렉토리 : /run/saslauthd

계정명 : dnsmasq     홈디렉토리 : /var/lib/dnsmasq

계정명 : unbound     홈디렉토리 : /etc/unbound

계정명 : libstoragemgmt     홈디렉토리 : /var/run/lsm

계정명 : pipewire     홈디렉토리 : /var/run/pipewire

계정명 : tss     홈디렉토리 : /dev/null

계정명 : cockpit-ws     홈디렉토리 : /nonexisting

계정명 : cockpit-wsinstance     홈디렉토리 : /nonexisting

계정명 : rpc     홈디렉토리 : /var/lib/rpcbind

계정명 : rpcuser     홈디렉토리 : /var/lib/nfs

계정명 : setroubleshoot     홈디렉토리 : /var/lib/setroubleshoot

계정명 : clevis     홈디렉토리 : /var/cache/clevis

계정명 : geoclue     홈디렉토리 : /var/lib/geoclue

계정명 : flatpak     홈디렉토리 : /

계정명 : systemd-oom     홈디렉토리 : /

계정명 : pesign     홈디렉토리 : /run/pesign

계정명 : sshd     홈디렉토리 : /usr/share/empty.sshd

계정명 : chrony     홈디렉토리 : /var/lib/chrony

계정명 : tcpdump     홈디렉토리 : /

계정명 : sspark     홈디렉토리 : /home/sspark

계정명 : sulinux     홈디렉토리 : /home/sulinux

계정명 : apache     홈디렉토리 : /usr/share/httpd

계정명 : nginx     홈디렉토리 : /var/lib/nginx

계정명 : mysql     홈디렉토리 : /var/lib/mysql

계정명 : avahi     홈디렉토리 : /var/run/avahi-daemon

계정명 : colord     홈디렉토리 : /var/lib/colord

계정명 : gdm     홈디렉토리 : /var/lib/gdm

계정명 : gnome-initial-setup     홈디렉토리 : /run/gnome-initial-setup/

계정명 : radiusd     홈디렉토리 : /var/lib/radiusd

계정명 : keylime     홈디렉토리 : /var/lib/keylime

계정명 : dirsrv     홈디렉토리 : /usr/share/dirsrv

계정명 : kdcproxy     홈디렉토리 : /

계정명 : ipaapi     홈디렉토리 : /

계정명 : pcp     홈디렉토리 : /var/lib/pcp

계정명 : bible     홈디렉토리 : /home/bible

계정명 : mailnull     홈디렉토리 : /var/spool/mqueue

계정명 : smmsp     홈디렉토리 : /var/spool/mqueue

계정명 : postgres     홈디렉토리 : /var/lib/pgsql

계정명 : mongod     홈디렉토리 : /var/lib/mongo

계정명 : named     홈디렉토리 : /var/named

계정명 : squid     홈디렉토리 : /var/spool/squid

계정명 : bible2     홈디렉토리 : /user/bible2

계정명 : ssaprk1     홈디렉토리 : /home/sspark1

계정명 : bible9     홈디렉토리 : /usr/bible9

[root@RockyLinux01 ~]#

 

 

 

위의 예는 앞의 방법을 조금 더 응용한 것이다.

 

 

 

 즉 첫번째 인자와 6번째 인자를 간단한 양식으로 출력한 것으로 첫번째 인자가 계정명이며 여섯번째 인자가 홈디렉토리위치이므로 이 둘을 출력한 것이다.

 

 

 

 

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,043 명
  • 현재 강좌수 :  35,853 개
  • 현재 접속자 :  88 명