OS에서 라스트 사용자만 한번에 볼 수 있는 스크립트를 만들었다
awk NR 을 사용해서 만들려고 했는데
테스트 서버에서 해당 명령어가 자꾸 실패해서
while 문으로 대충 만들었다. grep -w 이상하게 스크립트 먹히는 것 같은데..
결과값이 이상하게 나와서...
일단 답만 나오게 만들게 됐다.
cat /etc/security/passwd 파일을 읽어온 값
root 옆에 lastupdate 파일이 오게 한줄로 나오게 만드는게 목적
은근 스크립트에서 여러줄을 특정 조건에 맞게 한줄로 만드는게 필요한데
나는 보통 파일 리스트를 만들고 변수에 저장 후 while문으로 만든다.
이렇게 만들면 굉장히 느리다는 단점이 있다. ㅠㅠ
나는 편한걸로만 만든다.
awk 지존이 되고 싶다. awk 만들면 정말 간단한 것을
root:
password = KAeCf05MwbFms
lastupdate = 1666224632
daemon:
password = *
bin:
password = R4Fw5I1roiewI
lastupdate = 1658189746
sys:
password = *
uucp:
password = *
guest:
password = *
nobody:
password = *
lpd:
password = *
secadm:
password = LyNq/fCZjbeWg
lastupdate = 1688534007
gohome01:
password = BPRqeXxMC4ilA
lastupdate = 1641352784
t0823:
password = cedwj4m8Ap.lQ
lastupdate = 1629699039
flags = NOCHECK
sim001:
password = YnPwo0SPf.Vp.
lastupdate = 1631070664
t090999:
password = unrmd7s8wVZts
lastupdate = 1631159131
t090998:
password = 5duZH3Zws4ZUg
lastupdate = 1658187117
kbusr000:
password = q8dgcLHTZMIYY
lastupdate = 1658986998
kbusr001:
password = is1UPuv0BGW0E
lastupdate = 1658986565
kbusr002:
password = r7RZMXNBodJ8k
lastupdate = 1632032390
kbusr003:
password = LvAlnPNF5AZcg
lastupdate = 1632032429
kbusr904:
password = oiSOP5gI5o8.g
lastupdate = 1632371148
kbusr902:
password = ll0vElh18We2s
lastupdate = 1632371213
kbusr901:
password = lKospWdsjF95.
lastupdate = 1632371288
kbusr903:
password = 0huTkXAL0zDRs
lastupdate = 1632371309
kbusr906:
password = aT/a3NFSusckg
lastupdate = 1634779572
a1234567:
password = c7RF9bJ3PDAY2
lastupdate = 1658191339
flags = NOCHECK
newdat:
password = DGtQzVeyEPyb6
lastupdate = 1658469467
flags = NOCHECK
esaadmin:
password = *
lastupdate = 1656465949
vvolow:
password = BQPCPLuSqH61U
lastupdate = 1658469759
flags = NOCHECK
vvv456:
password = 1GNqv.3oJe3Os
lastupdate = 1656478248
flags = ADMCHG
nuucp:
password = *
lastupdate = 1656485899
ted:
password = 448r7UnSGvXpY
lastupdate = 1658469756
flags = NOCHECK
bubu:
password = s.tnXABiY.Ut2
lastupdate = 1663547153
flags = NOCHECK
yyyy:
password = EewalywXJQj.6
lastupdate = 1661901870
flags = NOCHECK
a2148:
password = 9UXp1mDK1tMtE
lastupdate = 1663547150
flags = NOCHECK
kube0101:
password = xL76qsUZCskxo
lastupdate = 1658987095
flags = NOCHECK
abcrt:
password = O0l69nMxbDGIs
lastupdate = 1663645253
flags = NOCHECK
atto:
password = Z42lqCRXFrhHE
lastupdate = 1662359147
flags = NOCHECK
h2144:
password = RcGeBvtV62XJA
lastupdate = 1662508522
flags = NOCHECK
test919:
password = lErIh2XN1.QmU
lastupdate = 1663653793
flags = NOCHECK
test818:
password = IVBzAg/Nyh7Rk
lastupdate = 1663653799
flags = NOCHECK
imtest:
password = kLas2BnO6Mycc
lastupdate = 1664520913
flags = NOCHECK
test2:
password = H4cL7eYD0x98U
lastupdate = 1679279186
flags = NOCHECK
test3:
password = pEZOx4blb8DKE
lastupdate = 1679279830
flags = NOCHECK
test:
password = p2BkdeLrsSMmk
lastupdate = 1687234067
g1231005:
password = FEBbLKkj3V6fY
lastupdate = 1696462693
flags = NOCHECK
g2211005:
password = 9bN2tOap4DwtI
lastupdate = 1696490444
flags = NOCHECK
g7777777:
password = szcnlf68opOwc
lastupdate = 1696975735
flags = NOCHECK
test123:
password = 12Ozk6Yu7QJWo
lastupdate = 1706056883
테스트 서버에 있는 패스워드 값이고 이 내용을 가지고 만들겠다.
#패스워드 파일에서 라이스업데이트 내용을 while 문 $users 에 저장한다.
cat -n /etc/security/passwd | egrep -vw "daemon:|bin:|sys:|adm:|uucp:|nobody:|lpd:|guest:" | \
while read users
do
USER=$(echo "$users" | grep ":" | sed 's/://g'|awk '{print $2}')
#계정 정보
USERNUM=$(echo "$users" | grep ":"| awk '{print $1}')
#cat -n 옵션을 이용한 계정 라인 확인
LASTNUM=$(echo $USERNUM 2|awk '{sum = $1 + $2; print sum}')
#계정라인에 +2 를 더해 lastupdate 파일 라인을 확인
# LASTUPDATE=$(echo $users|grep -w ${LASTNUM}| awk '{print $2}') #이게 왜 제대로 안되는지 모르겠음
# if 문으로 계정 라인에 +2 를 해서 lastupdate 가 있는지 확인
if [ `echo $usres |grep $LASTNUM |grep lastupdate|wc -l` -eq 1 ];then
LASTUPDATE=`echo lastupdate`
# lastupdate 가 있으면 변수에 저장 // 이렇게 까지 만들어야 되나?? 위에 주석처리 LASTUPDATE 이걸로 하면 될 것 같은데... 흠...
fi
echo ${USER} $LASTUPDATE|grep -v ^last
#이상한 가비지 값이 나와서 빼줌
done
결과값
root@AIX:/tmp#cat -n /etc/security/passwd | egrep -vw "daemon:|bin:|sys:|adm:|uucp:|nobody:|lpd:|guest:" | \
> while read users
> do
> USER=$(echo "$users" | grep ":" | sed 's/://g'|awk '{print $2}')
> USERNUM=$(echo "$users" | grep ":"| awk '{print $1}')
> LASTNUM=$(echo $USERNUM 2|awk '{sum = $1 + $2; print sum}')
> if [ `echo $usres |grep $LASTNUM |grep lastupdate|wc -l` -eq 1 ];then
> LASTUPDATE=`echo lastupdate`
> fi
> echo ${USER} $LASTUPDATE|grep -v ^last
> done
root lastupdate
secadm lastupdate
gohome01 lastupdate
t0823 lastupdate
sim001 lastupdate
t090999 lastupdate
t090998 lastupdate
kbusr000 lastupdate
kbusr001 lastupdate
kbusr002 lastupdate
kbusr003 lastupdate
kbusr904 lastupdate
kbusr902 lastupdate
kbusr901 lastupdate
kbusr903 lastupdate
kbusr906 lastupdate
a1234567 lastupdate
newdat lastupdate
esaadmin lastupdate
vvolow lastupdate
vvv456 lastupdate
nuucp lastupdate
ted lastupdate
bubu lastupdate
yyyy lastupdate
a2148 lastupdate
kube0101 lastupdate
abcrt lastupdate
atto lastupdate
h2144 lastupdate
test919 lastupdate
test818 lastupdate
imtest lastupdate
test2 lastupdate
test3 lastupdate
test lastupdate
g1231005 lastupdate
g2211005 lastupdate
g7777777 lastupdate
test123 lastupdate