SUN 사용 설명서 2005-11-24 22:54 2장. Command사용법 및 기능설명 2.1 Admin을 위한 일반 명령어 2.2 System Information 확인 명령어 2.3 중요한 시스템 환경 File들(Backup Key Files!) 3장. Quota 설정 4장. SunOS 4.x의 trace, Solaris의 truss 4.1 SunOS 4.x 에 대한 추적(Trace)기능 4.2 Solaris 2.x 에 대한 추적 기능 5장. Accounting & Permission 5.1 User Accounts(command line에서) 5.2 BSD Accounting Utilities 6장. Cron(명령어스케쥴링) 7장. NVRAM(PROM Phase) 7.1 OK mode상에서 banner 및 logo변경 7.2 NVRAM 값 변경 8장. SWAP 9장. MAIL 9.1 일반적 mail 사용법 9.2 메일 서버 센드 메일(Sendmail) 10장. POP Server 11장. DNS(Domain Name Service) 12장. NFS(Network File Service) 12.1 NFS 설정 12.2 일반적인 NFS Error의 유형과 해결 방법 13장. FTP(File Transfer Protocol) 13.1 anonymous FTP install 14장. PPP(Point to Point Protocol) 14.1 Sun-to-PC Dialup PPP(Async) on Solaris 2.x 14.2 적용예제 15장. System Tuning(시스템최적화) 15.1 성능 향상을 위한 일반론 15.2 시스템 성능에 영향을 주는 요소들 15.3 프로그램의 시간 체크하기 15.4 시스템의 성능 측정하기 15.5 현재 CPU 성능 측정 15.6 평균부하 15.7 페이징 알고리듬 15.8 메모리 사용 분석하기 15.9 디스크 I/O 분석하기 15.10 파일시스템 튜닝하기 15.11 무작위 통계 출력하기 15.12 시스템 성능 체크의 단계 15.13 Process 분석 16장. AWK 17장. SED 18장. C-SHELL PROGRAMMING 기법 19장. VI 편집기 20장. System Backup 및 주변장치(Device) 20.1 DAT제어를 위한 mt 명령어 20.2 tar명령어 20.3 cpio명령어 20.4 upsdump명령어 20.5 Remote Backup 20.6 Remote CD-ROM Mount 20.7 DEVICE 관련된 사항 20.8 DISK모델 관련 사항 20.9 Addon DISK 20.10 DEVICE설치 20.11 DISK format Utilities 20.12 SCSI DISK의 RPM 조정 20.13 Floppy DISK 인식 20.14 /(root) File System restore 21장. 시스템 ERROR 및 문제해결(Q&A) 21.1 Emergency Keyboard Commands 21.2 directory write problem 21.3 root(super user) password를 잊어버리거나, 파일시스템 오류시 21.4 File System이 손상된 경우(Boot block복구) 21.5 Inode가 full인 경우 조치 21.6 System Disk move 21.7 Oracle용 DISK Addon 21.8 프린터 관련 21.9 FrameBuffer관련 21.10 Sun H/W 장애(Q&A) 21.11 Application 관련 Error 21.12 MOD에서 media를 인식 못할 때 21.13 rm Command로 지워지지 않는 File 지우는 방법 22장. 네트웍관련 테크닉(Tip) 22.1 Tuning the system for a web server 22.2 Linux Network Setup 22.3 Snoop(Capture and Inspect Network Packets)명령어 22.4 ARP(Address Resolution Protocol) 22.5 Ifconfig(Configure Network Interface Parameters)명령어 22.6 The startup script results in the following 22.7 The route Command 22.8 Router Configuration 22.9 2'nd ethenet설치 22.10 4.1.3 DNS setup for Client 22.11 SLIP 22.12 SUN ATM 22.13 IP Aliasing 22.14 Static-Routing example 22.15 C class netmask방법 22.16 NDD를 이용한 Tuning변수(Solaris 2.x) 22.17 IP forwarding을 disable(Solaris 2.x) 22.18 Routing 환경 22.19 Auto FTP login 23장. 시스템관련 테크닉(&Tip) 23.1 Large dummy file 생성 방법 23.2 DOS file에서 ^M 문자 제거 방법 23.3 2개의 모니터에 Openwindows 올릴때 23.4 rdist사용하여 정해진 시간에 파일 transfer 23.5 Prompt변경(HostName & CurrentPath Display) 23.6 임시 host_name변경 23.7 / file system 100%일 경우 유용한 command 23.8 man page에 관한 몇가지 23.9 Login User중 idle time check하여 자동 kill(Script) 23.10 Login 보안 및 audit 관련 Tip 23.11 시스템에 유저 접근 거부 시킬때 23.12 RAID Level 23.13 System의 재설정(Host_name 및 Network 정보) 23.14 Network상에서 C-compile 하는 방법 23.15 Solstice Compiller Install 23.16 시스템 초기 설치시 참고 23.17 특정유저의 파일실행할 때 23.18 Remote로 Utilitie 실행 24장. NIS(YP) 24.1 Server & Client의 효율적 운용 24.2 Install 및 운용방법 24.3 NIS Master Server 초기화 24.4 NIS Slave Server 초기화 24.5 NIS의 Administration 24.6 NIS 장애 유형
* SunNetManager * SAMBA(PC NFS) * 시스템보안
SUN OS 4.1.1(OW2.0.1) ?? SUN OS 4.1.2(OW2.0.2) ? BSD계열 SUN OS 4.1.3(OW2.0.3) ? SUN OS 4.1.4(OW2.0.4) ?? SUN OS 5.1(OW3.0.1) or Solaris 2.1 ?? SUN OS 5.2(OW3.0.2) or Solaris 2.2 ? Unix-V 계열 SUN OS 5.3(OW3.0.3) or Solaris 2.3 ? SUN OS 5.4(OW3.0.4) or Solaris 2.4 ? SUN OS 5.5(OW3.0.5) or Solaris 2.5 ? Solaris 2.5.1 ? Solaris 2.6 ? Solaris 7 : full 64bit 운영체제
SUN ULTRA 1 <1995,64bit>, Solaris 2.5 : Single CPU SUN ULTRA 2 <1996,64bit>, Solaris 2.5.1 : Max CPU 2 SUN Ultra 5 : 개인용 SUN Ultra 10 : 개인용desktop, developer SUN Ultra 60 : developer, desktop or 소규모 그룹서버 SUN Enterprise 250 : 소규모 웍그룹 서버 SUN Enterprise 450 : 중규모 웍그룹 서버 SUN Enterprise 3500 : DB서버,넷서버,중규모 SUN Enterprise 4500 : 확장성 및 고성능이 필요한 site용 SUN Enterprise 5500 : 대규모 site 서버 SUN Enterprise 6500 : “ SUN Enterprise 10000 : 메인프레임(cluster일 경우 슈퍼컴가능) 2장. Command사용법 및 기능설명
# arch -k : Display The kernel architecture ▷ Inode 삭제 명령어 clrl # clrl /dev/dsk/c0t1d0s7 231 : 231 inode를 삭제 ▷ Text파일에서 특정 문자 추출해내는 명령 cut # cut -d":" -f1 /etc/passwd > /tmp/user : passwd file에서 유저부분만 추출해서 /tmp/user 파일로 저장 # ypcat passwd | cut -d":" -f1 > /tmp/user ▷ Disk 사용량 계산 # du -s . : 현재 및 SUB-dir까지의 전체 Disk사용량 (du:disk use) -k . : killo byte 단위로 확인 ▷ Text file의 비교와 Directory간의 상이한 내용의 비교 # diff /a /mnt : /a, /mnt directory 를 비교 # diff /a /b : /a, /b Text file 의 비교 ▷ EEPROM의 내용을 명령행 에서 변경 # /usr/sbin/eeprom : 상태확인 # /usr/sbin/eeprom boot-device=disk3 : 값 변경 ▷ File type을 확인 할때 # file /etc/passwd /etc/passwd: 아스키 텍스트 # file core core: ELF 32-비트 MSB 코어 파일 SPARC 버전 1, 원인수행 'sleep' : 이건 core file 이 왜 생성됬는지 보고 하고 있다. ▷ File or Directory 을 지울때 # rm file_name ; 단일 파일을 지운다. # rm -r /dir_name ; 디렉토리까지 전부 삭제한다. # rm -i file_name ; "-i"옵션은 파일을 지우기 전에 한번 더 확인한다. # rm 'file name' ; 중간에 공백이 있는 파일 지울때. ▷ File 검색을 위한 명령어 # find ~ -name '*%' -print -exec rm {} \; : home 디렉토리 '%'로 끝나는 화일 탐색하여 보여주면서 삭제 Option 분류(검색기능이 상당히 많다. man page로 확인) -atime n ; accessed n days ago -ctime n ; change n days ago -mtime n ; midified n days ago -perm ; 해당 되는 퍼미션 파일 검색 ... ▷ Key input 제대로 안될 때 Remote에서 Key mode를 바꾼다. # kbd_mode -a ▷ Process를 강제 종료 시킬때 # kill pid : 통상 process 종료 시킬때 # kill -9 pid : 강제 종료 시킬때 # kill -HUP pid : process를 hangup # kill -SEGV pid : process를 강제로 segmentation fault 시킬때 ▷ Process관련 명령어 /usr/proc/bin Directory에 다수가 있다. proc tools - proc, pflags, pcred, pmap, pldd, psig, pstack, pfiles, pwdx, pstop, prun, pwait, ptree, ptime ▷ File list를 표시한다. # ls -al : 모든 file들을 long형태로 자세히 listing # ls -ald : directory를 확인 할 때 # ls -li : inode number를 보고자 할 때 ▷ NIS 의 기동 여부 확인 # nisls -l : 만일 서버가 다운되었다면 아래와 같은 메시지가 뿌려진다. "NIS+ server unreachable" ▷ 특정 Disk partition 의 자세한 정보 획득 # prtvtoc /dev/rdsk/c0t0d0s0 : volume Table 의 내용 볼 때 위는 c0t0d0s0 slice에 대한 자세한 Information을 보여준다. ▷ 시스템의 상세 Configuration을 확인하는 명령어 # prtconf : System Configuration을 보여준다. # sysdef : Current system definition을 출력 # /usr/platform/`uname -i`/sbin/prtdiag : H/W 정보 (sol 2.6) ; Display system diagnostic information ; SUN 장비에만 적용되고 Axil등에서는 안됨. ▷ CPU를 Enable 또는 Disable psrinfo , psradm # psrinfo [-v] : CPU 정보확인 # psradm -f 2 3 : 2,3번 CPU를 off_line # psradm -n 2 3 : 2,3번 CPU를 on_line : 대형 서버 등에서 CPU 수를 제한하여 성능 test할 때 유용하다. ▷ /etc/shadow 파일의 update # pwconv : /etc/shadow file 생성 및 modify ▷ 실행된 명령어들 Display lastcomm 설정방법 # touch /var/adm/pacct ; 꼭 이렇게 하지 않아도 되며, 보안유지가 필요한 곳이라면, 다른 DIR에 다른file_name으로 숨겨도 된다. 그러나 볼때는 반드시 /var/adm/pacct 로 copy하여 놓은후 사용 해야 함. # /usr/lib/acct/accton /var/adm/pacct # lastcomm ▷ Sytem Reconfiguration BOOT # reboot -- -r : ▷ rlogin 접속 # rlogin -l hong basic : hong으로 basic시스템에 콘솔 접속 ▷ Key-in을 위한 I/O setting # stty -a : setting된 key 들을 보여준다 # stty erase ?임의의키? : erase 단축기능을 임의의 키로 바꿀 때. ▷ 현 유저소유의 비어있는 파일을 생성 시킨다. # touch cream # ls -al cream -rw-r--r-- 1 storming staff 0 10월 21일 17:02 cream ▷ process,가상메모리,디스크,cpu Monitoring 통계치를 보여준다 # vmstat 1 100 : 1은 interval이고, 100은 count이다. ▷ 현재 접속 사용자에게 메시지를 뿌린다. wall : write to all users --> /usr/sbin/wall [-a] [-g] [filename] - 기능 : Broadcast Message from ... - option : -a broadcast message to the console and pseudo-terminals. -g grpname broadcast to a specified group only. # wall -a text_file : text_file의 내용이 터미널 에 뿌려진다. ▷ 접속 사용자 확인 명령어 # who -a : 접속상태 의 자세한 정보 # who -r : 현재 RUN Level 확인 ▷ 프레임 버퍼의 상태 변경 # /usr/platform/'uname -i'/sbin/cg14config ▷ 시스템 log file 들 /var/adm/utmp , utmpx /var/adm/wtmp , wtmpx /var/log/syslog /var/adm/pacct 설명 : last 등의 명령어로 위의 파일들의 내용을 볼수 있는데, 유저의 사용상황은 위의 파일에 계속 쌓이게 된다. 그런이유로 위 파일이 비대해지면, zero파일로 많들어 줄 필요가 있다. #cp /dev/null utmp 이런 식으로 ... ▷ C2 보안 레벨 이용 명령 - /etc/security/bsmconv , bsmunconv 위의파일 이용하여 특정 호스트 및 유저의 활동상황을 감시할수 있다. 2.2 System Information 확인 명령어
# hostname ▷ aliase된 호스트 네임 확인 # grep `hostname` /etc/hosts | awk '{print $3}' ▷ 호스트 네트웍 Address(IP address) # grep `hostname` /etc/hosts | awk '{print $1}' ▷ 호스트 id 확인 # hostid ▷ OS, OS version, application architecture, kernel architecture, CPU type Kernel virsion # uname -a ▷ CPU의 상세정보, 메인메모리, Ethernet address, OS virsion등... 시스템의 상세한 정보 # dmesg ▷ Disk Configuration # df # df -a : 전체 file_system 각각 할당량 및 사용량(%) 을 Check. (df:disk free) # df . : 현재 file system에 대한 device명 확인
PROM상태에서 확인 할 수 있다. ※ 참고 : SysInfo home page 2.3 중요 시스템 환경 File(Backup Key Files!) 위치 : /etc ; /etc/를 전부 백업하는 것이 좋다. hosts ; 자신 및 Client들의 IP address/host-name이 저장된다. DNS나 NIS를 이용한다면, 단순히 자신의 정보만 갖게된다. IP_ADDRESS 가 바뀌었다면, 이 file을 편집해야 한다. hostname ?? le0(이더넷-10Mbps) networks ? hme0(10/100Mbps autosensing기능의 network interface) netmasks ?? defaultrouter group ; passwd file에 필요 passwd ; 유저들의 계정이 등록되는 file shadow ; 2.x에서 나온보안강화용, password를 암호화하여 이 file에 저장 nodename ; 호스트명이 저장된 file vfstab ; file system configuration dfs/dfstab inetd.conf rc#.d DIR 안의 Script 들.
# touch quotas <------ quota 데이터 파일 설정 # edquota user_id fs / blocks (soft = 0, hard = 0) inodes (soft = 0,hard = 0) 위와 같은 Default file이 에디터로 불려진다. 아래 설명을 참조하여 edit 후에 저장한다. ※ 설명 : / 이건 마운트된 디스크 파티션의 디렉토리이름이다. (파티션 별로 쿼타를 설정) 예: /a/b/c/user_id(s) 이럴때 실제 fs가 마운트된 디렉토리까지 써준다. df 명령으로 확인 해볼것. soft = xxx 이 값에 도달하면 경고 메시지를 내보낸다. hard = xxx 이 값에 도달하면 더이상 쓸 수 없다. inodes 파일 갯수라고 생각하면 된다. 위에서 xxx 는 block 값이고, 1 block은 512 byte 이므로 어떤 유저에게 50MB의 Disk공간을 할당하고 싶다면 97,656 = 50,000,000 / 512 이므로, soft = 97656을 해주면 된다.
사용자 마다 다르게 쿼타를 준다면, 위 과정을 반복.
? #quotacheck -v 디렉토리명 <--- 갱신된 유저별 list를 보여 주면서 Check
? #quotaon -v 디렉토리
? 전체 quota현황 확인 : repquota -v /home (home에 대한 전체 quota 설정치 확인)
if [ -x /usr/sbin/quotacheck ] then echo "Checking quotas. This may take some time." /usr/sbin/quotacheck -v /home2 echo " Done." fi if [ -x /usr/sbin/quotaon ] then echo "Turning on quota." /usr/sbin/quotaon -v /home2 fi
quotacheck를 해서 변동사항이 있는지 체크 quotaon 으로 /home2에 계정을 가진 id들에 대해 quota를 적용) - quot -af : 유저에게사용된 Kbyte, 파일갯수, User의 내용 보여준다.
Solaris 2에서 trace는 truss로 명칭이 변경되며 더욱 많은 기능을 갖추고 있다.
이 출력에는 cp가 mmap콜을 사용하는 방법과 공유 라이브러리를 개시하는 방법도 나타내고 있다.
------------------------------------------------------------------------------------------------- 트레이스 출력 설명 ------------------------------------------------------------------------------------------------- % trace cp NewDocument Tunning 명령에 대하여 trace를 사용 open ("/user/lib/Id so",0,04000000021 )=3 공유 라이브러리 로더를 획득 read(3,""..,32)=32 a.out헤더를 읽어 동적링크 여부를 확인 mmap(0.40960,0x5, 0x80000002, 3, 0):0xf77e0000 코드를 메모리내에 맵핑 mmap(Oxf77e8000, 8192, 0x7, 0x80000012, 3, 32768)=0xf77e8000 데이타를 메모리내에 맵핑 open("/dev/zero",O,07)4 O으로 재설정한 페이지를 획득 getrlimit(3, Oxf7fff8bo)=O 제한정보 읽기 mmap(Oxf7800000, 8192, 0x3, 0x80000012, 4, 0)=0xf7800000 /dev/zero를 bss?로 맵핑 close (3)=0 id so를 클로즈 getuid ()=1434 사용자 ID획득 getgid ()=10 그룹ID획득 open('/etc/IdsO.cache" , 0, 05000000021)-3 공유 라이브러리 캐시 오픈 fstat (3, Oxf7fff750)=0 캐시의 내용이 최신의 것인지 확인 mmap(0. 4096,Oxl, 0x80000001, 3, 0)=Oxf77c000 캐시를 맵핑하여 읽기 close (3)=O 캐시 폐쇄 open ("/usr/openwin/lib", 0, 01010525)= 3 fstat(3, oxf7fff750)=0 LD LIBRARYPATH에 /usr/openwin/lib이 포함 mmap(Oxf7802O00,8192, 0x3, 0x80000012, 4, 0)=0xf7802000 되어 있어 그것을 먼저 본다 getdents (3, Oxfi78000d8, 8192) 1488 올바른 버전의 라이브러리를 찾아서 getdents (3, oxf78000ds, 8192)= O 디렉토리 엔트리를 몇가지 획득 close (3)=0 /usr/openwin/lib close open ("/usr/lib/-ibe so 1 6", 0, 032724)= 3 공유 libc 획득 read (3,"".., 32)132 OK확인 mmap (0, 458764, 0x5, 0x80000002, 3, 0_)= Oxf7730000 메모리내에 코드 맵핑 mmap(oxf779ca00,16384,0x7,0x80000012,3,442368)= Oxf779c000 메모리내에 데이타 맵핑 close (3)=0 libc 클로즈 close (4)=0 /dev/zero클로즈 open ("NewDocument", 0, 03)=3 드디어 입력 화일 오픈 fatat(3, Oxf7fff970)= O 사이즈의 통계정보 검색 stat ("Tuning",Oxf7fff930)=-1 ENOENT(No such file or directory) 출력화일의 통계정보 검색 stat ("Tuning",1Oxf7fff930)=-1 ENOENT(No such file or directory) 출력화일 없음 creat("Tuning" O644)=4 출력화일 작성 mmap(O, 82, OX1, 0x80000001, 3, 0)= Oxf7710000 입력화일 맵핑 mctl (oxf77100O0, 82, 4, Ox2)= O 순차 액세스 통지 write(4,"This is a test file for my paper".., 82)=82 새로운 화일로 입 ,출력 mnmap(oxf7710000, 82)=O 입력화일의 맵핑 릴리스 close (3)=O 입력화일 클로즈 close (4)=0 출력화일 클로즈 close (O)=O stdin클로즈 close (1)=O stdout클로즈 close (2)=O stderr클로즈 exit (O)=? 프로그램 종료 % 4.2 Solaris 2.x 에 대한 추적 기능
이하의 표는 데이타 구조용의 장황한 모드를 설정하기 위해서 -v 옵션을 설정한 truss 명령의 출력 일부와 truss -c에서 시스템 콜의 수 (계산)을 표시한 예이다. # truss -v all cp NewDocument Tuning execve("/bin/cp", 0xEFFFF598, 0xEFFFF5A8) argc = 3 open("/dev/zero", O_RDONLY) = 3 mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xEF7F0000 open("/usr/lib/libintl.so.1", O_RDONLY) = 4 fstat(4, 0xEFFFF254) = 0 d=0x0080001E i=48439 m=0100755 l=1 u=2 g=2 sz=15720 at = Nov 7 15:31:06 KST 1997 [ 878884266 ] mt = May 3 12:33:31 KST 1996 [ 831094411 ] ct = Jul 3 14:29:10 KST 1997 [ 867907750 ] bsz=8192 blks=32 fs=ufs ..... # truss -c cp NewDocument Tuning syscall seconds calls errors _exit .00 1 read .00 2 write .00 1 open .01 12 1 close .00 11 creat .00 1 brk .00 2 stat .00 5 lseek .00 1 fstat .00 7 access .01 8 1 execve .00 1 mmap .01 20 munmap .00 8 memcntl .00 1 acl .00 1 ---- --- --- sys totals: .03 82 2 usr time: .03 elapsed: .12
#cp openwin openwin.org #vi openwin.org "truss -fo /tmp/outputfile -t exec /usr/openwin/bin/openwin.org"를 openwin.org 의 맨처음에 삽입 #chmod 755 openwin.org #openwin.org --> 하면 openwin을 trace 하면서 내용은 /tmp/outputfile에 쌓인다. 5장. Accounting & Permission
2.x에서 의 user accounts #groupadd -g 100 dct #cat /etc/group dct::100: #useradd -u 115 -g 100 -c "hong seong-chan" -d /user/hong -m -s /bin/csh hong ; UID 115, GID 100의 hong seong chan이라는 사람의 계정을 만드는데, 그 유저의 HomeDIR은 /user/hong(-d /user/hong)으로 생성(-m) 하고, 그 유저가 사용하는 쉘은 C-shell(-s /bin/csh)이고, login명은 hong일 것이다. 1)passwd file 보면 hong:x:115:100:hong seong chan:/user/hong:/bin/csh 2)shadow file 보면 hong:*LK*::::::: #passwd hong ---> User "hong"의 패스워드를 지정해준다.
#vi /etc/passwd 추가: std99::999:20:student99:/home/std99:/bin/csh userID(8자이하소문자):password:UID:GID:full_name:home_dir:shell #mkdir /home/std99 ; std99에 대한 홈디렉토리 작성 #cp .cshrc /home/std99 ; 다른 유저의 .cshrc 파일을 복사하는 것이 유리. #ls -alg #chown std99 /home/std99 #chgrp 20 /home/std99 #passwd std99 ; root가 유저의 pass를 부여한다.
#ls -al /user drwxr-xr-x kim dct 512 10월 6일 13:01 kim drwxr-xr-x root other 512 10월 6일 12:55 kim2 #chown -f kim2 kim2 #chgrp -f dct kim2 #ls -al /user drwxr-xr-x kim dct 512 10월 6일 13:01 kim drwxr-xr-x kim2 dct 512 10월 6일 12:55 kim2
/usr/bin/getfacl --> Access Control List (ACL) 볼 때 #getfacl * --> 모든 파일 확인 /usr/bin/setfacl --> ACL 수정 및 추가 #setfacl -s ..... man_page확인 * /tmp 는 일반파일시스템이 아니기 때문에 퍼미션 변경이 안됨. 5.2 BSD Accounting Utilities - accounting system은 account command를 enable함으로서 가능하며 /etc/rc file에 다음을 comment out /usr/lib/acct/accton /usr/adm/acct OR /usr/lib/acct/startup - /usr/acct가 있는 filesystem이 95%이하이면 accounting을 하고 95%가 넘으면 자동적으로 accounting을 stop 한다 - SunOS에서는 kernel에서 SYSACCT configuration option이 포함되어 있어야 한다 - sa command로 report할수 있으며 sa -s 로 /usr/adm/acct의 내용을 compress하고 savacct file로 merge시킨다 /usr/etc/sa % sa 1027 18063.15re 17.11cp 4078avio 4696k 16 1537.32re 6.22cp 1057avio 6258k cmdtool 14 12.79re 3.14cp 265300avio 6377k cp 7 17.18re 1.47cp 618avio 5902k suntetri 51 5.47re 0.69cp 1avio 4373k rm 6 481.65re 0.63cp 0avio 586k update* 37 99.61re 0.56cp 276avio 3443k vi - leftmost : Total number of times the command was execute - re : Total real time spent excuting the command - cp : Total CPU time ,, ,, ,, - avio : Average number of I/O operations per invocation of the command - k : Average physical memory usage, in Kbytes 관련 FILE - /var/adm/pacct raw accounting - /var/adm/savacct summary by command - /var/adm/usracct summary by user ID A Script to Collect Accounting Data #!/bin/sh filename=`date | awk '{print $2 $3 $6}' -` sa=/usr/etc/sa recorddir=/usr/adm/localacct if [ ! -d $recorddir ] then mkdir $recorddir fi pathname=$recorddir/$filename date > $pathname echo "Day's Activity (command summary)" >> $pathname $sa -i >> $pathname echo "Total activity (command summary)" >> $pathname $sa >> $pathname # this time, also compress reports into savacct echo "Per-user activity" >> $pathname $sa -ms >> $pathname Day-to-Day Management - /usr/lib/acct/runacct Generates a set of five daily reports /usr/adm/acct/sum directory내에 rprtmmdd형의 file로 보관되며 mm은 월, dd는 일을 나타냄 - /usr/lib/acct/dodisk Gathers disk usage statistics, which are summarized by runacct - /usr/lib/acct/ckpacct 시스템에 free block이 500이하일 경우 main accounting file (/usr/adm/acct/pacct)이 계속 증가못하게 함 - /usr/lib/acct/monacct Convert all daily reports into a monthly report /usr/adm/acct/fiscal directory내에 fiscrptnn의 file name으로 저장 - /usr/lib/acct/prdaily Get the accounting statistics for the current date and repoprt - /usr/lib/acct/shutacct To disable accounting cleanly, execute the shell script ~/shutacct Accounting Reports & Management - login name별, application별 Accounting과 last login을 report % /usr/lib/acct/prdaily mmdd (예, 0908) - CPU(MINS) : total cpu time - KCORE-MINS : 분당 사용되는 physical memory - CONNECT : The total amount of time the user was logged in - DISK BLOCKS: ,, ,, disk storage that the user is occupying - #OF PROC : ,, ,, processes the user executed - #OF SESS : The number of times the user logged in during the day - NUMBER CMDS : report된 기간동안 수행된 횟수 - TOTAL KCOREMIN : 이 program에 의해 사용된 physical memory(KByte) - TOTAL CPU : 이 program에 의해 사용된 total cpu time - TOTAL REAL : 이 program이 invoke된후 경과된 시간의 합 - MEAN SIZE : 이 program에 의해 사용된 평균 memory의 량 - MEAN CPU : 이 program이 실행하는데 소요된 평균CPU time(분) - HOG FACTOR : program의 CPU효율로 total CPU time을 total 수행시간 (TOTAL REAL)으로 나눈 값 - CHARS TRANSFD : 이 program에 의해 transfer된 total character 수 - BLOCKS READ : 이 command에 의해 read/write된 disk blocks # generate daily accounting reports (1 a.m) 0 1 * * * /usr/lib/acct/runacct # update disk usage statistics weekly (2 a.m. Monday) 0 2 * * 1 /usr/lib/acct/dodisk # manage accounting file size hourly (on the half-hour) 30 * * * * /usr/lib/acct/ckpacct # generate monthly summaries (2 a.m. on the 1st of the month) 0 2 1 * * /usr/lib/acct/monacct
/etc/cron, /usr/spool/cron/crontabs/* “/etc/cron" 프로그램 은 주기적으로 어떤 프로그램을 수행시키는데 사용된다. 이때 주기적으로 수행되어질 프로그램은 "/usr/spool/cron/crontabs" 디렉토리 밑에 각 사용자의 사용자명과 같은 이름으로 생성된다. 이 화일은 만드는 방법은 아래 명령을 사용하면 된다. % crontab -l root : /var/spool/cron/crontabs/root 내용 display % crontab -e root : 이 명령을 root가 수행했으면 /var/spool/cron/crontabs/ DIR 하위에 "root" 라는 이름의 화일이 생성된다) 또는 vi 로 편집 -------------------------------------------------------------------------------- 예) # more /var/spool/cron/crontabs/root # minute hour day month week # 0~59 0~23 1~31 1~12 0~6 (0=sunday, 1=monday) # 15,45 3 * * * find / -name .nfs\* -mtime +7 -exec rm -f {} \; -o -fstype nfs -prune 5 9 * * 6 /usr/lib/newsyslog >/dev/null 2>&1 15 0,8 16 * * find /var/preserve/ -mtime +7 -a -exec rm -f {} \; -------------------------------------------------------------------------------- crontab 화일의 맨 앞의 5번째 칼럼까지에는 각 명령이 수행되어질 일시와 요일이다. 지정한 것들은 아래와 같은 의미를 갖는다. 분 시간 날짜 달 요일 : 구분은 Space 15,45 3 * * * : 매일 3시 15분관 45분에 수행 5 9 * * 6 : 매주 금요일 9시 5분에 수행 15 1,18 16 * * : 매달 16일 1시15분과 오후 6시 15분에 수행
위 파일을 편집하여 원하는 스케쥴을 설정/편집 한다. 2) ps -ef|grep cron : 현재 cron deamon이 돌고 있는지 확인 3) kill -9 "pid of cron" : cron deamon kill 4) rm /usr/lib/cron/FIFO : lock파일제거(/usr/lib/cron directory는 /etc/cron.d와 링크되어있음) 5) /usr/sbin/cron : deamon 재실행(위 편집한 명령대로 수행함)
############################### #Min Hour Day Month Day Command ############################### 15 4 * * * find /var/preserve/ -mtime +7 -a -exec rm -f {} \; 0 23 * * * sh `sed -n 1p /etc/Alis`/janitor 0 * * * * /usr/lib/acct/ckpacct 10 12 * * 1-6 /usr/lib/acct/dodisk 20 12 1 * * /usr/lib/acct/monacct 30 12 * * 1-6 /usr/lib/acct/runacct 2> /var/adm/acct/nite/fd2log
printenv ; 현재 설정되어 있는 시스템 환경치를 보여준다. setenv ; 환경설정 module-info ; CPU Clock Speed probe-scsi ; 현재 접속되 있는 SCSI DEVICE들이 열거된다. (probe-scsi-all) words ; ok 모드 에서의 명령어 열람 boot -a ; Interactive boot option help diag ; 메모리,플로피드라이브,케쉬메모리 등. Test 명령어 사용법을 보여준다 ok test-memory ?> 메모리 이상 유무 확인 할때 ok _ ?> 이상 없다면 prompt만 나타나고, 램의 배치에 문제가 있다면 align error 메시지 가 나타난다. TOD 관련 ERROR ; F-E-Handbook Vol I --> CPU-131 ok copy-clock-tod-to-io-boards ok (ioboard# in hex) copy-io-board-tod-to-clock-tod
* Center2000에서 model-100_type array 상태에서의 BOOT_DEVICE 설정치 ok setenv boot-device /io-unit@f,e0200000/sbi@0,0/SUNW,soc@0,0/SUNW ,pln@a0000000,78c8d4/SUNW,ssd ??????? ??> array의 serial_number ; array A tray 1 번째 disk 7.1 OK mode상에서 banner 및 logo변경 [banner변경] 예를 들어 bannner를 "This is my computer" 이라하자. 먼저 ok prompt mode 즉 forth command mode로 들어가서 ok setenv oem-barner This is my computer oem-banner = This is my computer banner ok setenv oem-banner? true oem-banner?= true ok 또는 OS상에서 test# eeprom "oem-banner=This is my computer" test# eeprom "oem-banner?=true"
ok prompt mode to command를 이용하여 logo를 변경할 수 있으나, 보통 forth language가 익숙하지 않으므로 다음은 OS상에서 변경하는 예제만 살펴보자. NVRAM상의 oem-logo값은 512 byte array(4096 bits 64x64)이다. 각 bit는 우측상단을 기준으로한 한 pixcel을 control한다. array는 hexedicimal값으로 저장되고 printenv를 사용하는 것은 처음 8 byte를 보여줄 것이다.
2. 예를 들어 만들어진 icon file이 my.logo라 하자. # eeprom "oem-logo=my.logo" /* my.logo를 NVRAM array에 save */ # eeprom "oem-logo?=true" 3.system을 halt한 후 ok prompt에서 banner command를 수행하면 바꾸어진 logo를 확인할 수 있다. 7.2 NVRAM 값 변경 1) Host-ID란 시스템마다 각기 다른 Serial No.를 의미하는데, 이 Host-ID를 수정하는 이유는 license를 요구하는 특정 S/W사용시 Host-ID를 Check하여 Host-ID가 서로 일치하여야만 비로소 수행되기 때문이다.(호스트 마다 license를 check하는 deamon이 수행되고 있을 것이다) 2) Booting 도중에 break-key(STOP+A)를 누르고 n 을 쳐서 ok mode로 들어간다. 이 상태가 NVRAM 수정가능상태 이다. 3) NVRAM의 내용을 살펴본다. ok .idprom
? ? ? ③ ? ? ? ? ? ? ⓐ ⓑ Format/Type: 1 54 Ethernet: 8 0 20 2 8f 26 Date: 0 0 0 0 ⓒ ⓓ ⓔ ⓕ Serial: 00 14 20 Checksum: ed Reserved: a5 a5 a5 a5 a5 a5 a5 a5 . . .
?+ⓒ+ⓓ+ⓔ 4) 여기서 Host-ID의 값을 “5200fc7d”로 변경한다.
ok 00 c mkp : c번지의 내용 변경 ok fc d mkp : d번지의 내용 변경 ok 7d e mkp : e번지의 내용 변경 ok .idprom : NVRAM의 변경 내용 확인
Serial: 0 fc 7d Checksum: 04 Reserved: a5 a5 a5 a5 a5 a5 a5 a5 . . .
ok xor xor xor xor xor xor xor xor xor xor xor xor xor xor (14개) ??
ok xx : checksum값 ok xx f mkp : ⓕ번지의 checksum값 변경 ok .idprom : NVRAM의 내용 변경여부 확인
Serial: 0 fc 7d Checksum: xx Reserved: a5 a5 a5 a5 a5 a5 a5 a5 . . .
rebooting......
ex) ss1+ 64XXXX ss2 72XXXX 72가 machine type 이 된다. 8장. Swap
* Sun OS(Solaris 1.x) # pstat -s ; swap space 확인 # mkfile -nv 40m /home/swapfile ; swap file 생성 # /usr/etc/swapon /home/swapfile ; swap space 확장 # pstat -s or -T ; swap space 확인 - booting시 자동 swap on 하려면 아래 file edit # vi /etc/fstab . . /home/swapfile swap swap rw 0 0 - swap_on 한 작업을 최소 하려면 # rm /home/swapfile # vi /etc/fstab 하여 추가했던 entry 삭제
# pstat -s ; swap space 확인 # /usr/sbin/mkfile -nv 40m /home/swapfile ; swap file 생성 # swap -a /home/swapfile ; swap 공간 확장 # pstat -s or swap -s ; total swap_size 확인 - booting시 자동 swap on 하려면 아래 file edit # vi /etc/vfstab . . /home/swapfile - - swap - no -
The swap command is used to display swap space usage, and to add or remove swap areas on disk; #swap -l swapfile dev swaplo blocks free /dev/dsk/c0t3d0s1 32,25 8 187912 127088 Creating and Adding swap areas #mkfile 10m /exp/swap #swap -a /exp/swap #swap -l swapfile dev swaplo blocks free /dev/dsk/c0t3d0s1 32,25 8 187912 127088 /exp/swap - 8 20472 20472 Removing swap areas #swap -d /exp/swap 9장. MAIL
example% mail user /* 동일 host에 계정을 가지고 있는 사용자 에게 mail을 보낼 경우 */ ^D /* message를 끝내는 방법 */ example% mail user@machine /* host는 틀려도 network으로 연결 되어 있는 사용자에게 mail을 보내는 방법 */ ^C /* message 편집을 포기하는 방법 */
message을 작성시 편리하게 작성할 수 있게 해주는 command이다. 이 tilde 명령은 mail user 명령을 입력한 후에 메일 내용을 작성중에 입력하는 명령이다. example% mail dove Subject: test test ~b user . example%
/* Bcc안의 name들은 mail message의 header에 나타나지 않는다. mail을 보낸 사람이 누구누구에게 mail을 보내는 지 모르게 된다. Cc는 받는 이의 message의 header에 나타난다. */ ~c user /* Carbon Copy(Cc)에 names을 추가 한다. */ ~f n /* mail spool의 n번째 저장되어있는 mail을 forward한다.*/ ~h /* header field(To,Subject,Cc,Bcc)을 편집한다.*/ ~m n /* mail spool의 n번째 저장되어 있는 mail을 읽어들인다.*/ ~p /* 편집한 내용을 처음부터 more로 display해 준다.*/ ~r /* letter을 편집중에 file을 삽입시킬 수 있다. */ ~s subject text /* subject를 바구거나 추가할 수 았게 한다. */ ~t user1 user2 /* mail을 받을 주소을 추가시킨다. */ ~v /* text편집 도중에 vi editor로 편집할 수 있다.*/ ~w file /* message을 file로 저장한다. */ |cmd /* 현재 입력한 내용을 shell command로 수행한다. */ ~? /* 사용 가능한 command menu을 display 한다. */
example% mail /* mailbox에 쌓여 있는 message의 headers을 출력 */ Mail version 2.18 5/19/83. Type ? for help. "/usr/spool/mail/student": 2 messages 2 new >N 1 john Tue May 14 15:31 11/278 "letter" N 2 jane@universe tue May 14 15:33 13/437 &<cr> /* '>'로 display될 message을 가르킨다. */ &n /* 사용자가 원하는 message의 순번을 입력하면 그 번호에 해당하는 message가 display 된다 */ &d n /* 사용자가 원하는 순번의 message가 삭제 된다. */ &h /* 사용자가 볼 수 있는 message의 headers을 display한다.*/ &q /* 종료 command이다. message들은 mbox에 저장된다. */ &r n /* 순번 n에 대하여 응답을 하게다는 command이다. */ &s n file /* 순번 n의 message을 이름 file로 저장하는 command */ &x /* mail을 수행하기 이전의 상태로 종료 한다. */ &? /* 사용 가능한 command를 display한다. */
mail로 볼 수 있다. */ example% mail -f mbox /* 위와 같은 경우로 mbox에 있는 message을 검색 검색 한다. */ example% mail -f folders /* folders 안의 message을 검색 한다. */ Collecting in Mail folders : ---------------------------- set folder=Directory /* message만을 저장해 놓는 directory정의*/ &s +file /* '+' 뒤의 filename에 현제의 message가 추가된다. */ &folders /* 현재의 folder directory에 들어 있는 file들의 list을 display한다. */
사용자가 login한 machine의 home directory에 .forward file을 만들어둔다. 여기에는 login한 machine으로 들러오는 mail을 다른 machine으로 보낼 수있게 다른 machine의 domain을 기록한다. 방법은 다음과 같다. student@sun /* Entry in .forward file. */
사용자의 home directory에 .mailrc을 다음과 같이 생성하시오. Set ask /* subject을 입력할 것인가 묻는다. */ Set askcc /* 'carbon copy' 을 지정할 겻인지 묻는다 */ Set crt=34 /* page당 message의 출력 line 수 정의 */ set record=-/Mail/outbox /* outbox에 mail을 recorde 단위로 보낸다.*/ alias ss student@sun /* full name을 간단히 줄인 것이다. */ alias group student1@pioneer student2@discovery student3@challenger \ student4@mariner student5@columbia student6@mercury \ student7@galieo student8 @voyager /* 보내는 곳을 group으로만 하면 위의 모든 주소들로 보내준다. */
그러나 센드 메일 설정 파일의 모든 내용을 이해할 필요가 없으며, 중요한 몇 가지 설정 내용만을 알아두는 것으로 충분하다. 기본 설정 파일만으로도 센드 메일은 잘 운영되므로 이해하지 못하는 부분은 건드리지 않는 것이 좋다. 센드 메일 설정 파일을 빈 상태에서 하나씩 만들어 가는 사람은 없으며, 모두들 필요한 그 부분만을 수정하여 잘 운용 하고 있다. 어렵게 보이는 것일수록 사실은 별로 다를 것이 없는게 일반적이다.
# cat sendmail.cf # Level 7 config file format v7/Berkeley Cwlocalhost # file containing names of hosts for which we receive email Fw/etc/sendmail.cw #Dj$w.Foo.COM # who I send unqualified names to (null means deliver locally) DR # who gets all local email traffic ($R has precedence for unqualified names) DH # who I masquerade as (null for no masquerading) (see also $=M) DMalpha.sarang.net
Fw 명령은 w라는 클래스의 값에 파일 내용을 추가하는 명령이다.
Cwfoo1.bar.com
Fw 명령은 그 뒤에 적은 파일에 들어 있는 호스트 이름에 대하여 모두 메일을 받도록 할 때 사용한다. Fw/etc/sendmail.cw라는 기본 값이 설치 시에 들어 있으므로 /etc/sendmail.cw 파일에 받고자 하는,호스트 이름 들을 나열하여 적으면 된다. 네트웍상에 여러 대의 호스트가 있다 하더라도 한 대를 메일 게이트웨이로 사용하고자 할 때 유용하게 사용한다.
DM 다음에 호스트 이름을 적으면 메일 송신자 주소에 실제로 보낸 이름이 아니라, 적어준 그 이름이 사용된다. 주로 메일 게이트웨이를 자신의 센드 메일 서버가 아닌 중앙의 센드 메일 서버로 지정하는 경우 필요하다.
bin: root daemon: root games: root ingres: root nobody: root system: root toor: root uucp: root # Well-known aliases. manager: root dumper: root operator: root # trap decode to catch security attacks decode: root
name: include:fileName
/etc/aliases: 15 aliases, longest 18 bytes, 175 bytes total
이는 스페머(Spammer)라고 부르는 원하지 않는 광고성 메일을 무작위로 뿌려되는 것을 막아내기 위한 방책이다. 보통 스패머들은 남의 메일 서버를 중계 서버로 사용하여 메일을 마구 확산시키기 때문에 중계 기능은 철저히 관리되어야 한다.
센드 메일 8.9.x 버전에서 메일 서버에 대한 접근을 허용할 것인지 아닌지를 설정하는 파일이다.
# sendmail.org OK # 128.32 RELAY 192.168.1 RELAY 198.60 REALY
# makemap hash /etc/mail/access < /etc/mail/access sendmail command The sendmail command is executed in the script /etc/rc2.d/S88sendmail when the machine is started. The default command is 아래 # /usr/lib/sendmail -bd -q1h -bd background daemon -q quest the messages for retry when sendmail fails to deliver. The associated value 1h tells sendmail to process the queue every hour. 5) 센드메일 서버 설치하기
솔라리스 환경에서 설치 운영해 본 결과 예전의 버전들에 비해 상당히 쉽게 설치할수 있도록 배려되어 있는 것을 확인 할수 있었고, 운용상에도 전혀 문제가 없는 것으로 나타났다. sendmail 8.9.x의 가장 큰 특징은 SPAM메일을 차단하는 기능이라 할수 있는데, 이것 또한 몇 개의 파일에 의해 쉽게 구현할 수 있어 메일서버를 운영하는 관리자는 서버의 관리에 별 어려움이 없을걸로 판단된다.
% cd /tmp % gzip -dc sendmail-8.9.3H-bin.tar.gz | tar xvf - 압축을 풀면 아래와 같은 directory가 생성되며 그곳에 설치관련 파일들이 생성된다. 생성된 directory로 이동한다. % cd sendmail-8.9.3H-bin 센드메일은 슈퍼유저 상태에서 설치되기 때문에 일반 유저계정이라면 슈퍼유저로 Switching. % su 설치 Script를 실행한다. # ./install Script가 실행되면서 아래와 같은 메시지들이 보일 것이다. [www:/tmp/sendmail-8.9.3H-bin]# ./install Please enter your domain name [dct.co.kr]: saving old sendmail binaries in "sendmail.bck.19991028-154651.tar.gz" a /usr/lib/sendmail 665K a /usr/lib/smrsh 8K a /etc/mail/sendmail.hf 6K a /etc/mail/sendmail.st 1K a /usr/sbin/mailstats 10K a /usr/sbin/makemap 303K a /usr/sbin/praliases 290K /etc/sendmail.cf는 /etc/mail/sendmail.cf와 기호 링크됨 a /etc/mail/sendmail.cf 32K backup done now installing sendmail-8.9.3H-Solaris-bin.tar x usr/lib/sendmail, 680892 bytes, 1330 테이프 블럭 x usr/lib/smrsh, 7272 bytes, 15 테이프 블럭 x etc/mail/sendmail.hf, 5342 bytes, 11 테이프 블럭 x etc/mail/sendmail.st, 616 bytes, 2 테이프 블럭 x usr/sbin/mailstats, 10168 bytes, 20 테이프 블럭 x usr/sbin/makemap, 309272 bytes, 605 테이프 블럭 x usr/sbin/praliases, 296548 bytes, 580 테이프 블럭 installing sendmail.cf installing /etc/mail/sendmail.cw setting directory mode /etc/mail/aliases: 94 aliases, longest 10 bytes, 1033 bytes total killing old sendmail process... Starting new sendmail... All done. [www:/tmp/sendmail-8.9.3H-bin]#
서버에 따라서 sendmail.cf, sendmail.cw, relay-domains, access, aliases... 등의 파일 설정이 제대로 되 있는지 다시 확인하고 sendmail deamon을 start한다. 설치 Script실행시 error가 발생했다면, 설치시에 아래처럼 하여 error 로그파일을 만들어 아래의 메일주소로 메일링하면 정확한 해답을 얻을수 있을 것이다. # ./install -y >&! install.log # mail sysuh@kigam.re.kr < install.log
를 거부한다. 그러므로 허용 하고자 하는 IP나 domain을 앞서 설명한 룰에 따라 설정해준다. 10장. POP Server
인터넷용 | 외부적 IP (203.240.159.34) DCT
| --------------------------------------- | | | | | | | | | | . . . .. 이 경우 각각의 단말기의 IP address가 192.~~이면 이 address로는 인터넷을 direct로 사용할 수 없다.따라서 이 경우에는 mail host이자 server인 dct에 proxy server나 popserver를 설정하면 각각의 단말기들도 Netscape, Eudora와 같은 프로그램을 통해 인터넷메일을 이용할 수 있다.
ftp://sunsite.sut.ac.jp에서 다운로드 받는다.
관련 파일 : /etc/inetd.conf /etc/services
pop3 stream tcp nowait root /usr/local/bin/popper popper -s 위의 내용을 추가시킨다. ㉡ /etc/services file에서 pop3 110/tcp #Post Ofice 와 같이 지정한다.
이것을 확인하기 전에 inetd daemon을 kill한 후에 다음을 실행할 것. # telnet loghost 110
/etc/inetd.conf file과 /etc/services file안에 있는 pop3의 이름이 pop3인지 아니면 pop-3인지 확인할 것. 서로 이름이 같아야 된다. 11장. DNS(Domain name Service)
1. /etc/named.boot 생성 2. /var/named 디렉토리 생성 3. /var/named/???.cache 4. /var/named/???.zone ; host DB file 이며, 이 파일에 추가되는 host를 update 시켜야 한다. 5. /var/named/???.rzon ; reverse 된 host DB file 이며, 이 파일에 추가되는 host를 update 시켜야 한다. 6. /var/named/???.loop ; 루프백 파일 7. /etc/resolv.conf ; Domain과 name_server_IP address를 기술하는 파일 8. /etc/defaultrouter ; 시스템의 G/W 9. /etc/defaultdomain 10. /etc/nsswitch.conf 파일 Modified hosts: files dns <--- 추가 11. 데몬 실행 : #in.named -b /etc/named.boot 12. 서버 확인 : #nslookup 서버ip-addr 13. 아래 예시는 각 설정 파일 내용이며, 부분별로 설명을 넣었다. *정보통신교육원(AIIT)에 적용된 실제 예이다.
; directory /var/named cache . aiit.cache primary aiit.or.kr. aiit.zone primary in-addr.arpa aiit.rev primary 0.0.127.in-addr.arpa aiit.loop
; @ IN SOA www.aiit.or.kr. root.www.aiit.or.kr. ( 19980521 ; Serial 3600 ; Refresh 300 ; Retry 3600000 ; Expire 14400 ) ; Minimum IN NS www.aiit.or.kr. 1 IN PTR localhost.
; $ORIGIN aiit.or.kr. aiit.or.kr. IN SOA www.aiit.or.kr. root.www.aiit.or.kr. ( 19990930 7200 3600 432000 86400 ) aiit.or.kr. IN NS www localhosti IN A 127.0.0.1 ; ; SEOUL ; $ORIGIN or.kr. aiit IN A 134.75.107.202 $ORIGIN aiit.or.kr. www IN A 134.75.107.202 ........... 중략 ............................................ infor07 IN A 134.75.107.13 ; ; PUSAN ; pusan IN A 134.75.156.201 ........... 중략 ............................................ kbe11 IN A 134.75.156.211 ; ; TAEGU ; jboh IN A 134.75.142.111 ........... 중략 ............................................ tk240 IN A 134.75.142.240 ; ; ; ; TAEJEON ; cts IN A 210.119.58.6 tschang IN A 210.119.58.5 taejeon IN A 210.119.58.2 $ORIGIN taejeon.aiit.or.kr. tjaiit IN A 210.119.58.2 www IN A 210.119.58.2 ; ; ; $ORIGIN aiit.or.kr. kj IN A 210.119.59.3 ........... 중략 ............................................ ts IN A 210.107.252.5 $ORIGIN ts.aiit.or.kr. aiitfire IN A 210.107.253.20 aiitmain IN A 210.107.252.5 $ORIGIN gis.aiit.or.kr. gis141 IN A 150.183.46.141 $ORIGIN mm.aiit.or.kr. sun IN A 210.114.126.150 $ORIGIN aiit.or.kr. multi IN A 210.114.126.150 ; ; EOF ;
; $ORIGIN in-addr.arpa. in-addr.arpa. IN SOA www.aiit.or.kr. root.www.aiit.or.kr. ( 19991026 7200 3600 432000 86400 ) in-addr.arpa. IN NS www.aiit.or.kr. 1.0.0.127 IN PTR localhost. ; ; SEOUL ; $ORIGIN 107.75.134.in-addr.arpa. 202 IN PTR aiit.or.kr. ........... 중략 ............................................ 13 IN PTR infor07.aiit.or.kr. ; ; PUSAN ; $ORIGIN 156.75.134.in-addr.arpa. 210 IN PTR kbe10.aiit.or.kr. ........... 중략 ............................................ 211 IN PTR kbe11.aiit.or.kr. ; ; TAEGU ; $ORIGIN 142.75.134.in-addr.arpa. 111 IN PTR jboh.aiit.or.kr. ........... 중략 ............................................ 240 IN PTR tk240.aiit.or.kr. ; ;TAEJEON ; $ORIGIN 58.119.210.in-addr.arpa. 6 IN PTR cts.aiit.or.kr. ........... 중략 ............................................ 2 IN PTR www.taejeon.aiit.or.kr. ; ; ; $ORIGIN 155.233.203.in-addr.arpa. 233.155.233.203 IN PTR handy.aiit.or.kr. 232.155.233.203 IN PTR cybus.aiit.or.kr. 214.155.233.203 IN PTR choi.aiit.or.kr. $ORIGIN 59.119.210.in-addr.arpa. 3 IN PTR kj.aiit.or.kr. ;ts $ORIGIN 253.107.210.in-addr.arpa. 22 IN PTR w3.aiit.or.kr. 20 IN PTR aiitfire.ts.aiit.or.kr. $ORIGIN 252.107.210.in-addr.arpa. 5 IN PTR ts.aiit.or.kr. 5 IN PTR aiitmain.ts.aiit.or.kr. $ORIGIN 46.183.150.in-addr.arpa. 141 IN PTR gis141.gis.aiit.or.kr. $ORIGIN 126.114.210.in-addr.arpa. 150 IN PTR sun.mm.aiit.or.kr. $ORIGIN 126.114.210.in-addr.arpa. 150 IN PTR multi.aiit.or.kr. ; ; EOF ;
; . 3600000 IN NS A.ROOT-SERVERS.NET. A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4 ; ; formerly NS1.ISI.EDU ; . 3600000 NS B.ROOT-SERVERS.NET. B.ROOT-SERVERS.NET. 3600000 A 128.9.0.107 ; ; formerly C.PSI.NET ; . 3600000 NS C.ROOT-SERVERS.NET. C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12 ; ................................ 중략 .............................................. ; temporarily housed at NSI (InterNIC) ; . 3600000 NS K.ROOT-SERVERS.NET. K.ROOT-SERVERS.NET. 3600000 A 198.41.0.11 . 3600000 NS www. www. 3600000 A 134.75.107.202 ; End of File
............. Oct 27 11:56:19 tjaiit named[6427]: starting. named 4.9.3-P1 Oct 27 11:56:19 tjaiit named[6428]: Ready to answer queries.
; ; type domain source file ; directory /var/named ; running directory for named cache . tj.cache primary 0.0.127.IN-ADDR.ARPA tj.loop secondary aiit.or.kr 134.75.107.202 tj.zone secondary in-addr.arpa 134.75.107.202 tj.rev ; forwarders 134.75.107.202 slave ; /var/named/tj.loop ; ; @ IN SOA taejeon.aiit.or.kr. root.taejeon.aiit.or.kr. ( 980116 ; Serial 7200 ; Refresh every 2 hours 7200 ; Retry every 2 hour 604800 ; Expire after a week 86400 ) ; Minimum ttl of 1 day IN NS tjaiit.taejeon.aiit.or.kr. 1 IN PTR localhost.
; . 3600000 IN NS A.ROOT-SERVERS.NET. A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4 ; ; formerly NS1.ISI.EDU ; . 3600000 NS B.ROOT-SERVERS.NET. B.ROOT-SERVERS.NET. 3600000 A 128.9.0.107 ; ............. 중략 ............................................ ; . 3600000 NS I.ROOT-SERVERS.NET. I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17 ; End of File
; PRIMARY SERVER에서 Download하며, 바뀐 내용을 계속 ; Update 하게 된다. ; ; BIND version named 4.9.3-P1 ; zone 'aiit.or.kr' last serial 0 ; from 134.75.107.202 at Wed Oct 27 11:52:03 1999 $ORIGIN or.kr. aiit IN SOA www.aiit.or.kr. root.www.aiit.or.kr. ( 19990930 7200 3600 432000 86400 ) IN NS www.aiit.or.kr. $ORIGIN aiit.or.kr. www IN A 134.75.107.202 $ORIGIN or.kr. aiit IN A 134.75.107.202 $ORIGIN mm.aiit.or.kr. sun IN A 210.114.126.150 $ORIGIN aiit.or.kr. pusan IN A 134.75.156.201 tksun IN A 134.75.142.105 potato IN A 134.75.107.13 eagle5 IN A 134.75.107.39 ................ 이하생략 ..............................................
; PRIMARY SERVER에서 Download하며, 바뀐 내용을 계속 ; Update 하게 된다. ; ; BIND version named 4.9.3-P1 ; zone 'in-addr.arpa' last serial 0 ; from 134.75.107.202 at Wed Oct 27 11:52:03 1999 $ORIGIN arpa. in-addr IN SOA www.aiit.or.kr. root.www.aiit.or.kr. ( 19991026 7200 3600 432000 86400 ) IN NS www.aiit.or.kr. ; Ignoring info about www.aiit.or.kr, not in zone in-addr.arpa. ; $ORIGIN aiit.or.kr. ; www IN A 134.75.107.202 $ORIGIN 0.127.in-addr.arpa. 0 14400 IN NS www.aiit.or.kr. ; Ignoring info about www.aiit.or.kr, not in zone in-addr.arpa. ; $ORIGIN aiit.or.kr. ; www IN A 134.75.107.202 $ORIGIN 155.233.203.155.233.203.in-addr.arpa. 214 IN PTR choi.aiit.or.kr. 232 IN PTR cybus.aiit.or.kr. 233 IN PTR handy.aiit.or.kr. $ORIGIN 142.75.134.in-addr.arpa. 115 IN PTR shan.aiit.or.kr. 117 IN PTR wspark.aiit.or.kr. 118 IN PTR sbhong.aiit.or.kr. 119 IN PTR jtsung.aiit.or.kr. 201 IN PTR tk201.aiit.or.kr. ................ 이하생략 ..............................................
; /var/named/tj.cache - PRIMARY 서버의 것과 같다. ; . 3600000 IN NS A.ROOT-SERVERS.NET. A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4 ; ; formerly NS1.ISI.EDU ; . 3600000 NS B.ROOT-SERVERS.NET. B.ROOT-SERVERS.NET. 3600000 A 128.9.0.107 ; ; formerly C.PSI.NET ; . 3600000 NS C.ROOT-SERVERS.NET. C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12 ; . ................ 중략 .................................................. ; . 3600000 NS I.ROOT-SERVERS.NET. I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17 ; End of File 12장. NFS(Network File Service)
* /etc/rc2.d/S73nfs.client , /etc/rc3.d/S15nfs.server 참조. 1) /etc/dfs/dfstab을 편집해서 아래 예처럼 share할 영역을 지정.
share -F nfs -o rw -d "Data Disk" /disk1 share -F nfs -o root=Client1:Client2:ClientX...,rw=Client1:Client2:ClientX... -d "UserHome" /HOME_DIR 설명: Client1:Client2:ClientX...가 /HOME_DIR 에 대하여 root권한을 가지며 또한 nobody 권한으로서 읽기와 쓰기가 가능함. ro=c1:c2:... --> c1:c2:..들에 대하여는 읽기만 가능.
share 명령으로 실행됬는지 확인 3) unshare or unshareall # unshare /HOME_DIR # unshareall
1) /etc/vfstab 에 아래내용을 추가한다. server:/disk1 - /disk1 nfs - yes - server:/disk2 - /disk2 nfs - yes - 2) 위 1)은 시스템 부팅시 자동으로 인식하게 할 경우고, 명령행에서 바로 할 경우는 아래 mount server:/disk1 /disk1
- 새로 인식된 NFS영역에 write가 안될 경우 서버쪽의 share된 디렉토리의 퍼미션을 바꾸어 본다. - /etc/hosts.equiv 와 /.rhosts 파일에 "+ +"기호가 있거나, 특정 Host_name가 있어야 된다. Syntax) user_name host_name ........ + + --> 모든유저 및 모든 호스트에 RemoteLogin허용(rlogin...) 보안에 문제됨.
failed - n2a : hostname not found 이 메시지는 boot 중이나 mount request 시에 나타날 수 있으며, unknown server가 지정되었음. ; host database의 host 명이 정확한지 확인한다.
이 메시지는 boot시에, 또는 mount request 시에 나타날 수 있으며 known server지만, unreachable 함을 나타냄 ; 1. server가 down 되었는가를 점검함. 2. 운용 machine과 server 간의 network이 정상인지 server 측으로 pinging(ping server)하여 점검함.
이 메시지는 boot 중에 또는 mount request 시에 나타날 수 있으며 server를 reachable 하지만 하나 또는 여러개의 필요 daemon이 running 되지 않는 상태임. ; 1. who -r 명령으로 run level이 3인지 확인하여, 아닐경우 init 명령으로 run level을 3으로함. 2. ps -e 명령으로 mount daemon과 NFS server daemon이 running 중인가를 확인한다. /etc/init.d/nfs.server script를 start keyword를 이용하여 start 시킴.
이 메시지는 boot 중에 또는 mount request 시에 나타날 수 있으며 server 상에 unknown file name 이 있음을 나타냄. ; server에 해당 directory가 있는지 확인하고 /etc/vfstab file의 경로명을 점검함.
이 메시지는 boot 중에 또는 mount request시에 나타날 수 있으며 mount point가 존재하지 않음을 나타냄. ; Client 측에 mount point가 존재하는지를 확인하고, /etc/vfstab file의 경로명을 점검함.
이 메시지는 boot 중에 또는 mount request시에 나타날 수 있으며 network 장애를 나타냄. ; 사용 장비와 server 간에 Terminator 등 physical network connection을 점검함.
이 메시지는 프로세스가 remote file 자원을 access 하고자 할 때 나타날 수 있으며 file handle 처리 일자가 지난 것임. ; file 자원이 server로 이동 되었을 수 있으므로 unmount하고 client에서 다시 mount 시킴. “nfs mount mars:/usr/share/man: No such file or directory." 메시지가 나올 경우에는 server 관리자와 상의하고, 잃어버린 file 자원에 대하여 점검함.
; /etc/hosts의 table에 해당 호스트가 등록이 되어 있는지 확인 13장. FTP
Script부분이 있다. 이 부분을 축출하여 실행Script로 만들고, man page 에 설명된 설치방법에 따라 수행하면, 간단히 Anonymous FTP를 설치 할 수가 있다.
can't create data socket(0.0.0.0,20) : no such file or directory - device or library 의 문제일 가능성
ftpmgr은 ftp관리용 계정이고, 임의의 걸로 해도 됨. 각 directory 퍼미션에 주의할것.
>ls -al drwxr-xr-x 9 ftpmgr adm 512 Apr 19 09:58 ./ drwxr-xr-x 5 root root 512 Mar 31 15:08 ../ d--x--x--x 2 root root 512 Apr 19 09:56 bin/ dr-xr-xr-x 2 root root 512 Apr 19 09:49 dev/ dr-xr-xr-x 2 root root 512 Apr 19 09:45 etc/ drwxrwxrwt 3 ftpmgr adm 512 Apr 16 09:57 incoming/ drwxr-xr-x 2 root root 512 Apr 19 09:58 outgoing/ drwxr-xr-x 9 ftpmgr adm 512 Apr 17 16:33 pub/ drwxr-xr-x 4 root root 512 Apr 19 09:51 usr/
d--x--x--x 2 root root 512 Apr 19 09:56 ./ drwxr-xr-x 9 ftpmgr adm 512 Apr 19 09:58 ../ lrwxrwxrwx 1 root root 13 Apr 19 09:56 ls -> ../usr/bin/ls*
dr-xr-xr-x 2 root root 512 Apr 19 09:49 ./ drwxr-xr-x 9 ftpmgr adm 512 Apr 19 09:58 ../ crw-r--r-- 1 root root 11, 42 Apr 19 09:47 tcp crw-r--r-- 1 root root 99, 1 Apr 19 09:49 ticotsord crw-r--r-- 1 root root 11, 41 Apr 19 09:47 udp crw-r--r-- 1 root root 13, 12 Apr 19 09:47 zero
mknod tcp c 11 42 ....
drwxr-xr-x 4 root root 512 Apr 19 09:51 ./ drwxr-xr-x 9 ftpmgr adm 512 Apr 19 09:58 ../ d--x--x--x 2 root root 512 Apr 19 09:51 bin/ dr-xr-xr-x 2 root root 512 Apr 19 09:54 lib/
total 16 d--x--x--x 2 root root 512 Apr 19 09:51 ./ drwxr-xr-x 4 root root 512 Apr 19 09:51 ../ -r-xr-xr-x 1 root root 13400 Apr 19 09:51 ls*
만약 컴파일시 CFLAGS 와 LDFLAGS 옵션에 -Bstatic (or -static in gcc) 로 한다. ls 외에도 gzip, gtar,,, 등의 유틸리티 도 있으면 준비해 놓을것.
total 2652 dr-xr-xr-x 2 root root 512 Apr 19 09:54 ./ drwxr-xr-x 4 root root 512 Apr 19 09:51 ../ -rwxr-xr-x 1 root root 112104 Apr 19 09:52 ld.so.1* -rwxr-xr-x 1 root root 621576 Apr 19 09:52 libc.so* -rwxr-xr-x 1 root root 621576 Apr 19 09:52 libc.so.1* -rwxr-xr-x 1 root root 2644 Apr 19 09:52 libdl.so* -rwxr-xr-x 1 root root 2644 Apr 19 09:52 libdl.so.1* -rwxr-xr-x 1 root root 14060 Apr 19 09:52 libintl.so* -rwxr-xr-x 1 root root 14060 Apr 19 09:52 libintl.so.1* -rwxr-xr-x 1 root root 473140 Apr 19 09:53 libnsl.so* -rwxr-xr-x 1 root root 473140 Apr 19 09:53 libnsl.so.1* -rwxr-xr-x 1 root root 67928 Apr 19 09:53 libsocket.so* -rwxr-xr-x 1 root root 67928 Apr 19 09:53 libsocket.so.1* -rwxr-xr-x 1 root root 44848 Apr 19 09:53 libw.so* -rwxr-xr-x 1 root root 44848 Apr 19 09:53 libw.so.1* -rwxr-xr-x 1 root root 10492 Apr 19 09:53 nss_dns.so.1* -rwxr-xr-x 1 root root 20980 Apr 19 09:53 nss_files.so.1* -rwxr-xr-x 1 root root 23344 Apr 19 09:54 nss_nis.so.1* -rwxr-xr-x 1 root root 26680 Apr 19 09:54 nss_nisplus.so.1* -rwxr-xr-x 1 root root 8068 Apr 19 09:54 straddr.so* -rwxr-xr-x 1 root root 8068 Apr 19 09:54 straddr.so.2*
기본적으로 /usr/lib 아래에 있고, cp 하면 된다.
스티키비트를 사용하면 anonymous로 올릴수는 있되 지우지는 못하도록 할 수 있다.
ftp가 소유권을 가지게 되면,, 운없으면(퍼미션 설정 잘못하면) 어느날 ftp가 안되는 사태가 올 수도 있다.
14장. PPP (Point to Point Protocol)
1. PPP 구성전 준비사항 - PPP 와 UUCP가 설치 되어 있는지 확인한다. # pkginfo | egrep "PPP|UUCP" system SUNWapppr system SUNWapppu system SUNWbnur system SUNWbnuu system SUNWpppk - 설치되어 있지 않다면 pkgadd또는 swmtool을 사용하여 설치한다.
. OS CD를 CDROM Driver에 넣은후 /cdrom이 mount되었는지 확인하고 mount가 되어 있으면 "/cdrom/cdrom0/s0/Solaris_2.4" 디렉토리로 가서 아래 명령을 실행한다. # mount (cdrom이 mount되어 있지 않으면 아래와 같이 mount한다) # mount -F hsfs -o ro /dev/dsk/c0t6d0s0 /cdrom # pkgadd -d $cwd SUNWpppk SUNWapppr SUNWapppu SUNWbnur SUNWbnuu . 설치가 끝나면 시스템을 리부팅한다. . 주의할 사항은 pkgadd 명령 수행시 package의 설치순서를 위와 같이 하여야 한다. 순서가 바뀌면 설치후 ipdptp0 등의 interface가 생성되지 않을 수 있다. - 사용할 Serial Port를 admintool을 이용하여 "Bidirectional" 으로 셋팅한다. . speed = 19200 . 모뎀 사용중 disconnect 되고, 재 연결시 접속이 안될 때 서버에서 Admintool 로 해당 포트에 대해 재 설정후 사용해 볼것 - EEPROM의 지정값을 확인한다. 아래와 같이 값을 지정한다. # eeprom | grep ttya ttya-rts-dtr-off=true ttya-ignore-cd=false ttya-mode=9600,8,n,1,- (결과가 위와 같지 않으면 아래명령을 실행한다) # eeprom ttya-rts-dtr-off=true # eeprom ttya-ignore-cd=false # eeprom ttya-mode=9600,8,n,1,- . eeprom의 speed값과 실제 모뎀속도의 상관관계는 없는 것 같다? - EEPROM의 값이 변경되었으면 시스템을 리부팅 한다. - Dial-Out을 할수 있도록 /etc/remote 화일에 아래 내용을 추가한다. cuaa:dv=/dev/cua/a:br#9600 - 모뎀이 hardward flow control을 사용하도록 지정 한다. # tip cuaa ats0=1 ; answer mode - 벨이 1번 울리면 자동응답 at&w0&w1 ~. ; 타이핑문자는 화면에 안보임 - 외부에서 일반 통신프로그램으로 PPP Server에 연결하여 Login 메세지가 떨어지는지 확인한다.
- 현재 사용하는 Primary Ethernet address와 같은 Subnet의 IP address중 2개를 선택하여 하나는 PPP Server에 다른 하나는 remote PC에 지정한다. 예) 147.6.9.9 ppp_server 147.6.9.10 ppp_pc - 위의 내용을 /etc/hosts화일과 DNS(If you use) 에 각각 등록한다. - PPP 사용자 ID를 만든다. 예) /etc/passwd
pppuser:x:13:60001:PPP User:/:/usr/sbin/aspppls /etc/shadow pppuser:RITzeWAL73UWQ:9321:::::: - /etc/asppp.cf 화일에 아래와 같은 내용을 추가한다. ifconfig ipdptp0 plumb ppp_server ppp_pc netmask + up ifconfig ipdptp0 mtu 1500 path ipcp_async_map 0 inactivity_timeout 90000 interface ipdptp0 peer_system_name pppuser - 새로운 interface에 대하여 "arp" 값을 지정한다. 현재 사용하는 Ethernet Address를 찾아서 remote PC의 이름에 아래와 같이 지정한다. # ifconfig -a | grep ether ether 8:0:20:12:90:be # /usr/sbin/arp -s ppp_pc 8:0:20:12:90:be pub # /usr/sbin/arp -a le0 mong 255.255.255.255 SP 08:00:20:12:90:be le0 ppp_pc 255.255.255.255 SP 08:00:20:12:90:be 위와 같이해야 ppp_pc로 부터 ppp_server를 통해 외부의 다른 시스템으로 연결 이 가능하다. - 시스템 부팅시 위의 내용이 인식되도록 /etc/rc3.d에 화일을 만들어 아래의 내용을 지정한다. # echo "/usr/sbin/arp -s ppp_pc 8:0:20:12:90:be pub" > /etc/rc3.d/Sarp_ppp # chown root /etc/rc3.d/Sarp_ppp # chmod 755 /etc/rc3.d/Sarp_ppp - PPP Server 시스템에 "in.routed" daemon이 돌고 있다면, rip routing 정보가 ipdptp0 쪽으로 뿌려지지 않도록 아래 내용을 /etc/gateways 화일에 넣는다. norip ipdptp0 * 만약 ROUTING Deamon이 없는 상태면 "in.routed -s"를 실행시켜 줘야 한다. - PPP process를 start 한다(시스템 부팅시에는 자동으로 start된다.) # /etc/init.d/asppp start - 다음 사항들을 확인해 본다. # ps -ef |grep asppp # tail /var/adm/log/asppp.log # arp -a # ifconfig -a # netstat -rn |grep ipdptp0
ppp_server에 연결해 본다. PC에 자신의 IP 주소는 ppp_server에 지정된 값(147.6.9.10)으로 정한다. PC에서 Dial-Out을 하여 ppp_server에 connected되면 PPP User ID로 login한후 [Esc] Key를 치면 PPP Enable 된다.
* pc쪽에서 해줘야 할부분 gateway를 ppp_server로 하고, DNS서버는 기존 것을 그대로 설정해주면 된다.
- 다음 설명은 아래와 같은 네트웍 구성을 전제로 한다. pc1 pc2 pc3 W/s ???????????? | | | | 147.6.9.123 Ethernet 147.6.33.1 147.6.33.2 147.6.33.3 147.6.33.100(ppp_server) \ | / |
\ | / | -------------------| 전화망
- 현재 사용하지 않는 네트웍 주소를 PPP 용으로 할당하여 각 PC와 PPP Server에 할당한다. 예) 147.6.33.100 ppp_server 147.6.33.1 pc1 147.6.33.2 pc2 147.6.33.3 pc3 - 위의 내용을 /etc/hosts화일과 DNS(If you use) 에 각각 등록한다. - PPP 사용자 ID를 만든다. 예) /etc/passwd pppuser:x:13:60001:PPP User:/:/usr/sbin/aspppls /etc/shadow pppuser:RITzeWAL73UWQ:9321:::::: - /etc/asppp.cf 화일에 아래와 같은 내용을 추가한다. ifconfig ipd0 plumb ppp_server netmask + up ifconfig ipd0 mtu 1500 # Path interface ipd0 peer_system_name pppuser peer_ip_address pc1 ipcp_async_map 0x000a0000 default_route Path interface ipd0 peer_system_name pppuser peer_ip_address pc2 ipcp_async_map 0x000a0000 default_route Path interface ipd0 peer_system_name pppuser peer_ip_address pc3 ipcp_async_map 0x000a0000 default_route - PPP Server에서 새로운 네트웍에 대한 라우팅 정보가 다른 호스트들에게 broadcast 되도록 라우팅 daemon을 살린다. # in.routed - rip routing 정보가 ipdptp0 쪽으로 뿌려지지 않도록 아래 내용을 /etc/gateways 화일에 넣는다. norip ipdptp0 - PPP process를 start 한다(시스템 부팅시에는 자동으로 start된다.) # /etc/init.d/asppp start - 다음 사항들을 확인해 본다. # ps -ef |grep asppp # tail /var/adm/log/asppp.log # ifconfig -a # netstat -rn |grep ipd0 - PC 에서 trumpet Winsock 이나 netmanage's Chameleon_Sampler를 이용하여 ppp_server에 연결해 본다. PC에 자신의 IP 주소는 ppp_server에 지정된 값(147.6.33.1 ~ 3) 중 하나로 정한다. PC에서 Dial-Out을 하여 ppp_server에 connected되면 PPP User ID로 login한후 [Esc] Key를 치면 PPP Enable 된다.
Q) PPP User로 login후 기존 server(PPPserver/해당host)외 다른 Host로의 네트웍이 안이루어진다. A) #ndd -set /dev/ip ip_forwarding 1 ---> ip의 forwarding Setting #ndd -get /dev/ip ip_forwarding ---> ip forwarding 확인(“1”로set되어야함) 14.2 적용예제
Server domainname/IP : munhwa.kongju-c.ac.kr/203.232.160.5
1. 서버에 모뎀 접속 - 38400bps 2. IP 할당(3개) 및 전화번호할당(2개) PPP서버 name/IP : pppserver/203.232.160.7 Remote PC name/IP : pc1/203.232.160.8 Remote PC name/IP : pc2/203.232.160.9 전화번호1 : 000-0000 전화번호2 : 000-0000 3. PPP 등록 - /etc/hosts & DNS_table 4. PPP user 등록 (/etc/passwd & /etc/shadow) pppuser1:x:1001:10::/:/usr/sbin/aspppls <--- /etc/passwd pppuser2:x:1002:10::/:/usr/sbin/aspppls <--- /etc/passwd ex) password는 sunsun 5. /etc/asppp.cf 편집 ifconfig ipdptp0 plumb pppserver pc1 netmask + up ifconfig ipdptp0 mtu 1500 path ipcp_async_map 0 inactivity_timeout 90000 interface ipdptp0 peer_system_name pppuser1 ifconfig ipdptp1 plumb pppserver pc2 netmask + up ifconfig ipdptp1 mtu 1500 path ipcp_async_map 0 inactivity_timeout 90000 interface ipdptp1 peer_system_name pppuser2 6. arp값 지정 # ifconfig -a | grep ether ether 8:0:20:79:a9:8d # /usr/sbin/arp -s pc1 8:0:20:79:a9:8d pub ① # /usr/sbin/arp -s pc2 8:0:20:79:a9:8d pub ② # /usr/sbin/arp -a hme0 munhwa.kongju-c.ac.kr 255.255.255.255 SP 08:00:20:79:a9:8d hme0 pc2.kongju-c.ac.kr 255.255.255.255 SP 08:00:20:79:a9:8d hme0 pc1.kongju-c.ac.kr 255.255.255.255 SP 08:00:20:79:a9:8d 7. arp값 지정의 ① & ② 줄을 /etc/rc3.d/Sarp_ppp 에 넣는다. 만들고 난후, # chown root /etc/rc3.d/Sarp_ppp # chmod 755 /etc/rc3.d/Sarp_ppp 8. rip routing 정보가 ipdptp0 과 ipdptp1 에 뿌려지지 않도록 아래파일 편집 # more /etc/gateways norip ipdptp0 norip ipdptp1 9. routing daemon이 없다면 "in.routed -s"를 실행 10. PPP process를 start # /etc/init.d/asppp start 11. 다음과 같이 확인 # ps -ef|grep asppp # tail /var/adm/log/asppp.log # arp -a # ifconfig -a # netstat -nr | grep ipdptp0 or 1 12. pc1에서 새로 부여된 자신의 ip 등록하고 gateway 는 pppserver의 IP를 등록 DNS는 기존DNS인 munwha(203.232.160.5)를 설정후, PC에서 dial-out 하여 pppserver에 connected되면 pppuser 로 login하고, 패스워드에서 이미정한 sunsun으로 입력하고, login후 [ESC]를 누르면 PPP가 Enable상태. 15장. 시스템튜닝 ∴ 시스템이나 네트워크에 너무 많은 부하가 걸리지 않도록 한다. 부하가 많이 걸리게 되면 자원을 기다리는 프로세스들이 많아지게 되고 그러면 점점 누적되어 시스템의 성능이 급격히 저하되기 때문이다.
15.1 성능 향상을 위한 일반론
15.2 시스템 성능에 영향을 주는 요소들
? 메모리 ? 하드 디스크 I/O 양 ? 네트워크 I/O 양
15.3 프로그램의 시간 체크하기
procs memory page disk faults cpu r b w avm fre re at pi po fr de sr d0 d1 d2 d3 in sy cs us sy id 1 0 0 0 7584 0 3 0 0 0 0 0 1 0 0 0 14 4 2 0 0 99 0.6 real 0.5 user 0.1 sys
15.4 시스템의 성능 측정하기
15.5 현재 CPU 성능 측정
? 평균 부하 ? 프로세스별 CPU 사용정도
다음은 ATT계열의 사용예이다.
23:12:30 %usr %sys %wio %idle 23:12:35 4 58 27 11 23:12:45 7 83 9 0 23:12:50 6 76 6 0 23:12:55 4 73 8 0 23:12:00 4 85 4 0
‘vmstat' 명령도 여러 정보를 제공해 주는데 다음은 그 사용 예이다.
procs page faults cpu r b w re mf pi po fr de sr in sy cs us sy id 0 0 0 0 0 0 0 0 0 0 4 22 19 2 1 97 1 0 0 67 2 0 0 0 0 0 26 751 52 53 47 0 0 0 0 96 0 0 0 0 0 0 39 1330 42 22 71 7 0 0 0 16 0 0 0 0 0 0 84 1626 99 7 74 19 0 0 0 1 0 0 0 0 0 0 11 216 20 1 11 88
sar명령 (u 옵션) (cpu 항목)
사실, CPU의 상태는 순간순간 급격히 변하기 때문에 짧은 시간동안의 모니터링은 그다지 정확한 정보를 나타내지는 않는다. 그러므로 되도록 오랜 시간동안 모니터링을 하여야 정확한 정보를 알 수 있다. 15.6 평균 부하(load average)
평균 부하는 uptime 명령을 통해 얻을 수 있다. % uptmie - last 1분, 5분, 15분간의 system load average를 report - System V의 sar -q와 유사
하며, 만약 system이 느리지만 load average가 falling이면 시간이 지남에 따라 problem이 해결되는지를 확인하는것이 좋다
2:07pm up 4:02, 5 users, load average: 0.95, 0.38, 0.31
15.7 페이징 알고리듬
커널은 페이징 아웃되는 메모리 페이지들을 가리키는 Free List를 유지한다. 그리고 페이징 아웃될 페이지에 대한 지정 순서는 어느 메모리 페이지나 동일하게 순차적으로 지정된다. 그래서 시계의 시침이 돌아가듯 순차적이란 의미에서 시계 알고리듬이라고 한 것이다. 하지만 메모리의 상태에 다라 시침이 돌아가는 속도는 변경된다는 점이 일반 시계와는 다른 점일 것이다. 15.8 메모리 사용 분석하기
pstat명령의 경우는 kbytes단위로 나타내고 다른 명령들은 512bytes 단위이다.
110224k allocated + 13556k reserved = 123780k used, 163000k available
swapfile dev seapl blocks free /dev/dsk/c0t0d0s1 32, 1, 16 164400 162960
17:58:52 freemem freeswap 17:58:57 361 179616
OSF/1 시스템의 경우 sar 명령은 옵셥으로 설치하기 때문에 대부분 없는 경우가 많다. 하지만 스왑 상태를 확인하기 위해서는 'swapon-s'명령을 사용하면 된다.
Swap partition /dev/rz24b (default swap) : Allocated space: 98205 pages (767MB) In-use space: 6320 pages ( 6%) Free space 91885 pages ( 93%)
Allocated space: 98205 pages (767MB) Reserved space: 9736 pages ( 9%) In-use space: 6320 pages ( 6%) Available space: 88469 pages ( 90%)
procs memory page disk faults cpu r b w avm fre re at pi po fr de sr d0 d1 d2 d3 in sy cs us sy id 0 0 0 0 2300 0 3 0 0 0 0 0 1 0 0 0 14 4 2 0 0 99 0 0 0 0 2116 0 9 24 0 12 0 10 1 0 0 0 17 104 8 0 0 100 0 0 0 0 2064 0 2 0 0 0 0 2 0 0 0 0 10 39 3 0 0 100 0 0 0 0 2048 0 0 0 0 0 0 0 0 0 0 0 7 15 0 0 0 100 0 0 0 0 2048 0 0 0 0 0 16 0 13 1 0 0 33 13 8 1 1 98
memory 항목에서는 메모리의 상태를 보여주는데 최근 20초 안에 수행된 프로세스에 속하는 가상 메모리의 kbytes 수(avm)와 여유 메모리 kbytes량(fre)을 확인할 수 있다. page 항목은 페이징 활동에 대한 경고를 제공한다. 모든열은 초당 평균값을 나타내는데 그 의미는 다음과 같다. 필드
procs memory page disk faults cpu r b w avm fre re at pi po fr de sr d0 d1 d2 d3 in sy cs us sy id 0 0 0 0 7608 61 0 0 0 0 16 0 1 0 0 0 14 4 2 0 0 99 0 0 0 0 7584 25 0 0 0 0 0 0 0 0 0 0 13 38 4 0 0 100 0 0 0 0 7520 0 0 0 0 0 0 0 0 0 0 0 4 15 0 0 0 100 0 0 0 0 7504 0 0 0 0 0 0 0 0 0 0 0 1 6 0 0 0 100 0 0 0 0 7504 0 0 0 0 0 0 0 0 0 0 0 5 11 3 0 0 100
15.9 디스크 I/O 분석하기
사실 iostat 명령에 대한 출력 결과는 시스템에 따라 다소 차이를 보인다.
- System V의 sar -u 와 유사
tty wd0 sd0 cpu tin tout sps tps msps sps tps msps us ni sy id 2 129 2 0 0.5 3 0 20.3 0 0 0 99 1 252 0 0 0.0 614 40 16.9 27 0 14 59 1 321 0 0 0.0 511 45 16.7 17 0 12 71 0 15 0 0 0.0 419 27 19.9 11 0 8 80 1 191 0 0 0.0 3 0 25.0 0 0 0 99
항목
( default scheduling priority 이상) - ni : user 상태에서 running하는 process들에 의해 사용된 CPU % ( low scheduling priority ) - sy : system상태에서 사용된 CPU % (executing system calls, UNIX kernel code, scheduling onerhead등) - id : percentage of the system spent idle
rps wps util rps wps util rps wps util 0 0 1.3 0 0 0.3 0 0 0.5 9 8 41.1 1 0 1.8 1 0 2.4 11 4 48.4 0 1 2.0 0 0 0.0 8 0 15.6 0 0 0.0 0 0 0.0 0 0 0.0 0 0 0.0 0 0 0.0
# iostat -tDc 5 tty fd0 sd1 sd3 cpu tin tout rps wps util rps wps util rps wps util us sy wt id 0 13 0 0 0.0 0 0 0.4 0 0 0.1 5 2 0 92 0 13 0 0 0.0 0 0 0.0 0 0 0.0 0 1 0 99
extended disk statistics tty cpu disk r/s w/s Kr/s Kw/s wait actv svc_t %w %b tin tout us sy wt id fd0 0.0 0.0 0.0 0.0 0.0 0.0 523.3 0 0 0 13 5 2 0 92 sd1 0.1 0.2 0.4 1.6 0.0 0.0 117.3 0 0 sd3 0.0 0.0 0.1 0.4 0.0 0.0 37.6 0 0 extended disk statistics tty cpu disk r/s w/s Kr/s Kw/s wait actv svc_t %w %b tin tout us sy wt id fd0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 73 1 1 0 98 sd1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 sd3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 디스크의 과부하를 판별하는 방법 --> 주의해야할 중요한 값은 서비스시간(svc_t)임. 이것은 이 드라이브에 대한 입,출력 요구의 서비스에 소요된 시간이다. 이 시간에는 다른 요구가 처리중에 있기 때문에 큐에서 대기하는 시간도 포함된다. 30초간의 평균사용률이 30%를 넘는 디스크는 서비스 시간을 점검할 필요가 있다. 15.10 파일 시스템 튜닝하기
? 하나의 입.출력동안 전송되는 최대 블록 수 ? 하나의 실린더 그룹에서 사용 가능한 블록 수 ? 만약을 위해 준비하는 디스크 용량
15.11 pstat: 무작위 통계 출력하기(BSD)
다음은 BSD 시스템에서 사용하는 디스플레이 옵션을 나타낸 것이다. 다른 시스템에서는 이보다 적은 옵션을 가지는 것이 일반적이다.
이 중에서 가장 유용한 것이 -T 옵션으로 테이블의 사용 정보를 나타낸 것으로 사용하면 다음과 같은 결과를 출력할 것이다.
121/364 files 85/158 inodes 34/74 processes 21/38 texts 70/169 00k swap
15.12 시스템 성능 체크의 단계
15.13 Process 분석
USER PID %CPU %MEM SZ RSS TT STAT START TIME COMMAND hjh 327 0.0 2.0 456 896 p0 R 10:31 0:00 ps -au hjh 306 0.0 0.8 152 336 p0 S 10:24 0:00 -csh (csh)
- PID : The process ID number assigned by the system - %CPU : The percentage of the CPU time used by this process - %MEM : ,, system's physical memory used by this process - SZ : The amount of nonshered virtual memory, in KByte - RSS : Real memory (resident set) size of the process (in kilobytes) - TT : tty name - STAT : process's status . R : runnable . T : currently stopped . P : waiting for a page-in . D : ,, disk I/O . S : sleeping for less than 20 seconds . I : idle (sleeping for more then 20 seconds) . Z : terminated but has not died
16장. AWK 1. awk의 기본 개념
; awk란 이름은 이 유틸리티를 작성한 A.V.Aho, P.J. Weinberger, B. Kernigham의 머리글자를 따온 것 ① awk는 일종의 프로그래밍 언어지만 일반적인 언어라기 보다는 주로 패턴의 검색과 조작을 주목적으로 만들어진 것이다. ② 파일의 각 라인에서 필드(field)를 인식할 수 있는 패턴 매칭 기능을 가지고 이들 필드를 자유자재로 조작 가능한 유틸리티를 작성하고자 만든 것이다.
데이터 프로세싱, 리포트 작성, 간단한 데이터베이스 구축, 등
① 프로그래머가 자신이 작성한 프로그램의 입력 화일이 특정한 형식에 들어 맞게 이루어져 있는지 검사. ② 출력화일을 처리하여 리포트를 만들어 냄. ③ 다른 프로그램의 입력 형식에 맞게 변환하는 작업에 이용.
pattern {action} . . . ' filenames <-----------------입력화일(예제 : students)
2) awk -f parttern-action-file filenames <----- 입력화일 awk실행 action을 가진 프로그램 file
================================================================================================ BEGIN 입력화일을 읽어들이기 전에 옆에 제시되는 문자을 실행시키도록 한다. END awk가 모든 입력을 처리한 후, 옆에 제시되는 문장을 실행시키도록 한다. expression 식을 평가한 후 이 식이 참, 즉 non-zero이거나 non-null인 경우 문장을 실행한다. /re/ 정규식과 일치하는 문자열을 포함하고 있는 라인에서 문장을 실행한다. compound-pattern 복합패턴이라는 것으로 &&(and), ||(or) , !(not) 그리고 괄호에 의해 연결시킨 것이다. expression의 경우와 마찬가지로 복합 패턴도 참인 경우의 문장을 실행 시킨다. pattern1,pattern2 이러한 패턴을 범위 패턴이라한다. 현재 처리되고 있는 라인이 pattern1과 일치 되고, 다음에 따라오 는 라인 중 임의의 라인이 pattern2와 일치할 때, 범위 패턴은 두 라인 사이의 각 라인과 일치한다.
연 산 자 내 용 ================================================================================================ = += -= *= /= %= 배정(assignment)연산자 + - * / % ++ -- 산술 연산자 || && ! 논리 연산자(|| = OR, && = AND, ! = NOT) > >= < <= == != 비교 연산자 v ~p 변수 V가 패턴 P에 부합되면 참 v !~p 변수 V가 패턴 P에 부합되지 않으면 참
액션은 문장(statements)으로 이루어져 있다. 액션은 간단하게 상수 하나로 이루어질 수도 있고, 개행 문자나 세미콜론(;)에 의해 분리된 몇 개의 문장의 연속으로 구성될 수도 있다. ① expressions ② print expression-list ③ printf(format, expression-list) ④ if (expression) statement ⑤ if (expression) statement else statement ⑥ while (expression) statement ⑦ for (expression; expression; expression) statement ⑧ for (variable in array) statement ⑨ do statement while (expression) ⑩ break ⑪ continue ⑫ next ⑬ exit ⑭ exit expression ⑮ {statement}
변 수 내 용 ================================================================================================ FILENAME 현재 처리되고 있는 입력 파일의 이름 FS 입력 필드 분리문자 NR 현재 레코드(행)의 번호 NF 현재 레코드(행)의 필드의 갯수 OFS 출력되는 필드의 분리문자
(1) 예제 입력 파일 소개 ① 입력화일의 이름은 students ② 이 파일의 각 라인은 3개의 필드로 구성(학생 성명, 학과명, 나이) ③ 각 필드는 공백에 의해서 분리(공백을 필드 분리자로 간주함.) < awk는 각 라인에서 필드를 추출해 내는 데 필드 분리자(field separator)를 사용, 필드 분리자는 보통 하나 이상의 공백 문자이다.>
1) 입력화일 예제 students % cat students John,P Physics 20 Rick,L Mechanical 21 Jack,T electrical 23 Larry,M Chemical 22 Phil,R Electrical 21 Mike,T mechanical 22 Paul,R Chemical 23 John,T Chemical 23 Tony,N Chemical 22 James,R Electrical 21
% awk '$3 > 22 {print $1}' students Jack,T Paul,R John,T
예 2) if 문을 사용하여 조건에 맞는 line 분리하기(각 파일에 저장)
step 1 : if문을 사용하는 프로그램을 awkprog1이라는 파일로 만든다.
% cat awkprog1 { if ($1 ~ /^J/) printf "%s\n", $0 > "Jfile" if ($1 ~ /^P/) printf "%s\n", $0 > "Pfile"}
step 2 : students 입력화일에 awkpog1 프로그램 화일을 적용한다.
% awk -f awkprog1 students
step 3 : 결과 보기 % cat Jfile John,P Physics 20 Jack,T electrical 23 John,T Chemical 23 James,R Electrical 21
% cat Pfile Phil,R Electrical 21 Paul,R Chemical 23
<프로그램 awkprog2, awkprog3>
% cat awkprog2 {sum += $3} END {printf "The average of the ages is %.2f\n", sum/NR}
% cat awkprog3 {sum += $3 ++no} END {printf "The average of the ages is %.2f\n", sum/no}
<결 과> % awk -f awkprog3 students The average of the ages is 21.80
예 4) while 과 do문을 이용하여 평균값 구하기
<프로그램 awkprog4> % cat awkprog4 {if (NF > 0) { sum = 0 n = 1 while (n <= NF) { sum = sum + $n n = n+1 } printf "Average is %d\n", sum/NF } else print}
<예 제> % awk -f awkprog4 test Average is 17 Average is 3 Average is 25 Average is 0
sed는 Stream Editor의 약자로서 파일의 수정을 주 목적으로 한다. 이는 파일을 순방향으로 읽는 동안 연산을 수행하며 텍스트 화일에서의 반복 수정에 용이하다.
주어진 텍스트 패턴을 갖는 모든 행을 delete 특정 행에서 어떤 텍스트 패턴을 다른 패턴으로 바꿈 하나의 파일을 다른 곳의 파일로 복사 입력화일의 특정부분을 출력화일로 보냄
2.sed의 수행방법 sed는 순환적으로 동작하며, 아래와 같은 순서로 실행된다.
(1) 실행순서 ① 입력행을 읽어 패턴 공백으로 옮긴다. <패턴 공백? ed와 같이 sed도 편집할 텍스트를 편집버퍼에 저정하는데, 이 버퍼를 패턴 공백 이라고 한다. ed : 파일전체를 버퍼에 저장 sed : 한 행의 텍스트만 패턴 버퍼에 저장> ② 편집대본(수정할 내용들)을 실행 ③ 패턴 공백을 출력값으로 복사
(2) sed 구조 1) sed의 명령행 옵션 옵션
옵션 (변경(c)명령은 행 전체를 변경하는 것이고, 대치(s)명령은 행의 일부분에 변경, 적용될 수 있다.)
% cat remind Janet today at 4. Call DEC add serial line for Brad Home at five sharp
예제 1) 대치(s)명령, 삽입(i)명령, 삭제(d)명령 사용 예제
<편집대본(파일명) : script>
% cat script s/DEC/Dept. Environ. Cons./ s/today/tomorrow/ 1i\ Werner and Raquel this weekend\ Feed polly for adam 4d
<결과>
% sed -f script remind Werner and Raquel this weekend Feed polly for adam Janet tomorrow at 4. Call Dept. Environ. Cons. add serial line for Brad
예제 2) 변경(c) 명령 사용 예제
% cat script1 2c\ Dept. Environ. Cons
<결과> % sed -f script1 remind Janet today at 4. Dept. Environ. Cons add serial line for Brad Home at five sharp
예제 3) write명령을 사용한 예제
% cat script2 1,2w firstfile s/DEC/Dept. Environ. Cons./w rewrite 4d w delfile
<결 과> % sed -f script2 remind Janet today at 4. Call Dept. Environ. Cons. add serial line for Brad
% cat rewrite Call Dept. Environ. Cons.
% cat firstfile Janet today at 4. Call DEC
% cat delfile Janet today at 4. Call Dept. Environ. Cons. add serial line for Brad
예제 4) g옵션의 사용
<기본예제> % cat file1 It follows, then, that the divine, being good, is not, as most people say for the food things in human lige are far fewer than the evil, and, whereas the good must be ascribed to heaven only,
<s옵션을 이용하여 문자열 바꾸기>
% sed -e s/the// -e /for/d file1 It follows, n, that the divine, being good, is not, as most people say evil, and, whereas the good must be ascribed to heaven only,
<g옵션을 이용하여 문자열 바꾸기> % sed -e s/the//g -e/for/d file1 It follows, n, that divine, being good, is not, as most people say evil, and, whereas good must be ascribed to heaven only, 18장. UNIX C-SHELL PROGRAMMING 기법
2. UNIX SHEEL의 주요 특성 3. C-SHEEL의 용도 4. SHELL의 종류 5. SHELL 명령어와 명령어 FILE 6. SHELL SCRIPT작성시 주의 사항 7. SHELL SCRIPT의 수행 8. shell script 변수 9. temporary file의 사용 10. shell script 제어문 11. 반복 제어문의 종류 12. 인수 list 처리 13. 환경 변수의 사용(변수명은 대문자) 14. 기정 변수의 사용 (set으로 내용 검색) 15. shell 변수의 특성 16. 문자 single(') 와 double(") 와 backword apostroples(') 사이의 차이점 17. shell 변수를 사용한 산술 연산 18. shell script의 debugging 19. 명령어의 대체 20. 명령어 집단화에 유용한 문자및 명령 21. BACKGROUND 상태에서 PROCESS수행 22. 사용자 process의 실행 순위의 조정 23. 수행중인 process의 정지와 재 수행 24. C-SHELL를 이용한 PROGRAM 예 1. C-SHEEL이란 . 사용자 interface이다. . 어떤 특정한 상태가없다. . C-PROGRAM언어와 유사한 구문을 갖는 강력한 명령언어를 제공한다. . UNIX의 사용을 휠씬 쉽게 해준다. . utility, 특정 사용자 interface와 process FILE, 심지어는 범용 program 마저도 신속하게 개발할 수 있도록 한다. 2. UNIX SHEEL의 주요 특성
있다. (2) HISTORY기능을 쓰면 명령을 다시 실행할 수 있으며 ALIAS를 쓰면 연속된 명령을 다른 이름 으로 사용할수있다. (3) SHEEL변수를 쓰면 연속되는 명령에서 긴문자를 재사용 할 수 있도록 저장할 수있다. 입출력 방향전환, 명령GROUP, 명령 치환 등은 명령을 구성하기 위한 C-SHEEL의 기본요소다. (4) UNIX의FILE SYSTEM은 계층적 구조를 가지고있다. FILE을 지정하는 것은 현재 DIRECTORY나 ROOT DIRECTIRY로 시작하는 경로이름을 사용한다. (5) C-SHEEL은 프로그램 언어이다. 새로운 도구를 창조해 내는것은 C-SHEEL SCRIPT,C-SHEEL 명령, PROGRAM구조, ERROR검사, 입출력 명시등을 포함하는 TEXT FILE의 작성을 통해서 이루어진다.
다음 3가지 방법으로 사용할 수있다. (1) 대화적으로 UNIX명령을 실용하기 위해 (2) 개인화에서 작업 환경을 정의하기위해 (3) PROGRAM에서 C-SHEEL PROGRAM같은 새로운 도구를 생성하기위해
(1) C-SHELL(csh) : C PROGRAM언어로 부터 그구조와 이름이 유래됨 (2) UNIX 표준 BOURNE SHEEL (sh) (3) UNIX V BOURNE SHELL (sh5) (4) KORN SHELL (ksh) : BOURNE SHELL로 부터 유래된 최근의 SHELL
모든 사용자에게 적용되는 SHELL명령 FILE은 /etc/profile인데 사용자가 login하여 사용자의 directory의 명령 file을 수행하기 전에 실행하도록 system 관리자가 기본적으로 설정한 명령 file이다.각 사용자는 etc/profile을 수행한후 자신이 설정한 명령 file을 login한후 바로 실행 시킬수 있는데 .profile에 명령을 설정하면 된다.
if test $? = 0 then stty dec crt fi PATH=.:$HOME/bin:/usr/ucb:/bin:/usr/bin:/usr/local:/usr/new:/usr/hosts MAIL=/usr/spool/mail/$USER tset -n -I export TERM MAIL PATH biff n
다양한 경로의 변경이나 전체에 영향을 미치는 alias값등의 설정을 변경하려는 명령을 지정하는 데 사용하는 file이다. .cshrc file은 HOME DIRECTORY에 존재하여 C-SHELL에 의해 해석된다. 이 FILE은 SHELL SCRIPT를 효율적으로 사용 할 수 있도록 변수 할당, ERROR CODE와 같은 진보된 기능을 위해 이용된다.
if ($?prompt) then set prompt = "csh> " set notify set history = 50 set term = vt100 alias h history alias gc setenv GKS3Dconid basic002:0.0 alias ung unsetenv GKS3Dconid alias unws unsetenv GKS3Dwstype alias gpr setenv GKS3Dconid /dev/tty01 alias gp setenv GKS3Dwstype %x10500033 alias gl setenv GKS3Dwstype %x00500033 alias isl4 setenv GKS3Dwstype %x0070003d alias l "pwd;ls -F" alias pd pushd alias pop popd alias help apropos alias vt52 "set term = vt52" alias ti745 "set term = ti745 ; stty -tabs" alias ti785 "set term = ti745 ; stty -tabs" alias vt100 "set term = vt100" alias _dry cd /usr/skb/dry_source alias _opti cd /usr/skb/dry_source/opti alias _daed cd /usr/skb/dry_source/contact alias _marpol cd $HOME/sd9112/marpol alias _source cd $HOME/../source/sikob_source alias dryrun /usr/skb/dry_source/rev3/dryrun alias gendat /usr/skb/dry_source/rev3/gendat alias profile /usr/skb/dry_source/rev1/profile alias prelikon cd /usr/sbdd1.users/sikob/source/prelikon alias pkdata cd /usr/sbdd1.users/pkdata alias hpgl "echo '||e5' > /dev/tty01;setenv GKS3Dconid /dev/tty01" alias lo 'echo -n "From> ";set w = $<; find> "' alias cd 'cd \!*;set prompt="SIKOB [`dirs`]>"' endif
만약 login shell이 c-shell이면 HOME DIRECTORY 내에 존재하는 .login FILE을 읽은후 그내용을 순서대로 실행시킨다.
(예) .login FILE
tset -I -Q umask 022 setenv MAIL /usr/spool/mail/$USER set mail=$MAIL set path=(. $HOME/bin /usr/ucb /bin /usr/bin /usr/local /usr/new /usr/hosts /usr/users/sikob/bin/skcpl) set prompt="SIKOB > " setenv EXINIT 'set redraw wm=8' setenv DECFORT_FFRLIB "T" biff n date
(예) .logout FILE # # default cadds user logout script # # 24-Jun-86 HPS; 'oplog off' is commented out # 25-mar-86 jaf; moved # 11-mar-86 aws; created ###################################################################### # #oplog off #clear cal
수행하는 SHELL의 경로명을 적는다. (2) SHELL SCRIPT는 보통 작성자가 쉽게 간과해버는 주석에 대해 강조하여 작성한다. (3) 주석은 #으로 시작하며 SHELL에 의해 명령어로 해석되지 않는다. 하지만 만일의 경우 명령어로 해석되것을 방지 하기 위해 # 다음에 QUOTATION MARK로 문자을 열고 닫는다. (4) 명령어를 적은후 동일 LINE에 #으로 시작하는 주석을 IN LINE COMEND라고 하며 명령어의 마지막에 ;을 사용하여 명령어와 IN-LINE COMEND와 분리 한다. (5) ECHO 명령은 ECHO 명령 다음의 명령과 함께 출력하는데 유용하게 사용된다.
① SUB-SHELL을 수행 시킨다. ② 사용자의 현재 SHELL내에서 SCRIPT를 수행 시킨다. ③ SCRIPT를 수행 가능하게 만든다.
BOURNE SHELL의 경우 : sh C-SHELL 의 경우 : csh (2) 사용자의 현재 shell내에서 script 수행 source 8. shell script 변수 (1) 변수명 부여시 주의 사항 ① 변수의 이름은 문자로 시작한다. ② 변수는 문자, 숫자, 밑줄로 구성한다. ③ 길이는 20자까지 제한한다. (2) 변수에 값할당/해제 변수에 값을 할당하는 문자 = 를 사용하고 앞뒤에 공백이 없어야한다. 설정 set <변수명> = <값> * 값이 문자열인 경우 " " double quotation 사용 해제 $ unset <변수명> (3) 변수값 출력 echo $ <변수명> echo " " echo <단어> (4) read문장을 이용한 값할당 표준 입력 (key board)로 입력을 받아 변수에 값을 직접 할당
현재 사용 directory에 임시 file을 작성 하는것은 매우 안전하지만 다음과 같은 이유로 피하는것 이 좋다. (1) 현재의 directory 에 TEMP라는 file이 이미 존재할 경우 shell script를 수행 시키면 temp file이 새로운 file로 대체되어 원하지 않는 부작용이 생길수 있다. (2) 한 사용자가 작성한 명령 shell file을 다른 사용자가 공유하려는 경우 명령을 수행한 결과 생성되는 임시 file이 다른 사용자에게 사용될수 있는지는 확실 하지 않다.
(1) 임시 file만을 저장하는 directory에 shell script file과 수행되는 PID번호를 연결한 이름으로 저장하게 한다.
명령을 연속으로 수행하지 않고 조건을 부여 수행 순서를 변경하고자 할때 사용
if <조건이나 명령 표현식> ; then 참인 경우 - 명령 수행 : : else 거짓인 경우 - 명령 수행 : : fi
참인 경우 - 명령 수행 : : else 거짓인 경우 - 명령 수행 : : endif
① then의 위치 korn shell : if 명령과 다른 line, 즉 다음 line c-shell : if와 같은 line상에 명령 ② c-shell에서는 <조건식/명령 표현식>은 { }에 표현 ③ <조건식/명령 표현식>의 거짓에 대한 처리가 필요치 않은 else이하는 생략 ④ 명령 표현식의 참/거짓의 명령어 종료 상태 변수에 값을 할당한다. 정상적인 경우 변수 값은 0(zero)가 저장되며 실패인 경우 다른 값이 저장되며 아래의 값에 의해 결정된다. korn shell의 경우 : $status c-shell의 경우 : $?
① 명령어가 조건 비교 판단 ② 변수에 저장된 값과 숫자의 비교 판단 - 산술 연산자 사용 ③ 변수에 저장된 문자열과의 비교 판단 ④ file의 종류 비교 판단 ⑤ file이나 변수의 형태를 비교 판단
표현식 설 명 ============================================================================================== <문자열1> == <문자열2> 두문자열이 같으면 참 <문자열1> != <문자열2> 두문자열이 다르면 참 <문자열1> =~ <문자열2> <문자열1>과<문자열2>에 지정한 패턴이 일치 하면 참 <문자열1> !~ <문자열2> <문자열1>과<문자열2>에 지정한 패턴이 일치 하지 않으면 참
조 건 설 명 ============================================================================================== -r 접근권한 읽기(r)로 설정 되면 참 -w 접근권한 쓰기(w)로 설정 되면 참 -x 접근권한 실행(x)로 설정 되면 참 -e 존재하면 참 -o 소유자가 명령 실행자면 참 -O 소유자가 명령 실행자면 참 -z 지정한 file의 내용이 없으면 참, 즉 file size 0(zero)면 참 -f directory 가 아니면 참 -d directory 이면 참
연산자 설 명 ======================================== + 덧셈 - 뺄셈 * 곱셈 / 나눌셈 % 나눌셈의 정수 나머지 ^ 승수
연산자 표 현 설 명 ========================================================================= NOT ! <표현식> <표현식>이 참이면 거짓 OR <표현식1>||<표현식2> 표현식 1,2중 하나가 참이면 참 AND <표현식1>&&<표현식2> 표현식 1,2가 모두 참일때 참
if ~ else ~ endif문 내에 if ~ else ~ endif문이 있는 경우
(1) interative 반복문 지정된 숫자만큼 반복하여 수행 [korn shell의 경우] for <제어변수> in (<항목의 list>) do <명령문> done [c-shell의 경우] foreach<제어변수> (<항목 list>) <명령문> end
korn shell의 경우 c-shell의 경우 for <반복 횟수> in $@ foreach <반복횟수> in ($argv[*])
[korn shell의 경우] while<조건> do <명령어들> done [c-shell의 경우] while (<조건>) do <명령어들> end * <조건>은 if ~ else ~ endif문에서 사용했던 조건 표현식과 같다.
① <조건>이 참이면 일련의 명령을 수행한후 다시 <조건> 조사 ② <조건>이 참이면 명령 수행, 거짓이면 반복문을 끝낸다. ③ <조건>이 참만 있으면 무한 loop처리로 program 오류 발생 ④ 무한 loop로 판단되면 Ctrl+C로 정지 ⑤ 무한 loop의 반복 원인을 찾아 수정
$# - positional parameter 라고 부르며, 인수의 갯수를 저장하며, 공백에 의해 분리되어 위치를 나눈다. 보통 $1 ~ $9까지의 변수를 사용하며 그이상일때는 { }를 사용하여 표시한다.
① 이미 정의되어 사용자가 이름을 만들지 않아도 system에서 자동적으로 변수에 값을 저장하거나 사용자가 필요로 할때 이용 할 수 있다. ② 사용자 환경에서 제어 된다.
변수명 설 명 ================================================================================ TERM TERMINAL 유형을 정의하는 CODE로 설정 HOME 사용자의 HOME DIRECTORY정의, 절대 경로명을 가진다. PATH 명령어 검색 경로 USER 모든 사용자의 LOGIN명을 가진다. SHELL 사용자의 LOGIN SHELL, 절대 경로명을 가진다. MAIL 사용자의 우편물을 저장하는 DIRECTORY로 경로명을 가진다. EXINT ex, vi편집기에 사용하는 OPTION들을 초기화한다.(40개) TERMCAP 개인 DATA BASE를 사용하도록 한다. (DEFAULT는 etc/termcap) TTYLINE TERMONAL DEVICE PROGRAM을 사용할수 있도록 하기위해서 선언 14. 기정 변수의 사용 (set으로 내용 검색) set 변수 = 문자열
================================================================================ path 명령어 검색 경로 directory명의 list를 가진다. cdpath unix 계층적 file system의 특성을 살려 작업영역을 독립된 directory로 구분 할때 사용, 절대 경로명의 단어list home HOME DIR.의 절대 경로명을 포함하고 있다. LOGIN PROGRAM으로 부터 받은 값으로 초기화 한다. shell default c-shell은 shell을 /bin/csh로 초기화 대개의 경우는 바꾸지 않는것이 좋다. mail MAIL BOX가 있는곳 설정, set mail = (60 /usr/sara) history history에 저장된 명령의 갯수 정의 histchars history명령을 수행시키는데 사용하기를 원하는 수개의 문자 로 설정, .cshrc file내에서 정의 할수 있다. savehist login session간의 history list를 연결하고 싶을때 사용 prompt prompt 정의, 사건번호를 보이기 위해 history 문자 ! 를 포함 시킬수 있다. ignoreeof 실수로 Ctrl+D를 typing했을때 logout방지 noclobber 출력 방지 전환시 이에 존재하는 file에 겹쳐 쓰는것을 방지 time 주어진 시간 이상의 CPU시간을 소요하는 모든 명령에 대해 지원 사용 통계치를 보여 준다. cwd 사용자의 현재 사용 directory 15. shell 변수의 특성
입력 line에서 대화식으로 참조하거나 다른 shell script에서 사용할 수 없다. ② terminal에서 keyboard 입력으로 변수를 설정한 경우 shell script내에서 대화식으로 사용한 변수를 사용할 수 없게 된다. ③ 지역 변수다.
korn shell의 경우 c-shell 의 경우 ==================================================================================== typeset <변수명> = <할당할 값> setenv <변수명> <할당값> export <변수명> export <변수명> = <할당값> export 명령 : shell script와 명령 입력 line에서 공유하여 사용
상위 shell에서 참조 할수 없다. 16. 문자 single(') 와 double(") 와 backword apostroples(') 사이의 차이점
======================================================================= ' 무조건 문자열 해석하여 출력 변수,명령어,문자 패턴 모두 인식 하지 못함 " 명령어와 변수를 해석하여 문자열과 출력 명령어 '<수행 명령어>' 변수는 $<변수명> 형식으로 사용 ` 명령어나 변수로 해석 17. shell 변수를 사용한 산술 연산 korn shell의 경우
let <변수> = <변수나값><산술연산자><변수나값>
18. shell script의 debugging
set verbose - shell script program에 set verbose의 명령을 추가하여 명령을 추적 조사 할수있다.
======================================================================= ksh -v <실행 shell script명> csh -v <실행 shell script명> ksh -x <실행 shell script명> csh -x <실행 shell script명> 19. 명령어의 대체
korn shell의 경우 c-shell의 경우 typeset <변수명> = $(<명령어>) set <변수명> = <'명령어'>
명령어를 변수에 할당하여 명령어의 인수로 사용하는 것이 아니라 명령어의 인수로 명령어를 사용하여 대체하여 해석된후 수행한다. 20. 명령어 집단화에 유용한 문자및 명령
======================================================================================== ECHO <명령열> 출력에 <문자열>이 표시 ; 명령어와 명령어 구분 \ 명령이 한 LINE을 초과할경우 연결 ( ) 명령어 GROUP을 표시 " " ()와 같이 C-SHELL에 명령어 GROUP을 표시하여 해석하도록함 21. BACKGROUND 상태에서 PROCESS수행
말한다.
init process 는 system을 시작했을때 수행이 시작되며 system관리자나 consol에 의해 관리되 고 책임을 갖게된다. 사용자가 logout하면 login shell과 함께 background에서 수행되는 process가 종료되는 것이 아니라 background process의 부모 process를 login shell에서 init process로 옮겨 할당된다.
.login file에서 set notify로 설정하면 backgound 작업중에 system에서 대화식으로 요구되는 입력을 할 수 있게된다. 즉, background작업중 표준 입력 (key board)로 부터 입력을 해야 할 경우 system에서 message를 출력하여 입력을 요구하며 입력이 되면 계속 수행된다.
지정한 시간동안 명령어의 수행을 일시 정지 시키는 명령어
22. 사용자 process의 실행 순위의 조정
process는 0의 실행 순위를 갖으며, -20~20까지의 범위에서 설정 할 수 있다.
=========================================================================================== +19 process가 매우 느리게 수행된다. +10 nice명령어의 실행 순위를 지정하지 않을때 기본 실행 순위 0 보통 작업의 실행 순위 -1 ~ -20 system관리자만 설정 할수있는 실행순서로 process를 빠르게 수행시킨다. 23. 수행중인 process의 정지와 재 수행
작업 제어 명령어
============================================================================================ <명령어> & background에서 명령어나 작업을 수행 jobs 정지상태나 수행중인 작업 번호를 활동 상태의 작업 list 출력 stop<작업번호> 지정한 background작업의 정지 Ctrl+Z 현재 수행중인 foreground작업의 정지 Kill PID PID번호에 의해 작업을 TERM/sjg로 이름지어진 번호를 보내면서 정지 Kill-l 작업 정지 신호의 list bg <작업번호> background작업을 계속 수행 fg <작업번호> foreground 작업을 계속 수행 24. C-SHELL를 이용한 PROGRAM 예
# # default backsrc script # set io = "tar: read error: I/O error" while(1) set d = `date` echo ' ' echo ' ' echo " DATE : "$d[6]. $d[2]. $d[3]. echo " TIME : "$d[4] echo '' echo ' ******************************************************' echo ' CREATE TAPE ARCHIVES, AND ADD OR EXTRACT FILES' echo ' ******************************************************' echo '' echo ' ************************************************' echo ' * 1. file list for m.t *' echo ' * 2. back up (work station ===> m.t) *' echo ' * 3. restore (m.t ===> work station) *' echo ' * 4. exit *' echo ' ************************************************' echo '' echo -n ' WHAT DO YOU WANT TO EXECUTE ? ---- NO. : ' set test = $< echo '' if ($test) then if($test == 1) then mt -f /dev/rst0 rewind while(1) echo ' ******************************************************' echo ' * Display table of contents of the archive *' echo ' ******************************************************' echo '' tar -tvf /dev/nrst0 echo -n ' Continue ("y"/"n") ....................: ' set cont = $< if($cont == n) break end else if ($test == 2) then while(1) echo '' echo ' *******************************************' echo ' * BACKUP MODE *' echo ' *******************************************' echo '' echo -n ' INPUT (file & directory) ............. : ' set fldir = $< tar -cvf /dev/nrst0 $fldir echo -n ' Continue ("y"/"n") ....................: ' set cont = $< if($cont == n) break end
mt -f /dev/rst0 rewind while(1) echo '' echo ' *******************************************' echo ' * RESTORE MODE *' echo ' *******************************************' echo '' echo -n ' INPUT (skip over the end of file).... : ' set skip = $< mt -f /dev/nrst0 fsf $skip echo -n ' INPUT (file & directory) ............. : ' set fldir = $< tar -xvf /dev/nrst0 $fldir echo -n ' Continue ("y"/"n") ....................: ' set cont = $< if($cont == n) break end else if ($test == 4) then break endif end mt -f /dev/rst0 rewind echo ' ***** END OF BACKUP/RESTORE C-SHEEL ***** '
k(-) /\ || h(bs) <----- -----> l(sp) || \/ j(+)
()에 있는 키를 선택하여도 됩니다. ※ bs : BackSpace , sp : SPace bar
^f - (FORWARD) 화면을 one page 앞으로 옮김 ^b - (BACKWARD) 화면을 one page 뒤으로 옮김 ^d - (DOWN) 화면을 반 page 앞으로 옮김 ^u - (UP) 화면을 반 page 뒤으로 옮김 ※ ^ 는 키보드의 <Cntl>를 나타내는 것입니다.
H - HOME, 한 화면의 top line으로 옮긴다. M - MIDDLE, 한 화면의 중간으로 옮긴다. L - LAST, 한 화면의 마지막 line으로 옮긴다. G - GOTO, 화일의 마지막 line으로 옮긴다. nG - GOTO nth line the file (or :n) ^G - GIVES file status
w - WORD, 한단어 앞으로 b - BACKWARD, 한단어 뒤로 e - END, 현재 cursor가 위치한 맨 뒤로 o - zero, line의 맨 앞으로 (or ^) $ - end, line의 맨뒤로
/pattern - scan (/) 'pattern'이라는 글자를 현재 cursor가 위치한 곳의 다음 단어를 검색 ?pattern - scan (?) 'pattern'이라는 글자를 현재 cursor가 위치한 곳의 앞 단어를 검색 n - 앞쪽에서 입력했었던 문자 'pattern' 의 다음단어를 검색 N - 앞쪽에서 입력했었던 문자 'pattern' 의 다음 앞 단어를 검색
:q! - 화일의 내용을 저장하지 않고 exit :w - WRITE, vi를 빠져나가지 않으면서 내용을 저장 :wq - WRITE and QUIT, vi를 빠져나가면서 내용을 저장 ZZ - :wq의 명령과 같다.
Note : ESC (escape key) 는 삽입(insert)를 중지 시키고 명령어 mode로 돌아가는 키이다. i - INSERT, cursor 위치 부터 문자 삽입 I - INSERT, line의 맨 앞부터 문자 삽입 a - APPEND, cursor 다음 위치 부터 문자 삽입 A - APPEND, cursor 위치한 line의 끝부터 문자 삽입 o - OPEN line, 현재의 line 다음에 line 삽입 O - OPEN line, 현재의 line 앞에 line 삽입 r - REPLACE, 한 문자만을 대치 (does not require ESC) R - REPLACE, ESC 키가 입력될때 까지 대치 cw - CHANGE word, cursor가 위치한 곳의 단어 끝까지 대치 (cnw - change n number of words) C - CHANGE, cursor가 위치한 곳에서 line 끝까지 대치 u - UNDOES, 마지막 명령의 취소 U - UNDOES, line전체를 원 상태로 복구 Note : INSERT mode 를 만든는 모든 문자(i, a, o, r, c, s <대문자 포함>) 를 사용하는 경우 insert mode에서 입력 한 내용을 취소하고자 하면, ESC 를 누르고 undo를 수행하는 u를 입력하면 된다.
Y - YANKS (copies) line을 사용자가 보이지 않는 buffer에 저장 nY - YANKS n , n line을 사용자가 보이지 않는 buffer에 저장 * Deleting : x - deletes, 문자 하나를 삭제 (also 'd sp') dw - DELETES words, 문자 하나를 삭제 D - DELETES, cursor가 있는 곳에서 부터 line끝 까지 삭제 dd - DELETES lines, line하나를 삭제 하고 보이지 않는 buffer에 저장 ndd - DELETES n, n line을 삭제 하고 보이지 않는 buffer에 저장 (i.e., 10dd deletes 10 lines) * Putting : p - PUTS, cursor가 위치한 다음 line에 보이지 않는 buffer의 내용을 삽입 P - PUTS, cursor가 위치한 앞 line에 보이지 않는 buffer의 내용을 삽입 xp - cursor 가 위치한 문자와 다음 문자를 교환 * Interactive edit : (search and replace) /pattern - find pattern to be replaced (as above) cw - use a replacement comand (cw, dw, r, s, etc.) n - find next occurrence of 'pattern' - repeat command
* Global replacement : :1,$s/string1/string2/g 1 line부터 끝까지 string1 를 string2 로 대치 e.g., :1,$s/sun/SUN/g * Global delete : :g/pattern/d 1 line부터 끝까지 pattern 을 제거 e.g., :g/###/d (to delete lines inserted by cc file.c | & error-v) * Reading in files : :r file2 - cursor가 위치한 다음 line에 file2를 삽입 * Editing between files : (not needed for SUN system users) :w - 다른 화일을 읽기전에 현재의 화일을 저장 (file1) :e file2 - 두번째 file을 edit하기 위해 load (file2) :w - 두번째 화일을 저장 (file2) :e # - original file 을 수정하기 위해 load (file1) example :w /* file1을 빠져 나가기전에 저장*/ :e file2 /* file2 load */ "x4Y /* buffer 'x'에 file2의 top 4 line을 저장 */ :e # /* file1 을 load (no changes) */ "xP /* buffer 'x'에 저장 되어 있는 내용을 put */
:! cmd - editor안에서 shell command를 수행 하고자 할때 ~ - (tilde or 'wavy'), 대문자를 소문자로 소문자를 대문자로 교환 % - 한 line안에서 (,),{,},[,]를 검색 mx - 문자 x에 현재 위치를 표시 d'x - 문자 x에 표시된 위치 부터 현재 cursor 위치 까지 삭제 ^V - allows for insertion of control characters (e.g., ^L) ?string - scan (/) backward for 'pattern' :n,m w file - n line에서 m line까지 내용을 file 이라는 이름으록 (e.g., 15,25 w file) J - JOINS, cusor가 있는 line과 다음 line을 join :set ai - editor 가 자동적으로 insert tabs을 삽입 :set list - special characters 를 보여줌 (i.e., non-printable characters) :set nows - stop wraparound search :set ts=n - set tab stops to be other than the default (8) :set wm=n - set wrap margin (automatic carriage return insert at n) example : setenv EXINIT 'set ai wm=8 ts=4|map F W|map @ :w^M:e#^M'
- TAPE환경 변수에 설정된 TAPE드라이브에 메세지를 전달하며,TAPE환경변수가 설정되어 있지 않거나, 혹은 다른 TAPE드라이브에 메시지를 전달하려면 -f 옵션을 사용. - TAPE의 위치 조정이나, 되감기 등이 가능하다. fsf # TAPE를 앞쪽으로 skip bsf # TAPE를 뒤로 skip (1/2"테이프드라이브만 가능) rewind TAPE를 되감는다. offline TAPE를 되감고 unit를 offline 시킨다. status TAPE UNIT의 현재 상태및 다른 정보를 보여준다. 예) 디폴트 테잎드라이브 설정 #setenv TAPE /dev/nrst5 #mt command 특정 DRIVE에서의 메세지 전달 #mt -f /dev/nrst5 command #mt fsf 1 : 테이프 앞쪽으로 1번 skip #mt rewind : 테이프 되감기 #mt erase : 테이프 내용 지우기 #mt status : 테이프드라이브의 정보 보기 #mt offline : 테이프드라이브 offline
20.2 tar 명령어
옵션 x : 화일을 restore 한다. ?? c : 화일을 creat 한다. ? 셋중 하나를 반드시 첫옵션으로 사용. t : 화일을 test 한다. ?? f device : 테이프 디바이스 명시 v : verbose mode b size : block size 명시 r : tar file 마지막에 추가 (1/4" 테입드라이브에서는 사용불가) - remote 테이프드라이브를 이용해서 테이프에 화일을 복사 #tar cvbf - 126 files |rsh goldstar dd of=/dev/rst0 obs=1266 - remote 테이프드라이브를 이용해서 현재디렉토리로 화일을 복사. #tar goldstar ss if=/dev/rst0 bs=64b | tar xvBbf - 126 files
? ? ? ??>2.x는 rst4 or 5, rst는 rewind해서 다시 쓰므로 nrst0 ???>t:test, x:restore, c:creat * mt명령을 쓸려면 #ls -al /dev/rst5 하면 rst5가 어디에 link되있는지 확인할수 있다. #mt -f /dev/rmt/
#tar cvf - openwin|(cd /usr/;tar xvf -) 설명 : 현재 디렉토리 하위에 opnewin디렉토리가 있을경우, tar로 openwin및 하위 디렉토리 전체를 묶은뒤 /usr 디렉토리에 openwin을 생성하면서 묶었던 디렉토리 모두를 푼다. * openwin이 수행되기 위해서는 /.cshrc파일에 아래 내용을 포함 시켜야 한다. setenv LANG ko setenv OPENWINHOME /usr/openwin set path=(/openwin/bin....추가) setenv LD_LIBRARY_PATH $OPENWINHOME/lib 20.3 cpio 명령어
예)사용법 #cpio -itv [file or dir name] < /dev/rst5 : test #cpio -idumv [file or dir name] < /dev/rst5 : extract #cpio -ocvB [file or dir name] > /dev/rst5 : create
#cd /usr/openwin #find . -print | cpio -ocvB > /dev/rst5 |---->상대path : restore시 현재 dir밑에 write 절대path로 정하면 무조건 /usr/openwin 에 write #cpio -ocvB /usr/openwin > /dev/rst5 #cd /usr #find openwin -print |cpio -ocvB > /dev/rst5
#find . -print | cpio -pdv /home/etc ; 현재 내용을 /home/etc로 옮길때. 20.4 ufsdump 명령어
※ 참고 : dump / restore (SunOS 4.1.3) ufsdump /ufsrestore (Solaris 2.x) #ufsdump 0uf /dev/rst4 /dev/rdsk/c0t0d0s0 : create #ufsdump 0uf /dev/nrst4 /dev/rdsk/c0t0d0s0 : create #ufsrestore xvf /dev/rst4 : extract #ufsrestore tvf /dev/rst4 : test #ufsrestore ivf /dev/rst4 : information mode - 단일file $>ls or cd or ... $>add file-name $>setmod ......? n $>extract ; ※ 특정 FILE RESTORE시 #ufsrestore ivf /dev/rst4 ufsrestore>add file_name ; 받고자하는 파일 ufsrestore>ls ; 하면 받고자하는 파일에 "*"표시가 되있음. ufsrestore>extract ; 파일이 있는 volume_number를 묻는다. 만약, 첫번째 volume에 있으면, Mount volume에 “1”을 입력.
#ufsdump 0uf - /dev/rdsk/c0t3d0s0 | (cd /home;ufsrestore xvf -) ; 특정 파티션 받을때, disk대disk복사시 root 받을때 유용 #tar cvf - . | (cd todir;tar xvfBP -) ; 특정 디렉토리 받을 때 20.5 Remote Backup
허락 한다는 의미, “+” 기호가 있으면 모든 호스트에 대하여 개방한다는 의미이다. “[host_name] [username]" ; "sun schong" or "sun +" or "+ schong" /.cshrc 파일에 stty function이 없어야 한다.
#tar cvf - .|(rsh avante dd of=/dev/rst5) ; 현재 DIR을 avante의 테잎드라이브에 백업 restore시에는 of 대신 if. REMOTE COPY #rsh sun dd if=/dev/nrst0 | dd of=/dev/nrst1 ; 원격 호스트 "sun" 의 DAT 내용을 현재 내 DAT 에 #rsh sun tar cvpf - filename | dd of=/dev/nrst1 ; 현재 내 DAT에 원격호스트“sun"의 filename을 저장 CREATE A TAR FILE ON A REMOTE TAPE DRIVE #tar cvf - filename | rsh remotehostname dd of=/dev/nrst0 ; SUN의 /usr/sbin을 SUN2의 /export/sbin에 생성시킬 때 SUN#tar cvf - /usr/sbin | rsh SUN2 dd of=/export/sbin/sbin.tar #rsh sun dd if=/dev/nrst4 | tar xvf - ; dd 는 표준출력이므로 “|”을 하고, 출력을 지정하지 않으면 위의 리모트 호스트 에 해당하는“sun"에 직접 풀어 버린다. ※ 주의 ; 원격 호스트의 DAT에서 현재 시스템으로 Restore할 경우 “|”에 유의! 20.6 Remote CD-ROM Mount
local_machine : CD Drive 없는 system 2. local_system and remote_system 공통 # vi /.rhosts + # vi /etc/hosts.equiv + 3. local and remote system에 OS가 Solaris 2.x 일때 a. remote# mkdir -p /cdrom/unnamed_cdrom b. remote# mount -F ufs -r /dev/dsk/c0t6d0s2 /cdrom/unnamed-cdrom c. remote # vi /etc/dfs/dfstab file에 다음을 삽입 share -F nfs -o ro /cdrom/unnamed_cdrom d. system reboot e. remote# shareall f. remote# rlogin local_machine -l root g. local# mkdir -p /cdrom/unnamed_cdrom h. local# mount -r remote_machine:/cdrom/unnamed_cdrom /cdrom/unnamed_cdrom 4. remote system : Solaris 2.x local system : Solaris 1.x (Sun OS 4.1.x) a. ~ f. 까지 3번과 같음 g. mkdir /cdrom h. mount -r remote_machine:/cdrom/unnamed_cdrom /cdrom 5. remote and local system : Solaris 1.x 일때 a. remote# mkdir /cdrom b. remote# mount -r /dev/sr0 /cdrom c. remote# vi /etc/exports file에 다음을 삽입 /cdrom -ro d. system reboot - export file modify 했을경우는 system rebooting 하지않고 /usr/etc/exportfs -a command로 확인하면 됨 e. remote# rlogin local_machine -l root f. local# mkdir /cdrom g. local# mount -r remote_machine:/cdrom /cdrom 20.7 DEVICE 관련된 사항
0 sd0 c0t0d0s0 1 sd1 c0 - scsi controller number 2 sd2 t0 - target number 3 sd0 ---> default do - disk number 4 st ?? Tape s0 - partition(slice) number 5 st ?? 6 cdrom 7 scsi
1. CD-ROM * 4.1.3 에서는 /dev/sr0 or /dev/sr1 2.x 에서는 /dev/sr5 or /dev/sr6 2. Tape-Drive 1) /dev/rst4 or 5 <---- boot -r 로 부팅이 이루어 졌을때. * 4.1.3에서는 rst0 or rst1 Reconfiguration옵션(boot -r)없이 부팅된 상태라면 명령라인에서 "drvconfig", "disks" or "tapes" ... 2) /dev/rmt/0nm or 1nm <---- drvconfig , tapes 명령으로 임시접속 시켰을 때의 Device_name
ST: Seagate (회사명) , 4: Form-Factor , 10800: Mbyte , N: Interface Form-Factor 1 = 3.5-inch, half-height (41mm) 3 = 3.5-inch, 1-inch height (25mm) 4 = 5.25-inch, full-height (82mm) 5 = 3.5-inch, 0.75-inch height (19mm) 7 = 1.8-inch 9 = 2.5-inch Mbytes Unformatted capacity (approx) Interface A = AT(IDE) AD = 50pin 1.3inch AT FC = Fibre Channel N = SCSI, 8-bit NC = Single Connector SCSI, 8-bit ND = Differential SCSI, 8-bit W = SCSI, 16bit WC = Single Connector SCSI, 16-bit WD = Differential SCSI, 16-bit P5 = PCMCIA, 5V G = SafeRiteTM K = IPI-2 ※ 99년인 요즘은 N 타입 후속인 LW 와 WC 후속인 LC 타입이 주류를 이루고 있다. 속도(RPM) 도 많이 증가하여 현재는 10,000RPM 에 달하고 있다. 20.9 Addon DISK(추가 디바이스 설치)
ok boot -r ; 확인이 되었다면 Reconfiguration부팅 #format -> partition(print,label,q) ; 파티션 설정후 labeling 및 backup 한다음 quit 2) #newfs /dev/rsd1g ; 2.x에서는 “/dev/rdsk/c0t1d0s6” 처럼 표현 #mount /dev/sd1g /usr ; 만들어진 파일시스템을 mount_point에 마운트 #vi /etc/fstab ; 부팅시 인식시키기위한 마운트 테이블 편집(2.x일 경우는 /etc/vfstab 파일) 3) #fsck /dev/rsd1g ; 최종적으로 파티션 check 또는 "fack /dev/rdsk/c0t1d0s6" (2.x일경우) 20.10 DEVICE 설치
#STOP+A: 시스템 잠시 멈추기 위함. - device를 붙이고, "go"명령으로 복귀후 다음 실행 - 위험하므로, 특별한 경우가 아니면 power off 후에 하는게 좋다. #drvconfig #disks ------> tapedrive이면 "tapes" #format 2. 시스템을 shutdown 하고 boot -r으로 재부팅하면, 위의 예처럼 device를 인식할수 있다. ※ vfstab(/etc)에 디바이스 명을 기입해주면 부팅시 자동으로 디바이스 인식. 4.x에서는 fstab. * therd-party SCSI interface 설치(아답텍Controller을 SUN PCI 에 설치시) Installing The Device Driver (Version 2.0 or Later) For Solaris SPARC 2.5.1 / 2.6
Installing from a floppy Disk
1. Log on to The Solaris Operation System as root.
2. At the superuser prompt(#), type the following command and press Enter; # mkdir floppy # /etc/init.d/volmgt stop # /etc/init.d/volmgt start # volcheck # cd /floppy/floppy0 # cp 780fv200.dd.Z /tmp
3. Then type the following and press displayed; # cd /tmp # uncompress 780fv200.dd.Z # pkgadd -d 780fv200.dd
The following software package is displayed; 1. ADPadp Adaptec 294X(U)W/394X(U)W/4944(U)W SCSI Host Adapter Driver (Ultra Sparc) release v2.00 Press Y to answer yes to each question that follows.
4. When the following messages is displayed, type q to quit the installation; Installation of <ADPadp>was successful.
5. Reboot the system to enable the new device driver to take effect.
파티션 설정후 label하고 Q로 나온다. ※ defect, backup은 추후/etc/format.dat에 파티션내용이 defect로 list잡은후 저장된다. commit실행후 Q로 나온다. backup실행후 label을 다시한 후 Q로 나온다. 20.12 SCSI Disk의 RPM조정
- Single Boot # adb -w /kernel/unix SCSI_options? W 58 $q # boot -r - 4.1.x에서 # adb -w /vmunix SCSI_options? W 58 # boot -r
ok test-floppy ; floppy디스크 test .. 이상 없다면, System booting 진행. ok boot -r ; boot sd(0,1,0) -r --> SunOS일 경우 로긴하고,... sun#volcheck ???> Floppy드라이브를 시스템이 자동마운트 한다. 대게는 /floppy/no_name.. 이렇게 마운트 될것이다.
kill 하고 tar를 사용하면 된다. #ps -ef|grep vold ; 자동마운트 데몬을 찾는다. #kill -9 vold_pid ; 데몬을 kill 한다. #tar xvf /dev/floppy ; data를 down_load 한다. #eject fd ; 디스켓을 꺼낸다. 20.14 /(루트) file System restore
Boot device: /sbus/esp@0,8000000/sd@6,0:c File and args: -sw SunOS Release 5.1 Version Generic [UNIX(R) System V Release 4.0] INIT: SINGLE USER MODE # newfs /dev/rdsk/c0t3d0s0 newfs: construct a new file system /dev/rdsk/c0t3d0s0: (y/n)? y /dev/rdsk/c0t3d0s0: 59760 sectors in 83 cylinders of 9 tracks, 80 sectors 30.6MB in 6 cyl groups (16 c/g, 5.90MB/g, 2688 i/g) super-block backups (for fsck -F ufs -o b=#) at: 32, 11632, 23232, 34832, 46432, 58032, # fsck /dev/rdsk/c0t3d0s0 ** /dev/rdsk/c0t3d0s0 ** Last Mounted on ** Phase 1 - Check Blocks and Sizes ** Phase 2 - Check Pathnames ** Phase 3 - Check Connectivity ** Phase 4 - Check Reference Counts ** Phase 5 - Check Cyl groups 2 files, 9 used, 27742 free (14 frags, 3466 blocks, 0.1% fragmentation) # mount /dev/dsk/c0t3d0s0 /a # cd /a # ufsrestore rvf /dev/rmt/0 # rm restoresymtable # cd / # umount /a # fsck /dev/rdsk/c0t3d0s0 ** /dev/rdsk/c0t3d0s0 ** Last Mounted on /a ** Phast 1 - Check Blocks and Sizes ** Phast 2 - Check Pathnames ** Phast 3 - Check Connectivity ** Phast 4 - Check Reference Counts ** Phase 5 - Check Cyl groups 1779 files, 12509 used, 15242 free (34 frags, 1901 blocks, 0.1% fragmentation) # cd /usr/lib/fs/ufs 2.x일 경우 # installboot bootblk /dev/rdsk/c0t3d0s0 sol 2.6일 경우 # reboot /usr/platform/sun 4x/lib/fs/ufs/bootblk
* 참고 /에 “ufsboot" file이 존재하는지 확인 없으면 CD에서 Copy 없을 경우 다음과 같은 error 발생 ⇒ error message : boot loader fast 21장. 시스템 ERROR 및 문제해결(Q&A) 21.1 Emergency Keyboard Commands
------------------------------------------------------------------------------- STOP STOP STOP STOP (Press/Hold during Power-Cycle) 21.2 directory write problem-/home & /net ( Solaris2.x )
write 할 수 없음. A) /home 과 /net directory는 특별한 directory 로써 automounter 를 위한 mount points 이다. automounter 를 disable 하려면 /etc/rc2.d/S74autofs 를 /etc/rc2.d/s74autofs 로 rename 하면 되고, autofs 을 다른 file system 을 사용하여 configuration 하고 /net 이나 /home directory 는 autofs 에서 제외 하려면 /etc/auto_master file에서 /net 이나 /home 을 comment out 시키면 일반적인 file system으로 쓸 수 있다.
# Master map for automounter # +auto_master /net -hosts -nosuid /home auto_home /xfn -xfn 21.3 ROOT 패스워드 잊어버렸거나, 중요시스템화일 오류시
* 패스워드 파일에 오류가 있을 때 조치 순서 Single모드로 boot 한다. 1. Solaris 2.x O/S CD-ROM으로 boot한다. 2. 화일 시스템을 mount하여 화일을 수정한다. 3. 화일 시스템을 umount한다. 4. 시스템을 Reboot한다.
ok boot cdrom -s 혹은 boot sd(0,0,0) -s : : INIT: SINGLE USER MODE #mount /dev/dsk/cot3d0s0 /mnt #TERM=sun ???? * 중요부분 #export TERM ???? #setenv TERM sun #cd /mnt/etc #vi passwd #cd / #umount /mnt #reboot 21.4 FileSystem이 손상된경우(BootBlock 복구)
1. OS installation 테이프나 CD로 부터 MINIUNIX를 로드 하여 시스템을 부팅 하고,
#mount /dev/sd0a /a #cd /usr/mdec #installboot /a/boot bootsd /dev/rsd0a 2) 시스템을 재부팅한다. #cd / #umount /a #fsck /dev/rsd0a #[stop]+[a] or sync;sync;halt >b (2.x Admin 22-24참고) 21.5 Inode 가 full인 경우 조치
# newfs -i 1024 /dev/rid000h # fsck # mount /dev/rid000h /user # df -i 21.6 System DISK 옮길때
2) newfs 로 새로운 disk의 파일system 생성 3) mkdir /a 4) mount /dev/sd3a /a 5) dump 0uf - /dev/rsd0a | (cd /a; restore xvf -) 6) installboot 실행해서 새로운 disk에 boot_block 생성 7) fstab에 새로운 target_ID로 수정 8) 새로운 disk로 REBOOT 21.7 ORACLE용 DISK Addon
새로운 ORACLE-partition이 c0t0d0s5 라고 했을때, #chown oracle /dev/dsk/c0t0d0s5 #chgrp dba(?) /dev/dsk/c0t0d0s5 #chown oracle /dev/rdsk/c0t0d0s5 #chgrp dba(?) /dev/rdsk/c0t0d0s5 오너와 그룹을 오라클 용으로 바꾼후 오라클용 파티션으로 생성 시킨다. ※ 오라클에서 시스템 REBOOT후 오라클용 파티션의 퍼미션이 바뀌는 경우, 오라클의 STARTUP이 이루어 지지 않을 경우가 있으므로 주의! -----> rc2.d 에 자동으로 퍼미션 변경해주는 파일 포함시켜 해결. 21.8 프린터관련
/dev/ecpp0 21.9 FrameBuffer관련
- 컬러수 조정 : /usr/openwin/server/etc/OWconfig를 아래 내용으로 편집후 저장. 내용중 depth부분을 기본 8bit로 되어있는데, 이를 24bit로 조정한다. 21.10 Sun H/W 장애 Q&A
즉, format 명령어 사용시 “drive type unknown" 이라고 출력하는데 만약 여기서 파티션 작업을 하면 기존의 데이터를 잃어버릴 것으로 생각되는데 기존의 데이터를 살릴 수 있는 방법이 무엇 인지? 파티션 정보를 다시 만들어서 라벨링을 다시 하였을 경우 그냥 newfs 안하고 사용가능 한지요? A) 기존의 블록을 정확히 안다면 별 문제 없이 라벨링 가능하다. 물론 데이터에도 별 영향 없다. fsck를 실행시켜서 정확한 에러 부분을 확인하여야 한다. fsck를 실행시켜 보면 어떠한 조치를 해야 하는지에 대하여 알수 있다. fsck 명령 사용시 script 명령을 사용해서 정확한 내용을 알아둘 것. format 명령중에서 partition 명령 중 la 명령을 사용할 때 “current disk unformatted" 라는 메시지가 나오는데 이런 경우는 기존에 사용했던 내용과 일치하지 않기 때문인데 이때 /var/adm/message 파일을 참조해서 실행하면 된다.
A) > ifconfig hme0 plumb<enter> ---- H/W 적으로 이상이 없을 시에는 아무런 반응이 없음. ---- H/W 적으로 이상이 있을 시에는 error code값을 return 함. > ifconfig hme0 ipaddress netmask 255.255.255.0 up<enter> > ifconfig -a 로 확인
A) ndd /dev/hme link_status 0 = link down 1 = link up ndd /dev/hme link_speed 0 = 10 Mbit/sec 1 = 100 Mbit/sec ndd /dev/hme link_mode 0 = half duplex 1 = full duplex Q) 시스템 Booting시 갑자기 화면이 오동작(사라졌다가 나타나는등..)하면서, 화면에 "watchdog reset" 메시지가 뜨면서 Booting이 이루어지지 않을 때. A) ok test-memory 해서 메모리의 이상 유무를 확인한다.
TFTP open of file /tftpboot/sgsce.abs.Z 위 두file failed 시 A) dir내에 두file존재유무 확인 없으면 , find / -name "sgs*" -print 로 찾아서 dir내에 copy 한후, 터미널 재부팅 ※ sgsce.abs.4.1.1 , sgsme.abs.4.1.1.Z 같은 형태로 시스템에 존재할것임.
"Fast Data Access MMU Misc" 메시지 나오면서, 부팅이 안된다. A) boot block 의 손상일 경우 CD-ROM을 통한 싱글모드 부팅한후 boot block 복구
CPU Board #1을 제거후 다시 Power ON 할 것 A) 원인 ; system이동시 진동에 의한 충격 의심
- 초기 인스톨시에는 기존 파티션을 지우고 설치 진행한다. Netra 가 스스로 파티션 생성하며 설치를 하게 된다. - Netra 설치 매뉴얼에 따라 모든 Package들이 설치 되도록 한다. setup으로 login후 S/W설치시 Cluster,Package,Patch... 모두설치. - ATM(FORE Sbus 카드)사용시 모든 Package가 인스톨 안되면 문제 될 수 있음. ATM카드의 S/W인스톨시 진행이 안되고 Killd 메시지 뿌리면서 중단되는 현상
한글 관련 Package를 추가 설치 해야 된다.
1) 한글 솔리리스 OS Media를 CD드라이브에 넣고 마운트 한다. 이때 설치하려는 Netra OS 와 동일한 Version 이어야한다. 2) #cd cdrom; cd ko_*; cd s0 #pkgadd -d . 3) Package 중에서 20개 ALE를 add 한다. ALE_number : 14,15,16,68,73,74,75,76,77,78,79,80,81,82,83,89,90,91,92,93 4) System reboot ! 21.11 Application 관련 ERROR
아래 파일들을 확인 및 새 HOST_NAME으로 조정 해줄 것 /etc/opt/licenses/licenses_combined /etc/opt/licenses/LIC_CONFIG_SCRIPT /opt/SUNWspro/license_dir/sunpro.lic,1 호스트 네임을 조정후 LIC_CONFIG_SCRIPT 다시 실행하고, #ps -ef|grep lmgrd 데몬 확인후 #source /.cshrc 하고, test 해볼 것
/.openwin.init file을 삭제후 openwin을 실행 /.openwin.init file의 내용중 * "toolwait /usr/openwin/bin/htt -root-geom 410x32+734+860" 부분이 없기 때문에 입력서버가 안나타남.
* Host-name이 바뀌었을경우 /etc/opt/licenses/licenses_combined /opt/SUNWspro/license_dir/sunpro.lic.1 위 두 파일에서 host_name이 틀리면 컴파일러 실행시 license error가 발생한다. 호스트 네임 변경시 이 파일을 고쳐줘야 한다. * 컴파일시 ERROR - License Error : Cannot connect to the license server(vines).. for product(SPARCompiler C). (License server may not have been started) Cannot connect to license server(-15,12:146)Connection refused cc:acomp failed for test.c
- /tmp/license_log 파일이 아래 메시지 뿌리면서 lmgrd 가 잘 가동 안될 때 12:12:56(lmgrd)FLEXlm(v4.1)started on vines(Sun)(7/19/97) 12:12:56(lmgrd)FLEXlm Copyright 1988-1994, Globetrotter Software,Inc. 12:12:56(lmgrd)License file: "/etc/opt/licenses/licenses_combines" 12:12:56(lmgrd)Starting vendor daemons ... 12:12:56(lmgrd)Started suntechd 12:12:56(suntechd)Not logging IN messages 12:12:56(suntechd)Not logging OUT messages 12:12:56(suntechd)Not logging QUEUED messages 12:12:56(suntechd)FEATURE sunpro.c LICENSE LINGER set to 300 seconds 12:12:56(suntechd)FEATURE sunpro.sparcworks.tools INACTIVITY TIMEOUT set to 3600 seconds 12:12:56(suntechd)FEATURE sunpro.common INACTIVITY TIMEOUT set to 3600 seconds 12:12:56(suntechd)Vendor daemon can't talk to lmgrd(Cannot read data from license server(-16,15:9) Bad file number) 12:12:56(lmgrd)Vendor daemon died with status 240 12:12:56(lmgrd)Since this is an unknown status,lmgrd will 12:12:56(lmgrd)attempt to re-start the vendor daemon. 12:12:56(lmgrd)REStarted suntechd(internet tcp_port 32920 pid 928) : : : 위의 내용을 만들면서 lmgrd가 start가 안되는 경우 - /etc/rc2.d/S85lmgrd 내용중 맨윗줄에 아래 내용을 삽입한다. "ulimit -n -1024" - lmgrd서버를 다운 시킨다. /etc/opt/License/lmdown -c license_combined -q - /tmp/license_log & license_error 두파일 삭제후 재 가동. - 원인 : license server가 열려는 port갯수가 모자란다.
* Exeed 실행이 안될 때 확인 사항. - 사용자 홈디렉토리의 ~/.cshrc 파일에서 xdm 실행파일이 있는 DIR이 PATH에 등록되어 있는지 확인(일반사용자가 Exeed사용시 PATH문제로 실행이 안되는 경우가 있다.)
* Solaris 2.x 에서 Netscape 운용시 Library 관련 파일문제로 error 화면 발생시 .cshrc 파일의 setenv LANG ko 에서 ko 대신 “C” 로 대체
- Sendmail을 다시 install 한 후에 메일을 보낸후 다음과 같은 에러가 생겼다. queuename : Cannot create "qfRAA07462" in "/var/spool/mqueue" (euid=115):Permission denied 이 경우 다시 테스트 해보니 Super User의 권한으로 메일이 가고, 일반사용자의 메일 전송시 위와 같은 에러가 생김을 알 수 있었다. ; /usr/lib/sendmail의 mode를 맞추어 준다. 에러가 생길 당시의 mode는 751이었는데, 정상적인 sendmail의 mode는 4551이다. 따라서, 다음과 같은 명령어로 sendmail의 mode를 Change 시킨후에 sendmail daemon을 다시 시작 하면 sendmail이 잘 실행된다.
#ls /usr/lib/sendmail -r-sr-x--x 1 root sys 295544 12월 8일 08:49 sendmail * 21.12 MOD에서 media를 인식못할때
media의 SECTOR당 BYTE수를 확인하라. Solaris File System : 512bytes/sector 이보다 크다면, 인식 못할 것이다. 21.13 rm command로 지워지지않는 file 지우는 방법
. ls -li filename /* indode number를 확인한다. */ 82 -rw-r--r-- 1 kumars 0 Jun 26 09:13 filename . df . /* 현재 filesystem의 device file을 확인한다. */ /home (/dev/dsk/c0t3d0s7 ): 104682 블럭 236066 파일 /* Solaris 2.x 예. */ . clri /dev/dsk/c0t3d0s7 82 /* inode를 지운다. */ . Reboot if it's on root or else: A. sync ; sync ; sync B. kill -i5 1 or shutdown now /* for single user */ C. umount filesystem D. fsck -y /dev/xxxxx -y E. ^D to multiuser . fsck /* fsck를 하는동안 remove할것인지를 물으면 "y"로 답한다. */
22.1 Tuning the system for a web server
다음은 Sun system 에서의 web server 를 구축시에 고려해야할 것들이다.
/usr/sbin/ndd -set /dev/tcp tcp_ip_abort_interval 60000 /usr/sbin/ndd -set /dev/tcp tcp_close_wait_intercal 60000 /usr/sbin/ndd -set /dev/tcp tcp_keepalive_intercal 300000
*reboot system, or restart httpd. 22.2 Linux Network setup
# modprobe de4x5
alias eth0 de4x5 alias eth1 de4x5
# ifconfig eth0 xxx.xxx.xxx.xxx(시스템 IP 주소)
# ifconfig eth0
# ifconfig eth0 down
# route add -net xxx.xxx.xxx.0 eth0 또는 # route add -net xxx.xxx.xxx.0
# route del -net xxx.xxx.xxx.0
# route add default gw xxx.xxx.xxx.xxx(게이트웨이 IP 주소) 22.3 Snoop
# snoop -o /tmp/packet_file ; packets capture, packet_file 로 저장된다. # snoop -i /tmp/packet_file ; read packets, 저장된 packet_file을 볼 때 사용. # snoop broadcast packets ; examine broadcast packets. # snoop -v broadcast ; print verbose broadcast packet header information # snoop -v arp ; print verbose ARP packet header information. -s 120 ; 패킷 헤더부분 120 byte만 잡을 때 -c 100 ; 100개의 패킷만 잡을 때 22.4 Address Resolution Protocol(ARP)
network interface/hardware layer(Ethernet) layers. It is used by a host to prepare a unit of information for network transmission.
- examine all entries in the ARP table. #arp hostname - examine a specific ARP table entry. #arp -s hostname ether_address - Add apermanent ARP table entry. #arp -s hostname ether_address temp - Add a temporary ARP table entry. This entry will expire after 20 min. #arp -s hostname ether_address pub - Add published ARP table entry.
- If a diskless client refuses to boot, use the following system startup script to restart any missing processes. #/etc/init.d/nfs.server start 22.5 ifconfig
- examin the status of all network interface. #ifconfig interface where interface is the name le[0-9], ie[0-9], etc. #ifconfig -a lo0: flags=849<UP, LOOPBACK, RUNNING, MULTICAST> mtu 8232 inet 127.0.0.1 netmask ff000000 le0: flags=863<UP, BROADCAST, NOTRAILERS, RUNNING, MULTICAST> mtu 1500 inet 129.150.182.5 netmask ffffff00 broadcast 129.150.182.255 ether 8:0:20:b:18:0 * The fields are: - Interface name - Loopback interface (lo0) The loopback is used for testing purpose and whenever a host needs to send packet to itself. - Other interface names may be le[0-9] or io[0-9]. - Flags - UP : This flag indicates that the interface is marked "up" and will send and receive packets through the interface. - DOWN (not shown) : Conversely, the interface may be marked "down." When an interface is marked "down," the interface will not pass or forward packet to the host. - NOTRAILERS : This flag indicates no support for non-standard encapsulation of IP packets on certain link levels. - RUNNING : The flag means the interface is recognized by the host. - MULTICAST : This flag indicates the interface supports a multicast address. - BROADCAST : This flag indicates that the interface supports a broadcast address. - Maximum transfer unit (MTU) For example, mtu 8232, and mtu 1500. The MTU determines packet fragmentation at the network layer. - Internet address For example, inet 129.150.182.5. The internet address is used to respond to and create ARP queries. - Netmask For example, netmask ffffff00. The netmask is applied to incoming and outgoing packets at the network layer. - Broadcast address For example, broadcast 129.150.182.255. The broadcast address is used to send messages to all hosts. - Ethernet address For example, and ether 8:0:20:b:18:0. The Ethernet address is used to respond to and create ARP queries. 22.6 The startup script results in the following
- in.routed is invoked at boot time by the /etc/init.d/inetinit script. It is used to update routing tables. On routers, by default, it broadcasts the routes every 30 second. #in.routed -q To start in.routed in quiet mode with the -q option to keep from broadcasting. (router가 아닌 경우) #in.routed -s To make an non-router broadcast as if it were a router Software적으로 router기능을 setting하고자 하는 경우. #in.routed -v /var/adm/routelog To log the actions of in.routed
- in.routed -s - in.rdisc -r /etc/init.d/inetsvc This script initializes the multicast route for address 244.0.0.0. The script executes the command route to add a path to this destination. The route command is covered later in this lesson.
Routing Table : Destination Gateway Flags Ref Use Interface --------- --------- ----- ---- ------------ localhost local host UH 0 2272 lo0 192.9.50.1.0 chesapeake U 3 562 le0 195.200.200.0 yogi-r UG 10 1562 le0 193.253.253.0 potato-r UG 3 562 le0 224.0.0.0 chesapeake U 3 0 le0
Destination The destinaton network or host. This field refercences the file /etc/inet/networks or /etc/inet/hosts. Gateway The host that delivers or forwards the packet. Flags The status of this route. This field uses the following flags : U The interface up. H The destination is a host not a network. G The delivery host is another host(an indirect path). D The path is an ICMP redirect entry. Ref The reference count indicating the current number of active uses of the route. Use The number of packets sent using this route. For the localhost entry it is the number of packets received. Interface The interface used to that destination. 22.7 The route Command
# route [-fn] add|delete [host|net] destination [gateway[metric]] # route add net 195.200.200.0 yogi-r 1 To add a route # route add net Marketing yogi-r 1 To add a route suing a network name # route delete net 195.200.200.0 yogi-r To delete net 195.200.200.0 yogi-r # route -r To flush the routing table # route add 224.0.0.0 `uname -n` 0 Add the multicast path for 224.0.0.0 # netstat -r 했을 때
Destination Gateway Flags Ref Use Interface ----------------------------------------------------------------------- localhost localhost UH 0 139 lo0 203.252.9.25 sun.dct.co.kr UH 4 635 sl0 129.254.10.0 sun.dct.co.kr U 2 43 le0 default 203.252.9.25 UG 0 635
“route add default 203.252.9.25 1” 22.8 Router Configuration
with the host name on this interface. hostname-for-le1 2. Edit the file /etc/inet/hosts and add the new IP address and host name. IP-address hostname-for-le1 3. Perform a reconfigure boot and halt the system to add the second Ethernet card #halt ok boot -r 4. After the system reboots, verify the new interface parameters. #ifconfig -a
This daemon is started only if the in.named configuration file exists. 22.9 2'nd ethenet설치
/etc/hostname.le1 새로 생성된 화일 편집해서 리부팅 /etc/hosts /etc/networks /etc/netmasks
2. 위에서 등록시킨 이름 및 IP_Addr 를 호스트 파일에 추가시켜 준다.
#ping 등록명 등록명 is alive.
#ifconfig -a : le0, le1 확인.
1) /etc/hosts, hostname.le0~? 요구파일 생성 or 편집 2) 기존 le0는 #ifconfig le0 down 하고, 아래와 같이 추가되는 port 셋팅. ifconfig le1 . . . . broadcast . . . 3) /etc/rc.boot 파일의 hostname.* 으로 test 하는 부분을 hostname.le1으로 고정하면, system booting 시에 le1만 Check 한다. 22.10 4.1.3 DNS setup Client
DOMAIN kaeri.re.kr nameserver 134.75.97.26 (nanum system IP address 등록) 2. mkdir /var/yp 3. cp /usr/lib/nis.Makefile /var/yp/Makefile or (CD에서 Makefile 생성) mkdir /var/yp cd /tmp /usr/etc/install/extract_files sr0 root -f ./var/yp/Makefile mv ./var/yp/Makefile /var/yp 4. vi /var/yp/Makefile #B=-b #을 제거 B= #을 삽입 5. vi /etc/rc.local ypxrd line # 삭제 6. /usr/etc/yp/ypinit -m 22.11 SLIP
#cd /etc/rc2.d #ls *slip 찾아서 아래file이 있으면, #sh -x /S69slip 이라고 typying #ifconfig -a 로 sl0가 떴는지 확인 22.12 SUN ATM 설치시
/etc/laneconfig ? 편집, 초기설치시 예제 참조 /etc/aarconfig(?) ?? * IPV값을 Switch 와 같게 ... 22.13 IP Aliasing
1.1.1.7 dct.dct.co.kr dct loghost → 기존 1.1.1.8 dct1.dct.co.kr dct1?? 1.1.1.9 dct2.dct.co.kr dct2?? 추가 IP ② hostname.le0 hostname.le0:1 → dct1 hostname.le0:2 → dct2 ③ ifcomfig le0:1 inet 1.1.1.8 netmask 0xffffff00 broadcast 1.1.1.255 ifconfig le0:1 ap * le0:2 도 마찬가지로 해줌. ④ Reboot(option) boot 하면서 Interface 에 le0, le0:1, le0:2 가 보인다. 웹 호스팅은 → IP Aliasing 후에 Apache 웹서버 설치후 http.conf 편집하면 Virtual host 등록 부분이 있다.
22.14 Static-Routing example
"제 1회 연구 전산망 워크샵/튜토리얼 자료집" p229를 재구성함. 복잡한 network에서의 실제 static route를 잡는 예제로 유용할 것임.
|--------------------------------| 128.20.6 |① |② |③ +-------+ +-------+ +--------+ +--------+ +-------+ | ceo | | cfo | | Hill | | senate | | house | +-------+ +-------+ | router | +--------+ +-------+ |② |③ +--------+ |------------------------------| 128.20.5 | |① Directors-subnet +--------+ +-----------+ | DC | +--------+ | Directors | | router | | netman | | router | +--------+ +--------+ +-----------+ |⑥ |① |⑤ Backbone ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ 128.20.1 |③ |② |⑦ +-----------+ +--------+ le1 | +-------+ +-------+ | Marketing | | R & D | +--------+ | moe | | larry | | router | | router | | werner | +-------+ +-------+ +-----------+ +--------+ +--------+ |③ |② |① |① le0 |② |-----------------------------------| 128.20.3 |--------------------------| 128.20.2 | Marketing-subnet |④ |③ R&D-subnet +--------+ +--------+ +---------+ |////| | wilbur | | orville | | Bridge | +-------+ +--------+ +---------+ |////| | curly | +--------+ +-------+ | | ② |---------------------------| 128.20.4 Marketing Annex subnet
┬ ┬ Basic ┬ route add 127.0.0.1 127.0.0.1 (lo0를 잡음) │ Simple │ routing │ route add 128.20.2 127.20.2.2 (le0를 잡음) │ routing │ ┴ route add 128.20.1 127.20.1.7 (le1을 잡음) │ │ Full │ ┴ route add default 128.20.2.1 1 (le0를 잡음) routing │ │ route add 128.20.3.0 128.20.1.3 1 (le1을 잡음) │ route add 128.20.4.0 128.20.1.3 1 (le1을 잡음) │ route add 128.20.5.0 128.20.1.5 1 (le1을 잡음) ┴ route add 128.20.6.0 128.20.1.6 1 (le1을 잡음) (2) routing table % netstat -nr Destination Gateway Flags Refcnt Use Interface 127.0.0.1 127.0.0.1 UH 3 0 lo0 128.20.2 128.20.2.2 U 4 95778 le0 default 128.20.2.1 UG 0 0 le0 128.20.1 128.20.1.7 U 4 95778 le1 128.20.3 128.20.1.3 UG 0 0 le1 128.20.4 128.20.1.3 UG 0 0 le1 128.20.5 128.20.1.5 UG 0 0 le1 128.20.6 128.20.1.6 UG 0 0 le1
route add default 128.20.3.1 route add 128.20.4.0 larry 0 (Bridge를 다루기 위한 routing) 22.15 C-class netmask 방법
8개는 256/8=32 netmask number는 224 (256-32) 즉, 255.255.255.224 4개는 256/4=64 netmask number는 192 (256-64) 즉, 255.255.255.192 2개는 256/2=128 netmask number는 128 (256-128) 즉, 255.255.255.128 1개는 256/1=256 netmask number는 0 (256-256) 즉, 255.255.255.0
0 -----------31 32-----------63 64-----------95 96----------127 128---------159 160---------191 192---------223 224---------255 | | loopback NO broadcast NO
lo0: flags=849 mtu 8232 inet 127.0.0.1 netmask ff000000 le0: flags=863 mtu 1500 inet 203.240.159.36 netmask ffffffe0 broadcast 203.240.159.63 | | netmask가 224이기때문 host NO에 따라 변함 (36은 32-63사이에 있음) 22.16 NDD를 이용한 Tuning변수(Solaris2.x)
해당 Driver들에 대한 적절한 변수의 열람을 보려면 다음예와 같다. % ndd /dev/arp \? % ndd /dev/ip \? % ndd /dev/tcp \? % ndd /dev/udp \?
% ndd -set /dev/ip ip_forwarding 0
% cat /etc/rc2.d/S69inet ... # # Set configurable parameters. # ndd -set /dev/tcp tcp_old_urp_interpretation 1
# ndd device variable
# ndd /dev/ip ip_debug 0
------------ ip_def_ttl Determines the default Time To Live value for standard IP packets. The default value is 255.
Determines if the workstation will route packets. This variable can be one of three selections: 0 Never forward 1 Always forward 2 Only forward when two or more interfaces are up The default value is 2.
Determines whether the host should send ICMP redirects when it routes packets. The default value is 1 (True).
------------- tcp_close_wait_interval Despite the misleading name, this variable actually sets the time wait interval (the 2MSL value). The default value is 240000 ms (4 minutes).
Determines the default Time To Live for TCP/IP packets. The default value is 255.
Determines how frequently to test if an idle connection is still alive. The default value is 7200000 ms (2 hours).
Determines the Maximum Segment Size for nonlocal packets (i.e., packets to be sent to different networks or subnets). The default value is 536 bytes.
Determines the maximum value of the TCP receive window. The default value is 8192 (8k).
Determines the smallest TCP port number that may be used for an anonymous connection. The default value is 32768.
Determines the maximum value of the TCP transmit window. The default value is 8192 (8k).
Determines the minimum value of the TCP transmit window. The default value is 2048 (2k).
------------- udp_def_ttl Determines the default Time To Live for UDP packets. The default value is 255.
Determines whether checksums should be done for UDP packets. The default value is 1 (True).
Determines the maximum value of the UDP receive window. The default value is 8192 (8k).
Determines the smallest UDP port number that may be used for an anonymous connection. The default value is 32768.
Determines the maximum value of the UDP transmit window. The default value is 8192 (8k).
Determines the minimum value of the UDP transmit window. The default value is 1024 (1k). 22.17 IP forwarding을 disable(solaris2.x)
ndd parameter중 ip_forwarding에 대해서 이해하여라.
하나는 ethernet이고 다른 하나는 fddi card라고 하자. 2개의 network간에 ip forwarding을 disable하기를 원한다.
수행하면 값이 나온다.
------------------------------------------------------------------ . Solaris 2.4 이하 version의 경우 당신의 장비를 multiple-interface machine로 Router로 운용하고 싶지 않다면 /etc/init.d/inetinit을 수정할 필요가 있다. 다음 두 line을 찾아 보아라. numifs=`ifconfig -au | grep inet | wc -l` numptptifs=`ifconfig -au | grep inet | egrep -e '-->' | wc -l` 그리고 다음 line에 다음과 같이 추가하라. numifs=2 numptptifs=0 Reboot하라. 그러면 다음부턴 Packet을 route하지 않을 것이다.
한결 더 간단하다. 다음과 같이 한다음 reboot 하라. % touch /etc/notrouter
각각 Packet을 route하지 않는 장비로 settig 하는법을 기술하였다. 실제로 이상에서 기술하였던 방법은 rc script에서 예를들면 다음과 같은 예를 수행하기 위한 것이다. ndd -set /dev/ip ip_forwarding 0 ip_forwarding의 setting 값을 알아보자. 0 Never Forward 1 Always Forward 2 Only forward when two or more interfaces are up
바꿈으로서 routing을 억제하는 것이다. 22.18 Routing 환경
Routing과 Routing Protocol사이엔 차이점이 있다. 모든 File System이 Data를 Route 하지만 모든 시스템이 Routing Protocols를 수행하지는 않는다. Routing이란 Routing Table에 내포된 정보에 기초하여 Datagrams를 Forwording 하는 것이다. Routing Protocols는 Routing Tables를 만들때 사용되어지는 정보를 교환하는 Programs를 말한다.
Minimal Routing Table은 Network Interface가 구성될때"ifconfig" 에 의해만들어진다.만약 Network이 다른 TCP/IP Network와 직접 직접적인 접근을 하지않고 Subnetting을 사용하지 않는다면 이 Minimal Routing Table만이 유일하게 필요하지만 이같은 고립된 Network은 Unix환경에서 생각보다 드물다.
은 Static Routing 으로 구성할수 있다. 이Static Routing 은 "route" 명령어를 사용하여 Manually하게 구성된다. Static Routing Table은 Network변경에 대하여 적응되지 않으므로 Route 가 바뀌지않는 곳에 사용되어 야한다. 그러나 원격 목적지가 오직 하나의 Route로만 닿을수 있을때 Static Route가 가장좋은 선택이다.
을 사용해야 할것이다. Dynamic Routing Table은 Route Protocol에 의해 바뀌어진 정보 로 부터 만들어진다. 이 Protocol들은 바뀌는 Network상태를 반 영하여 Route를 동적으로 적응시킬수 있는 정보를 분배하기 위해 설계되어 있다. Routeing Protocol복잡한 Routing 상황에 시스템 관리자 가 할수 있는것보다 정확하고 빠르게 다룰수 있으며 Primary Route 가 동작하지 않을 경우의 Back-up Route로의 교체 뿐만아니라 목적지로의 최선의 Route를 결정할수 있도록 설계되 어있다. 같은 목적지에 대하여 다중의 Path가 있는 어떠한 Network에서도 Routing Protocol이 사용되어진다.
방법을 사용하더라도 Route가 들어가면 모두 Routing Table이 됨.
---------------------------------------------------------------------------- | % netstat -rn | | Routing tables | | Destination Gateway Flags Refcnt Use | | Interface | | 127.0.0.1 127.0.0.1 UH 1 132 lo0 | | 128.66.12.0 128.66.12.2 U 26 49041 le0 | ---------------------------------------------------------------------------- "ifconfig"에 의해 구성된 Routing Table의 첫번째의 Entry는 lo0가 바치될때 만들어 진 localhost 대한 loopback route이다. 또다른 network 128.66.12.0에 대한 route는 le0 interface를 통한다. 128.66.12.2 는 원격 gateway address가 아니고 system의 le0 interface에 할당된 주소이다. 두개의 entry 모두 "U" (UP)라는 flag를 가진다. 이것은 사용할수 있는 준비가 되어 있다는 것이다. 또한 entry 모두 flag에 "G"(gateway) flag 가없는데 "G" flag는 remote gateway 를 사용하는 것을 의미한다. "G" flag가 없는것은 외부 gateway를 통하지않고 local interface 를 통한 직접적인 route를 의미한다.
에만 도달할수 있다는 것을 의미한다. loopback entry의 destination field를 보면 network 주소 가 아닌 것을 알수있다. loopback의 network주소는 127.0.0.0이며, 127.0.0.1은 개별적 host인 모든 host table에는 특별한 host route 가 있다. 비록 모든 host table이 이러한 host-specific route를 가진다해도 대부분의 route는 network을 route한다. 이것은 routing table의 size를 줄이는데 한 이유가 있다.
128.66.12.0 network상의 host들 에게만 통신할스 있다. 이러한 제한된 routing table은 "ping" 명령어로 쉽게 검증할수 있다. "ping"은 ICMP를 이용하여 Echo message를 remote host로 강제적으로 보내고 local host 사이의 통신이 성공임을 나타낸다.
외부 gateway를 통해 remote host로 도달하려면 routing table에 route가 반드시 더 해져야 한다. "route" 명령어는 routing table에 entry를 수동으로 더하거나 삭제 할 수 있다. ---------------------------------------------- | #route add 26.0.0.0 128.66.12.1.1 | | add net 26.0.0.0 : gateway almond | ---------------------------------------------- cf) #route add destination gateway metric destination address는 IP address, /etc/networks file의 network name 또한 /etc/hosts file의 host name, 그리고 "default" 로 명시된다. 대부분의 route가 startup 이전에 추가되므로 IP address가 name보다 많이 사용한다. name service가 없다는 가정하에 routing configuration에 필요한 file은 더이상없다 항상 4byte numeric IP address를 사용하며 4byte보다 작으면 "route"가 address를 확장시킨다. 이결과 우리의 의도와 틀릴수 있다. "26"이라고 주어질경우 어떤 "route"의 구현은 26.0.0.0 이라 확장하며 어떤것은 0.0.0.26 이라 할수 있다. "default"가 destination address에 쓰이면 route는 default route를 만듬. default route에 연관된 network address는 0.0.0.0 이며 default route는 destination으로 명시된 route가 없을경우에 항상 사용된다. 그리고 이것이 우리에게 필요한 유일의 route를 가질수 있다. 만약 network이 하나의 gateway 만을 가진다면 default route를 사용하여 해당 gateway 를 통하여 remote network을 향한 모든 traffic을 직접적으로 route한다.
경유할 external gateway의 address이다. 이것은 반드시 직접적으로 network에 연결된 gateway의 address이어야 한다.
added될때는 항상 필요하다. 만약 route가 local interface를 통하여 G flag가 setting 되어있지 않으면 metric 이 0 이 되며 metric value가 0 보다 크고 G flag가 setting 되어 route가 설치되어 있으면 해당 gateway address는 external gateway 로 여겨진다. static routing에서 metric의 쓰임은 다른용도는 없으며 다양한 metric value 의 사용은 dynamic routing에서만 필요하다. 22.19 Auto FTP login
- www 에서 sun 으로 auto ftp setup 1)sun 시스템에 lsh 라는 account 가 lsh0708 이라는 password 로 계정을 가지고 있다. 2) www 의 자기의 home directory 밑에 .netrc 를 chmod 600 으로 작성 ex)more /home/lsh/.netrc machine sun login lsh password lsh0708 3) www% ftp sun Connected to sun. 220 sun FTP server (UNIX(r) System V Release 4.0) ready. 331 Password required for lsh. 230 User lsh logged in. ftp> quit 23장. 시스템관련 테크닉(&Tip) 23.1 Large dummy file 생성 방법
Systax : dd if=file of=file bs=n count=n examples : 아래의 예는 100Mbyte의 dummy file을 만든다. [dct:/tmp]# dd if=/dev/zero of=100megs bs=10000 count=10000 10000+0 records in 10000+0 records out [dct:/tmp]# ls -al 100megs -rw-r--r-- 1 root other 100000000 10월 20일 17:34 100megs [sun:/tmp]# ; bs - 버퍼에 확보될 block size count - bs에서 설정된 size의 buffer를 dummy file로 copy할 횟수 위의 예는 10000block을 10000번 copy하여 100Mbyte의 bummy file을 생성한다. 23.2 DOS file에서 ^M 문자 제거 방법
1) tr을 이용한 제거 방법 Syntax : tr -d string < infile > outfile dct# tr -d "\015" < /tmp/hosts.dos > /tmp/hosts.unix 2) sed을 이용한 제거 방법 Syntax : sed 's/[regular expression]/[Replacement]/[flags]/g' infile > outfile dct# sed 's/^V^M//g' /tmp/hosts.dos > /tmp/hosts.unix 3) vi 편집기를 이용한 방법 dct# vi /tmp/hosts.dos 열리면, vi command line상에서 아래와 같이 한다. :%s/^V^M//g 23.3 두 개의 모니터에 Openwindows 올릴때
또는 ?? openwin -dev /dev/fbb/?? ?? openwin -dev /dev/fbb/?? 23.4 rdist사용하여 정해진 시간에 화일 transfer
rdist 명령어를 사용하기 위해서는 /etc/hosts.equiv file과 /.rhosts file을 원하는 host와 사용자에 맞게 editing하여 주어야 한다. remote file transfer를 위해서는 각각의 시스템에 /etc/hosts.equiv file을 만들어 각각의 시스템을 명명하여 주거나, +라고 써주어 모든 시스템에서 수행하는 r명령어 (rcp, rsh, rlogin, rdist...)에 대해 open을 시켜주어야 한다. 또는 각각의 사용자 홈디렉토리에 .rhosts file을 만들어야 한다.
이러한 option들은 "man rdist"를 수행하면 살펴볼수 있는데, 정해진 시간에 파일을 전송하면서 세부적인 사항을 미리 선택하기 위해서는 '-f' option을 사용하는 것이 좋다.
destination host = sun
www cello mymy sun (여기에서는 기존의 entry에 hyundai2를 추가함. 다른 것 없이 그냥 +만 써넣어도 됨 )
+ + sms
eng라는 parent directory는 보이지 않고 그 안의 sub directory만이 보이게 된다. 즉 나는 /eng라는 이름과 함께 그 밑의 sub directory인 words, toeic, read등을 transfer하려 한다면 targer이 되는 시스템의 원하는 위치에 eng라는 이름의 디렉토리를 만들어 두는 것이 편하다는 것이다.
다음은 sms라는 사용자가 remote system상의 sms에게 file을 transfer하는 것이다. 이 화일의 이름은 사용자 임의로 주어도 된다. 이 예에서 description file의 이름은 distfile이다.
FILES = (/user1/sms/eng) --> transfer하기 원하는 화일의 위치 ${FILES} -> ${HOSTS} install -R ~sms/eng; --> transfer된 화일을 install하기 원하는 위치 except (/user1/sms/eng/toeic); --> transfer를 원하지 않는 화일이나 directory 있다면 이를 지정할 수 있다. ${FILES} :: /bin/time --> transfered time을 파악하여 notify sms@sun; 메일로 알려줌.
# rdist -f distfile 을 수행하면 바로 원하는 화일이 description file에 정해진 대로 전송된다. 이 명령어를 수행하면 다음의 예와 같은 내용이 화면에 출력된다.
updating host sun /tmp: Warning: remote mode 1777 != local mode 755 installing: /user1/sms/eng/read installing: /user1/sms/eng/read/1.txt installing: /user1/sms/eng/read/2.txt installing: /user1/sms/eng/read/3.txt installing: /user1/sms/eng/read/4.txt installing: /user1/sms/eng/read/5.txt installing: /user1/sms/eng/read/6.txt installing: /user1/sms/eng/read/7.txt installing: /user1/sms/eng/read/ab1.txt installing: /user1/sms/eng/read/ab2.txt installing: /user1/sms/eng/read/ab3.txt installing: /user1/sms/eng/read/ab4.txt installing: /user1/sms/eng/read/ab5.txt installing: /user1/sms/eng/toeic installing: /user1/sms/eng/toeic/f1 installing: /user1/sms/eng/toeic/f2 installing: /user1/sms/eng/toeic/f3 installing: /user1/sms/eng/toeic/f4 installing: /user1/sms/eng/toeic/f5 installing: /user1/sms/eng/toeic/f6 installing: /user1/sms/eng/toeic/e1 installing: /user1/sms/eng/toeic/e2 installing: /user1/sms/eng/toeic/e3 installing: /user1/sms/eng/toeic/e4 notify ( sms@sun )
/var/spool/cron/crontabs 밑에 사용자별로 있는 화일을 문법에 맞게 setting한다.
16 14 * * 2 /bin/rdist -f /user1/sms/distfile
하고나면 변경된 crontabs내용이 실행된다.
만일 source는 root permission인데, destination directory가 일반 사용자 permission 이라면 명령어 수행도중 permission error 생길 수 있다. 23.5 Prompt변경(HostName & CurrentPath Display)
(1) dir function만들기 dir() { cd $1 PS1="<'uname -n'><'pwd'> } (2) alias시키기 alias cd=dir
alias cd 'cd \!*;set prompt="`hostname`:`pwd`>"' or ?? alias setprompt 'set prompt="[`hostname`:$cwd]# "' ? alias cd 'cd \!*; setprompt' ?? setprompt 23.6 임시Host_name변경
임시로 호스트명이 sun으로 바뀌고, /etc/nodename도 sun으로 바뀌고, prompt에 나타난 host_name도 sun으로 바꾼다. 23.7 /file system 100% 일 경우 유용한 command.
/dev: Large files may appear here when trying to write to a device andusing the incorrect device name (i.e. /dev/rsto instead of /dev/rst0) /: Look for core files /var: If var is part of the root partition, check for large administration files in /var/adm. Also, some spool files may be left in the /var/spool directories. Check for other large files (over 1mb) with the command: find / -size +1000000c -xdev -print
약 9 M 정도의 file 이 되어 system full 이됨. 23.8 man page에 관한 몇가지
이러한 man을 사용하다 겪는 몇가지 문제점과 man을 더욱 잘 사용하기 위해 만들어지는 windex에 대해서 몇가지를 간단히 정리해보려 한다.
만일 Solaris 2.4에서 cdrom이 /cdrom/cdrom0에 mount되어있다면 다음과 같이 하면 된다.
# cd Solaris_2.4 # pkgadd -d . SUNWman
MANPATH에 manual page가 setting되어있음에도 불구하고 ‘man 명령어’하면 이와 같은 오류 메시지를 띄우면서 실행이 되지 않는 경우가 종종 있다. 이러한 경우에는 windex file에 대한 오류를 생각해 볼수 있다.
만일 windex file이 존재하지만 찾고자 하는 entry가 빠져 있거나하면 위와 같은 오류메세지를 내면서 manual을 찾는데 실패한다. 각각의 MANPATH에 windex file이 있을수도 있다. windex file은 다음의 몇가지 이유로 corrupt되어질 수 있다.
: 이 경우에는 이 windex file을 지워주거나, man page를 더하기 위해
: windex file이 만들어진 후에 man page가 추가되는 경우도 많다. catman -w를 실행하여 파일을 다시 만든다.
: 수동으로 (by hand)로 editing한 경우에 발생. windex file을 sort하거나 catman -w를 실행한다.
일반적으로 troff나 nroff characters가 삽입되어 있는 경우가 많다. : 예제> 잘된 예 ==> ypbind ypbind(1m) -NIS binder process 잘못된 예 ==> /f4ypbind ypbind(1m) -NIS binder process
/usr/ucb/man command가 내는 error: Reformatting page. Wait...done sh: less: not found man command는 man page를 화면에 맞추기 위해 reformat을 하게 되는데 이때 nroff를 부른다. 또한 연이어서 nroff에서 나오는 output이 more command와 연계되어진다. 하지만 만일 PAGER라는 환경변수가 “less:로 setting되어 있다면 이와 같은 오류가 생길수 있다. “less" command는 Sun에서는 지원되지 않는 것으로 more command와 비슷한 command이다. 만일 시스템이 less command찾기를 실패하면 man command또한 오류를 일으킨다.
(reformatting page. wait...nroff: cannot create temp file sh: /dev/null: cannot create) 이러한 경우 /var/tmp의 permission이 1777인지 확인한다. 정상적인 경우는 다음과 같이 보인다. drwxrwxrwt 2 sys sys 1536 11월 29일 16:47 tmp 이 permission이 맞지 않으면 일반 사용자 모드에서 man 사용시 이런 오류가 발생한다. SunOS5.x의 nroff는 임시 파일을 쓰기 위해 /var/tmp를 사용한다. 하지만, SunOS 5.1과 SunOS 5.2는 /var/tmp가 아니라 var/tmp가 아니라 /tmp를 사용한다. SunOS 4.x에서도 /tmp 의 permission을 확인해야 한다.
man에 -t option을 사용한다. -t option은 default printer상에 manual page를 reformat하고 display하는데 사용된다. 다음의 세가지 환경 변수가 output을 customizing하는데 사용된다.
TROFF : to change the format utility Usually changed to nroff on non-newsprint printers. TCAT : the display program. Defaults to lpr -t 23.9 Login User중 idle time check하여 자동 kill(script)
자동으로 Kill하는 Procedure 한것이다.
finger | grep -v root | grep -v oracle |grep svc | cut -c32-38 > /tmp/_list cat /tmp/_list |cut -c1-2 > /tmp/col1;cat /tmp/_list |cut -c3-7 > /tmp/col2 _tab=`paste -d" " /tmp/col2 /tmp/col1 |\ grep -v " " |grep -v " [1-9]"|cut -c7-8` for i in $_tab do /etc/fuser -k /dev/tty$i done
finger | grep -v root |grep -v oracle |grep svc | cut -c32-47 > /tmp/_list cat /tmp/_list | cut -c1-7 > /tmp/col1;cat /tmp/_list | cut -c8-16 > /tmp/col2 _tab=`paste -d" " /tmp/col2 /tmp/col1 |\ grep -v " " |grep -v " [1-9]"| cut -c11-17` for i in $_tab do fuser -k /dev/$i done
23.10 login 보안 및 audit관련 Tip
- CONSOLE 변수는 root로 login가능한 device지정 예제) 워크스테이션의 콘솔을 지정하는 경우 또는 배제 CONSOLE=/dev/console #CONSOLE=/dev/console 콘솔에서조차 login불능 CONSOLE=/dev/null - PASSREQ=YES (PASSWD를 꼭 필요로 함, default NO) 예제) MAXWEEKS=15 /* 15주 이상이면 유효기간 만료 */ MINWEEKS=3 /* 최소한 3주는 사용하여야 함 */ PASSLENGTH=6 /* Passwd의 최대의 길이 */ INACTIVE=30 /* 30주 이상 안쓰면 account locking */ EXPIRATE_DATE=1997.12.31 /* Passwd 소멸일자 */ - SYSLOG=YES ( root login 및 fail에 대한 audit자료 수집 허용여부 , audit는 /etc/syslog.conf에 지정된 file에 저장된다. ) /etc/default/passwd file은 default로 password aging관련 파일이다. /etc/default/su file은 SULOG=/var/adm/sulog등으로 log파일을 지정할 수 있다. - /etc/ftpuser file에 등록된 host들은 ftp service 불허 - ftp auditing setting www% vi /etc/inetd.conf /* 수정 */ ... #ftp stream tcp nowait root /usr/local/etc/ftpd ftpd ftp stream tcp nowait root /usr/sbin/in.ftpd in.ftpd -l ...
... daemon.info ifdef(`LOGHOST', /var/adm/ftp.log, @loghost) ...
기록할 수 있게 된다.
물론 root user를 제외하고는... 그러므로 더이상의 login을 허용하고자 하지 않을 때 사용한다. nologin file은 rebooting할 때 없어지므로 manual하게 만들든지 또는 crontab에 등록할 수 있다.
- logins -p ( null passwd user check ) 23.11 시스템에 유저 접근 거부 시킬때
일반 계정의 유저는 접근이 거부되고, 슈퍼유저는 접속 가능하다. # touch /etc/nologin # vi ... 왜 접근을 거부하는지 에 대한 내용을 포함 시킨다. # cat /etc/nologin The system is down right now for routine maintenancee and should be back inline by 23:00. Please check back at this time. Thank you for your understanding, the SYSTEM Admins 23.12 RAID Level
구 분 No Data 보전 (Enhanced) Fault Tolerance (n-1) Data 보전 용량의 감소 (1/2) Fault Tolerance (n-1) Data 보전 (Overhead) 용량의 감소 (n-1)
. RAID (Redundant Array of Independent Disks) 개요 - 1987년 버클리 대학에서 여러 개의 디스크를 사용함에 있어서 용량, 성능, 가격, 안전성 등을 감안하여 디스크를 사용하는 방안으로 발전된 표준 규격으로 8개의 RAID Level이 있으나 주로 RAID 0~5까지 사용한다. - 그러나 RAID 5라고 해서 RAID 1 혹은 RAID 4가 RAID 3에 비해 항상 더 우수한 것은 아니다. . RAID 1 (Transparent Mirroring) - 두개의 다른 디스크에 동시에 Data를 Write 함. - Single drive보다 빠른 성능을 제공한다. - Cost에 있어서 두배의 비용이 필요하다. - 디스크 Mirroring은 1개의 Controller에 두개의 디스크가 연결되며 Duplexing은 각각 의 Controller를 갖고 독립적으로 동작한다. . Enhanced RAID 1 - Mirroring와 Data Striping가 결합된 방식으로 두가지 Data가 모든 디스크에 교차하면서 저장된다. - 디스크의 수가 홀수가 Mirroring. - 모든 LG-IBM RAID Adapter 에서 이용이 가능함. - 두개의 디스크를 사용하는 것에 비해 성능 및 Flexibility 하게 디스크를 사용할 수 있다. . RAID 0 (Striping) - Data 가 모든 드라이브에 짝수로 교차하여 분포됨. - 중복이나 Error Correction 이 되지 않음. - 동시에 수행되는 도구에 대해 빠른 성능을 발휘함. - 특히 큰 Size 의 File을 Access 할 때 성능이 좋다. - 하나의 디스크가 Fail 일 경우 전체적인 System 이 중단된다. . RAID 5 (Data Striping With Skewed Parity) - 데이터와 Checksun 이 드라이브에 균일하게 펼쳐짐. - Random한 처리에 우수한 성능. - 드라이브는 독자적으로 운영 (Sync 가 불필요) - RAID 2,3,4에 비해 더 높은 성능을 나타냄. - 1개의 드라이브 용량의 Cost 가 낮아 경제적임. - 디스크의 수가 3개 이상으로 구성되며 같은 용량으로 구성될 경우에 최적의 구성이 사용 가능 용량은 N-1 이 된다. 23.13 System의 재설정(Host_name 및 Network 정보)
; host-name , IP-Address , Network관련하여 OS인스톨과 무관하게 재 설정할 수 있다. 시스템을 운용하다. 필요에 의해 Host 정보를 System Default상태로 바꾸기 위해 사용된다. sys-unconfig performs the following tasks: 1.Restore the default /etc/inet/hosts files. 2.Removes the default host name in /etc/hostname.??[0-9] and /etc/nodename. 3.Removes the default domain name in /etc/defaultdomain. 4.Restores the time zone to PST8PDT in /etc/TIMEZONE. 5.Disables the Network Information Service(NIS) and Network Information Service Plus (NIS+) if either NIS or NIS+ was configured. 6.Removes the entries for this host in /etc/net/*/hosts. 7.Removes the file /etc/inet/netmasks. 8.Removes the password set for root in /etc/shadow. Host-name만 변경 /etc의 nodename,hosts,hostname.???(??? is Net_Interface=le0 or hme0)을 변경. 이 경우 Host_name을 참조 하는 licensed S/W 가 있다면, 이것도 바꿀것. 23.14 NETWORK상에서 C-COMPILE하는 방법
1. 먼저 각 SYSTEM에 COMPILE S/W, LICENSE S/W를 설치한다. 2. LICENSE SERVER 에 LICENSE PASSWORD를 입력한다. 3. LICENSE SERVER SYSTEM # setenv LM_LICENSE_FILE /opt/SUNWspro/license_dir/sunpro.lic,1:$LM_LICENSE_FILE ( .cshrc 에 첨가함) 4. NETWORK 상에 연결된 SYSTEM 가) # setenv LM_LICENSE_FILE port@hostname -->hostname은 license server system name ( .cshrc 에 첨가함) (ex. # setenv LM_LICENSE_FILE 7558@axil) 나) # setenv LD_LIBRARY_PATH $OPENWINHOMW/lib:/usr/lib ( .cshrc에 첨가함)
23.15 Solstice Compiller Install
1. CD에서 lit(License Installation Tools) 파일로 인스톨 (CD에 lit파일이 존재함.) cd#spro-install-tool 1)좌측상단의 인스톨 하고자 하는 Product를 선택 2)License Install란에 check-sign을 하고, 상단 중앙부의 Install 버튼을 click한다. *SPARCworks같은 경우, 아래의 3가지 모두 한번에 설치 됨. ??SPARCworks Common Tools ? SPARCworks ??SPARCompiler
3. /etc/opt/licenses/lit 실행 4. 예) C 4.0 인스톨시 1) SparcCompiler C, 4.0부터 인스톨 RTU(Right To Use:유저수) , PASSWORD 입력 * PC(Password Checksum),DC(Data Checksum)을 확인, 여기서 PC는 License의 것과 반드시 일치하는지 확인. 2) Sparcworks 3.1 , Common Tools , exit 순으로 진행 3) /etc/opt/licenses/LIC_CONFIG_SCRIPT 실행
set path=(/bin /usr/bin /usr/sbin /usr/ucb /etc /opt/SUNWspro/bin /usr/openwin/bin .) setenv OPENWINHOME /usr/openwin setenv LD_LIBLARY_PATH /opt/SUNWspro/lib:/usr/lib setenv MANPATH /usr/man:/opt/SUNWspro/man * 위 내용처럼 path, lib, man 추가설정 23.16 시스템 초기 설치시 참고
; 유저등록시에 skel DIR을 지정해 주면, 자동으로 유저의 홈DIR에 아래 초기설정파일이 copy된다. [/etc/skel/] : 2.x local.cshrc ??? 일반 유저들이 사용할 path 라던지, 필요한 부분을 적절히 수정해서 local.login ? 이런 이름으로 넣어 놓으면, 유저 생성시 자동으로 유저의 home에 copy됨. local.profile ??
cshrc , login 4.1.3 OS 인스톨시 참고. (96.5.25) ex)단국대 Axil245 설치(6set) Mem 32M, OS 4.1.3 , Compiler (C,C++,fortran,cobol,pascal) << HDD 1G >> Start Cyl. * 파티션 나눌때 - 70*2000=?cyl : 70(나누고자하는 M수)에 2000을 곱하면 대략적 값이 나온다. 위의 계산법으로 실린더 수를 계산하여 그 값만 써주고, 다시 설정하여 “?/” 이런식 으로, 짜투리 값을 없앤다. 겹치는 부분이 없게 하기 위해서! 다음 cly수 계산시는 처음부터의 바로 전까지의 cyl수를 모두 합한 값이다
#sys-unconfig : 호스트 명 및 IP-ADDR은 알아서 잘 넣고, TimeZone설정시는 "ROK"라고 할것. * .cshrc 화일 편하게 setting 하는법 ! #cp /usr/lib/Cshrc /.cshrc 하여 .cshrc를 편집. 2.x일 경우 : #cp /etc/skel/local.cshrc /.cshrc #cp /etc/skel/local.profile /.profile #cp /etc/skel/local.login /.login 23.17 특정유저의 파일실행할 때
#su - oracle -c /home/dir/dir/실행할_file_name - multi command or argument가 있을 때 #su - oracle -c '/home/dir/dir/실행할파일|다른명령|다른명령' 23.18 리모트 유틸리티 실행
#xhost + <-- 모든 Client에 대해서 접근을 허가한다. #telnet sun ...login.... #xhost + #setenv DISPLAY 현host_name:0 #netscape &
24.1 Server & Client의 효율적 운용
NIS(YP) + NFS ① Server(master)집중 유저(&host)정보관리 및 Network 정보관리. ② 분산화된 다수의 client ③ 허가된 사용자는 어떤 Client에서든 자신의 계정으로 login하여 사용하고자 하는 한정된 licensed_S/W개발tool을 편리 하게 운용한다. 각host들은 NIS Client로 등록되었고 또한, MasterServer의 FTP영역을 사용하게된다.
Server(NIS&NFS) High Capacity : Shared of Client(NFS) Disk(or Array)
또, 이영역을 특정 유저의 전용을 막기 위해 quota를 적용 관리함이 유리하다. ⑤ 이 기종간 호환성 탁월 : 어떤 OS(vendor간)든 yp는 지원, linux도 지원함. ⑥ 다수의 Licensed Application을 NFS로 : 고가의 S/W를 저비용 측면에서 효율적운용. ⑦ IDEC 의 NFS 서버에서 /chipfarm을 share 하고 클라이언트에서 /chipfarm 을 마운트 하는 개념. 서버의 /chipfarm/admin/env/... 에 시스템설정 파일들을 미리설정해놓고, 클라이언트에서는 마운트된 /chipfarm/admin/env/...의 시스템설정 파일들을 자신의 호스트에 링크하여 사용. 클라이언트쪽의 사용 예)
# ln -s /chipfarm/admin/env/issue /etc/issue ............. 24.2 install 및 운용방법
- NIS설치는 OS install시 setting하는 것이 가장좋고, 현재 운용결과 솔라리스 2.6 환경에서의 Master Server 설치 및 다수의 이기종 Client 간의 관리가 좋은 것으로 나타났다.
NIS는 Sun에서 배포된 network lookup service이며, 몇개의 master node들로 완전히 복사하는 database를 가지고 있다. 각 master mode는 database를 위한 server process를 수행하며 이것은 NIS server로 나타내어진다. muntiple server는 database 일치를 보장하기 위해 그들 스스로 수정된 database를 퍼트린다. 안정된 상태에서 , 어느 server process가 client request에 답할것인지는 문제가 되지 않는다. 그 이유는 server들의 대답이 동일하기 때문이다. 이것은 network당 multiple server가 높은 유효성과 신뢰성의 NIS service를 주게된다. NIS Domain은 동일한 NIS database를 사용하는 하나의 network상에서의 node들의 집합이다. NIS domain들은 internet domain들과 sendmail domain들로 부터 다르게 설정될수도 있다. NIS domainname directory는 map집합들을 포함하는 /var/yp안의 directory이다. NIS server는 /var/yp의 subdirectory안에 있는 NIS domain의 모든 map들을 유지한다. 예를들면, sunse domain을 위한 map들은 /var/yp/sunse안에 존재한다. domain name은 NIS database로부터 data를 검색하기 위해 요구된다. network상에서의 각 machine은 /etc/defaultdomain로 설정된 default domain에 속하고 /etc/rc.local를 booting시 참조한다. domain name은 server와 client들 모두에 설정되야 한다. 각 NIS map은 일련의 값들과 그들의 연관된 key들을 포함하고 있으며, 프로그램들은 이런 값들을 조사한다. 대부분 현재 map들은 전통적으로 /etc directory에서 발견되는 ASCII file들로 부터 추출된다. NIS map의 정보는 ASCII file안의 data와 유사하지만 dbm format으로 유지된다. 모든 dbm file들에서, 하나의 NIS map은 구분할수 있는 mapname을 가지고 있고, 두개의 화일인 mapname.dir과 mapname.pag를 보충한다. 예를들면, hosts.byname은 internet address를 찾기 위해 machine들에 의해 참조된다. hosts.byname database를 위한 정보는 hosts.byname.pag와 hosts.byname.dir인 두화일안에 저장된다. .pag로 끝나는 화일은 실제적인 map entry들을 포함하고 있다.
NIS server는 일련의 NIS map들을 저장하고 있는 disk를 가진 machine이다. NIS server에는 master와 slave 두종류가 있다. Master server는 slave server들의 database를 update한다. 변화한 내용들은 master server에서 NIS slave server들로 전달된다. 만약 NIS database들이 master server machine들 대신에 slave server상에서 만들어지거나 수정이된다면 NIS의 update algorithm은 파괴될것이다. database 수정과 생성은 반드시 master server machine상에서만 이루어진다. Sun은 single domain상에서 만들어지는 모든 map들을 위해 single server master를 만들도록 요구하고 있다. 다른 SunOS version에서도 NIS 환경을 지원하고 있다. Sun에서의 master server는 release 4.1이상에서 수행하도록 권장하고 있다. 그 이유는 좀더 빠른 map transterring때문이다. . NIS Master Server 1) master map들을 가짐 2) master map들을 update함 3) NIS slave server들로 master map들을 전달함 4) NIS domain상에서 NIS client들에게 NIS service를 제공함 5) ypserv 와 ypbind를 수행함 . NIS Slave Server 1) master NIS map들의 copy본을 가짐 2) NIS master server로부터 copy본들을 받음 3) NIS domain상에서 NIS client들로 NIS service를 제공 4) ypserv 와 ypbind를 수행함 . NIS client 1) NIS network service를 사용하는 host 2) server들의 map들로부터 data를 요구하는 process들을 수행함 3) ypbind만 수행함
/etc/defaultdomain을 생성 서버에 맞는 domainname기입한다. # cd /var/yp # /usr/etc/yp/ypinit -m 하여 물어보는 질문에 대해 모두 Yes함. 아래 ypinit -m을 참조 24.3 NIS Master Server 초기화
# domainname sunse ② /etc/defaultdomain file을 수정 혹은 생성 NIS domain name을 부가함 ③ /etc/rc.local 화일을 수정함 . ypbind startup line들이 풀려져 있는가를 확인함 . bootup시 /usr/etc/rpc.yppasswdd를 가동시키기 위해 다음과 같은 라인들을 첨가시킴 다음 라인들은 ypserv daemon 정보다음에 삽입시킴 if [ -f /usr/etc/rpc.yppasswdd -a -d /var/yp/`domainname` ] ; then /usr/etc/rpc.yppasswdd /etc/passwd -m; echo -n ' rcp.passwdd ' fi 위의 -m flag는 /var/yp안에서 발견되는 NIS map들을 정정하고 그 변화들을 slave server 들로 push하기 위해 열거했음. . 여러분은 NIS master 상의 user들을 위한 /etc/passwd와 모든 NIS user들을 위한 /etc/passwd.yp 를 원할지도 모른다. 이런 경우는 다음과 같은 절차를 거치면 된다. 첫째 /var/yp/Makefile에서 $(DIR)/passwd를 $(DIR)/passwd.yp로 수정함 둘째 /etc/rc.local의 yppasswdd상에서 /etc/passwd를 /etc/passwd.yp로 수정함 . 고속 transfer daemon을 가동시키기 위해 ypxfrd startup line들을 comment out 시킴 ④ NIS database상에 포함된 ASCII file들을 수정함 이런 화일들은 passwd, hosts, ethers, group, aliases, netgroup, networks, netgroup, protocols, bootparams, services 임 passwd와 group화일들에서 + entry들을 제거함 ( 공백 netgroup은 빈 netgroup map을 만듬) ⑤ database를 만듬 # mkdir /var/yp # cp /export/exec/proto.root.sunos.4.1.x/var/yp/Makefile /var/yp (이작업은 suninstall과정에서 NIS master를 설정하지 않았을시 /var/yp가 없기때문임) # cd /usr/etc/yp # ypinit -m (여기서 m은 master server) quit on non-fatal errors [y/n:] y next host to add : master /* mastername next host to add : slave /* slavename-->만약 여러분이 어떤 server가 NIS slave next host to add : ^D server가 될지 안다면 여기서 이름을 입력함 ⑥ fastboot를 사용하여 reboot함 모든 daemon들을 올바르게 가동시키기 위해서는 reboot하는 것이 쉽다. 24.4 NIS Slave Server 초기화
② /etc/defaultdomain file을 수정 혹은 생성 NIS domain name을 부가함 ③ /etc/rc.local 화일을 수정함 . ypbind startup line들이 풀려져 있는가를 확인함 ④ ypbind daemon을 가동시킴 # /usr/etc/ypbind ⑤ /usr/etc/yp directory로 변경후 slave server mode상에서 ypinit를 가동하여 master로부터 database를 모은다. # cd /usc/etc/yp # ypinit -s master /* master 는 마스터 서버네임 quit on non-fatal errors [y/n:] y (slave는 master처럼 물어보는 것이 없음. 바로 YP환경을 create함. master server상의 /var/yp/"domainname" 밑에 있는 db화일들을 자기 local의 /var/yp/"domainname"밑에 그대로 copy함.) ⑥ NIS server daemon을 reboot하여 가동시킴 위의 과정은 slave server가 master server install동안에 언급이 되었을 경우에 사용된다. 24.5 NIS Administration
slave server의 /etc/passwd에는 일반 client처럼 최소한의 것이 있음.
master server상에서만 수행 가능. master server의 /var/yp/Makefile을 참조하여 수행하는데 이는 master server만 있음. # cd /var/yp # make : YP에서 관리하는 모든 db정보를 양자 비교하여 최신의 것으로 update시킴 변경된 정보의 Update
- master에서 slave로 passwd정보를 transfer함 ┌ 일반 사용자는 yppasswd └ root는 /bin/passwd /usr/etc/rpc.passwdd는 NIS password daemon이다. 이 daemon은 NIS master server에서만 수행이되고 , NIS password change request들을 위해 봉사한다. 이것은 모든 slave server들이 password 수정되었을때 그들의 변화된 database를 가지는 형태로 수행된다. yppasswd는 NIS password들을 변화시키는 명령어이다. 이 명령어는 마치 password처럼 실행되지만, local /etc/passwd file대신에 NIS master server안의 password를 다룬다. NIS client에 의한 yppasswd 명령어는 NIS master server상에서 수행하는 rpc.passwdd에 의뢰 한다.
- transfer daemon - master에서 running되며 master의 db정보를 slave에 전달해서 update 시킴
- master나 slave가 information db를 service함
- master, slave, client들 모두에 running됨. - master나 slave에서 db information 가져오는 daemon - master나 slave는 자기가 infor 가지고 있어도 network에서 가져오도록 설계 --> 구현 용이
- suninstall시 client에 대해서는 두가지만 하면 된다. - client Domain Name : cs.postech - client booting시 Starting NIS service ypbind ...... - error: "NIS server not responding for domain 'cs.postech' Still trying ....." network이 죽어 master나 slave중 어느 것 하나 살아 있지 않아 service를 받지 못하는 경우 booting시 발생하는 error message.
. /etc/passwd file은 NIS가 수행될때 처음 국부적으로 참조된다. local passwd안의 data는 NIS database보다 우선권을 가진다. local passwd file안의 entry들은 root와 어떤 다른 local user들을 위해 존재해야 한다. /etc/passwd를 call하는 program들은 처음에 local password를 참조한후 NIS database를 참조 한다. . /etc/group file도 우선 참조된다. 역시 NIS database보다 우선권을 가진다. . NIS 수행시 /etc/hosts file은 booting시만 참조된다. 그것은 boogin시만 참조되기때문에 그 화일은 local host name과 모든 machine들을 위한 entry를 가지고 있어야 하며, local loopback를 위한 entry는 localhost임. 127.0.0.1 localhost 192.9.10.101 sparc 일단 host가 boot되면 host address를 분석할때 NIS host database만이 참조된다.
참조한다. . NIS 수행시 부가적인 mail aliases는 NIS server들상의 mail.aliases map안에 위치한다. local /etc/bootparams file은 동일한 NIS map이 참조되기 이전에 client의 boot 정보를 위해 참조된다.
+::0:0::: --> 모든 NIS password database entry들은 이 host에서 합법적임. 이 항목은 /etc/passwd안에서 마지막에 존재해야 한다. 이 표시는 /etc/passwd를 call하는 program은 처음 여기 password file을 참조 할 것이다. 만약 user가 여기 passwd file에 없으면 NIS password database가 조사될 것임. +ljs: --> ljs는 이 host에서 합법적이며 여기의 password data는 NIS database안에 있음. +ljs:::::/home/ljs: --> ljs는 이 host에서 합법적이며,빠진 password항목은 NIS database안에 있다. local password entry안에 나타난 data는 NIS password data를 무시한다. 만약 NIS password database상에서 home directory가 /usr/ljs라면, login후 ljs의 home directory는 /home/ljs가 됨.
+source: --> NIS group database에서 정의된 source group은 이 host에서 합법적임. +: --> NIS group database에서 정의된 모든 group들은 이 host에서 합법적임.
- ypserv : server process - ypbind : binding process - ypxfrd : map transfer daemon - rpc.ypupdated : map entry들을 change하기 위한 server - rpc.yppasswdd: NIS passwd file을 modify하기 위한 server - in.named : option 사항
- ypcat : map에서 data를 list하기 위해 # ypcat hosts # ypcat passwd # ypcat -m hosts (hosts map을 service해 주는 master server가 어느것인지) - ypwhich : NIS server name을 list # /usr/bin/ypwhich --> NIS server가 누군지를 보여줌 # /usr/bin/ypwhich -m --> 어떤 map들의 master가 어느 server machine인지를 보여줌 # /usr/bin/ypwhich clientname --> 어떤 ypserver가 NIS client machine으로 service를 제공 하는지를 보여줌 - ypmatch : map값과 match시키기 위해서 # ypmatch key0 key1 map --> NIS map안에 있는 특정한 key들의 값을 보여줌 - ypinit : NIS database를 build함 - yppoll: server로부터 map의 order number를 얻기 위해 - yppush : master에서 slave로 data를 전달 # /usr/etc/yp/yppush --> NIS master server에서 수행하며 master NIS server에서 slave NIS server로 NIS map의 새로운 version을 copy함. - ypset : 특정 server에 binding set # /usr/etc/yp/ypset host --> 특정한 NIS server로 bind를 시도함 - ypxfr : master에서 slave에 data transfer - makedbm : NIS map을 위한 dbm file을 create
NIS clinet들은 binding process를 통해 NIS server로부터 정보를 얻는다. ypbind가 기억하는 정보를 binding이라 불린다. binding은 NIS server의 internet address를 가진 domain name과 연류되있다. 이런 정보는 domainname.version filename을 사용하는 /var/yp/binding diretory안에 저장되있다. binding process는 client request들에 의해 가동된다. binding이 broadcast에 의해 설정됨으로 모든 net상에서 적어도 하나의 ypserv process가 있어야 한다. 일단 domain이 특정한 ypbind에 의해 bind되면 같은 binding이 그 node상의 모든 client process에 게 주어진다. binding과 rebinding들은 C 라이브러리 루틴에 의해 다루어진다. 만약 ypbind가 bind되어야할 ypserv에게 말할수 없을때 , unbound된 상태로서 domain을 형성하고 client process에게 그 domain은 unbound상태라고 말하고, 다시 한번 domain을 bind한다. 만약 file /var/yp/ypserv.log가 ypserv구동시 존재한다면, log information은 error 조건발생시 이 file에 저장한다. file /var/yp/binding/domainname.version은 binding process 가속화를 위해 만들어진다. 이런 file들은 주어진 domain을 위해 생성된 최종 성공한 binding을 저장하고 , binding이 요청될 때 이 file들이 타당성을 위해 검사된후 사용된다. 만약 /usr/etc/yp/ypset이 ypbind -ypset(option) 나오기전에 사용된다면, 그 명령어는 다음과 같은 messages를 보이며 실패할것이다. Sorry, ypbind on host xx has rejected your request . NIS client는 booting시 NIS binding daemon (usr/etc/ypbind)를 수행함 . ypbind는 NIS server를 bind하기 위해 request를 local area network로 broadcast함 . NIS server는 NIS server daemon (/usr/etc/ypserv)를 수행함. 이것은 request를 만드는 client로 binding함 . client에 의해 만들어진 모든 NIS lookup request들은 ypbind에 의해 server machine상의 ypserv로 보냄 . 만약 NIS server가 연속적인 binding후에도 반응하지 않는다면, ypbind는 다른 server로 bind 하기 broadcast mode로 돌아감 . /usr/etc/ypset (ypbind에게 특정한 domain으로 bind하라고 알려줌)은 NIS 문제들을 debugging 하는데 도움을 줌. ypset을 사용하기전에, -ypset option을 가진 ypbind를 사용할것.
. NIS master machine상에서 적당한 ASCII file를 변경한다. . local map을 update하기위해 make 명령어를 실행시킨다. 이 작업은 update된 version을 NIS slave server들로 보낸다. . 예를 들면, /etc/passwd file를 update한다. # vi /etc/passwd file 를 수정하여 변경함 # cd /var/yp # make . make는 변화된 map들만 다시만든다. 변화들이 끝났을때, make는 NIS slave server들의 map들을 update하기 위해 yppush 를 야기 시킨다. ex) network에 system attach시키는 경우 - master server의 hosts file을 edit하고 - master server에서 make를 수행하면 됨. 자동적으로 hosts.byname과 hosts.byaddr map을 update함 이 map들은 다른 server들로 전파되고 모든 client가 이를 사용할 수 있게 됨.
/var/yp 밑에 Makefile 있음. make 돌리면 default NIS map을 create하기 위해 makedbm에 줌 # makedbm -u group.byaddr하면 makedbm이 /etc의 화일들을 읽어서 NIS map set을 create함. map은 각 db file 단위로 보관하고 있음.
NIS 환경에서 diskless client첨가를 위한 작업은 NIS없이 사용되는 과정과 유사하다. 그러나, /etc/host 와 /etc/ethers정보는 중심위치에 저장되기 때문에 우선 NIS master server상 에서 이런 data를 입력할 필요가 있다. 그때 NIS map들을 다시만든다. 그래서 diskless client server는 그런 정보를 얻을수 있을 것이다. 만약 그 client를 위한 /etc/ethers와 /etc/hosts정보를 얻지 못한다면 add_client수행시 실패할 것이다.
/etc/hosts /etc/ethers . NIS map들을 다시만들어 push시킨다. . client의 server상에서 add_client 를 수행시킨다. . NIS master server상에서 bootparams를 다시만들어 push시킨다. . diskless client의 server에서, client의 /etc directory안에 있는 entry들을 확인한다. . directory들을 /export/root/client/etc로 바꾼다. hosts 화일이 정확한지를 확인한다. defaultdomain안의 domain name을 설정한다. /etc/rc.local에서 ypbind startup line들이 commentout되있는지를 확인한다. . diskless client를 boot시킨다.
slave server가 현존 NIS domain에 부가될때, NIS master는 첫째 new slave에 대해 알아야 한다. 만약 그렇지 못하다면, master는 모든 다른 NIS server들과 더불어 sync상태에서 new slave를 유지할 수가 없다. 그래서 new slave server의 첨가는 다음과 같이 행해져야 한다. 1) ypinit -m 과정을 사용하여 NIS master를 재초기화함 mastername# cd /usr/etc/yp mastername# ypinit -m 2) 새로운 slave의 이름을 master가 아는 NIS slave들의 list(NIS domain)로 등록함 3) 다른 slave server들 처럼 같은 방법으로 new slave server를 초기화함
최근의 slave server map들을 유지하기 위해 /usr/etc/yp/ypxfr 명령어가 slave server들상에서 수행된다. 어떤 map들을 전달하기 위해 이 명령어를 이용하는 shell script들이 존재한다. (예 : ypxfr_1perday , ypxfr_1perhour , ypxfr_2perday) site상황에 맞추어 적당하게 script들을 수정해라. 이런 script들은 /var/spool/cron/crontab/root entry에 의해 항상 수행된다. ypxfr의 transfer 시도와 결과는 ypxfr.log라는 log file안에 나타난다. 다음과 같은 명령어를 사용하여 log file를 만든다. # touch /var/yp/ypxfr.log logging을 없애기 위해선 단순히 ypxfr.log file을 제거하면 된다.
한다. # /usr/etc/yp/ypxfr desiredmap . /usr/etc/yp/ypxfr_1perday는 다음 map들을 변화시킨다. group , protocols , networks , services , ypservers . /usr/etc/yp/ypxfr_2perday는 역시 다음 map들을 변화시킨다. hosts , ethers , netgroup , mail aliases . /usr/etc/yp/ypxfr_1perhour 다음 map들을 변화시킨다. passwd . slave server들로부터 이런 script들을 수행한다.
1) master server - /etc/defaultdomain에 domainname을 등록함 - /var/yp에 가서 # /usr/etc/yp/ypinit -m (만약 error 발생하면, /usr/lib/NIS.Makefile을 copy하여 다시 수행) - # ypserv - /etc/rc.local의 ypxfrd를 열어줌. - # sh -x /etc/rc.local or reboot 2) slave server - /etc/defaultdomain에 domainname을 등록함 - # ypbind - # /usr/etc/yp/ypinit -s "master_server" (ypinit 수행 전에 master server의 ypxfrd가 수행되고 있는지 확인) 3) client - /etc/defaultdomain에 domainname을 등록함 - # sh -x /etc/rc.local or # ypbind
이런 화일들은 NIS 수행시 local machine상에서 결코 참조되지는 않는다. 비록 원하는 정보가 local file들에 존재한다 하더라도 이런 화일들에 포함된 정보를 조사하기 위해선 NIS database만 참조된다. . /etc/ethers --> local domain상의 모든 machine들의 ethernet address와 host name을 포함함. . /etc/netgroup --> machine들의 network group들을 나타냄. . /etc/netmasks --> IP stanadard subneting를 실행키위한 default netmask를 포함함. . /etc/networks --> 여러분의 internetwork상의 모든 network들의 이름과 번호를 나타냄. . /etc/protocols --> 알려진 IP protocol 이름들과 번호들을 포함하고 있음. . /etc/services --> 그 system에 유용한 각 TCP/IP network service를 위한 entry를 포함함. 24.6 NIS 장애유형 / 유의할점
# ps ax | grep ypbind --> 있으면 running중임.
계속 try하여 hangup됨 --> 이 경우 한 후 ypinit를 다시 수행하여 slave를 다시 지정해야 함.
service 제공해 줌. yp client의 요구를 먼저 catch한 것이 service를 함. 그러므로 master server가 down 되더라도 slave가 있으면 service 가능한 것.
/etc/defaultdomain에 domainname이 있어야 한다 |
SUN 사용 설명서
2007. 4. 24. 23:25