(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
(10101101)173/UNIX2008. 12. 3. 03:19
uname 즉 UNIX name의 줄임말 입니다. 이 명령어는 시스템의 기본 정보를 명령어 입니다. 시스템의 기본 정보를 보는 명령어는 uname말고도 다양하나 여기서는 uname만 말하도록 하겠습니다. 이 명령어는 "명령어 + 옵션"으로 이루어져 있습니다.

[solaris10vm:/]# uname (옵션)
>> 옵션
-a : All 정보
-i : Platform 정보
-m : System Kernel Architecture 정보
-n : Nodename(Host name) 정보
-p : Processor(Processor type) 정보
-r : System OS Release 정보
-s : System OS 정보
-v : Kernel ID 정보
-X : 조금더 디테일 한 정보
-S : 호스트 이름 변경

우선 단일 출력 옵션부터 하나씩 입력해 보도록 하겠습니다.
[solaris10vm:/]# uname -i
i86pc
[solaris10vm:/]# uname -m
i86pc
[solaris10vm:/]# uname -n(hostname 명령어와 동일)
solaris10vm
[solaris10vm:/]# uname -p
i386
[solaris10vm:/]# uname -r
5.10
[solaris10vm:/]# uname -s
SunOS
[solaris10vm:/]# uname -v
Generic_137138-09

위와 같이 단일 출력 옵션으로 하나하나 출력한 부분들을 한번에 출력하는 옵션이 -a 옵션 입니다.
[solaris10vm:/]# uname -a
SunOS solaris10vm 5.10 Generic_137138-09 i86pc i386 i86pc
   ⓐ            ⓑ         ⓒ              ⓓ              ⓔ     ⓕ    ⓖ

SunOS SOLARIS 5.8 Generic_108528-22 sun4u sparc SUNW,Sun-Fire-V240
   ⓐ          ⓑ      ⓒ             ⓓ               ⓔ       ⓕ      ⓖ            ⓗ

ⓐ -s : System(OS)
ⓑ -n : Nodename(Host name)
ⓒ -r : Release
ⓓ -v : Kernel Version(ID)
ⓔ -m : System Kernel Architecture(그외, sun4m, sun4c 등)
ⓕ -p : Processor(Application) Architecture(그외 sparc, i686등)
ⓖ -i : Platform
ⓗ Banner

파란글씨의 uname -a 정보는 VMware에서의 정보이며 초록색의 uname -a 정보는 실제 SUN계열 서버에서의 정보 입니다. 때문에 끝에 "Sun-Fire-V240"이라고 배너 정보가 들어가게 됩니다. 이전에 써 놓은 "Solaris 서버정보 확인 명령어"에 "3. 서버정보"부분을 보시면 거의 비슷한 내용이 있는대 ⓖ 부분을 Maker?라고 입력해 놓았는대 Maker가 아니라 Platform입니다. 위에 영어로 써놓은 정보들(ⓐ~)을 한글로 풀면 대략 이런 내용이 됩니다.
운영체제 종류, 시스템 이름, 운영체제 버전, 커널 종류와 패치 버전, 시스템 종류, CPU 종류, 호환 틀, 모델명


-X 옵션의 출력은 다음과 같습니다.

[solaris10vm:/]# uname -X
System = SunOS
Node = solaris10vm
Release = 5.10
KernelID = Generic_137138-09
Machine = i86pc
BusType = <unknown>
Serial = <unknown>
Users = <unknown>
OEM# = 0
Origin# = 1
NumCPU = 1

uname -a 옵션과 다르게 몇가지 빠진 정보도 있지만 반대로 추가된 정보도 있습니다. NumCPU는 CPU의 갯수를 말합니다.


-S 옵션은 -X에서 출력물인 Node(호스트명)값을 바꾸는 명령어 입니다.
현제 제가 사용하고 있는 SOLARIS는 호스트명이 solaris10vm입니다. 이 호스트명이 너무 길어 실증이 났다거나, 기타 여러 이유에 있어서 호스트명 변경이 필요할시 이용하게 됩니다. 사용방법은 다음과 같습니다.

[solaris10vm:/]# uname -S WORD (WORD 부분에 바꿀 호스트명)
[solaris10vm:/]# uname -S sol10vm

이렇게 되면 solaris10vm 이  sol10vm으로 바뀌게 됩니다. 때문에 그다음 터미널 로그인에는
"[solaris10vm:/]# "명령 프롬프트가 아닌 "[sol10vm:/]# "명령 프롬프트로 변경되게 됩니다.
이 명령은 "hostname WORD"와 동일한 기능을 합니다. 하지만 이 기능은 호스트명을 변경하기 때문에 일반 사용자에게는 권한이 없으며 root 사용자만이 사용하여 변경이 가능 합니다. 일반 유저라면 시스템 이름을 변경할 수 없다는 에러 메시지가 출력되게 됩니다.



테스트 환경 : Solaris 10 u6
테스트 환경과 다른 환경에서 다른 메시지가 출력될 수 있습니다.
틀린부분은 알려주시면 수정하도록 하겠습니다.
Posted by Special Alex
(10101101)173/UNIX2008. 12. 2. 23:24
man 명령어는 도움말 명령어 입니다. 일반적인 명령어에 잘못된 명령을 입력하면 간단한 도움말이 나오게 됩니다. 하지만 man 명령어를 통해 좀더 디테일한 도움말을 확인해 보실 수 있습니다. man 명령어의 사용 방식과 옵션은 다음과 같습니다.

[solaris10vm:/]# man (옵션) [확인할명령어]
>> 옵션
-a : All
-l(엘) : List
-s : Section
-k : Keyword

-a 옵션
먼저 이해를 위해 "-l"옵션으로 passwd를 입력한 화면을 보면 다음과 같습니다.
[solaris10vm:/]# man -l passwd
passwd (1)            -M /usr/share/man
passwd (4)            -M /usr/share/man
[solaris10vm:/]#

위에 말은 같은 "man passwd"라도 두가지가 존재한다는 말입니다. 즉 섹션(항목)이 두가지가 존재한다는 말입니다. 일반적으로 -a를 생략하고 입력하면 첫번째 섹션(passwd (1))만 출력됩니다. 하지만 -a옵션을 주게되면 passwd (1)부분을 마지막까지 다 읽은 후 그다음 섹션으로 넘어가게 됩니다. 즉 한번에 모든 섹션을 읽게 됩니다. 따라서 man passwdman -a passwd는 조금 다른 화면을 보여주게 됩니다.

[solaris10vm:/]# man passwd
페이지를 다시 포맷 중입니다.   기다려 주십시오 . . .  완료

User Commands                                              passwd(1)
. . .


[solaris10vm:/]# man -a passwd
페이지를 다시 포맷 중입니다.   기다려 주십시오 . . .  완료
페이지를 다시 포맷 중입니다.   기다려 주십시오 . . .  완료
::::::::::::::
/tmp/mtpsw4bj
::::::::::::::

User Commands                                              passwd(1)
. . .
[섹션1을 다 읽은 후]
--계속--(다음 파일:  /tmp/mpeee4bj)
File Formats                                              passwd(4)
. . .


이와 같이 임시폴더(/tmp/12345678)에 모든 섹션을 불러온 후 한 섹션이 끝날 때마다 그 다음 섹션으로 넘어가게 됩니다.


-l, -s 옵션
위에서 보신바와 같이 해당 명령어 각 섹션을 보여주게 되는대 섹션의 내용은 다음과 같습니다.

1. 일반 명령어
2. 시스템 명령어
3. C프로그래밍을 위한 라이브러리
4. 시스템 설정 파일들의 형식
5. 표준안, 매크로 등
6. 게임이나 데모
7. 디바이스 파일

passwd명령어는 1번과 4번 섹션이 존재했었습니다. -a 옵션은 순서대로 모든 섹션을 보여주게 됩니다. 반대로 한 섹션만 보려한다면 이때 "-s섹션넘버"를 사용해 해당 섹션만 볼 수 있게 됩니다.
[solaris10vm:/]# man -s4 passwd
페이지를 다시 포맷 중입니다.   기다려 주십시오 . . .  완료
File Formats                                              passwd(4)
. . .

위와 같이 -l 옵션으로 섹션의 넘버를 확인해 볼 수 있으며 확인한 번호를 이용해 -s 옵션으로 해당하는 섹션만 골라 볼 수 있습니다. 각 섹션의 넘버는 해당 "명령어(섹션넘버)"오 나오게 됩니다.


-k 옵션
이 옵션은 다음에 찾고자 하는 키워드를 입력하면 키워드로서 man 페이지 리스트를 찾아볼 수 있는 기능을 합니다. 문제는 root사용자가 각 man 페이지와 키워드의 DB를 만든 후에 사용가능한대 이를 만드는 명령어는 "catman -w" 명령어를 이용합니다. 이 -k 옵션은 windex DB에서 키워드를 찾게 되는대 위에서 말한바와 같이 DB를 만든 후 사용이 가능합니다. 이말은 즉 솔라리스 설치후에 windex DB가 자동으로 만들어 지지 않기 때문에 "catman -w" 명령을 통해 DB를 생성하게 됩니다. DB생성 이전에 -k 옵션을 사용하셧다면 다음과 같은 메시지를 만나기 쉽습니다.
[solaris10vm:/]# man -k passwd
/usr/share/man/ko/windex: 해당 파일이나 디렉토리가 없음
/usr/share/man/windex: 해당 파일이나 디렉토리가 없음

catman -w 명령을 입력하게 되면 DB생성의 시간이 걸립니다. DB생성이 끝나면 특별한 메시지가 나타나진 않습니다. 때문에 바로 확인해 보면 다른 메시지를 보실 수 있습니다.
[solaris10vm:/]# man -k passwd
d_passwd  d_passwd (4)   - dial-up password file
getpw        getpw (3c)       - get passwd entry from UID
kpasswd    kpasswd (1)     - change a user\&'s Kerberos password
. . .


man 페이지 에서 페이지 컨트롤
<Space> : 다음 페이지 출력
<Enter>  : 다음 라인 출력
b : 이전 페이지 출력
d : 다음 반 페이지 출력
/WORD : 도움말에서 원하는 단어 찾기 (WORD 부분에 찾을 단어)
n :  방금 찾은 단어를 한번 더 찾기
q, Ctrl + C : 도움말 빠저 나가기
h : 위에 나열된 페이지 컨트롤 이외의 좀더 다양한 페이지 컨트롤 단축키를 출력합니다.

가끔 man으로 열어본 도움말을 저장하고 싶을때가 있습니다. 또는 필요에 의해서 저장을 할때가 있습니다. 그럴때 사용하는 명령어는 두가지가 있습니다.
[solaris10vm:/]# mann passwd > passwd_man1.txt
[solaris10vm:/]# mann passwd | col -b > passwd_man2.txt
이 두가지 방법중 보통 후자의 "passwd_man2.txt"를 사용하게 됩니다. 그 이유는 SOLARIS에서는 1, 2번 파일 모두 cat으로 열어보았을때 차이가 나타나지 않지만 Windows환경에서 보면 2번파일이 SOLARIS에서 출력된 화면과 동일하게 보이게 됩니다. 물론 메모장으로 열어보면 이상한 글자들 중간중간 섞여 나오지만 텍스트전문 에디터(Edit Plus, Ultra Edit 등..)로 열어 볼 경우 SOLARIS에서 보았던 화면과 동일한 텍스트 라인으로 출력됩니다. 물론 후자가 좀더 용량도 적습니다. 간접적으로 체험은 strings 명령어로 열어보았을때 1번과 2번 파일이 서로 다른 라인을 보여주게 됩니다.(cat으로 열어볼시 거의 동일한 화면임)


SEE ALSO
man 페이지를 읽다보면 중간에 SEE ALSO라는 항목이 다음과 같은식으로 보이게 됩니다. (아레 SEE ALSO 부분은 passwd의 man 페이지 입니다.)
at(1),   batch(1),   finger(1),   login(1),   nistbladm(1),
orcron(1M), . . .
이 부분은 현재 도움말과 관련된 다른 도움말의 리스트가 나열됩니다. 나열될때 섹션넘버까지 같이 나열되게 됩니다.



테스트 환경 : Solaris 10 u6, 한글 환경
테스트 환경과 다른 환경에서 다른 메시지가 출력될 수 있습니다.
틀린부분은 알려주시면 수정하도록 하겠습니다.
Posted by Special Alex