(10101101)173/UNIX2008. 12. 4. 18:42

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
테스트 환경과 다른 환경에서 다른 메시지가 출력될 수 있습니다.
틀린부분은 알려주시면 수정하도록 하겠습니다.

Posted by Special Alex