2장 일반 사용자를 위한 유닉스 실습 컴퓨터 : multi.incheon.ac.kr 또는 211.119.245.149 1. Xmanager 실행시키거나 2. 윈도우 ‘시작’ 메뉴에서 ‘실행’ 선택해서 telnet multi.incheon.ac.kr 또는 211.119.245.61 login: s1234567 Passwd: ******
1. Unix 들어가기와 나오기 Enter 계좌(account) 할당 login Super User(시스템 관리자)에게 의뢰 자동 할당: admintool Useradd, deluser 유틸리티 이용 수동 할당 mkdir vi /etc/passwd View /etc/shadow vi /etc/group chown login login prompt 얻기: several -keys password 확인과 설정 passwd /etc/passwd 좋은 암호 hacker(cracker)로 보호되어야 함 일상적인 단어의 사용은 피함 특수문자를 첨가하거나 대소문자를 구분함 Enter Unix 시스템
1. Unix 들어가기와 나오기 prompt와 셸(shell) login후에 처음 보임 Shell이란? Bourne Shell Korn Shell : Bourne Shell 포함 C Shell : 대화형 작업에 유리 Shell의 선택 시스템 관리자가 지정 shell prompt 구분 $ (Bourne shell, Korn shell), # (C shell) chsh (change shell) 명령으로 디폴트 셸 변경 <Solaris에는 없음> Bourne: /bin/sh Korn: /bin/ksh C: /bin/csh $SHELL: 현재의 shell 절대경로 저장 예) echo $SHELL /bin/csh Unix 시스템
1. Unix 들어가기와 나오기 유틸리티 man (manual page) 지금이 몇시인가 : date date mmddhhmm[cc]yy[.ss] 시스템 관리자만이 시간 지정 가능 화면을 깨끗이 지웁시다 : clear man (manual page) 명령어에 대한 온라인 도움말 얻기 man [–s section] word man word word가 들어 있는 첫 번째 매뉴얼 man [-s section] word word가 들어 있는 section 번째 매뉴얼 man -l word word가 들어 있는 모든 매뉴얼 목록 cf. Unix명령의 일반적 표현 방법 [ ] (생략 가능) -options (명령어 확장) 1절 명령어 2절 시스템 호출 3절 라이브러리 함수 4절 특수화일 5절 파일 형식 6절 게임 7절 기타 정보 8절 유지보수 명령어 Unix 시스템
1. Unix 들어가기와 나오기 메타문자(metacharacter): 제어용 특수문자 stty -a/all 현재 사용 중인 터미날의 메타문자들을 보여줌 - erase(한 문자 지우기 ^H) - kill(한 줄 지우기 ^U) - werase(마지막 단어 지우기 ^?) - rprint(현재 줄 재출력 ^R) - flush(대기 입력 무시, 재출력 ^O) - lnext(다음 문자를 특수문자로 보지않음 ^V) - susp(프로세스 일시정지 ^Z/^Y) - intr(core dump 없이 작업 전면중단 ^C) - quit(core dump하고 작업 전면중단 ^\ stop(터미날 출력을 정지/재시작 ^S/^Q) eof(입력 끝 ^D) (예) stty erase “^H” Unix 시스템
1. Unix 들어가기와 나오기 프로세스의 종료 ^C intr(core dump 없이 작업 전면중단) man chmod ..... ^C 출력의 정지/복귀 ^S/^Q stop(터미날 출력을 정지/재시작) XON/XOFF protocol man chmod ..... ^S ... ^Q 입력의 끝 ^D eof(입력 끝) mail someone ..... ^D passwd 이전 패스워드 입력 후 새 패스워드 두 번 입력 6문자 이상 logout Shell 입력의 끝 ^D eof(입력 끝) 또는 logout C shell의 경우 exit Unix 시스템
Control Characters ^c Value ^c Value ^c Value a, A <SOH> l, L <FF> w, W <ETB> b, B <STX> m, M <CR> x, X <CAN> c, C <ETX> n, N <SO> y, Y <EM> d, D <EOT> o, O <SI> z, Z <SUB> e, E <ENQ> p, P <DLE> [ <ESC> f, F <ACK> q, Q <DC1> \ <FS> g, G <BEL> r, R <DC2> ] <GS> h, H <BS> s, S <DC3> ^ <RS> i, I <HT> t, T <DC4> _ <US> j, J <LF> u, U <NAK> ? <DEL> k, K <VT> v, V <SYN> 각 키의 의미는 ASCII Character Set ANSI X3.4 –1968 참조 Unix 시스템
이것 좀 해 보세요 echo ^G^G^G …stty 참조 date^M (carriage return) …stty 참조 date^J (line feed, new line) …stty 참조 cal, bc, hostname, whoami % >xx echo hello % > xx cat 한글 전환: Ctrl + Space 해보세요! Unix 시스템
2. Unix의 계층적 File System 계층적(Hierarchical) File System이란? tree structure: directory와 file root directory(/), current directory(.), parent directory(..), subdirectory home directory: login 직후의 디렉토리 (패스워드 file에 명시) 경로 이름(path name): 절대경로이름, 상대경로이름 Unix 시스템
2. Unix의 계층적 File System 디렉토리 명령 현재 작업중인 관련 디렉토리 보기: pwd 디렉토리 내용보기: ls -adglsFR fileName]* directoryName* cf. {…}* : 생략 가능 또는 1회 이상 반복 등장 가능 ls 현재 디렉토리의 모든 file 나열("."으로 시작하는 것 제외) ls -l 상세한(long) 정보 제공 permissionMode link# owner size(byte) updatedTime fileName ls –algFsi 디스크 블록의 크기(-s) "." file도 나열(-a) 상세한 정보 (-1) 그룹(-g) inode(-I) 실행가능* 디렉토리/ 링크@ 소켓= (-F) recursively(-R) 서브디렉토리 만들기 mkdir [-p] newDirectoryName 디렉토리 이동하기: cd cd .. cd / cd ~loginName cd 디렉토리 제거: rmdir [-r] directoryName* cf. 만일 디렉토리가 비어 있지 않으면 제거 안됨 rm -r(recursively) Unix 시스템
ls-l /etc/rc -rw-rw-r-- 1 root sys 3488 Jan 20 17:21 /etc/rc 수정 날짜 화일명 바이트 단위의 화일크기 그룹 사용자 링크수 다른권한(읽기 쓰기가능, 실행불가능) 그룹권한(읽기 쓰기가능, 실행 불가능) 사용자권한(읽기 쓰기가능, 실행 불가능) 화일모드(-는 보통화일을 의미) Unix 시스템
2. Unix의 계층적 File System file의 생성 file 내용 보기 문서편집기 이용: vi, emacs cat(catenate)와 redirection 이용 cat > file ...... ^D file 새로 만들기/덮어쓰기 cat >> file ...... ^D file에 연속 쓰기 file 내용 보기 cat fileName more -f {+lineNmber} {fileName}* 연속적으로 올리면서 출력 cf + (시작번호 명기, default=1) -f(긴 라인을 연속적으로 나타냄) page -f {+lineNmber} {fileName}* 전체화면 지우고 다음 페이지 출력 head -n {fileName}* : 처음 n 줄(default=10) tail -n {fileName}* : 마지막 n 줄 Unix 시스템
2. Unix의 계층적 File System file 이름 바꾸기 file 복사: cp mv [-] -i oldFileName newFileName 이름만 바꿈 (not moving) cf. [-] 뒤의 모든 단어를 file 이름으로 간주함( -로 시작하는 file 처리시에 좋음) -i (새로운 file 이름이 이미 존재하는지에 대한 확인 prompt 보여줌) mv [-] -i fileName directoryName 어떤 디렉토리 안으로 file 이동 mv [-] -i oldDirectoryName newDirectoryName 전체 디렉토리 간 이동 file 복사: cp cp [-i] oldFileName newFileName 어떤 file 복사 cf. -i(이미 존재하는지 확인한 후) cp [-ir] fileName* directoryName cf. -i(이미 존재하는지 확인한 후) -r(recursively) Unix 시스템
2. Unix의 계층적 File System mv(move), cp(copy), ln(link) mv(move) : I-node (p600-604 참조) 그대로, 그전 link 지우고 새 link cp(copy) : 새 I-node, 새 link cp -r (recursive) ln(link) : I-node 그대로, 새 link ln (hard link) ln -s (soft link, symbolic link) Hard link and Soft link Hard link 같은 inode 및 data block 포함 같은 파일 시스템에서만 디렉토리는 불가 자체 inode 없고 디렉토리 파일에서의 항목만 차지(같은 inode 값) Soft link(Symbolic link) 첫번 파일 이름만 포함 다른 파일 시스템도 디렉토리도 자체 inode 가지고 약간의 디스크 공간 차지 Unix 시스템
2. Unix의 계층적 File System # ln chap8 introcmds Introcmds 와 chapt8 간의 하드 링크 #ln –s chap 8 introcmds Introcmds 와 chapt8 간의 기호 링크 파일 I-노드테이블 Chapt8 introcmds 파일 I-노드테이블 Chapt8 introcmds Unix 시스템
2. Unix의 계층적 File System file을 프린트하기 file의 단어수 세기: wc -lwc fileName* lpr -m [-Pprinter] [-#copies] fileName* file에 번호를 붙여 출력 프린트 종료 후 메시지 보냄(-m) 프린터 지정(-Pprinter): $PRINTER에 지정된 프린터를 overwrite 여러번 인쇄(-#copies) lpq -l [-Pprinter] {job#}* {userID}* 특정 작업이나 프린터의 상태 보임 추가적인 정보 제공(-l) lprm -l [-Pprinter] {job#*} {userID}* 특정 사용자/작업의 프린팅 작업 취소 file의 단어수 세기: wc -lwc fileName* cf. line(-l) word(-w) character(-c) Unix 시스템
2. Unix의 계층적 File System file 속성(attribute): ls -algFs ls -l 상세한(long) 정보 제공 permissionMode link# owner size(byte) updatedTime fileName permissionMode (WXXXYYYZZZ) W: 화일유형 (- 정규화일, d 디렉토리화일, b buffered file:HDD, c non-buffer file:Terminal, l symbolic link, p pipe, s socket) file -h {fileName}+ file 유형에 대한 조회 cf. symbolic link 따라 가지 않기 (-h) XXX(사용자 허가권) YYY(그룹 허가권) ZZZ(다른 사용자 허가권) r(읽기 허가) w(쓰기 허가) x(실행 허가) 이 순서대로 나타남 (p77 표 참조) 정규화일, 디렉토리화일, 특수화일들에 대한 의미가 각각 다르다. 만일 허가하지 않을 경우, -으로 나타남 Unix 시스템
ls-ld /etc drwxrwxr-x 41 root sys 640 Jan 23 19:32 /etc 수정 날짜 화일명 바이트 단위의 화일크기 그룹 사용자 링크수 다른권한(읽기 실행가능) 그룹권한(읽기 쓰기가능, 실행 가능) 사용자권한(읽기 쓰기가능, 실행 가능) 화일모드(d는 디렉토리 화일을 의미) Unix 시스템
ls -l /dev/fd0 brw-rw---- 6 root sys 2, 0 Jan 23 19:32 /dev/fd0 수정 날짜 화일명 minor 장치번호 major 장치번호 그룹 사용자 링크수 다른권한(아무권한없음) 그룹권한(읽기 쓰기가능) 사용자권한(읽기 쓰기가능) 화일모드(b는 블록 특수 화일을 의미) Unix 시스템
ls-l /dev/rfd0 crw-rw---- 5 root sys 2, 0 Jan 23 19:32 /dev/rfd0 수정 날짜 화일명 minor 장치번호 major 장치번호 그룹 사용자 링크수 다른권한(아무권한없음) 그룹권한(읽기 쓰기가능) 사용자권한(읽기 쓰기가능) 화일모드(c 는 문자 특수 화일을 의미) Unix 시스템
2. Unix의 계층적 File System chmod -R change ,{change}* {fileName}+ 허가권 변경 clusterSelection+newPermission (허가권 추가) clusterSelection-newPermission (허가권 제거) clusterSelection=newPermission (절대적 허가권 할당) clusterSelection: u(user/owner) g(group) o(others) a(all) newPermission: r(read) w(write) x(execute) s(set user id/set group id) cf. 디렉토리 안의 모든 file들의 모드를 재귀적으로 변환(-R) chmod g+w | u-rw | g=r | u+w,g-r | o-rw 8진수 허가권 설정 chmod 750 . 현재의 디렉토리의 허가권 변경 ls ld . 위 변경 결과를 확인 cf. 디렉토리 자체 정보 (-d) umask : file 생성시 허가권 제한 (p156 참조) Unix 시스템
2. Unix의 계층적 File System Symbolic File Access Modes $ chmod a=rw myfile $ chmod g+x myfile $ chmod g-rwx myfile $ chmod g=u myfile Octal File Access Modes $ chmod 666 myfile $ chmod 751 myfile $ chmod 000 myfile 실행파일에 대하여 4000 set user ID: $ chmod 4711 myfile 2000 set group ID : $ chmod 2711 myfile 1000 set sticky bit : $ chmod 1711 myfile 디렉토리에 대하여 1000 set sticky bit : $ chmod 1777 share 그 디렉토리 안의 파일 제거 또는 이름 변경은 파일 소유자, 디렉토리 소유자, 수퍼유저 만이 다른사용자는 그안에 자기파일 생성만 (연습) ~mysung/2002unix 아래에 자기 디렉토리 만들고 보호하기 Unix 시스템
2. Unix의 계층적 File System file의 소유권 변경 chown -R newUserID {fileName}+ -R : recursive groups [userId] 사용자가 회원으로 속해있는 모든 그룹의 목록들을 표시 chgrp -R groupId {fileName}* 지정된 file의 소속 그룹을 바꾼다 cf. 재귀적으로(-R) file의 그룹 변경 newgrp [-] [groupID] 현재의 shell의 그룹을 다른 것으로 바꾼다 대쉬[-]를 사용하면 login 당시 shell의 그룹으로 바꾼다 Unix 시스템
3. 문서 편집 및 처리 화면 제어를 위한 터미날 유형 결정 Shell 환경 변수 $TERM Shell Startup file에 일방적으로 $TERM의 값을 지정하는 방법 setenv TERM vt100 (C Shell) TERM=vt100; export TERM (Bourne/Korn Shell) Shell Startup file에 $TERM의 값을 지정하되 문제시 사용자에게 묻는 방법: tset 사용자가 Shell에서 수동적으로 $TERM의 값을 지정하는 방법 터미날 설정 : tset tset 이미 $TERM에 terminal type이 설정되어있다고 가정하고, /etc/termcap을 참조하여 적절한 초기화를 실시 Unix 시스템
3. 문서 편집 및 처리 tset -s tset -iC1 -eC2 tset -m 'oldType:newType' /etc/ttydefs 참조하여 해당 terminal port에 대한 terminal type 값을 찾아 $TERM의 값으로 설정한 후, /etc/termcap을 참조하여 적절한 초기화를 실시한다. cf. temnial port 확인 명령 $ tty /dev/pts5 tset -iC1 -eC2 interrupt 문자를 C1으로, erase 문자를 C2로 설정 (default: interrupt ^C, erase ^H) tset -m 'oldType:newType' /etc/ttydefs을 무시하고 terminal type을 새로 설정 tset -m 'oldType:?newlType’ /etc/ttytab을 무시하고 terminal type을 새로 설정할 것인지를 사용자에게 물어봄 eval `tset -s -m 'network:?vt100'` /etc/ttydefs에서 기본 terminal type을 찾아서 그것이 network이면 실제 terminal type이 vt100 인지 묻고 해당 환경변수를 /etc/termcap을 참조하여 실시한다. cf. eval command command의 결과를 정규 Shell 명령처럼 실행한다. Unix 시스템
3. 문서 편집 및 처리 터미날 특성 변경: stty stty -a 현재 터미날의 설정 상태를 보여줌 stty -echo 타이핑한 문자를 다시 보여주지 않음 stty echo 타이핑한 문자를 다시 보여줌 stty -raw 메타문자의 특별한 의미를 사용하도록 해줌 stty raw 메타문자의 특별한 의미를 사용하지 않도록 함 stty -tostop 후면작업이 터미날에 출력을 보내도록 해줌 stty tostop 후면작업이 터미날에 출력을 보내지 않도록 함 stty sane 터미날 특성을 사전에 정한 값(defautl value)로 설정함 메타문자(metacharacter): erase kill werase rprint flush lnext susp intr quit stop eof 제어문자의 입력 control (^)로 표시하거나 \뒤에 실제 제어문자를 타이핑함 (예) stty erase “^H” Unix 시스템
4. Vi를 이용한 기본 텍스트 편집 Bill Joy가 개발 Unix 텍스트 에디터 텍스트 에디터 =/ 워드프로세서 vi: 화면 단위 편집기, ed/ex 포함 ex: ed 기반 강력한 행 단위 편집기 ed: 첫번째 Unix 시스템용 편집기 edit: 단순한 행 단위 편집기 sed: 문자열 에디터 lex: 프로그래머 유틸리티 awk: 프로그램 가능한 텍스트 편집 언어 grep: 텍스트 검색 프로그램 emacs: MIT Richard Stallman이 개발 윈도우 형식 많은 버전: Warren Montgomery 버전, Jove(Jonathan), Gosling EMACS, GNU EMACS(stallman) 텍스트 에디터 =/ 워드프로세서 vi, emac tex, nroff/troff Unix 시스템
4. Vi를 이용한 기본 텍스트 편집 터미널 형 검사 터미널 형의 지정 Vi의 시작 그림 참조 참고자료 환경 변수 $TERM 조사: $ echo $TERM 윈도우 시스템에서는 $TERM을 xterm으로 지정 터미널 형의 지정 login script에 지정: shell 명령과 같음 shell 명령으로 지정 Bourne shell: .profile TERM=adm3a; export TERM C shell: .login setenv TERM adm3a Vi의 시작 $ vi ex1 $ vi -R ex1 (읽기 전용) 그림 참조 참고자료 http://marvel.inchon.ac.kr/~mysung Information Unix Vi 고급 사용법, 기본 사용법 Unix 시스템
$ ~ ~ Vi mode(Vi 명령 모드) x r dd a i esc oO R $Vi filename :q! (기록 않음) ZZ(기록) :wq a i esc x r dd 커서이동 append insert oO open R replace H J K L Unix 시스템
4. Vi를 이용한 기본 텍스트 편집 (다시) 명령 모드에서 텍스트 입력 모드로의 전환 i 텍스트가 커서 앞에 삽입된다 (insert) I 텍스트가 현재 줄의 맨 앞에 삽입된다 (insert) a 텍스트가 커서 뒤에 삽입된다 (append) A 텍스트가 현재 줄의 맨 앞에 삽입된다 (append) o 텍스트가 현재 줄 다음부터 삽입된다 (open) O 텍스트가 현재 줄 앞에서 삽입된다 (Open) r 텍스트가 커서 위치에서 대치된다 (replace) R 텍스트가 현재 줄에서 대치된다 (Replace) 텍스트 입력 모드에서 명령 모드로의 전환: 커서 이동 한 줄 위 (↑, k) 한 줄 아래 (↓, j) 한 문자 왼쪽 (←, h) 한 문자 오른쪽 (→, ㅣ) 줄의 시작 (^) 줄의 마지막 ($) 한 단어 후퇴 (b) 한 단어 전진 (w, W) 지정 줄 (:nn ) 반 화면 아래 (^D) 한 화면 (^F) 반 화면 위 (^U) 한 화면 위 (^B) Enter Unix 시스템
4. Vi를 이용한 기본 텍스트 편집 화면 이동 텍스트 삭제 텍스트 치환 z<Enter> (현재의 줄이 화면의 맨 위에 오도록 다시 그림) z. (현재의 줄이 화면의 가운데에 오도록 다시 그림) z- (현재의 줄이 화면의 맨 아래에 오도록 다시 그림) /sss/+n (현재부터 이후에 문자열 sss가 나타난 첫줄부터 n줄 다음으로 커서 이동) ?sss?-n (현재부터 이전에 문자열 sss가 나타난 첫줄부터 n줄 전으로 이동) ^R (화면을 최소로 다시 그린다) ^L (화면을 완전히 다시 그린다) 텍스트 삭제 문자(x) 단어(dw) 줄(dd) 커서부터 줄 끝(D) 블록 단위 :<range>d ) cf. <range> 1,$(첫줄부터 마지막줄까지) 1,.(첫줄부터 현재줄까지) .,$(현재줄부터 마지막줄까지) .-2(현재부터 두 번째 앞줄) 텍스트 치환 문자(r) 단어(cw내용 ) 줄(cc내용 ) Enter ESC ESC Unix 시스템
4. Vi를 이용한 기본 텍스트 편집 탐색 및 치환 :?sss (현재 위치에서 화일의 앞쪽으로 탐색) 명령모드에서 n (마지막 탐색 명령을 반복) :<range>s/sss/ttt/ (<range>내의 문자열 sss 처음 것만을 ttt로 치환) :<range>s/sss/ttt/g (<range>내의 문자열 sss 모두를 ttt로 치환) Enter Enter Enter Enter Unix 시스템
4. Vi를 이용한 기본 텍스트 편집 화일 저장 및 불러오기 기타 명령 :q (변화가 없을 때 저장 없이 빠져나옴) :w (현재의 화일 이름으로 저장) :wq (현재의 화일 이름으로 저장한 후 빠져나옴) :x (현재의 화일 이름으로 저장한 후 빠져나옴) ZZ (현재의 화일 이름으로 저장한 후 빠져나옴) :w<이름> (<이름>이라는 화일로 저장) :e<이름> (현재의 화일이 아닌 다른 화일 <이름>을 편집) :n (현재 편집중인 화일의 다음 화일을 편집) 기타 명령 :!<명령> (Shell 명령을 시행하고 vi로 되돌아감) :!sh (Shell로의 나들이, 끝날 때는 ^D) Enter Enter Enter Enter Enter Enter Enter Enter Enter Enter Enter Unix 시스템
4. Vi를 이용한 기본 텍스트 편집 커서의 이동 텍스트의 삭제 및 취소(undo) 최근 명령 재 실행 hjkl 이용 H J K L [Vi 명령 mode] 4j G 명령으로 원하는 행으로 이동 7G G : 마지막 행으로 (cf.) ^G : 현재 줄 번호 알림 화면 이동 ^F ^B ^D ^U 텍스트 추가, 삽입, 수정 a, A (append) i, I (insert) o, O (open) r, R (replace) 텍스트의 삭제 및 취소(undo) x(exclude?) d(delete) c(change) dw cw db cb dd cc d$ c$ d^ c^ r(replace) u(undo) ^X u (undo) 최근 명령 재 실행 . 파일 관리 Vi를 벗어나지 않고 저장하기: :w 저장 않고 끝내기: :q! 또 다른 파일 편집: :e xx 또는 :e! xx 다른 파일을 읽어 와 덧붙이기: :r xx Unix 시스템
4. Vi를 이용한 기본 텍스트 편집 명령모드에서 버퍼 이용 붙이기 명령줄에서 버퍼 이용 붙이기 <nn>yy (nn 개의 줄을 이름 없는 버퍼로 복사) <nn>Y (nn 개의 줄을 이름 없는 버퍼로 복사) y위치지정자 (nn 개의 지정된 내용을 이름 없는 버퍼로 복사) h J K l ^H ^P ^J w W b B e E 0 ^ $ | ( ) { } [[ ]] p (버퍼에서 복사해서 현 위치 뒤에 붙이기) P (버퍼에서 복사해서 현 위치 뒤에 붙이기) "버퍼이름yy (버퍼이름에 복사) "버퍼이름p (버퍼이름의 버퍼에 저장된 내용을 복사) 명령줄에서 버퍼 이용 붙이기 :<range>y(a) (range의 내용을 이름없는 버퍼에 복사) :<line>pu (line 행 다음에 붙임) Unix 시스템
5. Vi를 이용한 고급 텍스트 편집 화면 디스플레이 조정하기(Fine-Tuning Your Screen Display) z<Enter> : 상단 z. : 중앙 z- : 하단 H(Home) M(Middle) L(last) ^R : refresh ^L : refresh 여러 가지 텍스트 수정 방법 r(replace) R(overtype mode) s(substitute) : s문자열(한 문자를 대치) c(change) : cw, cb, c$, c^ J(Join) ^V제어문자(텍스트 삽입모드에서만) : ^V^L (form-feed) 쉘로 벗어나기 :! carriage return 으로 복귀 :sh exit, ^D로 복귀 $ vi 하면 새로운 vi session 시작 Vi 는 multi-session 텍스트 검색 /검색문자: 순방향 검색, n으로 반복 ?검색문자: 역방향 검색, N으로 반복 Unix 시스템
5. Vi를 이용한 고급 텍스트 편집 자체 vi 명령 이용하여 텍스트 블록 옮기기 버퍼 이용 이름 없는 버퍼 1개 (volatile) 숫자 버퍼 9개 (non-volatile): 최근의 규모 큰 삭제 : dd.. “3p a-z 이름 있는 버퍼 26개 (non-volatile) : “ayy “ap 버퍼에 내용 넣고 꺼내는 법 삭제 명령: x, dd, dw, d$, d^ yank 명령: yy, yw, y$, y^, y’a, y`b p(put): 커서 다음에 버퍼 내용 넣기 P(Put): 커서 앞에 버퍼 내용 넣기 x, p로 위치 바뀐 문자 교정 윈도우 시스템에서 텍스트 블록 옮기기 마우스로 내용 선택 편집(Edit) 메뉴에서 복사(Copy) vi 커서 이동 붙이기(Paste) 선택 취향 선택하기(Selecting Your Preferences) : Karre Christian, The Unix Operating System, p570 A.2.1 참조 :set (default 제외) :set all (모든 지정 리스트) :set autoindent :set number .exrc (에디터 시동 파일)에 기록 텍스트 표시하기(Marking text) 행 인식 ^G (현재의 행) m(mark) ma (현재 행을 a로 지정) ’a (a로 지정된 행으로 이동)acute accent `a (a로 지정된 문자로 이동)grave accent d’a (현재 위치에서 a로 지정된 행까지 삭제) d`a (현재 위치에서 a로 지정된 문자까지 삭제) Unix 시스템
5. Vi를 이용한 고급 텍스트 편집 Vi 매크로 약어 s(substitute) g(global) 버퍼 매크로 실행: @버퍼이름 생성: (빈 행 열고 입력한 후 ESC) i<!--^V<ESC>$a-->^V<ESC> (행 시작위치에서 행 전체 삭제하여 버퍼 i에 저장) ”iD 또는 “idd (원하는 위치에서 버퍼 매크로 실행) @i 맵 : 명령 스트링을 키보드에 지정 :map lhs rhs (left-hand-side가 right-hand-side로 치환) left-hand-side 기능키(F1-F9)를 나타내는 # 단일 키 스트로크 기능키(F1-F9)로 생성된 문자열 (예) :map #1 i<!--^V<ESC> :map ^V<F1> i<!-- ^V<ESC> :map ^V<ESC>OP i<!--^V<ESC> unmap으로 기능 없앰 삽입모드 맵 : 삽입모드에서 치환됨 map! ^V<F1> i<!--^V<ESC> map! ^V<F2> $a-->^V<ESC> 약어 :ab ux Unix™ 빈 칸 또는 new line으로 구분된 약어를 대치 s(substitute) :(.,.) s/pat/repl/ (해당 행에서 하나만) :1,$ s/pat/repl/g (예) 1,3s/xx/yy/g g(global) :(1,$)g/pat/cmds (해당 행에서 모두) (예) 1,3g/xx/s//yy 1,3g/xx/s//yy/g Unix 시스템
5. Vi를 이용한 고급 텍스트 편집 자체 vi 명령으로 어떤 파일의 텍스트를 다른 파일로 옮기기 우발적인 삭제 복구하기 버퍼이용 ”fdw (커서 위치로부터 한 워드를 삭제하여 버퍼 f에 넣음) ”fp (버퍼 f의 내용을 텍스트에 끼워 넣음) 중간 파일 이용 ^G 또는 행 번호 옵션(:set nu)으로 행 번호 확인 :n1,n2w xx :e yy :r xx 우발적인 삭제 복구하기 ”3p ”1p.. dd (복구 됨) dw (복구 안됨) 버퍼 필터링(Filtering the Buffer) 시각 명령 모드 !텍스트 범위 !! (한 행을 파이프 라인으로 보냄) !} (단락의 남은 부분을 보냄) !G (파일의 남은 부분을 보냄) !]] (섹션의 남은 부분을 보냄) (예) !3jsort !$sort !!spell !!date (행에 날짜 연결) (cf.) :!date (쉘 명령 실행결과 화면에만) 행 편집 모드 :n1,n2!command command는 Unix 명령 Unix 시스템
6. EMACS 문서 편집기: emacs 1975 MIT의 Richard Stallman 작성, 무료 배포, Editor Macros의 약자 MIT Multics의 emacs(Bernie Greenberg)로 발전 Carnegie-Mellon 대학의 emacs(James Gosling)로 발전 (현재의 emacs 토대) AT&T Bell Lab.의 emacs(Warren Montgometry)로 발전 단일 모드: 명령 모드와 텍스트 입력 모드의 구분이 없다 대화식 오류 확인 기능 제공: 초보자에 유용 문자열(character stream) 방식의 편집: 제어열에서 대소문자 구분 없음 ctrl-h t (emacs 도움말) 다중 윈도우 기능 제공 Unix 시스템
6. EMACS 편집 시작 emacs [화일명] emacs의 초기화면은 타이핑이 시작되면 자동으로 없어짐 줄이 길어도 자동으로 분리되지않으므로 사용 분리 화면의 넓이보다 더 긴 줄은 줄 끝에 \f0 가 표시됨 화면 맨 밑에 mode line이 제공됨 mode line 3개의 대시(-) : **가 포함되면 현재 화일이 수정되었음을 의미함 "Emacs:" 다음에 현재의 화일이름이 나옴 (없으면, *scratch*) (현재의 편집모드): 초기화면에서는 (fundamental) 화일내에서의 상대적 위치(백분율): All(전부), Top(시작), Bot(끝) 편집 종료 ctrl-x ctrl-c (수정 후 저장하지 않았으면 emacs가 물어봄) ctrl-x ctrl-s (현재 작업 중인 화일을 저장함) ctrl-x ctrl-f (또다른 화일을 편집) Unix 시스템
6. EMACS 기초 명령 ctrl-g (어떤 emacs 명령을 종결하고 새로운 명령을 기다리는 상태화) ctrl-x 1 (커서가 놓여 있는 window를 제외한 나머지 윈도우를 닫음) 입력 진행 단순한 타이핑으로 텍스트가 입력됨 커서 이동 한 줄 위(ctrl-p) 한 줄 아래(ctrl-n) 한 문자 오른쪽(ctrl-f) 한 문자 왼쪽(ctrl-b) 줄의 시작(ctrl-a) 줄의 끝(ctrl-e) 한 단어 후진(esc b) 한 단어 전진(esc f) 한 화면 아래로(ctrl-v) 한 화면 위로(esc v) 화일의 시작(esc <) 화일의 끝(esc >) C-f Move forward a character C-b Move backward a character M-f Move forward a word M-b Move backward a word C-n Move to next line C-p Move to previous line C-a Move to beginning of line C-e Move to end of line M-a Move back to beginning of sentence M-e Move forward to end of sentence Unix 시스템
6. EMACS 텍스트 삭제 삭제 버퍼에 자동으로 들어감 커서 앞 문자(del) 커서 뒤 문자(ctrl-del) 커서 앞 단어(esc del) 커서 뒤 단어(esc d) 현재 줄 끝까지(ctrl-k) 문장 전체(esc k) 텍스트의 영역 정하기 마크 설정(ctrl-space) 영역 잡기 : 마크와 커서의 사이 영역 삭제(ctrl-w): delete-to-buffer 삭제 복귀 마지막 삭제 버퍼 복귀(ctrl-y) 이전 삭제 복귀(esc y) 다음 삭제를 덧붙이기(esc ctrl-w) 하나의 편집 수행을 취소(ctrl-x u) Unix 시스템
6. EMACS 탐색 : incremental search sss의 전방탐색(ctrl-s sss) sss의 후방탐색(ctrl-r sss) 전방탐색 반복(ctrl-s) 후방탐색 반복(ctrl-r) 탐색 작업 끝(esc) 탐색 및 치환 전체적인 탐색/치환(esc x repl s) emacs가 대화식으로 진행함 다중 윈도우 작업 윈도우 열기(ctrl-x 2) splitting-current window 커서가 놓여 있는 window를 제외한 나머지 윈도우를 닫음(ctrl-x 1) 커서가 놓여 있는 window를 닫음(ctrl-x d) 다른 윈도우(ctrl-x ctrl-o) 두 개의 윈도우에 두 개의 다른 화일 불러 방문하기(ctrl-x ctrl-v) Unix 시스템
7. 전자우편: mail mail –H [-f fileName] {userID}* 우편 저장: /var/mail/userID -H : header 출력 -f : 우편 저장 파일 지정 우편 저장: /var/mail/userID # echo $MAIL 보내기 # mail tim … ^D # mail music < jam.txt 받기 # mail ? ? ? q Unix 시스템
과제 1 …9월 25일(수)까지 Vi 편집기로 교재 2장 퀴즈와 연습문제 풀이 작성하여 제출 과제 제출 방법 단 연습문제 1번, 4번은 선택 과제 제출 방법 Electrical Version : multi.incheon.ac.kr (211.119.245.149)의/home/mysung/2002unix 에 자신의 학번으로 디렉토리 만들고 그 안에 복사 (자신의 디렉토리 보호 권장) Paper Version : 종이에 출력하여 제출 vi 편집기 내용을 윈도우 파일로 복사하는 방법 telnet 화면상에서 복사할 내용 부분을 드레그한 후 <enter>를 하게되면 복사가 되고 텍스트 편집기(메모장 등)에서 Ctrl+V를 하면 복사한 내용이 붙여넣기가 됩니다. Unix 시스템