본문 바로가기
工夫/Linux

솔라리스 사용자 지침서

by 치세 2009. 7. 12.

제1장 UNIX System의 관리
1. System의 Manager의 역할
System Manager는 System을 유지, 보수, 관리하는 일을 하며 System 사용자를 위한 각종 지원을
하여야 한다. System Manager의 역할에 따라 사용자는 System을 신뢰하거나 또는 불신하게 된다.
다음은 System관리를 시작하는 이를 위한 기초적인 주의 사항 및 지침 사항이다.
  Root(/) directory 아래에서 Software를 설치하는 등의 작업을 하지 않는다.
    - 치명적인 실수를 할경우 System이 작동불능이 된다.
  모든 작업에 앞서 작업할 대상 File과 directory를 backup한다.
    - 최악의 결과는 피해야 한다.
  초보자는 작업에 앞서 경험자의 자문을 구한다.
    - 만약을 위해 확실하고 정확한 작업을 할수 있다
  자신이 한 작업에 대한 기록을 가진다.
    - 이전으로 돌아가기 위해서는 자신이 한 작업에 대해 알아야 한다.
  부지런한 Manager일수록 많은 사용자에게 편리함을 준다.

1-1. Manager의 역할
System Manager는 일반적으로 다음의 일들을 한다.
  현재 System의 관리 및 새로운 System의 설치
  현재 응용 프로그램의 관리 및 새로운 응용 프로그램의 설치
  Software 판올림(Upgrade) 및 하드웨어 판올림(Upgrade)
  하드웨어의 수행과 성능을 감시
  System Software의 지원 및 유지
  File System 유지
  System 보안의 감시
  System 데이터의 백업
  기타 System의 하드웨어와 데이터를 관리하기 위한 역할

1-1-1. 사용자에 대한 역할
System Manager는 사용자에 대하여 다음의 작업을 하여야 한다.
  System에 계정관리(계정 만들기, 계정 삭제, 계정 고치기...)
  사용자의 문제점을 해결 한다.
  사용자 그룹의 결정
  사용자의 교육

1-1-2. Day-to-Day Administration
System Manager는 매일 다음의 작업을 하여야 한다.
  사용자 계정의 생성과 삭제
  매일하는 백업, directory와 File삭제 및 보관
  사용자들의 지원
  낡은 System의 File의 삭제
  사용되지 않는 File이나 코어 File의 삭제
  불필요한 임시File의 삭제

1-1-3. 주기적인 관리항목
System Manager는 System을 다음의 항목에 대하여 일정을 잡고 maintain할 책임이 있다.
  정규적이고 주기적인 백업
  패스워드 정리
  보안사항 점검
  Disk 정리
  spooler 정리 - mail, printer의 spool File
1-2. Day-to-Day Administration
"Good Morning" script
  로컬 네트워크의 Test
  대용량 File Server나 stand-alone System의 down여부 점검
  critical File System disk상에서 block수와 inode수의 점검
  Error Message를 찾기 위한 root의 mail을 점검
  /usr에 있는 meta File의 관찰(변경 여부 보기)
  console log File의 확인 - 이상여부 판단, 갱신

1-2-1. Morning Cleanup and Inspection
가장 먼저 System Manager는 System의 작업 여유 공간이 충분한가를 살펴보아야 한다. System
Manager가 살펴 보아야할 File System은 다음과 같다.
  /
  /usr
  /usr/spool(or /var/spool)
  /var
  /usr/adm/message(or /usr/spool/console)
  /tmp

가. root Disk
루트(root) 파티션 영역의 Disk에는 약간의 여유 Disk를 항상 확보하여야 한다.
  space를 확보한다.
  temporary disk space가 적을 경우 프로그램을 수행하지 못하는 경우가 발생한다.
  root 영역에서는 가능한 최소의 file만 두어야 한다.
나. /usr/spool과 /var/spool

  mail에 너무 많은 mail이 삭제되지 않은 채로 있을 경우가 있음
  /var/spool/mail directory에 사용자의 mail이 도착

다. /usr/adm/messages or /usr/spool/console
  System에서 발생한 Error나 부팅시 Message의 기록(Log)이 남는다.
  시간이 지나면 지날수록 크기가 증가한다.
  주기적인 정리(clean up)가 필요하다.
  이 부분은 System에 이상이 있을 경우 가장 우선적으로 검사하는 부분이다.
   UNIX System은 부팅 될 때 주변 장치들에 이사이 있는지를 Test 한다. 이상이 없을 경우 정상 적
으로 부팅이 된다. 이 때 부팅시 설치하는 기본 프로그램은 /etc/rc.local의 내용에 따른다. 부팅시
의 Message들은 /var/adm/messages File에 기록한다. 이 Message들을 살펴 봄으로서 System
의 주 변 장치들에 이상이 발생하였는지 아닌지를 알 수 있다. .

 시간상으로 오래된 내용이 먼저 나타난다. /usr/adm/messages File은 누가 언제 root로 login하
였는지 혹은 su명령을 수행하였는지 알 수 있다. 이 Message File은 그 크기가 계속 증가하기 때문
에 일정한 시기마다 refresh해 주어야 한다. 이 때 File을 삭제하지 않고 /dev/null File을 복사하여 크
기를 0 byte로 만든다.
# cp /dev/null /var/adm/messages

다. /tmp, /var/tmp or /usr/tmp
  System의 낙서판에 해당한다. 아무나 write 가능하다.
  임시 File이 생성되어 보관된다.(OS가 처리)

1-3. UNIX File 살펴보기
  root(/) - System상의 모든 File의 기본이 되는 directory
  /usr - System 운영에 관계되는 directory
  /usr/spool - 몇 개의 spool library를 제외한 모든 사용자의 spool공간
  /var - spooler와 같이 File을 빠르게 access하고 expanding할 수 있도록 하는 영역
  /usr/src - source File
  /usr/include - 모든 System Haed File
  /etc - System Manager와 System Programmer를 위한 toolbox
  /usr/adm - System Manager를 위한 log File
  /usr/spool, /var/spool - spool log
  /usr/lib - Library
  /bin - System에서 제공하는 실행 File
  /usr/bin - System에서 제공하는 실행 File, BSD 4.3, AT&T 5.4
  /sbin - System에 관련된 실행 File(주로 부팅시 실행됨)
  /dev - 장치 node들이 있는 곳
  /tmp - 임시 File을 두는 곳


1-3-1. /etc Files
/etc directory 아래의 File은 UNIX Manager가 가장 눈여겨 보아야 할 File들이다. /etc directory 아
래에 있는 대부분의 File은 System Manager에 의하여 편집 가능한 File들이며 이를 어떻게 설정하
느냐에 따라 일반 사용자의 System 활용에 큰 영향을 준다.

가. rc
rc group은 UNIX의 기본 리소스를 사용 가능하도록 구동시키는 역할을 한다. SunOS의 경우 rc로 시
작하는 File은 다음과 같다.
# ls -al rc*
3 -rw-r--r-- 1 root 2993 Aug 1 1992 rc
6 -rw-r--r-- 1 root 5476 Aug 1 1992 rc.boot
1 -rw-r--r-- 1 root 352 Aug 1 1992 rc.ip
5 -rw-r--r-- 1 root 5018 Jan 16 22:51 rc.local
5 -rw-r--r-- 1 root 5070 Jan 13 17:54 rc.local.org
3 -rwxr-xr-x 1 root 2172 Aug 1 1992 rc.single*

이들은 단일 사용자 모드로 부팅할 때, 다중작업(Multitasking), 다중사용자(Multiuser) mode로 부팅
할 때 각각 다른 리소스(resource)가 사용된다.
나. group
그룹 ID와 그룹 멤버쉽(Membership)을 담아 두었다.
# cat group
root::0:root
other::1:
bin::2:root,bin,daemon
sys::3:root,bin,sys,adm
----------------------------
nobody::60001:
noaccess::60002:
nogroup::65534:
ftp_g::100:

첫 필드는 그룹의 이름이며, 두 번째 필드는 암호 필드이며, 세 번째 필드가 그룹 ID-Number이며, 마
지막 필드가 그룹에 소속된 사용자 아이디의 리스트들이다.

다. passwd
사용자의 아이디, 사용자 directory가 존재하는 위치를 담아둔 File
root:x:0:1:Super-User:/:/bin/csh
daemon:x:1:1::/:
bin:x:2:2::/usr/bin:
.........
kong:x:1001:10:kong seung chul:/home/kong:/bin/csh
kim:x:1002:10:kim jeong seong:/home/kim:/bin/csh
guest:x:1100:10:guest:/home5/guest:/bin/csh
..........
이 System의 사용자인 "공 성철"을 예를 들어 passwd File에 대하여 알아보면
  kong - 공성철의 아이디
  x - password
  1001 - ID 번호
  10 - 그룹 번호
  kong seung chul - 사용자의 comment, 이름 혹은 전화번호를 기록
  /home/kong - 사용자의 root directory
  /bin/csh - 사용자가 로그인을 할 때 수행되는 명령. 일반적으로 shell이 지정되지만 BBS 프로그
램 과 같이 다른 용도로도 사용이 가능하다.

라. motd
Message of Today의 약자로 System에 로그인하는 사용자 모두에게 알리는 공지사항이나 환영
Message가 담겨있다.

# cat motd
Sun MicroSystems Inc. SunOS 5.5.1 Generic May 1996

마. vfstab
System Disk의 파티션에 관한 정보
# more vfstab
#device device mount FS fsck mount mount
#to mount to fsck point type pass at boot options
#
#/dev/dsk/c1d0s2 /dev/rdsk/c1d0s2 /usr ufs 1 yes -
fd - /dev/fd fd - no -
/proc - /proc proc - no -
/dev/dsk/c0t3d0s1 - - swap - no -
/dev/dsk/c0t3d0s0 /dev/rdsk/c0t3d0s0 / ufs 1 no -
/dev/dsk/c0t3d0s6 /dev/rdsk/c0t3d0s6 /usr ufs 1 no -
/dev/dsk/c0t3d0s5 /dev/rdsk/c0t3d0s5 /opt ufs 2 yes -
/dev/dsk/c0t1d0s0 /dev/rdsk/c0t1d0s0 /home0 ufs 3 yes -
/dev/dsk/c0t1d0s5 /dev/rdsk/c0t1d0s5 /home5 ufs 4 yes -
/dev/dsk/c0t1d0s6 /dev/rdsk/c0t1d0s6 /home6 ufs 5 yes -
/dev/dsk/c0t1d0s7 /dev/rdsk/c0t1d0s7 /home ufs 6 yes -
swap - /tmp tmpfs - yes -

바. 기타
  export - NFS(Network File System)를 위해 export되는 파티션 list, 및 export permission
  inetd.conf - internet daemon program list
  syslog.conf - syslog configuration File
  utmp - 현재 System에 login한 사용자의 list
  ttytab - active terminal을 정의
  aliases - mail의 aliases File

제 2장 UNIX System의 보안
1. 보안의 범위
네트웍의 사용범위가 넓어지고 사용이 보편화되면서 보안의 문제가 심각하게 대두되고 있다.
  보안 - 정당한 절차를 거치지 않은 사용자로부터 System이나 데이터가 안전하게 유지되는 것.
  가장 완전한 보안 - 아무도 사용하지 못하도록 봉쇄
  네트웍의 가장 큰 장점은 다수의 컴퓨터간의 자원 공유이다.
  보안 정책 - 인터넷에 접속한 컴퓨터는 결코 보안에 대해 안전하다고 할 수 없다.
  보안을 엄격히 적용하면 할수록 공유할 수 있는 resource의 양은 적어진다.
  최선의 보안은 backup이다.

1-1. 계정 보안(Account Security)
사용자의 계정을 System 관리자는 만들어주고, 만들어진 계정에 대하여 사용자에 대한 지원을 하여
야 한다.
가. 좋은 Password, 나쁜 Password
반드시 대문자, 소문자, Special character, Control Character, 숫자를 조합한 8자리를 사용 할 것.
나쁜 유형의 password(사용해서는 안될 password)
  자신의 이름, 배우자(애인)이름, 부모이름, 애완동물, 아이들의 이름
  가까운 작업자나 동료의 이름, 유명 배우의 이름, 아는 사람의 이름
  사용하고 있는 OS의 이름
  사용중인 host의 이름
  전화번호, 주민등록번호, 생일
  사용자 아이디를 변형한 암호(대소문자, 두 번 입력 등)
  영어사전이나 외국어사전에 등록된 단어
  지명이름, 대명사, 동일한 글자만으로된 암호
  쉬운 패턴의 글자 예)qwerty
  사전에 있는 단어의 역순

좋은 유형의 password
  대소문자를 섞어 사용한 password
  숫자나 마침표등이 문자와 섞인 password
  기억하기 쉬워서 적어둘 필요가 없는 password
  길이가 7-8글자 정도되는 password
  빠르게 타이핑 될 수 있어서, 남들이 보고 따라하기 힘든 password

2. Monitoring Account Security
System 사용중에 발생하는 문제점이나 System 사용에 대한 기록은 log File을 참조한다.
log File의 종류
  /var/log : send mail log
  /usr/adm/lastlog : last login time 확인
  /etc/utmp
  /etc/wtmp(or /usr/adm/wtmp)
  /usr/adm/messages
  /usr/adm/sulog 사용 예)who /usr/adm/wtmp
  last lastcomm, acctcomm, sa, ps, ja등의 command로 monitoring 주의

 - root 로그인은 오직 console로만 하는 것이 가장 안전한 방법이며, 외부에서 root 패스워드를 알
아 내더라도 login을 하지 못하게 막아 두어야 한다. 이를 위하여 /etc/default/login File을 수정한다.
# cat etc/default/login
#ident "@(#)login.dfl 1.7 93/08/20 SMI" /* SVr4.0 1.1.1.1 */
..........
# If CONSOLE is set, root can only login on that device.
# Comment this line out to allow remote login by root.
#
CONSOLE=/dev/console

# PASSREQ determines if login requires a password.
#
PASSREQ=YES
.........
# SYSLOG determines whether the syslog(3) LOG_AUTH facility should be used
# to log all root logins at level LOG_NOTICE and multiple failed login
# attempts at LOG_CRIT.
#
SYSLOG=YES
[www:/etc/default] =:#
수정된 /etc/default/login
[www:/etc/default] =:# cat login
#ident "@(#)login.dfl 1.7 93/08/20 SMI" /* SVr4.0 1.1.1.1 */
..........
# If CONSOLE is set, root can only login on that device.
# Comment this line out to allow remote login by root.
#
CONSOLE=/dev/console

# PASSREQ determines if login requires a password.
#
PASSREQ=NO
.........
# SYSLOG determines whether the syslog(3) LOG_AUTH facility should be used
# to log all root logins at level LOG_NOTICE and multiple failed login
# attempts at LOG_CRIT.
#
SYSLOG=YES
[www:/etc/default] =:#

제 3 장Solaris System
1. Solaris System의 환경
File Systems
  / : Boot prog, OS kernel, System data File
  swap
  /export : Diskless server의 경우
  /export/swap
  /opt : unbundle S/W
  /usr
  /export/home : 사용자 directory

2. Server의 설치
2-1. 설치를 위한 방법
Press[STOP] - A
#ok boot cdrom - brower
  System Identification Phase - hostname, Network, IP Address, Name Service, Subnetworks,
Netmask, Time zone
  Installing Solaris Software Group, Disk Layout(기존 자료 preserve 가능)


2-2. Post-Installation Files
/var/sadm/install
/var/sadm/install_data
/var/sadm/pkg
/var/sadm/softinfo

3. Booting & Shutting down
 Booting의 단걔는 보통 6가지 단계로 구분이 된다. 처음 단계가 커널을 초기화하고 로딩하는 단계이
다. 두 번째로는 Hardware적인 설정을 하는 단계이고, 세 번째가 자동적으로 생성되는 시스템 과정
같은 것이 있고, 네 번째로는 운영 조정에 관한 내용이다. 그리고 다섯 번째가 시스템의 싲가시의 스
크립트의 실행에 관한 내용이고 마지막인 여섯 번째가 바로 멀티 유저에 관한 부분이다.

3-1. Steps in the Boot Process
- Loading and initialization od the kernel
하드웨어 의존적인 실행가능한 프로그램의 하나인 kernel이 /unix 또는 /vunixa와 같이 존재하고,
일반적으로 어떤 작은 프로그램이 먼저 수행되어 kernel을 읽어들이게 된다.
- Device detection and configuration
커널이 하는 최초의 일중의 하나는 현재 보이는 하드웨어의 환경을 체크하는 것이다. 사용자가 사용
자의 시스템을 위해 커널을 구성할 때, 당신은 하드웨어 장치들을 찾아내기를 기대할 것이다 커널이
실행될 때 당신이 말했던 것에 대하여 각 장치들의 위치와 초기화를 위해 노력할 것이다.
- Creation of spontaneous system Processes
기본초기화가 성공적으로 끝나면, 커널은 유저공간에 얼마의 임의의 프로세스를 생성한다. 정확하
게 생성되는 수는 sched-process 0, init-process 1가 솔라리스에서는 생성이 된다.
- Operation intervention(Single-user boot only)
만일 시스템이 단일 사용자 모드라면 init는 커널을 지나는 via-Command-line을 시작하는 것을 알
려 줄 것이다. 단일 사용자로 부팅 중에는, init는 시스템 콘솔상에서의 쉘을 간단히 생성시키고 초기
실행과정의 시간 계속하기 전에, 종료시키기 위해서 기다린다. 그리고 단일 사용자 모드는 항상
Bourne shell이다.
- Execution od system startup scripts
부팅의 다음 단계는 Startup Script들을 실행하는 것이다. Startup Script들은 etc/init.d에서 지원되
고 Link들은 /etc/rc1.d등등의 디렉토리에서 만들어진다. 초기화에 대한 스크립트에서 종종 실행되
는 내용은 몇가지가 있다. 먼저 첫 번째로 system의 이름의 정의, 두 번째가 시간의 설정, 세 번째로
는 fsck의 디스크 check(이것은 자동모드에서만 실행된다.), 그리고 시스템의 디스크들의
mounting, Network interface설정, Daemon들과 Network서비스들의 시작, Accounting과 Quota들
의 조절로 실행이 된다.
- Multi-user operation
초기화 스크립트를 실행하고 나면 아무도 로그인을 못한 것을 제외하고는 완전한 운행을 한다. 특정
터미널 상에서 Login을 위해 정리되어 받아들이면, 그것에서 getty process는 경청을 하게 된다.
Startup Scripts를 실행한 후에 init는 getty를 낳게 되고 Boot process는 성공적으로 된다. init는
Single-user와 Multi-user의 'Run-level'을 갖는데 이는 시스템의 자원을 제한 가능하게 하는 것이
다.

 

3-2. Rebooting & Halting
- Turning Off the Power
소규모의 UNIX System일지라도 shut down에는 제한을 받는다. 만일 무작정 시스템의 전원을 차단
한다면 일부의 파일이나 디스크에 손상을 입을 수도 있다.
- Shutdown: The Genteel way to halt System
Shutdown은 전원만을 OFF 시키는 것보다 안전하다. Shutdown은 Halt나 Reboot 또는 Single-
user mode로 전환시에 사용한다.
- Halt: A Simpler way to Shutdown
Halt는 Shutdown을 간단히 하는 것이라고 보면 된다. 명령은 Shutdown -h라고 주고, Halt는
Shutdown을 기록하고, 꼭 필요한 프로세스가 아닌 것은 Kill시키고, sync를 실행시킨다. Halt -q는
즉시 halt시키는데 synchroniztion과, 프로세스 죽이기, 로그 기록하기 등을 하지 않는다.
- Reboot: Quick and Dirty Restart
Reboot는 halt와 유사한데 shutdown -r 이라고 명령을 주면 된다. 이것은 -nr과 -q플래그를 지원한
다.
 
4. Auto configuration
4-1. /kernel directory
/kernel/unix program and /kernel 하위 directory의 프로그램들은 boot시 load되는데 drv, exec,
fs, mics, sched, strmod, sys등이 있다.

4-2. /usr/kernel
boot후 필요에 따라 load

4-3. /etc/System File
kernel configuration을 변화시키려고 할 때 boot시 사용된다.

5. Device Configuration and Naming
5-1. Setting SCSI Device Address
  Target 3 : first internal disk
  Target 0, 1, 2 : Disk
  Target 4, 5 : tape
  Target 6 : CD-ROM

5-2. Logical Device Name Directories in /dev
  dsk : Block Interface to disk devices
  rdsk : Raw or chracter interface to disk device
  rmt : Tape devices
  term : Serial line devices
  cua : Dial-out modem
  pts : Pseudo terminal
  fbs : Frame buffers

5-3. Device Configuring
device를 인식시켜 주는 기능들
# drvconfig
# disks
# tapes

6. 새로운 Disk를 추가하기 위한 작업
  하드웨어 설정(Setting up the H/W) - 새로운 하드Disk일 경우 내장인지, 외장인지, primary인지,
secondary인지에 따라서 핀 설정(pin setting)이 달라진다. 그리고 구입한 회사에 따라 pin setting
은 다르기 때문에 구입 후 매뉴얼을 참고한다. Disk의 DIP switch를 조정한다.(SCSI id를 잘 setting
하는 것이 중요하다. SCSI id 0, 1, 2, 3, ....)
  새로운 Disk를 인식하도록 설정(configuration) - SCSI방식의 Workstation은 새로 부착된 SCSI
disk의 종류를 System이 알아내는 기능을 대부분 가지고 있다.
# drvconfig
# disks
  Disk의 파티션(Partitioning the disk) - Disk를 파티션한다. 파티션 테이블(partition table)의
   크기는 설치할 S/W의 특성에 잘 맞게 나누어야 하며 너무 크게하거나 너무 작게 파티션을 나누지
않는다.
# format
Searching for disks...done

AVAILABLE DISK SELECTIONS:
       0. c0t1d0
          /iommu@f,e0000000/sbus@f,e0001000/espdma@f,400000/esp@f,800000/sd@1,0
       1. c0t3d0
          /iommu@f,e0000000/sbus@f,e0001000/espdma@f,400000/esp@f,800000/sd@3,0
Specify disk (enter its number):
위의 예를 살펴보면 c0t1d0 disk가 내장형 secondary이며, c0t3d0가 내장형 primary disk임을 알수
있다. 여기에서 나타난 Disk를 참고하여 parition할 Disk를 선택한다. disk format menu는 다음과 같
다.

FORMAT MENU:
        disk - select a disk
        type - select (define) a disk type
        partition - select (define) a partition table
        current - describe the current disk
        format - format and analyze the disk
        repair - repair a defective sector
        label - write label to the disk
        analyze - surface analysis
        defect - defect list management
        backup - search for backup labels
        verify - read and display labels
        save - save new disk/partition definitions
        inquiry - show vendor, product and revision
        volname - set 8-character volume name
        quit
format>

Disk가 처음으로 붙을 경우는 label을 할것인가 물어 본다. (y로 대답) p(parition), p(print)를 연속으
로 수행하면 다음과 같은 상태가 된다.
partition> p
Current partition table (original):
Total disk cylinders available: 2036 + 2 (reserved cylinders)
Part Tag Flag Cylinders Size Blocks
  0 root wm 0 - 203 100.41MB (204/0/0) 205632
  1 swap wu 204 - 508 150.12MB (305/0/0) 307440
  2 backup wm 0 - 2035 1002.09MB (2036/0/0) 2052288
  3 unassigned wm 0 0 (0/0/0) 0
  4 unassigned wm 0 0 (0/0/0) 0
  5 unassigned wm 509 - 1220 350.44MB (712/0/0) 717696
  6 usr wm 1221 - 2035 401.13MB (815/0/0) 821520
  7 unassigned wm 0 0 (0/0/0) 0
partition>
이 때 partition할 영역을 선택한 후 전체의 합이 2번째 part가 되도록 한다.
  partition후 정보를 Disk에 기록
format> label
  Making File Systems on the partitions
# newfs /dev/rdsk/c0t0d0s0
  Adding the FileSystem to /etc/vfstab File
# cat /etc/vfstab
#device device mount FS fsck mount mount
#to mount to fsck point type pass at boot options
#
#/dev/dsk/c1d0s2 /dev/rdsk/c1d0s2 /usr ufs 1 yes -
fd - /dev/fd fd - no -
/proc - /proc proc - no -
/dev/dsk/c0t3d0s1 - - swap - no -
/dev/dsk/c0t3d0s0 /dev/rdsk/c0t3d0s0 / ufs 1 no -
/dev/dsk/c0t3d0s6 /dev/rdsk/c0t3d0s6 /usr ufs 1 no -
/dev/dsk/c0t3d0s5 /dev/rdsk/c0t3d0s5 /opt ufs 2 yes -
/dev/dsk/c0t1d0s0 /dev/rdsk/c0t1d0s0 /home0 ufs 3 yes -
/dev/dsk/c0t1d0s5 /dev/rdsk/c0t1d0s5 /home5 ufs 4 yes -
/dev/dsk/c0t1d0s6 /dev/rdsk/c0t1d0s6 /home6 ufs 5 yes -
/dev/dsk/c0t1d0s7 /dev/rdsk/c0t1d0s7 /home ufs 6 yes -
swap - /tmp tmpfs - yes -
#

  Disk가 제대로 부착되었는가의 확인은 /dev/dsk directory에서도 할 수 있다.
# cd /dev/dsk
# ls
./ c0t1d0s1@ c0t1d0s4@ c0t1d0s7@ c0t3d0s2@ c0t3d0s5@
../ c0t1d0s2@ c0t1d0s5@ c0t3d0s0@ c0t3d0s3@ c0t3d0s6@
c0t1d0s0@ c0t1d0s3@ c0t1d0s6@ c0t3d0s1@ c0t3d0s4@ c0t3d0s7@
#

7. Mounting File Systems
7-1. File Systems
Solaris System의 File System은 다음과 같다.
  ufs - unix File System의 약자. 가장 일반적인 File System
  pcfs - PC File System. DOS용 File을 읽고 쓰기 위한 File System
  hsfs
  nfs - network File System. Network을 이용하여 사용하는 File System


7-2. Mounting and Unmounting File Systems
/etc/vfstab File에는 부팅시에 마운트하는 File System을 명시해 준다.
# mkdir /data
# mount /dev/dsk/c1t3d0s6 /data
# umount /dev/dsk/c1t3d0s6 (or /data)

  umount시 busy error - 사용중인 processor나 user가 있음
# fuser /data
    로 확인하여 사용중인 사용자가 누구인지 알아낸다.
  local disk mount 시킬 때
# mountall -l
checking ufs FileSystems
/dev/rdsk/c0t1d0s7: is stable.
/dev/rdsk/c0t3d0s5: is stable.
/dev/rdsk/c0t1d0s6: is stable.
/dev/rdsk/c0t1d0s5: is stable.
/dev/rdsk/c0t1d0s0: is stable.
mount: /tmp already mounted
#

7-3. Volume Manager : /usr/sbin/vold
/usr/sbin/vold - diskette이나 CD-ROM을 mount 시켜주는 daemon


8. Maintaining File Systems
8-1. Synchronizing Data
주 메모리의 데이터와 Disk 상의 데이터를 일치시키는 명령으로 주로 System halt전에 이용
# sync
8-2. Check File System Inconsistencies
가. Inconsistencies
  Blocks claimed by one or more inode and free list
  Blocks claimed by an inode or the free list outside the range of the File System
  Incorrect link counts
  Blocks not accounted for anywhere ....., etc.
나. fsck
File System 검사기능 bad sector, lost cluster, .....
# fsck
** /dev/rdsk/c0t3d0s0
** Currently Mounted on /
** Pahse 1 - Check Blocks and Sizes
** Pahse 2 - Check Pathnames
** Pahse 3 - Check Connectivity
** Pahse 4 - Check Reference Counts
UNREF File I=18894 OWNER=lp MODE=100664
SIZE=2141 MTIME=Aug 27 12:51 1997
CLEAR?

그 외의 사용
# umountall
# fsck /dev/rdsk/c0t0d0s4 (or /export/home)
# fsck -o f,p /export/home

File System fix
# fsck -F ufs /dev/rdsk/c0t3d0s3
  검사 : Blocks and Sizes, Pathnames, connectivity, Reference Counts, Cyl group
  수정 : Adjusting a Link Counter, Salvaging the Free List, Reconnecting an Allocated but
          Unreferenced File

9. Backup and Recovery
backup도구는 주로 tape이나 DAT drive이다.(/dev/rmt/0,1, ....)
# ufsdump 0uf /dev/rmt/0 /export/home
  backup level : 0 (full dump) 1-9 (incremental backup)
  /etc/dumpdates
# ufsrestore xvf /dev/rmt/0
option : xvf, tvf, rvf, ivf
# mt -f /dev/rmt/0 rew
mt - magnetic tape의 동작제어

10. Software Package Administration Commands
10-1. package Commands
  pkginfo - 현재 설치된 package의 list 및 관련정보
  pkgrm - 설치된 package의 삭제
  pkgchk - package가 이상없이 설치 되었는지의 여부 확인
  /var/sadm/pkg directory 아래에 설치된 package 정보가 있다.

11. 그 외 유틸리티
11-1. Disk 사용 현황
System Manager는 수시로 Disk의 상태를 검시하여 Disk가 부족하지 않도록 조치를 취하여야 한다.
# df -k
# df -k /etc

11-2. File 찾기
지정된 File을 검색하는 기능, 검색후 삭제하는 기능도 있음
# find / -name "a*" -exec rm {}\;
# find / -name "core" -exec rm {}\;
# find / -size 512000 -ls
11-3. System File 다루기
  /var/sadm/install/pkgs - 새로운 package 추가시 full 가능성 install directory를 다른 곳으로 link
  /var/adm/wtmp - System boot history, login history를 가짐.
  /var/adm/wtmpx - 계속해서 size는 커짐, 주기적인 clean up 필요.
# cp /dev/null /var/adm/wtmp
주기적인 cleanup은 File을 삭제하는 방식이 아닌 크기를 0으로 만드는 방식을 이용하는 것이 바람직
하다.
  /etc/default/login - console로만 root login을 허용할 것인지 아닌지 설정 login시 항상 수행
   일반적으로 root의 telnet login을 OFF시킨다.
# PASSREQ determines if login requires a password.
#
PASSREQ=YES
PASSREQ가 YES로 setting되어 있을 경우는 password 가 없는 사람의 login이 허용되지 않는다.

11-4. host의 Ip address 변경
host의 ip address를 변경할 때는 다음의 파일을 수정한다.
  /etc/hosts
  /etc/hostname.le0
  /etc/nodename
  /etc/net/ticlts/hosts
  /etc/net/ticots/hosts
  /etc/net/ticotsord/hosts
수정 후 ifconfig -a를 수행

11-5. System의 정보를 보기 위한 명령
System의 CPU, memory, OS등의 정보를 보기 위한 명령
# dmesg
Jan 18 07:35
cpu0: SUNW, UltraSPARC(upaid 0 impl 0x10 ver 0x22 clock 143MHz)
SunOS Release 5.5 Version Generic [UNIX(R) System V Release 4.0]
Copyright(c) 1983-1995, Sun Microsystems, Inc.
mem=65536K(0x4000000)
avail mem = 61759488
Ethernet address = 8:0:20:7a:29:19
root nexus = Sun Ultra 1 SBus (UltraSPARC 143MHz)
sbus0 at root : UPA 0x1f 0x0 ...
....
#

12. Admintool의 활용
Solaris System 관리를 위하여 필요한 도구 중에서 admintool은 아주 유용한 관리도구이다.
admintool은 사용자 계정 발급, 그룹 계정 발급, host File의 내용 update, 프린터 설정, 더미 터미널
설정(dummy terminal setting), Software 관리를 할 때 아주 유용한 GUI Tool이다.
공간

제 3 장 System 실행 Level의 변경
이 모듈들의 명령들은 시스템의 실행레벨을 변경하는데 사용한다. Sun System들은 전원이 계속해
서 남겨지도록 설계되었다. 그렇지만, 몇몇 관리작업들을 수행할 때에는 시스템을 다운 또는 정지시
켜야하고 때로는 전원을 꺼야한다.

  새로나온 오퍼레이팅 시스템을 설치한다.
  정전이 예상되면 시스템을 끈다.
  시스템으로부터 하드웨어를 첨가하거나 제거한다.
  중요한 시스템 데이터는 복구하거나 백업할때는 파일시스템의 관리를 수행한다.

1. 시스템 셧다운의 스케쥴링
시스템을 사용하는 유저들의 능력은 시스템을 관리하는 스케쥴 작업을 위해 중요하다.
고장수리문제들 또는 하드웨어 결점을 대체하는 것 처럼 시스템이 휴지하는 것은 쉽게 예상하지 못한
다.
파일시스템 유지와 백업같은 일상적인 작업들은 유저들이 그들일에 따라서 계획할 수 있도록 계획되
어야 한다.
임박한 시스템의 다운을 유저들에게 알리는 메시지를 보낸다.

  wall 명령어로 로그인한 유저들에게 메시지를 보낸다.
  rwall 명령어로 유저들의 네트워크에 메시지를 보낸다.
  전자메일로 영향을 받을 수 있는 유저들에게 메시지를 보낸다.
  시스템이 다운되는 기간동안에 로그인 할수도 있는 유저들에게 /etc/motd(message-of-the-
day) 파 일을 사용해서 메시지를 보낸다.

2. 시스템의 실행레벨의 변경
시스템의 실행레벨을 변경시키는 모든 Solaris명령은 슈퍼유저의 권한을 가지고 있어야 한다.
실행레벨 S나 PROM 모니터레벨로 시스템을 다운시키기 위해서는 "clear shutdown"을 수행한다.
Clear shutdown은 모든 프로세서들이 정지되고 파일시스템이 unmount되고 메모리의 데이터가 디
스크로 복사되는 순서적인 방법으로 다운된다.
시스템의 실행레벨을 변경시키기 위한 유용한 명령어가 몇가지 있다.

  shutdown
  init
  halt
  reboot

2-1. shutdown 명령어
/usr/sbin/shutdown 명령은 시스템의 run level 변경에 사용되어 진다.
정지되는 시스템 프로세서들과 unmount되는 파일시스템은 어느 시스템이 변경되어져야 되는가를
run level에 따라 멈춰지고 파일시스템이 unmount 된다.
대부분의 경우에는 multiuser에서 single-user or PROM monitor으로부터 얻어질수 있다. 그것의 장
점은 사용자에게 시스템의 event를 알려주는데 있다 하겠다.
만약 shutdown 명령사용으로 시스템을 run level 0으로 초래했다면, operating system은 깨끗하게
shutdown된다. 즉, 모든 처리들은 멈추고 파일시스템은 unmount이다.
Command format:
shutdown [ y ] [ geseconds ] [ irun_level ]
Options :
y - 방해없이 system shutdown을 계속할 수 있게 한다. 다른 방법으로는 당신은 계속되는
shutdown 처리를 일러준다.
g - system shutdown 이전부터의 시간을 설정할 수 있다.
    default로 1분이다.
i - default shutdown run level S 이 아닌 다른 run level로 system을 설정할 수 있다.
   run level 0, 1, 5, 6에서 선택한다.
shutdown 명령을 사용하기 전에 /(root) 디렉토리로 변경하고 Openwindows 환경을 빠져나와야 한
다.
(as the superuser)

2-2. init 명령어
init명령어는 system run level을 변경하기 위해 shutdown 명령을 대신하여 사용할 수 있다.
그렇지만, init 명령어는 run level을 변경하기 전에 주의 메시지를 보내지 않는다.
shutdown이나 init명령들은 깨끗하게 정돈된 명세에 따라 run level을 시스템을 올려놓는다.
init 명령을 사용하여 run level을 변경하기전에 반드시 superuser가 되야 한다.
명령어 형태 :
init [ 012356abcQqSs ]
0 - 6 과 S, s option들은 특유의 run level과 일치한다.
0 - 시스템을 PROM monitor level로 올려놓는다.
1 - 몇 개의 파일시스템을 mount 시키고, single-user level로 올려 놓는다. 일반유저의 login을 막는
다.
2 - 시스템을 multi-user level로 올려놓는다.(자원의 공유없이)
3 - 시스템을 multi-user level로 올려놓는다.(자원을 공유)
5 - 시스템을 정지시킨다. 시스템이 정지되고 power-off된다.
6 - 정지되고 시스템은 run level 3으로 reboot된다.
S, s - 몇 파일시스템은 mount되고 single-user level로 된다. 일반사용자의 로그인을 막는다.
Q, q - init program이 /etc/inittab 파일을 다시 읽게 한다.
a, b, c Optional and configurable run level

 

2-3. 기타 명령들
halt 명령 :
/usr/sbin/halt 명령은 init 0을 사용하는 것과 유사하다.
시스템은 clean shutdown을 수행하고 PROM monitor level로 된다.
그렇지만, rc0 스크립트는 실행되지 않는다.
rc0 script를 database 또는 몇가지 다른 이유로 사용했다면 사용하지 않는 것이 좋다. 그런 경우,
init 0를 사용한다.

reboot 명령 :
/usr/sbin/reboot 명령은 clean shutdown을 수행하고 시스템을 default로 run level 3로 재부트한다.
이것을 고려해서 init 6과 같다.
그렇지만 halt 명령때 몇가지 문제에 응용하여, rc0 스크립트는 실행되지 않는다.
boot flag은 reboot명령에 -- 옵션을 사용하여 지나칠 수 있다.
reboot -- -s 명령을 사용하여 시스템을 재부트하고 single-user mode로 된다.


제 4장 자동 환경설정 과정
Solaris 2.x는 작은 정적인 코어(static core)와 요구시 Load 되는 일련의 Module로 구성되어 있다.
Kernel의 Module은 System 내에서 특정한 역할을 수행하는데 사용되는 Hardware나 Software 요소
이다. Load 가능한 Kernel의 Module의 예로 Device가 Access될 때 Load 되는 Device Driver가 있
다.

Booting시 System은 자기 점검(self-test)를 하고 부착되어 있는 Device들을 Check한다. 그런 다음
다이나믹하게 자기 진단을 한 다음 필요에 따라서 Module을 Load한다. 부팅되고 난 다음에는 Tape
Device와 같은 Device들이 Access 될 때 Device Driver들이 Load된다.

이 과정을 필요에 따라서 자동적으로 Load되기 때문에 자동환경설정이라 부른다.

1. 자동환경설정 과정
장점 - 자동환경설정의 장점들은 다음과 같다.
  Module들이 필요할 때 Load되기 때문에 Main Memory를 효과적으로 사용할 수 있다.
  Kernel을 재구성하는데 시간이 지체되지 않는다. 왜냐하면 새로운 Device가 System에 추가될 때
이전의 SunOS release에 의해서 수행되었기 때문이다.
  Driver들이 Kernel을 재구성하지 않을 뿐만 아니라 System을 재부팅할 필요없이 Load 될 수 있다.

System Manager는 새로운 Device들을 System에 첨가할 때 자동환경설정 과정을 사용한다. 이것
은 PROM 수준의 ok 프롬프트에서 boot -r 명령어를 수행함으로써 행해지며 새로운 Device들을 인
식하게 된다.

2. /kernel Directory
Default로 Load 가능한 Kernel Module들은 /kernel Directory에서 찾아볼 수 있다.
각각의 Subdirectory들은 특수한 형태의 Module들을 포함하고 있다.
  drv - Device Driver들과 pseudo Device Driver들을 포함한다.
  exec - 수행 가능한 다양한 파일들을 수행 할 때 사용되는 Module들을 포함한다.
  fs - ufs, nfs, proc와 같은 파일 System Module들을 포함한다.
  misc - 가상 Memory 연산과 Process간 통신시 필요한 기본적인 Module들을 포함한다.
  sched - 스케쥴링 Class들과 상응하는 Dispatch Table Module들을 포함한다.
  strmod - STREAMS Module들을 포함한다.
  sys - Semaphore 연산과 같은 Load 가능한 System Call을 포함한다.

3. /usr/kernel Directory
/usr/kernel Directory도 역시 Load 가능한 Kernel Module들을 포함한다. 이 Directory는 다음과 같
은 것을 포함한다.
  System Accounting Module들과 같은 Booting 과정을 수행하는데 필요하지 않은 부가적인
Module 들을 포함한다.
  Audio Driver와 같은 Platforms에 관계없이 공유할 수 있는 Module들을 포함한다.

/kernel과 /usr/kernel Directory들은 Booting 과정에서 필요한 Module들을 Load하는데 사용된다.
만약 Module들이 Booting 시간에 Load되지 않는 경우에는 서비스가 요청되면 Load될 수 있다.

The /etc/system File

*ident "@(#)system 1.15 92/11/14 SMI" /* SVR4 1.5 */
*
* SYSTEM SPECIFICATION FILE
*

* moddir:
*
* Set the search path for modules. This has a format similar to the
* csh path variable. If the module isn't found in the first directory
* it tries the second and so on. The default is /kernel /usr/kernel
*
* Example:
* moddir: /kernel /usr/kernel /other/modules

* root device and root filesystem configuration:
*
* The following may be used to override the defaults provided by
* the boot program:
*
* rootfs: Set the filesystem type of the root.
*
* rootdev: Set the root device. This should be a fully
* expanded physical pathname. The default is the
* physical pathname of the device where the boot
* program resides. The physical pathname is
* highly platform and configuration dependent.
*
* Example:
* rootfs:ufs
* rootdev:/sbus@1,f8000000/esp@0,800000/sd@3,0:a
*
* (Swap device configuration should be specified in /etc/vfstab.)

* exclude:
*
* Modules appearing in the moddir path which are NOT to be loaded,
* even if referenced. Note that `exclude' accepts either a module name,
* or a filename which includes the directory.
*
* Examples:
* exclude: win
* exclude: sys/shmsys

* forceload:
*
* Cause these modules to be loaded at boot time, (just before mounting
* the root filesystem) rather than at first reference. Note that
* forceload expects a filename which includes the directory. Also
* note that loading a module does not necessarily imply that it will
* be installed.
*
* Example:
* forceload: drv/foo

* set:
*
* Set an integer variable in the kernel or a module to a new value.
* This facility should be used with caution. See system(4).
*
* Examples:
*
* To set variables in 'unix':
*
* set nautopush=32
* set maxusers=40
*
* To set a variable named 'debug' in the module named 'test_module'
*
* set test_module:debug = 0x13
* ======================================================
* Modified Shared Memory Parameter by SOO.
* Date : 1997. 8. 26
* ======================================================
* The followings are orignal statements
*
* set shmsys:shminfo_shmmax=8388608
* set shmsys:shminfo_shmmni=100
* set shmsys:shminfo_shmseg=15
* set semsys:seminfo_semmns=200
* set semsys:seminfo_semmni=100
* set msgsys:msginfo_msgmni=100
* set shmsys:shminfo_shmmin=1
* set semsys:seminfo_semmsl=200

set shmsys:shminfo_shmmax=16777216
set shmsys:shminfo_shmmin=1
set shmsys:shminfo_shmmni=300
set shmsys:shminfo_shmseg=300

set semsys:seminfo_semmns=200
set semsys:seminfo_semmni=100
set msgsys:msginfo_msgmni=100
set semsys:seminfo_semmsl=200
set scsi_options=0x58

5. Kernel 환경설정 파일 수정하기
/etc/system File은 Kernel의 환경설정 과정을 다르게 하기 위해서 다음과 같은 방법으로 적당하게
수정될 수도 있다.
이 환경설정 파일은 Booting시 읽혀지며 디폴트로 단지 Commants만 포함하고 있다.
이 파일은 여러 가지 방법으로 사용자에 맞게 수정될 수 있다.

5-1. Kernel의 변수 조정하기
때때로 Sun Service는 당신의 System의 구미에 맞게 조절할수 있도록 Kernel의 변수를 수정하는 것
을 허용한다.

예를 들면 maxusers를 System에 활성화(active)상태에 있는 사용자의 수를 나타낸다. 이것은 수
Megabype의 System의 RAM과 같은 크기로 Setting된다.
최소의 Default Setting은 8이고 최대 1024바이트이다.

각 System과 Server에 따라서 이 값은 증가할 수 있다. 최대값은 2048이다. maxusers변수는 어떤
Kernel의 Table을 Setting하기 위해서 사용되므로 이것을 너무 높게 Setting하면 System의 효율이
떨어질수 있다는 것을 명심해야 한다.

Default Kernel 변수를 조정하기 위해서는 /etc/system File을 수정하면 된다.
1. 일반적인 /etc/system File을 복사한다.
# cp /etc/system /etc/system.orig
2. /etc/system File을 편집하고 kernel 변수를 추가한다.
set maxusers=64
3. System을 재부팅한다.
이런 변화는 Kernel의 작동을 변화시키기 때문에 이 File을 수정할 때에는 조심하여야 한다.

·요약
이 장에서는 다음과 같은 것을 살펴 보았다.
  Solaris 2.x Kernel은 필요에 따라서 Module을 Load함으로써 다이나믹하게 환경을 설정한다. 이
렇 게 함으로서 Memory를 더욱더 효과적으로 사용할 수 있게 된다.
  /kernel과 /usr/kernel Directory는 Load 가능한 Kernel의 Module들을 포함하고 있다.
  Kernel의 변수들은 /etc/system File을 편집함으로써 수정할 수 있다.
  Kernel의 환경설정 과정들은 여러 가지 Kernel의 변수들을 사용함으로써 수정될 수 있다.


제 5 장 Device 환경설정과 명명하기
System에 있는 Disk Device를 관리하기 위해서는 Hardware에 익숙해야 하며 Disk를 식별하기 위해
서 사용되는 Device 이름에 대해서도 익숙해야 한다. Disk Device(Partition 포함)는 다음과 같은 경
우에 논리적 Device 이름에 의해서 참조된다.

  어떤 System에서 다른 System으로 이동될 때
  새로운 Disk를 System에 첨가할 때
  논리적 Disk에 저장되어 있는 File System에 접근할 때
  지역적 File System을 Backup할 때

1. 장치 이름
  Device 제어기 - Kernel이나 Device Drive가 BUS Controller를 통해서 보낸 Signal에 기초한 단위
장치(unit)의 동작을 제어하는 Device.
   모든 주변 장치들은 Controller에 연결되어 있다.
 BUS-특수한 형태의 통신 언어가 사용되는 Hardware Device 사이의 길. 모든 현재의 System들은
내부 BUS를 System 버스(SBus)로 부르면, 이전 세대의 System들은 versa modula europa(VME)
를 사용하였고 현재의 주변 장치 Bus는 small computer system bus interface(SCSI)를 사용한다.
  Bus 제어기(Host Adapter)-System BUS로부터의 명령을 Device BUS로 해석해 주는 Interface
Device
  장착된 Device-실제 CPU Board의 일부분인 것 대부분의 System들은 built-in SCSI Host
Adapter 와 Serial Controller, Ethernet Controller 등을 가지고 있다.
2. Disk Device Interface
Sun은 Disk Device에 대해서 다음과 같은 Interface들을 지원한다.
  소형 컴퓨터 Interface(Small computer system interface(SCSI))-SCSI Device들은 SBus와 VME
에 기초한 System들과 함께 사용되는 SCSI Host Adapter와 연결 되어 있다. 단지 SCSI Interface만
이 CD-ROM Drive들과 연결하는데 사용될 수 있다.
  지능적인 주변장치(Intelligent peripheral Interface(IPI))-IPI Disk Drive들은 VME bus를 가지고
있 는 IPI Controller에 연결된다.
  저장 모듈 장치(Storage module device(SMD))-SMD와 개선된 저장 모듈(enhance storage
module device(ESMD))들은 VME를 가지고 있는 System에서만 사용하는 Xylogics에 연결되어 있
다.

3. SCSI Device Address Setting
Host Adapter에 하나 이상의 SCSI Device를 가지고 있다면 각 SCSI Target Address를 단일의 주소
로 Setting해 주어야 한다.
외부 Address Swtich를 Setting해주는 것과 내부적으로 jumper를 Setting함으로써 SCSI Device들
에게 단일의 주소를 제공할 수 있게 된다.
새로운 SCSI Device를 당신의 System에 추가할 때에는 기존의 번호와 충돌이 생기지 않도록 주의
하여야 한다.
probe-scsi명령어를 PROM mode에서 사용함으로써 현재의 장치들과 각각의 target Num.을 알 수
있다.
최대 7개의 Device들을 각 SCSI Host Controller에 daisy-chain으로 연결된 Device를 가질 수 있으
며 IPI Controller에 연결된 8개의 Device들을 가질 수 있다.

4. Device 정보 Tree
System이 Booting될 때 장치들에 대한 계층적인 구조가 생성된다.
예를 들면 SPARCstation System은 다음과 같은 Device 환경설정 트리 구조를 가질 수 있다.(모든
Device들이 포함된 것은 아니다.) 위 그림에서 박스는 System에 있는 서로 다른 다바이스들을 나타
낸다. 예를 들면, cgsix는 cgsix Color prime buffer를 나타내고 sbus는 많은 다른 Device들을
System에 연결할 때 사용되는 주변장치 Bus를 나타낸다.
계층적 구조에서 가장 위에 위치하고 있는 오브젝트를 루트 노드라고 부른다.
루트노드 아래에 있는 중간 오브젝트들은 그것과 관계있는 Device 드라이버들을 가지고 있으며 leaf
(or bus nexus) node라 불린다.
Kernel은 Drive들을 각각의 알맞은 장치들과 관련이 있는 정보를 사용하고 특수 연산을 행하고 있는
드라이버들에 대한 포인터를 제공한다.

5. Device Name
Solaris 2.x 환경에서는 Device들이 3가지 서로 다른 방법으로 참조된다.
  물리적 Device 이름들 - Device 정보 계층(또는 트리)에서의 전체 Device 패스 이름(pull path
name)을 나타낸다.
    물리적 이름은 인스톨 과정이나 그 이후의 Device 환경설정 과정에서 생성되는 /devices 디렉토
리 에 위치하게 된다.
  논리적 Device 이름들 - 관리자에 의해서 Device를 참조하기 위해서 사용되는 이름. /dev 디렉토
리 에 위치하며 물리적 이름과 같이 생성된다.
  Instance 이름들 - System에 있는 모든 가능한 장치들에 대해서 Kernel이 요약적으로 붙인 이름
5-1. 물리적 Device 이름들
물리적 Device 이름은 Device 정보트리에서 전체적인 패스 이름을 말한다.
물리적 Device 이름들은 /devices 디렉토리에 위치하고 있으며 PROM Mode에서 사용되는 Device
이름과 상응된다.

5-2. target address
t0, t1, t3와 같은 target address는 각 Device를 위해서 선택된 주소 스위치 세팅에 상응한다.
외부 Disk Drive는 대체적으로 패널의 뒤에 위치하고 있는 주소 스위치를 가지고 있다.
디폴트로 desktop system은 첫 번째 내부 Disk Drive를 위해서 t3을 할당한다.
두 번째 내부 Disk Drive는 t1에 해당한다.

5-3. Disk 번호
Disk 번호는 항상 논리적 단위 번호(logical Unit Number(LUN))로 알려져 있으며 추가된 SCSI나
IPI Disk를 위해서는 0으로 세팅된다.

5-4. 슬라이스(파티션) 번호
Slice 번호는 0에서 7까지 변화한다. Disk Device는 논리적 Device 이름에 그리고 논리적 Device 이
름은 반드시 슬라이스 번호를 포함해야 한다.
/dev/dsk 디렉토리는 Disk Drive의 논리적 이름을 포함하고 있다.
논리적 Disk Device 이름은 System 관리자에 의해서 Disk를 사용할 때나 File System과 관련있는
명령어를 사용할 때 구분된다.

5-5. Bus-Oriented Controller
Sun system은 bus-oriented Controller에 연결된 Disk Device를 위해서 논리적 이름을 위해서 명명
을 사용한다.
/dev/[r]dsk/c#t#d#s#
여기서 각각은 다음을 나타낸다.
c# - Controller 번호
t# - 목표번호(target number)
d# - 논리적 유닛 번호(logical unit number)
s# - 슬라이스 / 파티션번호
이전에 언급했듯이 논리적 Device 이름은 /dev 디렉토리에서 발견할 수 있으며 /devices 디렉토리
에 있는 물리적 Device 이름과 기호적으로(symbolically) 링크되어 있다.

5-6. 직접적 Controller
Xylogics 451이나 7053과 같이 Bus-oriented system이 아닌 직접 Controller에 연결된 Disk들은 논
리적 Device 이름에 목표번호를 포함하지 않는다.
/dev/[r]dsk/c#d#s#
여기서 각각은 다음을 나타낸다.
c# - Controller 번호
d# - 논리적 유닛 번호(logical unit number)
s# - 슬라이스 / 파티션번호

5-7. 논리적 Device 이름 디렉토리
  dsk : Disk Device들에 대한 블록 Interface
  rdsk : Disk Device들에 대한 raw or character interface
  rmt : 테이프 Device들
  term : serial line devices
  cua : Dial-out modems
  pts : seudo terminals
  fbs : Frame buffers

5-8. Device Instance 이름
Instance 이름은 물리적 Device 이름에 대해서 Kernel이 축약해서 사용하는 이름이다.
Instance 이름은 Kernel이 처음으로 Device Instance를 발견할 때 할당된다.
는 증가하지만 target 번호는 그대로 남아있다.(0-7)

6. Disk Device들을 구분하기

6-1. 물리적 Disk Device 이름과 Instance Disk Device 이름
물리적 Disk Device 이름은 부팅시에 Device가 연결되어 있는 상태에서 따라서 derive된다.
Instance Disk Device 이름은 물리적 Device 이름에 대한 요약이다.
Instance 이름은 다음을 포함한다.
adn : s = SCSI, d = disk, n = logical disk number
stn : s = SCSI, t = tape, n = logical tape number
idn : I = IPI-2, d = disk, n = logical disk number
Instance 이름은 Kernel에 의해서 사용된다는 것을 기억해야 한다. System 관리자는 대체로
Instance 이름을 사용할 필요가 없다.

6-2. dmesg 명령어
dmesg 명령은 Instance 이름과 물리적 이름을 사용해서 System에 부착되어 있는 Device들을 구분
한다.
이 명령의 출력을 통해서 논리적 Device 이름을 결정하는 것이 가능하다. 이 명령은 이 밖에도
System 진단 메시지, 운영체제 revision번호, 물리적 메모리 크기, 그리고 다른 정보들을 포함한다.
dmesg 명령어는 버퍼에 있고 덮어쓰기 때문에 참조할 목적을 위해서는 깨끗한 dmesg를 얻는 것을
도와준다. 이렇게 하기 위해서는 System을 정지시키고, reset을 수행한다. 그런 다음 재부팅을 한다.

7. Device 환경 재설정하기
새로운 Device들이 System에 추가될 때 환경 재설정 부팅이 새로운 Device를 인식하기 위해서 수행
된다.
이 과정은 새로운 Device 정보 트리를 생성함으로써 시작되며 /devices 와 /dev 디렉토리를 새로 생
성한다.
새로운 Device를 인식하기 위해서 System의 환경을 재설정하기 위해서는 아래와 같은 과정을 따르
면 된다.
아래에서는 새로운 Disk를 System에 추가하는 예를 보여 준다.
1. System이 재부팅될 때 System 환경 재설정 부팅을 할 수 있도록 /reconfiguration File 생성
# touch /reconfigure
2. System을 정지시킨다.
3. 전원을 끈다.
4. 새로운 Disk를 System에 사용하기 위해서 적당한 케이블을 사용한다.
5. 전원을 새로 넣는다.
System 환경 재설정 부팅 과정은 새로운 Disk를 위해서 물리적, 논리적 Device 엔터티를 생성한다.
Disk를 인식하도록 System의 환경을 설정하고 난 다음에는 Disk 파티션을 설정하기 위한 과정을 수
행할 수 있다.

8. System 환경 설정상태 보기

8-1. prtconf 명령어
이 명령은 System의 환경설정 정보와 메모리와 주변장치의 환경설정 정보들을 출력해 준다.
Disk와 테잎 Device Instance 이름들은 SCSI 호스트 어댑터에서의 가능한 위치를 나타내며 이것을
목표주소라 한다.
목표 주소를 할당하는 것은 같은 Interface에 연결된 다른 Device들을 구분하는 방법이 된다.
# prtconf
System Configuration: Sun Microsystems sun4m
Memory size: 64 Megabytes
System Peripherals (Software Nodes):
SUNW,SPARCstation-10
   packages (driver not attached)
       disk-label (driver not attached)
       deblocker (driver not attached)
       obp-tftp (driver not attached)
   options, instance #0
   aliases (driver not attached)
   openprom (driver not attached)
   iommu, instance #0
       sbus, instance #0
           espdma, instance #0
               esp, instance #0
                   sd (driver not attached)
                   st (driver not attached)
                   sd, instance #0 (driver not attached)
                   sd, instance #1
                   sd, instance #2 (driver not attached)
                   sd, instance #3
                   sd, instance #4 (driver not attached)
                   sd, instance #5 (driver not attached)
                   sd, instance #6 (driver not attached)
           ledma, instance #0
               le, instance #0
           SUNW,bpp (driver not attached)
           SUNW,DBRIe (driver not attached)
               mmcodec (driver not attached)
           cgsix, instance #0
   obio, instance #0
       zs, instance #0
       zs, instance #1
       eeprom (driver not attached)
       counter (driver not attached)
       interrupt (driver not attached)
       SUNW,fdtwo, instance #0
       auxio (driver not attached)
       power (driver not attached)
   memory (driver not attached)
   virtual-memory (driver not attached)
   eccmemctl (driver not attached)
   TI,TMS390Z50 (driver not attached)
   TI,TMS390Z50 (driver not attached)
   pseudo, instance #0

8-2. sysdef 명령어
[ns:/] =:# sysdef
*
* Hostid
*
 728a9664
*
* sun4m Configuration
*
*
* Devices
*
packages (driver not attached)
       disk-label (driver not attached)
       deblocker (driver not attached)
       obp-tftp (driver not attached)
options, instance #0
aliases (driver not attached)
openprom (driver not attached)
iommu, instance #0
       sbus, instance #0
               espdma, instance #0
                       esp, instance #0
                               sd (driver not attached)
                               st (driver not attached)
                               sd, instance #0 (driver not attached)
                               sd, instance #1
                               sd, instance #2 (driver not attached)
                               sd, instance #3
                               sd, instance #4 (driver not attached)
                               sd, instance #5 (driver not attached)
                               sd, instance #6 (driver not attached)
               ledma, instance #0
                       le, instance #0
               SUNW,bpp (driver not attached)
               SUNW,DBRIe (driver not attached)
                       mmcodec (driver not attached)
               cgsix, instance #0
obio, instance #0
       zs, instance #0
       zs, instance #1
       eeprom (driver not attached)
       counter (driver not attached)
       interrupt (driver not attached)
       SUNW,fdtwo, instance #0
       auxio (driver not attached)
       power (driver not attached)
memory (driver not attached)
virtual-memory (driver not attached)
eccmemctl (driver not attached)
TI,TMS390Z50 (driver not attached)
TI,TMS390Z50 (driver not attached)
pseudo, instance #0
       clone, instance #0
       ip, instance #0
       tcp, instance #0

중간 생략

*
* System Configuration
*
 swap files
swapfile dev swaplo blocks free
/dev/dsk/c0t3d0s1 32,25 8 307432 307432
*
* Tunable Parameters
*
1298432 maximum memory allowed in buffer cache (bufhwm)
    986 maximum number of processes (v.v_proc)
     99 maximum global priority in sys class (MAXCLSYSPRI)
    981 maximum processes per user id (v.v_maxup)
     30 auto update time limit in seconds (NAUTOUP)
     25 page stealing low water mark (GPGSLO)
      5 fsflush run rate (FSFLUSHR)
     25 minimum resident memory for avoiding deadlock (MINARMEM)
     25 minimum swapable memory for avoiding deadlock (MINASMEM)
*
* Utsname Tunables
*
  5.5.1 release (REL)
     ns node name (NODE)
  SunOS system name (SYS)
Generic version (VER)
*
* Process Resource Limit Tunables (Current:Maximum)
*
Infinity:Infinity cpu time
Infinity:Infinity file size
7ffff000:7ffff000 heap size
 800000:7ffff000 stack size
Infinity:Infinity core file size
     40: 400 file descriptors
Infinity:Infinity mapped memory
*
* Streams Tunables
*
    9 maximum number of pushes allowed (NSTRPUSH)
65536 maximum stream message size (STRMSGSZ)
 1024 max size of ctl part of message (STRCTLSZ)
*
* IPC Messages
*
    0 entries in msg map (MSGMAP)
    0 max message size (MSGMAX)
    0 max bytes on queue (MSGMNB)
    0 message queue identifiers (MSGMNI)
    0 message segment size (MSGSSZ)
    0 system message headers (MSGTQL)
    0 message segments (MSGSEG)
*
* IPC Semaphores
*
    0 entries in semaphore map (SEMMAP)
    0 semaphore identifiers (SEMMNI)
    0 semaphores in system (SEMMNS)
    0 undo structures in system (SEMMNU)
    0 max semaphores per id (SEMMSL)
    0 max operations per semop call (SEMOPM)
    0 max undo entries per process (SEMUME)
    0 semaphore maximum value (SEMVMX)
    0 adjust on exit max value (SEMAEM)
*
* IPC Shared Memory
*
    0 max shared memory segment size (SHMMAX)
    0 min shared memory segment size (SHMMIN)
    0 shared memory identifiers (SHMMNI)
    0 max attached shm segments per process (SHMSEG)
*
* Time Sharing Scheduler Tunables
*
60 maximum time sharing user priority (TSMAXUPRI)
SYS system class name (SYS_NAME)

·요약
  같은 Bus Interface(Host Adapter)에 연결된 모든 Device들은 Controller(목표)주소와 논리적 유
닛 번호에 의해서 유일하게 식별되어야 한다.
  Kernel은 System에 있는 모든 Device들에 대한 계층적 또는 트리 구조를 형성한다.
  물리적 Device 이름은 Device 정보 트리에 있는 다소 전체 패스 이름을 나타낸다. 물리적 Device
이름을 나타내는 Device File들은 /devices 디렉토리에서 찾을 수 있다.
  Disk Device들은 Disk나 File System과 관련있는 명령어들을 사용할 때 논리적 Device 이름에 의
해서 참조된다.
  /etc/path_to_inst File은 마지막으로 환경설정 이후의 System에 연결되어 있는 Device Instance
들 을 가지고 있다. 이 File에 담겨 있는 Instance 이름은 Kernel이 서로 다른 Device들을 나타낼 때
사용하는 요약된 이름이다.
  지금 현재 System에 연결되어 있는 Device들은 prtconf 명령이나 sysdef 명령어에 의해서 알 수

   미리 정의되어진 파티션 테이블은 포맷 유틸리티에 의해서 읽어질 수 있는 /etc/format.dat 의 이
름이다.

제 9 장. VI Editor

VI Editor는 UNIX에 기본적으로 내포된 편집기다. 그러므로 UNIX가 설치된 환경에서는 언제든지 사
용할 수 있으므로 특별한 소프트웨어를 사용하기보다는 VI Editor에 익숙해질 필요가 있다. 그리고 처
음에는 낯설게 느껴지는 것이 당연하지만 사용하다보면 편리한 점을 많이 알 수 있다. 때때로는 마우
스로 작업했던 PC용 편집기보다 강력한 기능들이 상당히 많이 있다는 것을 알 수 있을 것이다.

1. 모드 전환방법
이 편집기는 명령어 모드와 편집모드로 나뉘게 되는데, VI Editor를 실행시키게 되면 처음에는 명령어
모드 이다. 이렇게 모드가 두 가지이면 일반 PC에서 사용하는 편집기는 시작부터 종료까지 편집모드
인 것을 감안한다면 VI Editor는 모드가 두 가지이므로 여러 가지 일을 할 수 있는 것임이 틀림없다.
구체적인 명령어는 다음에 기술하겠지만 키와 키를 잘 이용하면 된다.

2. 입력형식


3. 삽입관련 명령어
command)
i : 입력모드로 전환, 커서의 앞에 삽입
I : 그 라인의 첫칸에 삽입
a : (append)커서의 오른쪽에 새로운 내용을 추가
A : 그 라인의 마지막 문자 뒤에 새로운 내용을 추가
o : 커서가 있는 행 아래에 새로운 내용을 첨가
O : 커서가 있는 행위에 새로운 내용을 첨가
mo : move

co : copy


4. 삭제관련 명령어
dd : 커서가 있는 한줄삭제
5dd : 5 라인 삭제
x : 커서가 있는 한 문자 삭제
dw : 한 단어 삭제
dO : 커서 위치로부터 그 라인의 첫 칸까지 삭제
d$ : 커서 위치로부터 그 라인의 끝까지 삭제
3dw : 3 단어 삭제


5. 치환관련 명령어
:r : (replace)커서 위치의 한 문자를 다른 문자로 치환
예1) :rb : 커서가 있는 곳의 문자를 b로 치환
예2) :4rb : 커서와 커서 오른쪽의 3문자를 b로 바꿈
:R : 커서가 위치한 문자를 키를 누를 때까지 대체
:cw : 한 단어 치환
:3cw : 3단어 치환
:C : 커서가 있는 곳으로부터 라인의 끝까지의 문장을 치환
:cc : 현재라인 치환
예1) :5cc : 5라인 치환
:/happy : '/'기호 뒤에 지정한 문자열을 커서가 있는 위치 이후부터 찾아표시
:?happy : '?'기호 뒤에 지정한 문자열을 커서가 있는 위치 위쪽으로 가면서 찾아표시
:n : (next) '/' 나 '?' 탐색명령을 사용한 다음에 발견한 곳으로 진행
6. 검색관련 명령어

/and : 커서 이후의 and를 검색, n(계속 검색)
/and/- : 라인의 첫칸에 커서가 오게 함

7. 복구관련 명령어

:u : (undo) 바로 이전에 실행된 명령어 취소
:U : 현재 행에서 사용한 모든 명령을 취소

8. 이동관련 명령어

방향키가 듣지 않을 때는 다음의 표를 참조한다. 이에 대응하는 키를 나타내었다.

  : (forward)한 쪽 아래로 이동
  : (backward)한 쪽 위로 이동
  : (down)반 쪽 아래로 이동
  : (up)반 쪽 위로 이동
  : 커서가 몇째 줄에 있는지 표시
:b : 단어의 시작위치로 이동
:e : 단어의 끝 부분으로 이동
:0 : 행의 시작부분으로 이동
:$ : 행의 끝부분으로 이동
:nG : (Go)파일 전체에서 n번째 줄로 이동

9. 전환 및 종료 명령어

:J : (Join)커서 위치의 줄과 그 뒤의 문장을 연결
 : 명령어모드로 전환
:q : 끝내기
:q! : 저장 않고 끝내기

10. 파일관련 명령어

:w : 원래의 파일 명으로 쓰기
:w filename : 새로운 filename으로 기록
:r filename : 지정한 파일로부터 그 내용을 읽어옴
:!command : 지정한 명령을 실행
:!sh : 새로운 shell을 실행
!!command : 명령을 실행하고 커서 라인위치 라인에 output을 출력
:e filename : Editor를 끝내지 않고 새 파일을 편집
:e# : 다시 복귀
wq : 현재의 filename으로 저장하고 끝내기

 

                            목 차

제 1장. UNIX System의 관리 1.System Manager의 역할
 1-1. Manager의 역할
   1-1-1. 사용자에 대한 역할
   1-1-2. Day-to-Day Adminstration
   1-1-3. 주기적인 관리항목
 1-2. Day-to-Day Adminstration
   1-2-1.Morning Cleanup and Inspection
 1-3. UNIX File 살펴보기
   1-3-1. /etc File

제 2장. UNIX System
 1. 보안의 범위
  1-1. 계정보안
 2. Monitoring Account Security
 
제 3장 Solaris System
 1. Solaris System의 환경
 2. Server의 설치
  2-1. 설치를 위한 방법
  2-2. Post-Installation File
 3. Booting & Shutting down
  3-1. steps in the Boot Process
  3-2. Rebooting & Halting
 4. Autoconfiguration
  4-1. /kernel directory
  4-2. /usr/kernel
  4-3. /etc/System File
 5. Device Configuration and Naming
  5-1. Setting SCSI Sevice Address
  5-2. Logical Device Name Directories in/Dev
  5-3. Device Configuration
 6. 새로운 Disk를 추가하기 위한 작업
 7. Mounting File System
  7-1. File System
  7-2. Mounting and Unmounting File System
  7-3. Volume Manager
 8. Maintaining File System
  8-1. Synchronizing Data
  8-2. Check File System Inconsistencies
 9. Backup and Recovery
 10. Software Package Administration Commands
  10-1. Package Commands
 11. 그 외 유틸리티
  11-1. Disk 사용현황
  11-2. File 찾기
  11-3. System File 다루기
  11-4. host의 IP address변경
  11-5. System의 정보를 보기 위한 명령
12. Admintool의 활용

제 4장. System실행 Level의 변경
 1. 시스템 셧다운의 스케쥴링
 2. 시스템의 실행레벨의 변경
  2-1. Shutdown 명령어
  2-2. Init 명령어
  2-3. 기타 명령들

제 5장. 자동 환경설정 과정
 1. 자동 환경설정 과정
 2. /Kernel Directory
 3. /usr/kernel Directory
 4. Kernel 환경설정 파일 수정하기
  4-1. Kernel의 변수 조정하기
 5. 요약

제 6장. Device 환경설정과 명명하기
 1. 장치이름
 2. Disk Device Interface
 3. SCSI Device Address Setting
 4. Device 정보 Tree
 5. Device Name
 6. Disk Device들을 구분하기
  6-1. dmesg 명령어
 
제 7장. Device 환경 재설정하기
 
제 8장. System 환경 설정상태 보기
  1. prtconf 명령어
  2. sysdef 명령어
  3. 요약

제 9장. vi Editor

부 록
   제 1장 UNIX의 정의
   제 2장 UNIX 명령어

 
제1장. UNIX 의 정의

UNIX 란 컴퓨터를 이용하려함에 있어서 필요로 하는 운영체제 중 하나이며, 뒤에서 자세히 설명하겠
지만 UNIX 가 가지고 있는 대략적인 특징은 다음과 같다.

  강력한 멀티태스킹
  다수사용자 수용
  강력한 네트워킹지원등을 기본적으로 내포한 운영체제
  연관된 유틸리티의 공존

이 운영시스템은 본래 AT&T 의 Bell 연구소가 프로그래머들의 소프트웨어 개발 작업에 편리한 환경
을 지원하려는 목적으로 작은 규모의 운영체제에서 시작된 것이다. 이러한 UNIX 가 현재에 이르러서
는 다음과 같은 우수성을 확보하고 있다.

  하드웨어로 부터의 독립성
  각기 다른 소프트웨어의 호환성
  다양한 하드웨어 플랫폼사이의 네트워킹등을 내포한 풍부한 컴퓨팅 환경 제공

위와 같은 우수성을 소유하고 있어 개방 시스템으로서의 이행에 중심 역할을 담당하고 있다. UNIX
를 잘 사용하기 위해서는 그룹별 작업을 위해 사용자들끼리 그룹을 이루어 정보를 교환하는 것이 핵
심이라 할 수 있다. 이러한 맥락으로 그룹웨어(Group Ware) 라고도 종종 부른다.

UNIX 는 USER ID 와 GROUP ID 를 갖으며 각 파일과 디렉토리의 접근여부를 USER, GROUP,
OTHER 로 구분하여 권한을 제어한다. 즉, 같은 그룹 안의 USER 들까지는 공개할 수 있는 자료는 서
로 공유할 수 있으며, 각각의 데이터에 읽기·쓰기 권한을 부여할 수 있어 데이터의 성격에 따라 관리
할 수 있다.

그리고 root 를 제외한 다른 USER 에게는 공개를 안할 수도 있으며, 개인의 데이터에 보안성을 부여
할 수 있다. 하지만 이러한 보안은 root 에게는 해당되지 않음을 항상 기억하기 바란다. 그러므로 자
신의 데이터를 무조건적으로 서버에 올려놓는 것을 삼가하기를 바란다.
그리고 복수의 File System 이 존재하는데 각각의 File System 의 성격에 맞게 id 를 부여할 수 있으
며 또한 용량도 정할 수 있다. 그리고 같은 File System 또는 다른 File System간에 Link 를 적용할
수 있는 공간의 효율성을 제공한다. 일반적으로 0-7 번까지의 File System 을 설치시에 label 을 붙
일 수 있도록 제공해준다. 하지만 추가적인 보조기억장치를 설치할 경우에는 변경할 수 있다.

이 장에서는 UNIX 의 운영체제로서의 특징과 UNIX 가 어떠한 하드웨어 환경하에서 잘 운영되며 그
하드웨어 환경이 어떠한 것이고, 강력한 네트워킹을 지원하는 환경은 어떠한지 살펴보기로 한다.
UNIX 는 워크스테이션급에서 아주 잘 맞는 운영체제라 할 수 있는데 이유는 다수의 사용자들의 작업
을 동시에 처리를 할 수 있는 능력을 가지고 있어야 하며, 각 프로세스마다 제어를 할 수 있어야 하기
때문이다. 즉, 각 프로세스마다 독립적으로 수행될 수 있도록 하드웨어 환경이 받쳐줘야 한다는 뜻이
다. 그리고 하드웨어의 효율성을 높여서 시스템의 낭비를 최소화 할 수 있는 시스템이라야 한다. 이것
은 예전 도스의 경우 시스템 자원의 효율화가 잘 이루어지지 않았지만, UNIX 는 다중사용자를 수용하
며 처리할 수 있는 작업이 많기 때문에 당연히 시스템의 효율이 높아졌다 할 수 있다.

1.1 UNIX의 중점 사항

  1.1.1 UNIX의 운영체제로서의 특징

기본적으로 UNIX 는 OS 의 한 부류이기 때문에 OS 의 기능을 알아보면 다음과 같다.

  응용프로그램과의 인터페이스를 정의하는 기능
  응용프로그램들 사이에 시스템 자원을 공동으로 사용할 수 있게 하는 기능
  입출력과 네트워크 통신을 보조하는 기능
  시스템 작동을 모니터링하여 에러의 발생을 탐지하고 처리하는 기능

그렇다면 UNIX 는 다른 운영체제에 비하여 어떠한 장점을 가지고 있는지 살펴보기로 한다. 제일먼
저 손꼽을 수 있는 기능은 시스템의 사용자를 다수 수용할 수 있는 점이다. 이는 시스템에 직접 로그
인(console login)을 할 수도 있으며, 원격로그인(terminal login)도 할 수 있어 네트워크 기능을 기본
적으로 포함하고 있음을 알 수 있으며, 각 사용자들의 사용권한과 환경설정등을 각기 달리할 수 있으
며 멀티태스킹이 가능하게 만들어져 있다.

이러한 장점으로 네트워크 접속사용자들은 정보를 최대한 동시에 공유할 수 있으며 그만큼 서비스
를 할 수 있는 환경을 구축할 수 있다. 그리고 여러 가지 하드웨어 플랫폼을 운영체제에 맞게 최대한
맞추어주기 위해서 자체 드라이버와 유틸리티를 내포하고 있다. 그리하여 기본적인 운영체제로서의
기능과 유틸리티의 총체적인 집합이라 할 수 있다.

  1.1.2 UNIX를 잘 지원하는 하드웨어 환경

일반적으로 UNIX 를 사용하는 이유는 강력한 다중작업과 복수사용자들의 작업지원을 위해 사용한
다. 그러므로 하드웨어 설계도 이에 맞게 고려해야 한다. 현재로서는 SUN 社 의 워크스테이션을 표
준으로 삼고 있는데, 이유는 SUN 에서 내놓은 Solaris Version(예전의 SUN UNIX)이 자사의 하드웨
어 설계의 표준을 따르기 때문이다. 그리고 그 회사의 운영체제를 가장 많이 사용하고 있기 때문에 사
용할 수밖에 없는 상황이 되어버렸다. 또한 SUN Microsystems 에서 SPARC 구조를 Open System
Architecture 로 채택함으로서, 그 구조가 개방되어 이를 응용한 여러 가지 구조의 RISC Processor
도 많이 나와있으며, OS 도 그러하다.

그리고 SUN Microsystems 가 고안한 SPARC CPU 는 RISC 구조로서 UNIX 가 자원을 효율적으로
분배할 수 있다. RISC 에 대해서 간단히 짚고 넘어가자면 다음과 같다. 먼저 CISC 구조와 상반된 개
념으로서 명령어수행이 한순간에 복수개의 명령어를 처리할 수 있으며, 중첩된 레지스터 윈도우를 도
입해 자원을 효율적으로 이중으로 분배할 수 있다.

CISC 구조는 CPU 의 클럭을 높여서 전체적인 동작속도를 높이는게 일반적인 성능향상인데 반해
RISC 는 명령어 처리기법이 CPU 의 자원을 효율적으로 사용할 수 있는한 최대한 많이 동시에 사용
할 수 있도록 설계되어 있다. 그러므로 이에 대해서 자세히 알고 싶으면 따로 SPARC Architecture
를 공부해야만 한다.

필자는 SPARC Version 9(Ultra SPARC) 에 대해서 공부한 적이 있지만 설계를 해보질 않아서 그리
잘 알지 못하지만 Ultra SPARC 의 매력을 잊지 못한다. 예전의 SPARC Version 8은 32 비트 구조를
가진데 반해, SPARC Version 9(Ultra SPARC) 은 64 비트 구조를 가지고 있다.

멀티태스킹을 한다는 의미가 보통 알기로는 시분할 시스템에서 고루 시간분할을 하며, 동작속도면에
서는 사이클 클럭을 빠르게 한다고 알고 있지만 이것은 다소 틀린 견해이다.
왜냐하면 멀티태스킹을 지원하기 위하여 하드웨어 설계부터가 기본적으로 메인보드 한 장에 두 개
이상의 RISC CPU 가 존재하며, 이들의 성능을 가진 동급의 메인보드를 복수장 수용할 수 있도록
UNIX 는 설계되어 있다. 또한 명령어의 수행면에 있어서 기존의 CISC 구조와 달리 동시간대에 여러
개의 명령어가 병렬적으로 처리되는 특징이 있다.

그래서 CPU 하나는 마스터 그 외에는 슬래이브가 되며 개개의 슬레이브에 속해있는 CPU는 또 슬래
이브가 되며 상위 권한을 가진 CPU 는 제어를 받는 CPU 의 마스터가 된다. 그러므로 중요한 작업 또
는 먼저 실행되어야 할 작업은 마스터에서 실행되며 그 외의 작업은 슬래이브에게 넘겨주는 방식으
로 만들어져 있다. 그렇게 해서 동일한 시간대에 여러 개의 작업을 할 수 있는 것이다. 이러한 기술은
trap 이라는 것을 이용하는데 미리 설정된 trap table 을 이용하여 우선순위에 따라 그에 해당하는 처
리를 하게된다.

메인보드에 연결되어 있는 보조기억장치의 인터페이스는 주로 SCSI 를 따르고 있다. 이것은 PC 에
서 많이 쓰이는 EIDE 와 근본적으로 병렬처리문제에서 틀린 의미를 가지고 있다.
UNIX 는 SCSI 인터페이스를 가지고서 별도의 장치 ID 를 가진 보조기억장치를 ACCESS하여 고속
으로 처리가 가능한 SCSI 를 보다 효율적으로 관리할 수 있다.
기본적으로 SCSI 방식을 채택한 장치가 속도가 빠른 이유는 버퍼 메모리가 많고 기본 클럭이 높기
때문이다. 그래서 워크스테이션의 경우 가격이 다소 비싸더라도 용도에 맞게 SCSI 방식의 기억매체
를 이용한다. SCSI 는 한개의 adaptor card 당 장치를 0-7 번까지 즉 8 개의 장치 접속범위를 지원한
다. 이 숫자는 한 개의 SCSI 인터페이스 카드에 0-7 번까지 연결할 수 있다는 의미이므로, SCSI 인터
페이스 카드를 많이 수용할 수 있는 시스템이라면 그 만큼 많은 장치를 연결할 수 있다.

SCSI 장치를 사용하는 이유는 속도와 처리면에서 우수할 뿐만 아니라 특히 외장형 규격을 많이 이용
하고 있어서 장치연결에 편리한 점을 가지고 있기 때문이기도 하다. 이는 PC 와의 상반된 견해를 가
지고 있다. 즉 장치를 추가로 장착하거나 다른시스템으로 이식하거나 시스템의 데이터를 복원하기 위
한 장치를 항상 붙여놓을 필요는 없으므로 필요시에 장착하기 쉽다. 그러므로 미니 워크스테이션의
경우는 본체의 크기가 일반 PC 보다 훨씬 작음을 알 수 있다. 이는 SCSI 장치로 내부에는 2 개 내지
4 개의 장치를 수용(미니 워크스테이션의 경우)하고 나머지는 외장형으로 두어 본체의 크기가 줄어
들 수 있다. 하지만 중형급 이상인 워크스테이션의 경우는 본체가 300Kg 이 넘을 정도이다. 이는 본
체내부에 대형 전원공급장치, 대용량 하드박스, 복수개의 메인보드, 대형 냉각팬 등의 여러장치가 들
어있기 때문이다.

주기억장치인 RAM 의 경우는 웍스테이션 전용 RAM 이라 불리는 SDRAM(Synchronous DRAM)
을 사용함으로서 속도와 처리율을 높일 수 있다. 지금은 PC 에까지도 SDRAM 을 사용하는데 최근에
사용되고 있는 PC 용 CPU 는 RISC 구조를 다소 수용하고 있어서 필요시에 그 기능을 최대한 살려
서 이용하고 있는 것이다.

이 방식은 먼저 처리되는 명령이 끝나기 전에 다음 명령어를 처리할 수 있다. 즉 한 개의 명령 사이클
이 끝나기 전, 보통 한 클럭후에 다른 명령어 처리를 시작하며, 그 다음 사이클에 또다른 명령어 처리
를 시작하여 어느 한순간을 본다면 여러개의 명령어를 동시에 처리함을 알 수 있다.

그리고 64 비트의 데이타를 병목 없이 한 사이클에서 처리할 수 있다. 그래서 CPU 는 오리지널 64
비트 처리구조를 가지고 있으며, 고가인 RISC CPU 이다. 만들기는 힘들겠지만 개방형 시스템 구조
(Open System Architecture)로서 구조가 공개되어 있다. 어러한 이유 때문에 비슷한 구조를 갖는
CPU 와 이를 이용할 수 있는 응용소프트웨어가 많이 출시되어 있다.

 메인보드 또한 BIOS 에 넣어진 프로그램에 맞는 하드웨어를 설계하게 되어있는데 이도 또한 CPU
를 가장 잘 지원해줘야 하므로 별개의 문제가 될 수 없다. SUN Microsystems 社의 제품을 가장 많
이 사용하는 이유는 워크스테이션의 첫 번째에 꼽히는 사항인 안전성 때문이다. 대분분의 워크스테이
션은 년간 1 회 정도만 시스템 하드웨어 확장이나 운영체제 업그레이드를 위하여 정지되는 때 외에
는 정지를 하면 안되는 즉, 그 동안 하드웨어적인 전원차단이 있기전에 다운됨이 없을 정도로 안정된
시스템을 원하게 된다.

이 경우는 미니 워크스테이션도 마찬가지이다. SUN Microsystems 社의 CPU 를 탑재하고 있는 경
우도 안정성이 첫째이기 때문에, 관리도 중요하지만 하드웨어적인 결함이 존재하면 안된다. 시스템
의 확장을 위해서 메인보드 박스는 여분의 슬롯을 가진 콘트롤박스를 가지고 있어야 하며 그 외의 저
장매체 확장을 위하여 외장형 인터페이스를 갖춘 하드박스를 소유하고 있는 것이 바람직하다. 물론
테이프 백업드라이브와 씨디롬 드라이브 그리고 플로피 드라이브는 있다고 가정한다.

또한 시스템의 데이터를 안전하게 백업하기 위해서 백업장치 또한 분명히 가지고 있어야 한다. 보통
일주일에 한번 하게 되는데 대개 두 개의 백업테잎를 가지고 있어야 한다. parent 와 son 의 관계라
고 보통 얘기하는데 금주에 한번 백업하고 차주에 한번 백업하며 그 다음주에는 첫주의 테이프를
overwrite 한다. 그리고 일별, 주별의 데이터를 보관해야 할 경우에는 더 많은 백업테이프나 기타 저
장장치를 가지고 있어야 한다. CDROM 드라이브 또한 필수인데, 네트웍을 통하여 소프트웨어를 설
치할 수 있기는 하지만 대용량의 프로그램을 설치하는 것이 보통이므로 CDROM 드라이브는 필수적
으로 가지고 있어야 한다.

PC 에서 UNIX 를 사용하기를 원하는 경우에 자신의 CPU 가 x86 계열이라면 Solaris 제품군 중 x86
플랫폼으로 출시된 Solaris 를 구하여야 한다. 왜냐하면 CPU 의 내부구조와 인터페이스구조 자체가
SUN 기준과 틀리기 때문에 SUN OS 를 가지고 와서 설치하려해도 되질 않는다. 그러므로 x86
flatform Edition 인 것을 확인하고 PC 에 설치하여야 한다. 그리고 PC에서는 되도록 주기억장치로서
는 SDRAM 을 사용하기를 권장하며 케시메모리는 최소 256KB 또는 512KB 이상을 추천한다.

VGA 카드는 ET4000 계열이 속도는 떨어지지만 UNIX 또는 LINUX 같은 체제등 기타 운영체제에서
기본적으로 지원되는 하드웨어로서 호환성은 뛰어나다. 그리고 사운드카드는 크리에이티브社(사운
드블래스터)의 호환기종이면 설치가 가능하며 CDROM 드라이브는 PC 에서 SCSI 를 추천하지만
EIDE 형식도 지원된다. 하지만 모두다 지원되는 것이 아니라 Solaris 에서 지원되는 플랫폼을 따르
는 것을 선택해야 하는데 이는 CDROM 드라이브 제조회사에 문의하거나 매뉴얼을 보면 알 수 있다.
제조회사에서 제품을 출시할 때 UNIX 드라이버가 들어있다면 지원되는 것이다. 다만 버전과 지원기
종을 잘 살펴야 한다.
모니터는 별상관이 없지만 Openwindows 작업이나 기타 그래픽작업을 맘껏 누리기 위해서는
1600*1280 이 지원되는 17 인치 모니터 이상을 추천한다. FDD 는 특별히 특성을 타지 않지만 만약을
위해서 가장 많이 사용하는 것을 고르도록 한다.

아래에는 SPARC Version 9 에 관하여 약간의 특징을 기술하려 한다.

  1.1.3 SPARC Version 9 Architecture Overview

    1.1.3.1 Improved System Performance

새로운 구조는 16 개의 추가적인 double-precision floating-point register 를 포함해 총 32개의
register 를 포함하고 있다. 이러한 추가적인 레지스터는 memory traffic 을 줄이고, 수행하는 프로그
램 속도를 더 빠르게 할 수 있다. 새로운 floating-point register 는 또한 quad-precision 레지스터를
주소지정 가능하게 한다.
SPARC_V9 은 128 비트의 quad floating-point 형식을 마이크로 프로세서로서는 유일하게 지원한다.
SPARC_V9 은 SPARC_V8 에서 한 개밖에 없던 floating-point condition code register 를 네 개까
지 지원한다. SPARC_V9 프로세서는 한번에 여러개의 명령어를 착수함으로서 Superscalar
machine 에 보다 병렬적인 처리를 제공할 수 있도록 설계되어 있다.
새로운 floating-point condition code register 는 SPARC_V9 프로세서가 네 개의 floating-point 비
교를 일제히 할 수 있게 허용한다. 수행도를 향상시키기 위해 아래의 명령어 세트를 추가시켰다.

- 64 비트 integer multiply, divide instruction
- Load and Store floatong-point quadword instruction
- Software settable branch prediction
- Branches on the register value

이것은(Branches on the register value) 명령어 비교수행을 위한 필요성을 배제한다. 이것으로 인
해 잠재적인 병목현상을 해소할 수 있다.

    1.1.3.2 Advanced Optimizing Compilers

SPARC_V9 software 는 명백히 data 와 명령어를 prefetch 함으로서 memory latency 를 감소시켜
자체의 code 또는 data 의 길이가 길어짐에 따라 프로그램이 기다릴 필요가 없다.

    1.1.3.3 Advanced Superscalar Processors

SPARC_V9 는 진보된 Superscalar Processor 설계지원을 포함한다. 한번에 2-3 개의 명령어가 동
시에 수행되고 있다. 앞으로 8-16 개의 명령어가 동시에 실행될 것으로 기대된다. 이를 성취하기 위해
서 더 좋은 Superscalar 실행지원을 제공하기 위해 확장을 했다. 게다가 SPARC_V9 는 그 이상의
floating-point register 를 제공하며 non-faulting loads, multiple condition code, branch
prediction, branches on integer register condition 을 지원한다.

   
    1.1.3.4 Advanced Operating Systems

더 나은 1990년대의 운영체제를 지원하기 위하여 운영시스템 인터페이스를 갖추고 있다. 여기에는
machine 에서 중요한 제어정보를 access 할때 더욱 간소하게 하기 위해 새로운 특정 register 와 새
로운 register 구조를 가지고 있다. 주의할 점은 operating system interface 의 변화는 응용 소프트웨
어에서 아무 영향을 받지않는다. 즉, 재컴파일하지 않은 이진데이터나 user-level 프로그램들은 이러
한 변화를 보이지 않는다.

SPARC_V9 은 데이터 형태로는 32,64-bit의 integer와 32,64,128-bit의 floating-point를 instruction
set architecture(ISA)로 갖는다. 32,64-bit floating-point type은 IEEE Std 754-1985에 명시되어 있으
며, 128-bit floating-point type은 IEEE Std 1596.5-1992에 명시되어 있다.
SPARC_V9 은 모두 32-bit 폭의 instruction format으로 encode되어있는 범용 레지스터, floating-
point, special state/status register instruction을 지정한다. load/store 명령어의 주소는 264-byte
의 주소공간을 갖는다.

    1.1.3.5 SPARC_V9 Processor

SPARC_V9 processor는 각기 자체 레지스터를 가지고 있는 IU(Integer Unit) 와 FPU (Floating
Point Unit)로 구성되어 있다. 이러한 구조는 integer와 floating-point사이의 일괄적인 명령어 실행을
가능케 한다. Integer register는 64-bit 폭을 갖는데 반해 floating-point register는 32,64,128 bit의 폭
을 갖는다.
Instruction operand는 single register, register pairs, register quadruples, immediate constant
가 된다.
SPARC_V9 processor는 2가지의 모드가 있는데, 하나는 privileged이며 또 하나는 nonprivileged이
다. 뒤에서 설명되겠지만 프로세서의 상태를 나타내는 PSTATE register의 PRIV비트가 set 되면
privileged mode가 되며 set 되지 않을경우는 nonprivileged mode가 된다.
privileged 모드에서는 privileged 명령어를 포함한 어떠한 명령어도 실행을 시킬수 있는데 반해서,
nonprivileged 모드에서는 privileged 명령어를 수행하려 시도하면 privileged software에 의해 trap
이 발생된다.

    1.1.3.6 Integer Unit(IU)

Integer Unit은 범용 레지스터와 전반적인 프로세서 동작 제어신호를 포함한다. IU는 integer
arithmetic 명령어를 수행하며 load/store용 메모리 주소를 계산한다. 또한 program counter와 FPU
의 명령어 수행 제어신호까지 포함한다.
현재의 윈도우는 CWP(Current Window Point) 레지스터에 지정되어 있다. 프로세서는 hardware와
supervisior software에 의해 제어되는 CANSAVE, CANSTORE의 예외적인 것을 spill과 fill하는
window를 감지한다.
SPARC_V9의 수행에서 활동적인 window의 수는 사용자 응용프로그램에서는 보이지 않는다. IU가
명령어나 데이터를 메모리에서 접근할때마다 ASI(Address Space Identifier)를 참조한다. 모든 명령
어의 접근과 대부분의 데이터 접근은 ASI를 참조한다. 하지만 명령어에서 즉치형 field를 갖거나 ASI
에서 오는 어떤 명령어는 ASI와는 무관하게 수행된다.
모든 명령어는 big-endian order형식으로 접근되며 데이터는 big 또는 little-endian order 방식으로
참조될 수 있다.

    1.1.3.7 Floating-Point Register Unit(FPU)

FPU는 약간은 overlap된 32개의 32-bit floating-point register와 32개의 64-bit ( double -
precision) floating - point register, 16개의 128-bit floating-point register를 가지고 있다.
Double-precision 값은 single-precision의 짝-홀의 한벌을 차지하며, quad-precision 값은 4개의
single-precision을 한개 그룹으로 갖는 4개의 할당그룹을 가진다.
그리고 32개의 single-precision register는 double-precision의 하위 절반과 quad-precision의 하
위 절반을 가지며 이들을 각기 overlap되긴 하지만 모든 single-precision register의 제 각각은
overlap되지 않는다.
이 floating-point register의 overlap에 관한 것은 p.36부터의 5.1.4를 참조하면 된다.
Floating-point load/store 명령어는 FPU와 memory사이의 데이터의 이동을 위해 사용한다. FP
operate(FPop) 명령어는 floating-point arithmetic operation과 comparision을 수행한다.
floating-point instruction set과 32,64-bit 데이터 형식은 IEEE Standard for Binary Floating-Point
Arithmetic인 IEEE Std 754-1985에 명시되어 있다.
128-bit의 floating-point data형은 IEEE Std 1596.5-1992에 명시되어 있다.
만약에 FPU가 없거나 이것이 동작불가능 상태일 때, floating-point 명령을 수행하려 하면
fp_disable trap을 발생시킨다. 그리고 다른 경우는 privileged-software가 아래의 조치를 취해야만
한다.
- FPU를 실행가능한 상태로 만들고 trap명령어를 재실행 하거나,
- trapping명령어를 emulate해야 한다.

    1.1.3.8 Instructions

- Memory Access
- Integer Operate
- Control transfer
- State register access
- Floating-point operate
- Conditional move
- Register window management

    1.1.3.9 Memory Access

Load/Store명령어는 atomic operand이다. CASX, SWAP, LDSTUB는 단지 메모리를 접근하기 위
한 명령어이다. 이러한 명령어들은 byte-aligned 메모리 주소에서 64비트 계산을 위하여 2개의 r 레
지스터를 사용하거나 한 개의 r 레지스터와 signed 13-bit 즉치값을 이용한다.
load/store 명령어의 destination field는 1개 또는 2개의 r 레지스터 또는 1,2,4개의 f 레지스터에 지정
되며 이것은 load로부터 온 data를 receive하거나 store용 data를 공급한다.
integer load/store 명령어는 byte, half-word, word, double-word access를 지원한다.
어떤 integer load 명령어 버전은 64-bit destination 레지스터로 load될 때 sign extension 8,16,32-
bit값을 수행한다.
floating-point load,store 명령어는 word, double-word, quad-word memory access를 지원한다.
CAS, SWAP, LDSTUB는 특별한 atomic momory access 명령어인데, 이것은 일괄적인 수행에 의
한 memory update와 synchronization용으로 사용한다.

    1.1.3.10 Memory Alignment Restrictions

halfword access 는 2-byte 만 할당되어야 하며 word는 4-byte, extend-word와 double - word
access는 16-byte에 할당되어야만 한다. load, store, load-store 명령에서 부적당하게 할당된 주소
는 trap을 발생케 한다. 그리고 6.3.1.1의 "Memory Alignment Restrictions"에서 가능한 예외적인 경
우가 잘 묘사되어 있다.

    1.1.3.11 Addressing Conventions

SPARC_V9 은 기본적으로 big-endian byte order를 사용한다. quad-word, double-word, word,
half-word의 주소는 대부분 그 자체에 표시된 byte의 주소이다. 증가된 주소는 단위가 access된것
의 표현이 감소된 것을 의미한다. SPARC_V9는 또한 little-endian byte order를 지원하는데 이는
data access할때만이며, quad-word, double-word, half-word의 주소는 최소한의 표현 byte이다.
증가된 주소는 단위가 access된것의 표현이 증가함을 의미한다. little-endian에 대한 함축된 byte
order의 변화에 대한 자세한 정보를 보려면 5.2.1에 있는 Processor State Register 참조하라.

    1.1.3.12 Load/Store Alternate

load/store명령어 버전, load/store alternate 명령어는 load/store data access를 위한 순환적인 8-
bit 주소공간을 지정할 수 있다. 0016..7F16 까지의 교환공간 접근은 제한되어 있으며, 8016..FF16 까
지의 교환공간 접근은 비제한적이다. 어떤 ASI들은 implementation - dependent use에 유용하다.
supervisor software는 MMU(Memory Management Unit),
cache control, processor state register, other processor, system-dependent 값 같은 special
protected register를 접근하기 위한 implementation-dependent ASI를 사용할 수 있다. 교환 공간 주
소는 또한 atomic memory access 명령어, LDSTUB, SWAP, CASX를 공급한다.

    1.1.3.13 Seperate I and D Memories

이 manual에서 표현한 것의 대부분은 memory mapping과 caching에 관한 문제는 무시한다. 동일
한 변환이나 caching이 명령어나 메모리 둘다 적용될 때, 주소의 번역이 동일할 수 있으며, 비록 같
은 주 메모리가 공유되더라도 명령어 참조가 한 개의 변환기술과 cache 그리고 각각의 데이터 참조
일 경우 spilt될 수 있다.
그러한 spilt-memory system에서는 coherence mechanism은 동일할 수 있으며 명령어나 데이
터 둘다 포함한다. 그렇지 않으면 아마 spilt될 것이다.

    1.1.3.14 Input/Output

SPARC_V9 은 input/output register가 load/store 교환 명령어, 일반적인 load/store 명령어, 또는
read/write Ancillary State Register 명령어를 access하는 것을 추측한다.

    1.1.3.15 Memory Syncronization

FLUSH, MEMBAR 이 두가지 명령은 memory operation의 synchronization을 위해서 사용하는 명
령어이다.

    1.1.3.16 Arithmetic/Logical/Shift Instructions

Arithmetic/Logical/Shift 명령어는 arithmetic, tagged arithmetic, logical, shift operation을 수행한
다. 한가지 예외는 이러한 명령어는 두 개의 source operand의 function 결과를 계산한다. 이 결과
는 destination register 에 쓰여지거나 discard된다. 예외적으로 SETHI는 r 레지스터에서 32비트 상
수를 만들기위한 논리적인 명령어 또는 다른 arithmetic을 가진 조합에 사용된다.
shift 명령어는 r 레지스터를 왼쪽 또는 오른쪽으로 주어진 수만큼 이동시키기 위해 사용된다. 이때
shift distance는 명령어에 지정된 상수값이다 r 레지스터 목록에의해 지정된다.
integer multiply 명령어는 64*64→64-bit 연산을 수행한다. integer division 명령어는 64/64→64-bit
연산을 수행한다. 추가적으로 SPARC_V8과의 호환성을 위해서 32*32→64-bit multiply, 64/32→32-
bit divide, multiply step 명령어를 포함하고 있다. 0에 의한 division은 trap을 발생시킨다. 어떤 버전
의 32-bit multiply와 divide 명령어는 condition code를 set한다.
tagged arithmetic 명령어는 각각의 operand가 data-type tag임을 최소-표현된 2비트를 추측한다.
이러한 명령어의 nontrapping version은 icc,xcc,icc,xcc들을 set 시킨다. 추가적으로 만약 어떠한
operand의 tag bit가 0이 아닐 경우 icc는 set된다. xcc overflow bit는 tag bit에 의해 아무런 영향을
받지 않는다.

    1.1.3.17 Control Transfer

Control-transfer instruction(CTI)는 PC-relative branched와 calls, register-indirect jumps,
conditional trap을 포함한다. control-transfer 명령어의 대부분은 delay된다. 이것은 명령어가 논리
적으로 뒤에 따라오는 다음명령어가 읽혀지기 전에 즉시 dispatch되기 때문이다.
뒤따라오는 명령어가 지연된 control-transfer 명령어일때 delay 명령어라 부른다. 지연된 control-
transfer 명령어에서의 bit는 만약 branch가 not taken일 때, 아무영향을 주지 않는 annel된 지연명령
어를 야기시킬수 있다.

    1.1.3.18 State Register Access

read, write state register 명령어는 nonprivileged software에 가시적인 state register의 목록을
read, write한다. read, write privileged register 명령어는 privileged software에만 가시적인 state
register의 목록을 read, write한다.

    1.1.3.19 Floating-Point Operate

Floating-Point operate(FPop)는 floating-point 계산을 수행하며 floating-point register에서 동작하
는 register-to-register 명령어 이다. arithmetic/logical/shift 명령어처럼 FPop는 1개 또는 2개의
source operand의 함수를 갖는 결과를 계산한다. 지정된 floating-point register는 FPop1/FPop2 명
령어 형식의 subfield에 의해서 지정된다.

    1.1.3.20 Conditional Move

Conditional move명령어는 integer 또는 floating-point condition code 에 의존하거나 integer
register 의 목록에 의존하는 경우에 source register에서 destination register로 값을 copy 한다. 이
명령어는 branch의 수를 줄임으로서 수행도를 향상시킨다.

    1.1.3.21 Register Window Management

이러한 명령어는 register window를 관리하기 위해 사용된다. SAVE, RESTORE는 nonprivileged
이며 register window가 push되거나 pop되는데 기인한다. FLUSHW는 nonprivileged이며 현재 하나
의 window를 제외한 모든 window가 memory에서 flush되는 것을 야기한다.


    1.1.3.22 Traps

trap은 각 trap handler의 처음 8개의 명령어를 포함한 trap table을 통한 privileged software에 의해
행해지는 control의 벡터화된 전송이다. table의 base address는 state register에서 software에 의
해 만들어진다. table을 통한 배치는 각 trap의 형태개수와 각 trap의 level에 의해서 부호화된다.
table의 1/2은 hardware trap용으로 예약되어 있으며, 1/4은 trap 명령에 의해 생성된 software trap
용으로 예약되어 있으며, 마지막 1/4은 미래에 사용될 구조확장용으로 예약되어 있다.
trap은 현재의 PC와 nPC를 TPC, TNPC register에 저장되게 한다. 또한 CCR, ASI, PSTATE,
CWP register가 hardware trap stack에 있는 TSTATE, TPC, TNPC, TSTATE 에 저장되게 하며,
trap stack에서 entry의 개수는 지원되는 trap level의 개수와 일치한다.

그래서 수준 급의 워크스테이션은 메인보드가 보통 10장 이상을 지원하게 설계되어 있으며 이를 운
용할 수 있는 운영체제는 대개 Solaris를 채택하고 있다. SPARC (32-bit RISC) CPU라든가 Ultra
SPARC(64-bit RISC) CPU같은 것은 이러한 메인보드의 핵심 CPU이다. UNIX자체의 시스템 커널이
복수의 CPU를 지원할 수 있게 설계가 되어있으므로 Double SPARC CPU라는 말을 하기도 한다.

  1.1.4 UNIX의 강력한 네트워킹 기능의 내장환경

이 부분에서는 UNIX시스템이 서브넷의 시스템 부분이 아니며 OS서버라고 가정하고 이 글을 전개
해 나가도록 한다. UNIX 시스템을 워크스테이션이라고 가정한다. 그러면 네트워크 칩셋이 내장되어
있다. 즉 이말은 시스템에 Ethernet Card가 내장되었다고 보는 것이 무방하다.
그러므로 따로 네트워크 card를 설치하지 않아도 된다. 라우터와 CSU, DSU가 지역 망에 설치되어
있다고 가정한다. 대개 3Com社의 칩셋을 내장한다.

이 환경하에서 시스템에 따라서는 몇 천 명에서 몇 만 명의 동시 접속인원을 확보할 수 있다. 이러한
숫자는 물론 네트워크 접속회선속도가 그만큼 지원되는 하에서 어느 정도 느리지 않고서 그 정도 인
원이 무리 없이 네트워크를 사용할 수 있다는 의미인데 이것은 엄청난 의미를 갖는다고 할 수 있다.
그리고 이러한 접속인원의 정도는 어떠한 데몬을 실행시켰을 때 최대생성시킬 수 있는 프로세스를 설
정하는 부분이 있는대, 그 부분의 숫자를 어느정도 적어도 시스템에 무리가 없을때가 접속가능한 사
용자 수이다. 도스나 윈95에서는 상상을 할 수 없는 일을 할 수 있는 것이다. 그만큼 UNIX는 네트워
크 기능이 막강하기 때문에 실행될 수 있다.

하지만 정작 중요한 것은 속도나 접속인원이 아닌 안정성이라고 말할 수 있다. 아무리 속도가 높고
동시접속인원을 많이 확보할 수 있다해도 처리할 데이터를 제대로 처리 못한다면 그것은 좋은 시스템
이 될 수 없다. 그리고 UNIX시스템을 가지고서 네트워킹 기능을 이용한다면 mail server, WWW
server, ftp server, pop server, news server등 여러 가지로 이용할 수 있는 것이 많다. 그런데 시스
템의 성능을 잘 파악하고 네트워크 접속속도를 잘 따져봐서 효율적으로 운영할 수 있을 만큼만 서비
스하는 것이 바람직하다. 시스템의 성능이 좋지 않다면 다른 서버를 구축하여 분산시키는 것이 바람
직하다.
또한 어떤 daemon을 구동시킬 때 프로세스의 수를 미리 계산해봐서 시스템에 무리가 오지 않도록
해야 할 것이다.


제 2 장. UNIX 시스템 사용 명령어

1. 시동과 종료

  1.1 login

login은 사용자가 console을 이용할 때와 터미널을 이용할 때는 다소 차이가 있지만 그렇지 않는 경
우도 있다. 예를 들자면 어떤 telnet 접속프로그램으로 접속할 경우 뜨지 않던 openwindows가 다른
프로그램에서는 뜰수도 있다.

  1.2 command line의 입력형식

UNIX는 명령어 입력 시에 대소문자 구분이 있다는 점과 항상 명령어의 사용법에 있어서 자신이 없
을 때에는 아래의 형식으로 도움말을 이용토록 한다. 그리고 앞으로 나오는 프롬프트는 '#'로 통일한
다. 이러한 프롬프트에 대해서는 크게 연연하지 않아도 된다. 예를 들자면 시스템에 Solaris 2.5를 설
치한 다음 처음 뜨는 root용 프롬프트는 '#'이다. 하지만 이것을 수정할 수도 있다.

Solaris를 설치하게 되면 먼저 root는 Sun Shell(이하 sh)로 셋팅이 되어 있어서 그렇게 뜬다. 하지
만 C Shell(이하 csh)로 설정할 경우 틀려진다. 그리고 자신만의 Shell파일(.cshrc)에서 set prompt
문법을 이용하여 아예 프롬프트를 바꿀 수도 있으므로 이 부분에 대해서는 크게 신경을 쓰지 않도록
하자.


  1.3 비밀번호의 설정과 변경

비밀번호는 시스템을 사용함에 있어서 가장 소중히 다뤄야 할 부분이다. 쉽게 알 수 없는 즉 자신의
신상명세와 연관없는 것을 고르고 남들이 알지 못하도록 해야 한다. 예를 들자면 규칙을 이용하여 암
호를 설정하는 습관을 가지는 것도 도움이 된다. 다음의 명령어로 암호를 바꿀 수 있다.


  1.4 logout

시스템 사용을 종료할 때에는 실행중인 프로세스가 없는지 확인을 하고 종료한다.

종료할 때에는 logout 이나 exit 또는 + D 이다.


2. 파일과 디렉토리

 2.1 파일의 종류

(1) 정규파일
정규파일이란 .login 이나 a.txt 같은 보통파일을 말한다.

(2) 디렉토리 파일
UNIX에서는 정규파일과 디렉토리 파일을 다해서 파일이라고도 부른다. 디렉토리 파일은 ./data 같
은 디렉토리를 의미한다.
다음의 표 1 에서는 / 밑에 있는 디렉토리를 성격별로 나타낸 것이다.

(3) 특수화일
/dev밑의 파일들을 일컽는데 이곳에는 입출력장치의 제어기를 이곳에서 맞추어 장치를 연결할 수
있게 한다. 예를 들면 /dev/tty12는 12번 터미널을 의미한다. 이곳에서는 자신이 가지고있는 장치가
/dev 디렉토리내의 어떤 형식의 장치를 가지고 있는가를 알고만 있어도 장치를 인식할 수 있다.
 2.2. 파일명과 경로명

UNIX 시스템의 파일명은 255문자이내에서 사용 가능하다. 주의할 것은 대·소문자를 구별한다는 것
이다. 또 한가지 "." 나 "_"로 시작되는 파일명은 시스템 파일들이 많이 사용하기 때문에 사용하지 않
는 것이 바람직하다.

(1) 상대경로명
만약 현재의 /home/test/pub 에서 /home/test/data 로 이동하려고 할 때 cd ../pub 라고 입력하
면 된다. 이때 쓰이는 방식이 상대경로 이동방식이다.

(2) 절대경로명
만약 현재의 /home/test/pub 에서 /home/test/a 로 이동하려고 할 때 cd /home/test/a 라고 입력
하면 된다. 이때 쓰이는 방식이 절대경로 이동방식이다.

 2.3. 파일의 특성

파일의 보안성을 유지하기 위해서는 무엇보다도 첫째, 허가모드를 중요시 여겨야 한다. 파일의 허가
모드의 순서는 다음과 같다.

파일의 유형에는 다음의 7가지에 한한다.

이 허가모드를 변경하기 위해서는 chmod 명령어를 이용해야 하며 그에 대한 상세한 설명은 4.3 의
기본적인 명령어중 chmod를 참조하기 바란다.


3. 기본적인 명령어

id
사용자의 이름과 번호의 표시(사용자가 속한 group id와 user id를 표시함)


pwd
사용자의 현재의 디렉토리 표시


tty
사용자 단말기의 장치파일명 표시


stty
터미널 제어특성의 표시 및 지정, 현재 컴퓨터 시스템과 연결되어 있는 단말기나 콘솔의 입출력을 논
리적으로 변경


date
시스템의 날짜와 시간의 표시


cal
현재의 달력을 보고자 할 때 사용한다.


who
현재 접속되어 있는 사용자들 표시


whoami
현재 접속해 있는 자신의 id를 표시


finger
시스템 사용자의 개인 정보표시(이 정보에서 이름은 가입할 당시의 comment만 찍힘)를 위한 것이
지만 이렇게 안 나올 경우도 있다.

그것은 자신이 시스템에 오래 접속하지 못할 사정이 생겨서 다른 사용자가 이 명령어를 이용하여 검
색할 때 '지금 저는 출장중입니다' 라는 메시지가 나오도록 한다면 얼마나 좋을 것인가. 자! 방법이 있
다. 자신의 로그인 디렉토리(이하 홈 디렉토리)에 .plan 이라는 파일을 만들어 보자. 이때는 일반 텍
스트편집기를 사용하면 된다. 예를 들면 VI Editor 같은 것이다. VI를 이용하여 '저는 출장중입니다'
라는 메시지를 쓰고 저장후 종료하면 .plan 이라는 파일을 cat을 이용하여 내용을 확인한 후 명령프
롬프트 상에서 시험해보자.
만약 자신의 id가 webadm 이라면 'finger webadm'를 입력해본다. 그러면 '저는 출장중입니다'라는
메시지가 뜰 것이다. 잠깐! 한글로 썼을 경우 안나타날수도 있다. 그러면 영어로 써야한다.

ps
 process의 상태표시

option)
-a : 다른 사람에 의해 소유된 프로세스에 대한 정보를 포함
-c : command 이름을 표시
-C : %cpu field내에 decaying average 대신에 raw CPU time을 표기
-e : argument 외에도 환경을 표기
-g : 이 option이 없으면 interesting 프로세스만 프린트
-j : PPID, PID, PGID, SID, TT, TPGID, STDT, UID, TIME정보 포함 표기
-u : USER, %CPU, %MEN, SZ, RSS, START field 포함
-x : no controlling terminal 가진 프로세스 포함
중간용어설명)
PPID : process의 parent의 number id
PGID : process group id of process
SID : process 가 속해있는 session의 number id
TPGID : TT 아래 명시된 터미널과 관계 있는 process group의 number id
UID = 0 : Super-User


df
디스크의 사용가능한 공간표시


cp
 copy source to destination


mv
: move source to destination

rm
 remove


rmdir
 remove directory


mkdir
 make directory


chdir
 change directory


cd
 change directory


du
 디스크의 사용공간 표시(옵션이 없으면 현재의 위치에서 하위의 모든 파일들의 공간표시)

 

hostname
 현재 접속해 있는 host의 이름을 표시


man
해당하는 command의 manual을 참조하고자 할 때, 단 /usr/man에 그 항목이 있어야만
한다.


&
background 처리를 위하여 명령어 뒤에 붙여준다.


alias, unalias
특정한 명령어를 자신이 임의로 수정


위와 같이 하면 cx는 chmod명령어를 대신한다. 이러한 작용을 shell에 추가시킬때는 다음과 같이
추가한다.

alias를 해제하고자 할 때는 unalias를 사용한다.
ex) # unalias cx


set
지정된 변수를 출력한다.


path
경로를 지정
일반적을 shell에 지정하지만 명령어로서 수정할 수도 있다. 추가하는 방법은 다음곽 같다.

두 번째 라인의 %set 명령어는 기존의 path에 추가할 때 사용하는 방법이다.

find
디렉토리를 탐색하여 지정화일의 위치표시


cat
파일의 내용을 표시, DOS에서의 type명령어와 유사


more
파일의 내용을 한면씩 화면에 표시


pg
파일의 내용을 표시


head
파일의 처음 부분을 표시(기본값은 10라인)


tail
파일의 마지막 부분을 표시(기본값은 10라인)


lp
파일의 내용의 인새요청


pr
인쇄를 위한 파일의 페이지화, 파일을 인쇄하기 위한 준비로서 페이지를 분리한다. 각 페이지는 파일
명, 날짜, 시간 및 페이지 번호를 표시하는 header를 포함한다.


chmod
change mode

위에서 755가 의미하는 것을 해석해보면 만약 "ls -al "을 입력했을 때 다음의 형식으로 나타났다고
가정하자.

위와 같이 나나났다면 처음의 d는 디렉토리를 의미하며 다음의 rwx 는 ./htdocs에 대한 소유주의 권
한이 read,write,excute 의 세 가지 권한이 다 주어진 것이다. 다음의 rw- 는 소유주가 속한 그룹에
게 주어진 권한이며, 다음의 rw- 는 그룹이외의 사용자에게 주어진 권한이다. 즉, 디렉토리이면서 소
유주는 읽기·쓰기·실행이 가능하며 그룹에게는 읽기·쓰기 가능, 이외의 사용자는 읽기·쓰기가 가능하
다.
여기서 각 권한블럭마다 3비트를 할당하고 있음을 알 수 있다. 즉 소유주에 대한 권한 rwx 를 2진으
로 바꾼다면 1112 이다. 이것을 10진수로 바꾸면 7이며, 그룹에 대한 권한 rw- 를 2진으로 바꾼다면
1102 이며 10진수는 6이다.

그룹이외의 사용자도 마찬가지로 10진수 6이다. 그러므로 이 디렉토리에 대한 권한을 숫자로 표기한
다면 766이다. 이것을 소유주는 읽기·쓰기·실행이 다 가능하면서 그룹과 이 외의 사용자는 읽기·실행
만 가능하게 한다면 십진수로 755가 될 것이다. 그러므로 변경을 위해서는 chmod 755 ./htdocs 를
입력하면 된다. 모드부분에서 "lrwxr--r--"중 'l' 부분은 link를 의미하는 것으로서 ./public_html과 링
크 되어 있음을 의미한다.

이것을 보다 쉽게 바꾸는 방법도 있다. 그룹은 g를 이 외의 사용자는 o로 나타낼 수 있는데 현재의
권한 766에서 744로 변경하고자 할 때에는 그룹이 가지고 있는 쓰기 권한을 박탈하는 동시에 이 외의
사용자에게도 쓰기 권한을 박탈해야만 한다. 이때 사용하는 용법은 다음과 같다.

chown
change owner


chgrp
change group

위의 의미는 webadm 이라는 사용자를 student그룹으로 속하게 하는 명령이다.

ln
link, 예 : ln -s list3 /tmp/list

UNIX에서의 link는 공간의 절약을 꾀할 수 있으나 연결상태를 잘 파악하고 사용하여야 한다. ln의
option중에서 -s의 의미는 다른 file system에 있는 것도 link할 수 있는 symbolic link를 사용함으로
서 유용한 option이다.

4. 압축 유틸리티 사용법

4.1 .tar

tar는 정확히 말하자면 압축유틸리티가 아니다. 이것은 단순히 여러 개의 파일을 하나의 덩어리로 결
속시키는 것이다. 이렇게 해서 하나의 덩어리로 만든 다음에 압축을 하는 것이 대개의 과정이다. 결
속 할 때의 사용법은 다음과 같다.

결속된 .tar 파일을 풀고자 할 때의 사용법은 다음과 같다.


4.2 .tar.z

위에서 .tar를 살펴본 것처럼 .tar로 결속을 시킨 다음 압축을 이행한다. 이때는 compress라는 유틸
리티를 이용하게 된다. 그렇게 하여 압축을 하면 원래의 파일에 .z가 추가적으로 붙게 된다. 압축하
는 과정과 푸는 과정은 다음과 같다.

 

 4.3 .gz 또는 .z

compress외에 gzip이라는 유틸리티도 이용되는데, 사용법은 다음과 같다.


5. 작업제어 관련 명령어

 5.1 background 작업 프로세스의 정지와 삭제

정지는 아래의 stop 명령어로 제어될 수 있다. 그리고 현재의 진행중인 작업을 보려면 jobs라는 명령
어로 체크할 수 있다. %job_number는 현재 실행중인 프로세스 번호를 적는 것으로서 pid와 동일한
값을 갖는다.

삭제를 위해서는 kill 명령어를 사용하는데 사용법은 다음과 같다. 여기서 pid는 프로세스 id이며,
'ps -a' 명령어로 현재 수행중인 프로세스를 알 수 있다.


5.2 foreground 작업 프로세스의 정지와 삭제
현재 작업중인 프로세스를 background작업으로 돌리기 위해서는 ' '를 입력한다. 그리고 이렇게
background로 전환된 작업은 다음의 명령어로 제어될 수 있다.

 

5.3 기타 작업제어 관련 명령어

# command& ☞ background 작업개시
# ps ☞ 현재 실행중인 프로세스 id 디스플레이
# jobs ☞ background 작업번호 및 상태 디스플레이
# nohup command& ☞ logout 후에도 명령 실행 계속유지
# fg ☞ 현재작업을 foreground 로 전환시킴
# fg %n ☞ n 번 작업을 foreground 로 전환시킴

 5.4 history

이전에 사용된 명령어를 호출하는 명령어이다. history의 개수지정은 자신의 shell에서 변수로 지정
할 수 있으며, 지정하는 방법은 다음과 같다. 개수를 50개로 한다면,

위와 같이 50 이라는 부분만 수정해주면 된다. history의 역할은 DOS에서 doskey와 같다. 즉 이전에
실행한 명령어를 기억하며 필요에 따라 호출할 수 있다. 그럼 history관련 명령어를 보도록 하자.
command)
# history ☞ 기억된 이전 명령어 리스트를 디스플레이
# !3 ☞ 3 번째 실행한 명령어를 호출
# !str ☞ str로 시작하는 가장 최근의 명령어를 호출
# !-1 ☞ 뒤로 첫 번째 실행한 명령어를 호출
# !?str? ☞ str를 포함하는 가장 최근 사건을 호출
# !! ☞ 바로 직전에 실행한 명령어를 호출
# !$ ☞ 바로 직전에 실행한 명령어 중 마지막 단어를 호출
modifier(:)를 사용한 history 이용
# :0 ☞ 0번째 명령어 호출
# :n ☞ n번째 명령어 호출
# :^ ☞ 1번째 명령어 호출
# :$ ☞ 가장 최근 명령어 호출
# !n:$ ☞ n번째 명령의 마지막 단어
# !n:^ ☞ n번째 명령의 첫 번째 단어
# !N:n ☞ N번째 명령어의 n번째 단어
# !N:n-m ☞ N번째 명령어의 n번부터 m까지의 단어들
# !N:-n ☞ N번째 명령어의 0번부터 n까지의 단어들
# !N:* ☞ N번째 명령어의 1번부터 끝까지의 단어들
# !N:n* ☞ N번째 명령어의 n번부터 끝까지의 단어들
# !N:n- ☞ N번째 명령어의 n번부터 끝 바로 앞 까지의 단어들
# cat !15:* ☞ 단어 1에서 끝까지
# cat !15:1 ☞ 단어 1
# cat !15:^ ☞ 단어 1
# cat !15:3-5 ☞ 단어 3에서 5까지
# cat !15:2- ☞ 단어 2에서 끝까지
# cat !15:2* ☞ 단어 2에서 끝까지
# cat -2 ☞ 단어 0에서 2까지
# cat !15:$ ☞ 단어 마지막 것


댓글