/etc/passwd파일에서 필요한 정보만 뽑아내기
작성자 정보
- 관리자 작성
- 작성일
컨텐츠 정보
- 1,851 조회
- 0 추천
- 목록
본문
/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 : 코멘트 : 홈디렉토리 : 기본사용쉘 |
이들 정보는 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 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번째 인자를 간단한 양식으로 출력한 것으로 첫번째 인자가 계정명이며 여섯번째 인자가 홈디렉토리위치이므로 이 둘을 출력한 것이다.
관련자료
-
이전
-
다음