Download presentation
Presentation is loading. Please wait.
1
2. 일반 사용자를 위한 유닉스 (UNIX for Nonprogrammers)
실습 컴퓨터 fedora.incheon.ac.kr ( ) Fedora release 11 (Leonidas) csmail.incheon.ac.kr( ) Red Hat Linux release 8.0 (Psyche) multi.incheon.ac.kr ( ) Solaris 10 (SunOS 5.10) version 확인: $ uname –a $ cat /proc/version (Linux) VMware 사용하거나 윈도우 ‘시작’ 메뉴에서 ‘실행’ 선택해서 telnet login: stu passwd: zld*******
2
Unix 들어가기와 나오기 Enter 계좌(account) 할당 login Super User(시스템 관리자)에게 의뢰
자동 할당: admintool /usr/sbin/useradd, /usr/sbin/userdel 유틸리티 이용 수동 할당 mkdir vi /etc/passwd view /etc/shadow vi /etc/group chown login login prompt 얻기: several keys password 확인과 설정 passwd /etc/passwd 좋은 암호 hacker(cracker)로 보호되어야 함 일상적인 단어의 사용은 피함 특수문자를 첨가하거나 대소문자를 구분함 Enter Unix/Linux
3
Unix 들어가기와 나오기 프롬프트(prompt)와 셸(shell) Prompt: login후에 처음 보임
Shell: 순수 Unix와 사용자 사이의 매개체 프로그램 Shell의 대표적인 종류 Bourne shell: /bin/sh Bourne-Again shell: /bin/bash Korn shell: /bin/ksh (Bourne Shell 포함) C shell: /bin/csh (대화형 작업에 유리) Shell의 선택 디폴트 로그인 셸은 시스템 관리자가 지정 shell prompt 구분 $ (Bourne shell, Korn shell) % (C shell) chsh (change shell) 명령으로 디폴트 셸 변경 <Solaris에서는 안됨> Linux machine에서 $ chsh –s /bin/sh $ 새로 로그인 하여 ps로 확인 $SHELL: 로그인 shell 절대경로 저장 예) $ echo $SHELL Unix/Linux
4
Unix 들어가기와 나오기 유틸리티 man (manual page) 1절 명령어 2절 시스템 호출 3절 라이브러리 함수
지금이 몇시인가 : date $ date 지금의 시각 표시 date mmddhhmm[cc]yy[.ss] 시스템 관리자만이 시간 지정 가능 화면을 깨끗이 지웁시다 : $ clear man (manual page) 명령어에 대한 온라인 도움말 얻기 man [–s section] word man word word가 들어 있는 첫 번째 매뉴얼 man [-s section] word word가 들어 있는 section 번째 매뉴얼 $ man –s 1 kill (Linux: $ man –S 1 kill, 또는 $ man 2 kill) $ man –s 2 kill (Linux: $ man –S 2 kill) man -l word word가 들어 있는 모든 매뉴얼 목록 $ man –l kill (Linux: man –f kill) cf. Unix명령의 일반적 표현 방법 [ ] (생략 가능) -options (명령어 확장) man intro 간단한 소개 페이지 $ man –s 1 intro $ man –s 2 intro 1절 명령어 2절 시스템 호출 3절 라이브러리 함수 4절 특수화일 5절 파일 형식 6절 게임 7절 기타 정보 8절 유지보수 명령어 Unix/Linux
5
Unix 들어가기와 나오기 메타문자(meta character): 제어용 특수문자
stty -a/all 현재 사용 중인 터미널의 메타문자들을 보여줌 erase (한 문자 지우기 ^H) kill (한 줄 지우기 ^U) werase (마지막 단어 지우기 ^w) rprint (현재 줄 재출력 ^R) flush (대기 입력 무시, 재출력 ^O) lnext (다음 문자를 특수문자로 보지않음 ^V) susp/dsusp (프로세스 일시정지 ^Z/^Y) intr (core dump 없이 작업 전면중단 ^C) quit (core dump 하고 작업 전면중단 ^\) stop/start (터미날 출력을 정지/재시작 ^S/^Q) eof (입력 끝 ^D) (예) $ stty erase “^H” /etc/bashrc 에서 `tput kbs`로 KEY_BACKSPACE를 erase 메타문자로 추가 설정 $ man terminfo $ stty –echo $ stty echo $ stty sane (원래대로 설정, 제어 문자 할당은 제외) Unix/Linux
6
Unix 들어가기와 나오기 프로세스의 종료 출력의 정지/복귀 입력의 끝 passwd logout
^C intr(core dump 없이 작업 전면중단) $ find / –name xx … ^C $ strings /var/log/wtmp … ^C 출력의 정지/복귀 ^S/^Q stop(터미날 출력을 정지/재시작) XON/XOFF protocol $ find / –name xx ... ^S ... ^Q 입력의 끝 ^D eof(입력 끝) $ mail someone ^D passwd 이전 패스워드 입력 후 새 패스워드 두 번 입력 6문자 이상 logout Shell 입력의 끝 $ ^D eof(입력 끝) 또는 logout C shell의 경우 $ exit Unix/Linux
7
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 (American Standard Code for Information Interchange) Character Set ANSI (American National Standards Institute) X3.4 –1968 참조 Unix/Linux
8
Unix의 계층적 File System 계층적(Hierarchical) File System이란?
tree structure: directory와 file root directory(/), current directory(.), parent directory(..), subdirectory home directory: login 직후의 디렉토리 (패스워드 file에 명시) 경로 이름(path name): 절대경로이름, 상대경로이름 Unix/Linux
9
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/Linux
10
$ ls -l /etc/bashrc (Linux)
-rw-rw-r root root :42 /etc/bashrc 수정 날짜 화일명 바이트 단위의 화일크기 그룹 사용자 링크수 다른권한(읽기만 가능, 쓰기 실행 불가능) 그룹권한(읽기 쓰기 가능, 실행 불가능) 사용자권한(읽기 쓰기 가능, 실행 불가능) rw- r-- 소유자 (user/owner) 그룹 사용자 (group) 그 밖의 사용자 (others) 화일모드(-는 보통화일을 의미) Unix/Linux
11
Unix의 계층적 File System file의 생성 문서편집기 이용: vi, emacs file 내용 보기
cat(catenate)와 redirection 이용 cat > file ^D file 새로 만들기/덮어쓰기 cat >> file ^D file에 연속 쓰기 file 내용 보기 cat fileName more {+lineNumber} {fileName}* 연속적으로 올리면서 출력 + (시작번호 명기, default=1) 전체화면 지우고 다음 페이지 출력 head -n {fileName}* : 처음 n 줄 (default=10) tail -n {fileName}* : 마지막 n 줄 Unix/Linux
12
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 어떤 디렉토리 안으로 file 이동 (cf.) -i(이미 존재하는지 확인한 후) -r(recursively) Unix/Linux
13
Unix의 계층적 File System file 링크 만들기: ln ln -f -s original newLink
ln -f -s { original }+ directory 명시된 화일(original)들에 대한 링크를 directory에 생성 (예) $ echo hold.3 > hold.3 $ ln hold.3 hold $ mkdir tmpdir $ ln hold.* tmpdir $ ln -s /usr/include/stdio.h stdio.h $ ls -l stdio.h lrwxrwxrwx 1 mjkim 20 Jan 12 17:58 stdio.h -> /usr/include/stdio.h $ ls -F Unix/Linux
14
Unix의 계층적 File System mv(move), cp(copy), ln(link)
mv(move) : inode (p 참조) 그대로, 그전 link 지우고 새 link cp(copy) : 새 inode, 새 link cp -r (recursive) ln(link) : inode 그대로, 새 link ln (hard link) ln -s (soft link, symbolic link) 확인 : $ ls -li (예) $ cat > xx Ctrl-D $ mv xx yy $ ls -li $ cp yy xx $ ln xx zz $ ln -s xx zzz Unix/Linux
15
Unix의 계층적 File System Hard link and Soft link (교재 p320 참조) Hard link
같은 inode 및 data block 포함 같은 파일 시스템에서만 디렉토리는 불가 자체 inode 없고 디렉토리 파일에서의 항목만 차지(같은 inode 값) Soft link(Symbolic link) 첫번 파일 이름만 포함 다른 파일 시스템도 디렉토리도 자체 inode 가지고 약간의 디스크 공간 차지 Unix/Linux
16
Unix의 계층적 File System $ ln xx yy yy xx 간의 하드 링크 xx yy
$ln –s xx zz zz 와 xx 간의 기호 링크 파일 i-노드테이블 xx yy 파일 i-노드테이블 xx zz Unix/Linux
17
Unix의 계층적 File System file을 프린트하기
lpr -m [-Pprinter] [-#copies] fileName* file에 번호를 붙여 출력 프린트 종료 후 메시지 보냄(-m) 프린터 지정(-Pprinter): $PRINTER에 지정된 프린터를 overwrite 여러번 인쇄(-#copies) lpq -l [-Pprinter] {job#}* {userID}* 특정 작업이나 프린터의 상태 보임 추가적인 정보 제공(-l) lprm -l [-Pprinter] {job#*} {userID}* 특정 사용자/작업의 프린팅 작업 취소 Unix/Linux
18
Unix의 계층적 File System file의 단어수 세기: wc -lwc fileName*
cf. line(-l) word(-w) character(-c) 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/Linux
19
drwxrwxr-x 118 root root 12288 2010-08-31 16:40 /etc
$ ls -ld /etc (Linux) drwxrwxr-x root root :40 /etc 수정 날짜 화일명 바이트 단위의 화일크기 그룹 사용자 링크수 다른권한(읽기 실행가능) 그룹권한(읽기 쓰기가능, 실행 가능) 사용자권한(읽기 쓰기가능, 실행 가능) 화일모드(d는 디렉토리 화일을 의미) Unix/Linux
20
$ ls -l /dev/sda (Linux)
brw-rw root disk , :28 /dev/sda 수정 날짜 화일명 minor 장치번호 major 장치번호 그룹 사용자 링크수 다른권한(아무권한없음) 그룹권한(읽기 쓰기가능) 사용자권한(읽기 쓰기가능) 화일모드(b는 블록 특수 화일을 의미) Unix/Linux
21
$ ls -l /dev/tty0 (Linux)
crw-rw root root , :28 /dev/tty0 수정 날짜 화일명 minor 장치번호 major 장치번호 그룹 사용자 링크수 다른권한(아무권한없음) 그룹권한(읽기 쓰기가능) 사용자권한(읽기 쓰기가능) 화일모드(c 는 문자 특수 화일을 의미) Unix/Linux
22
Unix의 계층적 File System - rwx r-x --- - 111 101 000
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 현재의 디렉토리의 허가권 변경 ls -ld . 위 변경 결과를 확인 cf. 디렉토리 자체 정보 (-d) - rwx r-x --- Unix/Linux
23
Unix의 계층적 File System - rws r-x --x -100 111 100 001 - rwx r-s --x
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 myfile $ chmod myfile $ chmod myfile 실행파일에 대하여 4000 set user ID: $ chmod myfile 2000 set group ID : $ chmod myfile 1000 set sticky bit : $ chmod myfile 디렉토리에 대하여 1000 set sticky bit : $ chmod share 그 디렉토리 안의 파일 제거 또는 이름 변경은 파일 소유자, 디렉토리 소유자, 수퍼유저만 다른 사용자는 그 안에 자기파일 생성만 $ find / -perm ls > result $ find / -perm ls > result umask (user mask) : file 생성시 허가권 제한 (p156 참조) (연습) 숙제방 아래에 자기 디렉토리 만들고 보호하기 rws r-x --x rwx r-s --x rwx r-- --t Unix/Linux
24
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/Linux
25
문서 편집 및 처리 터미날 특성 변경: stty 과 option stty -a 현재 터미날의 설정 상태를 보여줌
stty -echo 타이핑한 문자를 다시 보여주지 않음 stty echo 타이핑한 문자를 다시 보여줌 qstty -tostop 후면작업이 터미날에 출력을 보내도록 해줌 stty tostop 후면작업이 터미날에 출력을 보내지 않도록 함 stty sane 터미날 특성을 사전에 정한 값(default value)로 설정함 메타문자(metacharacter): erase (한 문자 지우기 ^H) kill (한 줄 지우기 ^U) werase (마지막 단어 지우기 ^w) rprint (현재 줄 재출력 ^R) flush (대기 입력 무시, 재출력 ^O) lnext (다음 문자를 특수문자로 보지않음 ^V) susp/dsusp (프로세스 일시정지 ^Z/^Y) intr (core dump 없이 작업 전면중단 ^C) quit (core dump 하고 작업 전면중단 ^\) stop/start (터미날 출력을 정지/재시작 ^S/^Q) eof (입력 끝 ^D) 제어문자의 입력 control (^)로 표시하거나 \뒤에 실제 제어문자를 타이핑함 (예) stty erase “^H” Unix/Linux
26
Vi를 이용한 기본 텍스트 편집 Bill Joy가 개발 ☞ 말콤 글래드웰의 “아웃라이어” (OUTLIERS, Malcolm Gladwell) 참고 Unix 텍스트 에디터 vi: 화면 단위 편집기, ed/ex 포함 ex: ed 기반 강력한 행 단위 편집기 ed: 첫번째 Unix 시스템용 편집기 edit: 단순한 행 단위 편집기 sed: 문자열 에디터 lex: 프로그래머 유틸리티 awk: 프로그램 가능한 텍스트 편집 언어 grep: 텍스트 검색 프로그램 emacs(Editor MACroS for the TECO editor): MIT Richard M. Stallman(GNU 창시자)이 개발 윈도우 형식 많은 버전: Warren Montgomery 버전, Jove (Jonathan), Gosling EMACS, GNU EMACS (Stallman) 텍스트 에디터 ≠ 워드프로세서 vi, emac tex, nroff/troff Unix/Linux
27
아웃라이어 (OUTLIERS, written by Malcolm Gladwell)
저자 말콤 글래드웰 | 역자 노정태 | 감수 최인철 | 출판사 김영사 반드시 Vi로 편집 상단에 학번, 이름, 꿈(사명/인생 목표)과 희망직업 꼭 적어 주세요! 책 내용 중 가장 인상 깊은 문장 하나도 적어 주세요! 제출 방법 Electrical Version1 csmail.incheon.ac.kr ( )의 /home/ul2010hw.a 또는 ul2010hw.b에 자기 학번으로 숙제방(디렉토리) 만들고 그 안에 복사 자신의 디렉토리 보호 권장: chmod directoryname Electrical Version2 multi.incheon.ac.kr ( 의 /export/home/ul2010hw.a 또는 ul2010hw.b에 자신의 학번으로 숙제방(디렉토리) 만들고 그 안에 복사 컴퓨터 사이의 파일 복사는 ftp 를 이용하세요 운영체제
28
Vi를 이용한 기본 텍스트 편집 터미널 형 검사 터미널 형의 지정 터미널 포트 확인 명령 Vi의 시작 그림 참조 참고자료
환경 변수 $TERM 조사: $ echo $TERM (PC 터미널은 ansi) 윈도우 시스템에서는 $TERM을 xterm으로 지정 터미널 형의 지정 login script에 지정: shell 명령과 같음 shell 명령으로 지정 Bourne shell 및 Bourn-Again shell $ TERM=ansi; export TERM C shell $ setenv TERM ansi 터미널 포트 확인 명령 $ tty /dev/pts/1 (pts: pseudo-tty slave driver) Vi의 시작 $ vi filename $ vi -R filename (읽기 전용) 그림 참조 참고자료 Information Unix Vi 고급 사용법 Unix/Linux
29
$ ~ ~ vi mode(vi 명령 모드) x r dd a A i I esc oO R $vi filename
:q! (기록 않음) ZZ(기록) :wq :x a A i I esc x r dd 커서이동 append insert oO open R replace (실습) $ vi vi $ vi rain H J K L Unix/Linux
30
Vi를 이용한 기본 텍스트 편집 명령 모드에서 텍스트 입력 모드로의 전환 텍스트 입력 모드에서 명령 모드로의 전환: [Esc]
i 텍스트가 커서 앞에 삽입된다 (insert) I 텍스트가 현재 줄의 맨 앞에 삽입된다 (Insert) a 텍스트가 커서 뒤에 삽입된다 (append) A 텍스트가 현재 줄의 맨 앞에 삽입된다 (Append) o 텍스트가 현재 줄 다음부터 삽입된다 (open) O 텍스트가 현재 줄 앞에서 삽입된다 (Open) r 텍스트가 커서 위치에서 대치된다 (replace) R 텍스트가 현재 줄에서 대치된다 (Replace) 텍스트 입력 모드에서 명령 모드로의 전환: [Esc] 커서 이동 한 줄 위 (↑, k) 한 줄 아래 (↓, j) 한 문자 왼쪽 (←, h) 한 문자 오른쪽 (→, ㅣ) 줄의 시작 (^) 줄의 마지막 ($) 한 단어 후퇴 (b) 한 단어 전진 (w, W) 지정 줄 (nnG) 현재 줄 (^G) 지정 줄 (:nn [Enter] ) nn은 줄번호, 현재 줄 (: nu) 반 화면 아래 (^D) 반 화면 위 (^U) 한 화면 (^F) 한 화면 위 (^B) Unix/Linux
31
Vi를 이용한 기본 텍스트 편집 화면 이동 텍스트 삭제 텍스트 치환 z. (현재의 줄이 화면의 가운데에 오도록 다시 그림)
z<Enter> (현재의 줄이 화면의 맨 위에 오도록 다시 그림) z (현재의 줄이 화면의 가운데에 오도록 다시 그림) z (현재의 줄이 화면의 맨 아래에 오도록 다시 그림) /sss/+n (현재부터 이후에 문자열 sss가 나타난 첫줄부터 n줄 다음으로 커서 이동) ?sss?-n (현재부터 이전에 문자열 sss가 나타난 첫줄부터 n줄 전으로 이동) ^R (화면을 공백 행을 줄여 최소로 다시 그린다) ^L (화면을 완전히 다시 그린다) 텍스트 삭제 문자(x) 단어(dw) 줄(dd) 커서부터 줄 끝(D) 블록 단위 :<range>d [Enter] cf. <range> 1,$(첫줄부터 마지막줄까지) 1,.(첫줄부터 현재줄까지) .,$(현재줄부터 마지막줄까지) .-2(현재부터 두 번째 앞줄) 텍스트 치환 문자(r) 단어(cw내용 [Esc] ) 줄(cc내용 [Esc] ) Unix/Linux
32
Vi를 이용한 기본 텍스트 편집 탐색 및 치환 :?sss [Enter] (현재 위치에서 화일의 앞쪽으로 탐색)
:<range>s/sss/ttt/ [Enter] (<range>내의 문자열 sss 처음 것만을 ttt로 치환) :<range>s/sss/ttt/g [Enter] (<range>내의 문자열 sss 모두를 ttt로 치환) Unix/Linux
33
Vi를 이용한 기본 텍스트 편집 화일 저장 및 불러오기 기타 명령 :q [Enter] (변화가 없을 때 저장 없이 빠져나옴)
:w [Enter] (현재의 화일 이름으로 저장) :wq [Enter] (현재의 화일 이름으로 저장한 후 빠져나옴) :x [Enter] (현재의 화일 이름으로 저장한 후 빠져나옴) ZZ [Enter] (현재의 화일 이름으로 저장한 후 빠져나옴) :w <이름> [Enter] (<이름>이라는 화일로 저장) :e <이름> [Enter] (현재의 화일이 아닌 다른 화일 <이름>을 편집) :n [Enter] (현재 편집중인 화일의 다음 화일을 편집) :r <이름> [Enter] (커서 위치 다음에 <이름> 화일을 읽어 와 덧붙임) 기타 명령 :!<명령> [Enter] (Shell 명령을 시행하고 vi로 되돌아감) :!sh [Enter] (Shell로의 나들이, 끝날 때는 ^D) Unix/Linux
34
Vi를 이용한 기본 텍스트 편집 명령모드에서 버퍼 이용 붙이기 (yank) 명령줄에서 버퍼 이용 붙이기
<nn>yy (nn 개의 줄을 이름 없는 버퍼로 복사) <nn>Y (nn 개의 줄을 이름 없는 버퍼로 복사) y위치지정자 (지정된 내용을 이름 없는 버퍼로 복사) 위치지정자: h J K l ^H ^P ^J w W b B e E 0 ^ $ | ( ) { } [[ ]] ( ): sentence, { }: paragraph [[ ]]: section <블록설정>y <블록설정>은 v<커서이동>Ctrl-v p (버퍼에서 복사해서 현 위치 뒤에 붙이기) P (버퍼에서 복사해서 현 위치 뒤에 붙이기) "버퍼이름yy (버퍼이름에 복사) "버퍼이름p (버퍼이름의 버퍼에 저장된 내용을 복사) 명령줄에서 버퍼 이용 붙이기 :<range>y(a) (range의 내용을 이름없는 버퍼에 복사) :<line>pu (line 행 다음에 붙임) 최근 명령 취소 u(undo) 최근 명령 재 실행 . (점) 줄 접합 J(Join) ^V제어문자 (텍스트 삽입모드에서만) a^V^Lb (form-feed) c^V^Gd (bell) Unix/Linux
35
Vi를 이용한 기본 텍스트 편집 정리 Unix/Linux 커서의 이동 쉘로 벗어나기 :!
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) 최근 명령 재 실행 . 파일 관리 Vi를 벗어나지 않고 저장하기: :w 저장 않고 끝내기: :q! 또 다른 파일 편집: :e xx 또는 :e! xx 다른 파일을 읽어 와 덧붙이기: :r xx 쉘로 벗어나기 :! carriage return 으로 복귀 :sh exit, ^D로 복귀 $ vi 하면 새로운 vi session 시작 Vi 는 multi-session 텍스트 검색 /검색문자: 순방향 검색, n으로 반복 ?검색문자: 역방향 검색, N으로 반복 화면 디스플레이 조정하기(Fine-Tuning Your Screen Display) z<Enter> : 상단 z. : 중앙 z- : 하단 H(Home) M(Middle) L(last) ^R : refresh ^L : refresh 여러 가지 텍스트 수정 방법 u(undo) .(redo) s(substitute) : s문자열 (커서 위치의 한 문자를 문자열로 대치) c(change) : cw, cb, c$, c^ J(Join) ^V제어문자 (텍스트 삽입모드에서만) a^V^Lb (form-feed) c^V^Gd (bell) Unix/Linux
36
실습: echo.c 코딩, 컴파일, 실행 echo.c 코딩 echo.c 컴파일 & 실행
#include <stdio.h> main(int argc, char *argv[]) { int i; for (i = 1; i < argc; i++) printf("%s%s", argv[i], (i < argc-1) ? " " : ""); printf("\n"); return 0; } echo.c 컴파일 & 실행 $ gcc echo.c –o echo $ ./echo hello world! 명령라인에서 $ myecho hello world! 로 실행시켰을 때, 아래와 같이 출력하는 myecho.c 작성 argc=3 argv[0]=“myecho” argv[1]=“hello” argv[2]=“world!” hello world! Unix/Linux
37
(C언어 보충) Command-line Arguments
$ echo hello world! Output hello, world! argc 와 argv[] argc=3 argv[0]=“echo” argv[1]=“hello” argv[2]=“world!” argv[3]=‘\0’ Source code $ cat echo.c #include <stdio.h> main(int argc, char *argv[]) { int i; for (i = 1; i < argc; i++) printf(“%s%s”, argv[i], (i < argc-1) ? “ “ : “”); printf(“\n”); return 0; } argv: echo\0 hello\0 world\0
38
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 (set nonumber) .exrc (에디터 시동 파일)에 기록 텍스트 표시하기(Marking text) 행 인식 ^G (현재의 행) m(mark) ma (현재 행을 a로 지정) ’a (a로 지정된 행으로 이동)acute accent `a (a로 지정된 문자로 이동)grave accent d’a (현재 위치에서 a로 지정된 행까지 삭제) d`a (현재 위치에서 a로 지정된 문자까지 삭제) Unix/Linux
39
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 !Gsort !!spell !!date (행에 날짜 연결) (cf.) :!date (쉘 명령 실행결과 화면에만) 행 편집 모드 :n1,n2!command command는 Unix 명령 $ LANG=en_US Unix/Linux
40
Vi를 이용한 고급 텍스트 편집 Vi 매크로 약어 s(substitute) g(global)
버퍼 매크로 생성: (o 명령으로 빈 행 열고 아래 입력) i<!-- ^V<ESC>$a -->^V<ESC><ESC> 즉 oi<!-- ^V<ESC>$a -->^V<ESC><ESC> (행 시작위치에서 행 전체 삭제하여 버퍼 j에 저장) ^”jD 또는 “jdd (원하는 위치에서 버퍼 매크로 실행) @j 맵 : 명령 스트링을 키보드에 지정 :map lhs rhs (left-hand-side가 right-hand-side로 치환) left-hand-side 기능키(F1-F9)를 나타내는 # 단일 키 스트로크 기능키(F1-F9)로 생성된 문자열 (예) :map ^V<F1> i((^V<ESC> 또는 :map ^V<ESC>OP i(( ^V<ESC> :map ^V<F2> a))^V<ESC> 또는 :map ^V<ESC>OQ a))^V<ESC> unmap으로 기능 없앰 삽입모드 맵 : 삽입모드에서 치환됨 : map! ^V<F3> (( [Enter] : map! ^V<F4> )) [Enter] 약어 :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/Linux
41
전자우편: mail mail –H [-f fileName] {userID}* 우편 저장: /var/mail/userID 보내기
-H : header 출력 -f : 우편 저장 파일 지정 우편 저장: /var/mail/userID # echo $MAIL 보내기 # mail tim … ^D # mail music < jam.txt (.mailrc 에 만든 메일그룹에게 파일 전송 가능) 받기 # mail ? ? ? h ? d 1 ? q ? x 비교 write wall ( /usr/sbin/wall ) Unix/Linux
42
사용자들과 통신 mail : 전자 우편 메시지 전송 (형) mail -H [ -f fileName ] userID *
userID가 없으면, 전자우편을 읽는 것으로 간주함 (/user/spool/mail/<userID>에서) f 옵션으로 사용자의 전자우편 보관장소를 지정할 수 있음 H 옵션으로 사용자의 전자우편 보관장소로부터 제목들을 볼 수 있음 전자우편 시작하기 화일 ($HOME/.mailrc) $MAILRC에 이 화일경로가 명시됨 사용자의 요구를 맞추어 구성할 수 있음 특히 유용한 기능 전자우편 그룹 형성 group name userID + (Linux) group cic kim lee park # in ".mailrc" mail cic < kongmoon (Solaris) 시스템 관리자가 그룹 형성 /etc/mail/aliases에 그룹 등록하고 newaliases 실행 $ cat /etc/mail/aliases mm: mysung, stu, … 8. Networking
43
사용자들과 통신 명령 모드 ? 도움말 copy [mesgList] [fileName] 메시지 복사, "saved"라는 표시 없음 delete [mesgList] 메시지 삭제 file [fileName] 우편함 fileName으로부터 우편 읽기 header [message] message를 포함하는 메시지 제목 보이기 mail [userId]+ 전자우편 전송 print [mesgList] more를 이용하여 메시지를 보여줌 quit mail 빠져 나옴 reply [mesgList] 메시지의 송신자에게 응답함 save [mesgList] [fileName] 메시지 저장, fileName (default: mbox) 8. Networking
44
사용자들과 통신 mesgList (전자우편 메시지 집합) 현재 메시지 nn 번호가 nn인 메시지
^ 지워지지 않은 메시지 중에서 첫 번째 $ 마지막 메시지 * 모든 메시지 nn-mm 번호가 nn부터 mm사이의 메시지 user 사용자 user로부터 온 메시지 mail 보내기 (예) $ mail stu Subject: ……… ^D (예) $ mail stu < letter mail 받기 (예) $ mail (예) $ mail -f mbox (예) $ mail -H 8. Networking
45
분산 자료 ftp ftp 프로토콜을 지원하는 다양한 호스트들간의 화일 복사
원격지 호스트의 .netrc를 탐색하여 anonymous ftp인지를 검사함(만일 anonymous ftp가 아니면, 계정과 패스워드를 물어봄) ^C 화일 전송 중지 (단, ftp는 지속됨) ftp의 명령 등 !command local host 상에서 명령 command 수행 append localFile remoteFile 지역화일을 원격지화일 끝에 추가 bell 모든 화일이 전송된 다음 벨이 울림 bye 원격지 호스트 연결 폐쇄 후, ftp 종료 cd remoteDir 원격지 호스트의 경로 바꾸기 close 원격지 호스트 연결 폐쇄 delete remoteFile 원격지 호스트로부터 화일 삭제 get remoteFile [ localFile ] 원격지 화일을 지역 화일로 복사 help [ command ] 도움말 표시 lcd localDir 지역 호스트의 경로 바꾸기 ls remoteDir 사용중인 원격지 호스트의 호일 목록 보기 mkdir remoteDir 사용중인 원격지 호스트에 디렉토리 만들기 open hostNane [ port ] 호스트 연결 시도 put localFile [ remoteFile ] 지역 화일을 원격지 화일로 복사 pwd 현재 작업 중인 원격지 호스트의 디렉토리 표시 quit bye와 같음 rename remoteFrom remoteTo 원격 화일 이름의 재정의 rmdir remoteDir 사용중인 원격지 호스트에 디렉토리 지우기 8. Networking
46
(참고) 터미널 타입 화면 제어를 위한 터미날 타입 결정 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/Linux
47
(참고) 터미널 타입 tset -s tset -iC1 -eC2 tset -m 'oldType:newType'
/etc/ttydefs 참조하여 해당 terminal port에 대한 terminal type 값을 찾아 $TERM의 값으로 설정한 후, /etc/termcap을 참조하여 적절한 초기화를 실시한다 cf. teminal port 확인 명령 $ tty /dev/pts5 (pts: pseudo-tty slave driver) 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/Linux
48
과제 1 … 9월 27일(월) 11:59pm 까지 Vi 편집기로 아래 내용을 작성하여 제출하세요 과제 제출 방법
소스코드 myecho.c 와 실행화일 myecho OUTLIER 독후감 자기 소개서 1페이지 (25줄) 이상 작성해서 자기 숙제방에 넣어주세요 과제 제출 방법 Electrical Version1 fedora.incheon.ac.kr ( ): /home/ul2010hw.a 또는 ul2010hw.b에 자신의 학번으로 숙제방(디렉토리) 만들고 그 안에 복사 자신의 디렉토리 보호 권장: chmod directoryname Electrical Version2 multi.incheon.ac.kr ( ): /export/home/ul2010hw.a 또는 ul2010hw.b에 자신의 학번으로 숙제방(디렉토리) 만들고 그 안에 복사 컴퓨터 사이의 파일 복사는 ftp 를 이용하세요! vi 편집기 내용을 윈도우 파일로 복사하는 방법 telnet 화면상에서 복사할 내용 부분을 드래그 한 후 <enter>를 하면 복사가 되고 텍스트 편집기(메모장 등)에서 Ctrl+V를 하면 복사한 내용이 붙여 넣기가 됩니다 Unix/Linux
49
Vi 편집기에서 한글이 깨져서 나올시 Unix/Linux 접속한 원격 호스트에서 아래 시행하여 지원 폰트 확인
$ unset LANG $ LANG=C $ locale –a /* locale: locale specific information */ 로컬 linux 호스트의 /etc/sysconfig/i18n 설정을 다음과 같이 변경한다. LANG = “ko_KR.eucKR” (또는 “ko_KR.EUC”, “ko_KR.euckr” 등 locale 결과) SUPPORTED="en_US.iso885915:en_US:en:ko_KR.eucKR:ko_KR:ko" SYSFONT="lat0-sun16" SYSFONTACM="iso15" 관리자가 바꿔주지 않는다면 ~/.bashrc 에 다음을 추가한다. LANG = “ko_KR.euckr” SUPPORTED = “en_US:en_US.iso885915:en:ko_KR.eucKR:ko_KR:ko” SYSFONT=“latarcyrheb-sun16” export LANG SUPPORTED SYSFONT Desktop GUI 메뉴에서도 터미널 설정 메뉴 한글 코딩 방식을 “eucKR” 로 설정한다. Unix/Linux
50
일속에서 재미와 열정을 느끼는 이유 사람들은 자신이 가치 있는 일을 하고 있다는 느낌(sense of meaningfulness)을 받거나, 그 일을 할 때 자신에게 선택권이 있다는 느낌(sense of choice), 그 일을 할만한 기술과 지식을 갖추고 있다는 느낌(sense of competence), 실제로 진보하고 있다는 느낌(sense of progress)을 갖게 될 때 일속에서 재미와 열정을 느낀다. Kenneth W. Thomas (2000). Intrinsic Motivation at work Unix/Linux
Similar presentations