who 명령어는 현재 시스템에 로그인한 사용자 정보를 알아낼 수 있는 명령어로 /var/adm/wtmpx 파일의 내용을 분석해 사용자의 이름, 로그인 터미널, 로그인 시간, 마지막 명령어를 내린 이후부터의 시간, 셸 등의 정보를 출력 합니다. 그렇다면 이 내용이 텍스트로 남는다고 생각 하실지 모르지만(저역시 처음에 그렇게 생각하여..)file 명령어로 /var/adm/wtmpx 파일의 타입을 확인해 보면 데이터라고 나옵니다.
[solaris10vm:/]# file /var/adm/wtmpx
/var/adm/wtmpx: 데이터
하지만 그렇다고 내용을 못보는건 아닙니다. 다음과 같은 방식으로 내용을 확인해 보실 수 있습니다만 특별한 일이 아니고서야 이런 확인이 필요하지는 않아 보입니다.
[solaris10vm:/]# cat /var/adm/wtmpx | /usr/lib/acct/fwtmp | more
. . .(중략)
LOGIN co10 console 475 8 0011 0000 1228262848 0 0 0 수 12월 3 09:07:28 2008
zsmon PM10 500 8 0000 0001 1228262850 0 0 0 수 12월 3 09:07:30 2008
system down 0 10 0000 0000 1228262853 0 0 0 수 12월 3 09:07:33 2008
system boot 0 2 0000 0000 1228263187 0 0 0 수 12월 3 09:13:07 2008
run-level S 0 1 0123 0060 1228263224 0 0 0 수 12월 3 09:13:44 2008
run-level S 0 1 0123 0060 1228263224 0 0 0 수 12월 3 09:13:44 2008
run-level S 0 1 0123 0060 1228263224 0 0 0 수 12월 3 09:13:44 2008
run-level 3 0 1 0063 0123 1228263226 0 0 0 수 12월 3 09:13:46 2008
zsmon PM10 487 6 0000 0000 1228263243 0 0 0 수 12월 3 09:14:03 2008
.startd co10 489 5 0000 0000 1228263244 0 0 0 수 12월 3 09:14:04 2008
. . .(중략)
끝에 "more" 가 아니라 "grep system" 이라고 봐꾸면 System의 부팅, 종료 시간을 알수 있습니다.
[solaris10vm:/]# cat /var/adm/wtmpx | /usr/lib/acct/fwtmp | grep system
. . .(중략)
system boot 0 2 0000 0000 1228040703 0 0 0 일 11월 30 19:25:03 2008
system down 0 10 0000 0000 1228042199 0 0 0 일 11월 30 19:49:59 2008
. . .(중략)
who 명령어는 다음과 같은 출력형식과 옵션으로 이루어져 있습니다.
출력형식 : name (state) line time (idle) (pid) (comment) (exit)
name : 사용자의 이름(ID)
state : 다른 사용자가 write 명령어를 사용해 메시지를 보낼 수 있는 지의 여부
line : 사용자가 로그인한 터미널
time : 사용자가 로그인한 시간
idle : 마지막으로 명령어를 사용한 이후의 시간
pid : 프로세스 ID
comment : 사용자가 로그인한 곳
exit : 프로세스의 종료 상태
[solaris10vm:/]# who (-옵션)
>> 옵션
-a : All (bdlprtu 옵션)
-b : Boot time
-d : Dead process
-H : Header
-l(엘) :Login process
-m : 사용중인 단말기의 정보
-n # : -q에 대해 라인당 사용자 수 지정
-p : getty 또는 사용자가 아닌 프로세스
-q : Quick
-r : Run-Level
-s : Short (who의 짧은 형식(마지막 출력 또는 pid 이후 시간이 없음))
-t : Time
-T : tty의 상태 (+ 쓰기 가능, - 쓰기 불가능, ? 정지됨)
-u : ? 유용한 정보
(뜻을 정확히 모르는 약자는 대략적으로 유추했습니다.)
-H 옵션
who 출력에 보기 쉽도록 머릿말을 붙여 줍니다. 기본적으로 -H 옵션을 뺀 화면을 보여주기 때문에 항상 -H를 붙여줘야 하는 번거로움이 발생되기도 합니다. 때문에 아래 예제들은 가독성을 위해 "-H" 옵션을 기본적으로 붙여 사용했습니다.
[solaris10vm:/]# who
root console 12월 3일 09:15 (:0)
root pts/3 12월 3일 09:16 (:0.0)
root pts/4 12월 4일 08:44 (192.168.1.102)
root pts/5 12월 4일 09:28 (192.168.1.106)
[solaris10vm:/]# who -H
이름 행 시간
root console 12월 3일 09:15 (:0)
root pts/3 12월 3일 09:16 (:0.0)
root pts/4 12월 4일 08:44 (192.168.1.102)
root pts/5 12월 4일 09:28 (192.168.1.106)
-a 옵션
다른 옵션들을 묶어놓은 옵션으로 위에 가로속에 써 놓은 옵션들(bdlprtu)을 한번에 사용 합니다. 실제 "who -bdlprtu" 라고 입력해도 같은 화면이 출력 됩니다.
[solaris10vm:/]# who -aH
이름 행 시간 유휴 개인 번호 주석
. system boot 12월 3일 09:13
. run-level 3 12월 3일 09:13 3 0 S
zsmon . 12월 3일 09:14 이전 487
LOGIN console 12월 3일 09:14 이전 489
root + console 12월 3일 09:15 이전 906 (:0)
root + pts/3 12월 3일 09:16 이전 1176 (:0.0)
root + pts/4 12월 4일 08:44 3:30 1387 (192.168.1.102)
root + pts/5 12월 4일 09:28 . 1463 (192.168.1.106)
root pts/6 12월 4일 09:40 이전 1505 id=ts/6 기간=0 종료=0
-b 옵션
시스템의 부팅 시간을 알려 줍니다.
[solaris10vm:/]# who -bH
이름 행 시간
. system boot 12월 3일 09:13
-d 옵션
죽은 프로세스 즉 종료된 연결을 보여주게 되는대 해당 연결의 종료 유휴시간이 어느정도 인지는 정확히 모르겠습니다.(알려주시면 추가하도록 하겠습니다.)
[solaris10vm:/]# who -dH
이름 행 시간
root pts/6 12월 4일 09:40
-l 옵션
로그인 프로세스를 보여 줍니다.
[solaris10vm:/]# who -lH
이름 행 시간 유휴 개인 번호 주석
zsmon . 12월 3일 09:14 이전 487
LOGIN console 12월 3일 09:14 이전 489
-m 옵션
사용중인 단말기의 정보만 보여주게 됩니다. 즉 명령어를 쓰는 사용자 단말기(PC)의 정보만 보입니다. "who am i" 명령과 동일합니다.
[solaris10vm:/]# who -m
root pts/5 12월 4일 09:28 (192.168.1.106)
[solaris10vm:/]# who am i
root pts/5 12월 4일 09:28 (192.168.1.106)
-n 옵션
-q 에 대해 라인당 사용자 수 지정 한다고 하는대 정확한 의미를 모르겠습니다.(알려주시면 추가하도록 하겠습니다.)
[solaris10vm:/]# who -n2
root console 12월 3일 09:15 (:0)
root pts/3 12월 3일 09:16 (:0.0)
root pts/4 12월 4일 08:44 (192.168.1.102)
root pts/5 12월 4일 09:28 (192.168.1.106)
-p 옵션
getty 또는 사용자가 아닌 프로세스를 출력하는대 VMware에서 나오지 않아 Sun-Fire-V240서버에서 실행해본 결과 다음과 같이 나왔습니다. 정확한 의미는 모르겠습니다.(알려주시면 추가하도록 하겠습니다.)
[solaris10vm:/]# who -p
[solaris10vm:/]#
[SOLARIS:/]who -p
sac . Nov 27 23:25
-q 옵션
who 정보를 짧게 표시하는대 사용자이름(ID)만 표시합니다.
[solaris10vm:/]# who -q
root root root root
# 사용자=4
-r 옵션
Run-Level을 출력합니다.
[solaris10vm:/]# who -r
. run-level 3 12월 3일 09:13 3 0 S
-s 옵션
who 와 동일합니다.
[solaris10vm:/]# who -sH
이름 행 시간
root consol 12월 3일 09:15 (:0)
root pts/3 12월 3일 09:16 (:0.0)
root pts/4 12월 4일 08:44 (192.168.1.102)
root pts/5 12월 4일 09:28 (192.168.1.106)
-t 옵션
date등의 명령어를 통해 시간 설정이 변경되면 변경된 내용이 표시 됩니다. 시간 설정이 변경되지 않았다면 아무것도 출력되지 않습니다.
[solaris10vm:/]# who -t
. old time 12월 4일 17:59
. new time 12월 5일 03:00
old time은 바뀌기 이전 시간이며 new time은 바뀐 다음의 시간 입니다.
-T 옵션
tty의 상태를 알려줍니다. (+ 쓰기 가능, - 쓰기 불가능, ? 정지됨)
[solaris10vm:/]# who -T
root + console 12월 3일 09:15 이전 906 (:0)
root + pts/3 12월 3일 09:16 이전 1176 (:0.0)
root + pts/4 12월 4일 08:44 8:19 1387 (192.168.1.102)
root + pts/5 12월 4일 09:28 . 1463 (192.168.1.106)
-u 옵션
도움말에는 "유용한 정보"라고 나오지만 "PID"가 "개인 번호"라오는 것과 "유휴"값이 추가적으로 나오는것 외에는 추가되는 정보가 없습니다.
[solaris10vm:/]# who -uH
이름 행 시간 유휴 개인 번호 주석
root console 12월 3일 09:15 이전 906 (:0)
root pts/3 12월 3일 09:16 이전 1176 (:0.0)
root pts/4 12월 4일 08:44 8:20 1387 (192.168.1.102)
root pts/5 12월 4일 09:28 . 1463 (192.168.1.106)
지금까지 보여진 명령 결과 화면중에 주석 부분에 "(:0)", "(IP)"가 표시가된 화면이 몇게 있는대 여기서 (:0) 이 표시는 현재 시스템에 연결되어 있는 모니터, 키보드, 마우스를 이용 즉 GUI환경을 지원하여 로그인 했음을 나타냅니다. 반면 (IP) 이 표시는 로그인을 시도한 장소가 외부 시스템임을 말해 줍니다.
테스트 환경 : Solaris 10 u6
테스트 환경과 다른 환경에서 다른 메시지가 출력될 수 있습니다.
틀린부분은 알려주시면 수정하도록 하겠습니다.