5. Study/__나. UNIX

Solaris 시스템관리

행복 금융 2008. 10. 1.
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
============================================================================
                       SEO KANG S Y S T E M S, I N C
안녕하세요.
서강System에 오신것을 환영합니다.
=============================================================================]

마. 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으로 저장하고 끝내기

댓글

💲 추천 글