Presentation is loading. Please wait.

Presentation is loading. Please wait.

2. 일반 사용자를 위한 유닉스 (UNIX for Nonprogrammers)

Similar presentations


Presentation on theme: "2. 일반 사용자를 위한 유닉스 (UNIX for Nonprogrammers)"— Presentation transcript:

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: stu***

2 개 요 명령어 및 유틸리티 리스트: cancel cat cd chgrp chmod chown clear cp date emas
file group head lp lpstat ls mail man mkdir more mv newgrp passwd pwd rm rmdir stty tail vi wc 시스템의 시작/로그인 및 종료/로그아웃 사용자 관리 파일 관리/디렉토리 관리 vi 편집기

3 Unix 들어가기와 나오기 계좌(account) 할당 login Super User(시스템 관리자)에게 의뢰
자동 할당: admintool /usr/sbin/useradd, /usr/sbin/userdel 유틸리티 이용 $ /usr/sbin/useradd guest –d /home/guest [ –s /bin/bash ] $ passwd guest $ cat /etc/passwd | more $ /usr/sbin/userdel -r guest 수동 할당 mkdir vi /etc/passwd view /etc/shadow vi /etc/group Chown login login prompt 얻기: several [Enter] keys  ID key-in 중 erase는 Control+BackSpace() password 확인과 설정 passwd  /etc/passwd 좋은 암호 hacker(cracker)로 보호되어야 함 일상적인 단어의 사용은 피함 특수문자를 첨가하거나 대소문자를 구분함 Unix/Linux

4 Unix 들어가기와 나오기 프롬프트(prompt)와 셸(shell) (cf.) sh: $ history
Prompt: login후에 처음 보임 Shell: 순수 Unix와 사용자 사이의 매개체 프로그램 Shell의 대표적인 종류 Bourne shell: /bin/sh Bourne-Again shell: /bin/bash Korn shell: /bin/ksh (Bourne Shell 포함) C shell: /bin/csh (C언어와 유사, 대화형 작업에 유리) TC shell: /bin/tcsh Shell의 선택 디폴트 로그인 셸은 시스템 관리자가 지정 shell prompt 구분  $ (Bourne shell, Korn shell)  % (C shell) chsh (change shell) 명령으로 디폴트 셸 변경 <Solaris에서는 안됨> Linux machine에서 $ chsh –s /bin/sh $ 새로 로그인 하여 ps로 확인 $SHELL: 로그인 shell 절대경로 저장 예) $ echo $SHELL (cf.) sh: $ history bash: $ history Unix/Linux

5 Unix 들어가기와 나오기 유틸리티 man (manual page) 1절 명령어 2절 시스템 호출 3절 라이브러리 함수
지금이 몇시인가 : date  $ date 지금의 시각 표시 date mmddhhmm[cc]yy[.ss]  시스템 관리자만이 시간 지정 가능 화면을 깨끗이 지웁시다 : $ clear  man (manual page) 명령어에 대한 온라인 도움말 얻기 man intro  간단한 소개 페이지 $ man –s 1 intro $ man –s 2 intro 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 chmod (Linux: man –f chmod) cf. Unix명령의 일반적 표현 방법 [ ] (생략 가능) -options (명령어 확장) 1절 명령어 2절 시스템 호출 3절 라이브러리 함수 4절 특수화일 5절 파일 형식 6절 게임 7절 기타 정보 8절 유지보수 명령어 Unix/Linux

6 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

7 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

8 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

9 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

10 Unix의 계층적 File System Q: inode? 디렉토리 명령 현재 작업중인 관련 디렉토리 보기: pwd
디렉토리 내용보기: ls [-adglsFR fileName]* directoryName* cf. {…}* : 생략 가능 또는 1회 이상 반복 등장 가능 $ ls  현재 디렉토리의 모든 file 나열("."으로 시작하는 것 제외) $ ls -l  상세한(long) 정보 제공 permissionMode link# owner size(byte) updatedTime fileName $ ls -alFRsi "." file도 나열(-a) 상세한 정보(-1) 파일형식(-F) {실행가능* 디렉토리/ 소켓=} 디스크 블록의 크기(-s) inode (-i) 서브디렉토리 만들기 $ mkdir [-p] newDirectoryName 디렉토리 이동하기: cd $ cd ..  $ cd /  $ cd ~loginName  $ cd 디렉토리 제거: $ rmdir [-r] directoryName*  cf. 만일 디렉토리가 비어 있지 않으면 제거 안됨  $ rm -r(recursively) Q: inode? Unix/Linux

11 inode 리눅스는 각 파일에 대한 정보를 기억하기 위하여 inode(Index Node)라 부르는 구조를 사용한다
파일 시스템 내의 모든 inode에는 유일한 inode 번호가 할당되고, 모든 파일은 정확히 하나의 inode를 가진다 디스크상의 파일들과 관련되는 모든 inode는 inode 리스트라 부르는 디스크의 시작 부분에 있는 특수한 장소에 저장된다 Unix/Linux

12 inode 모든 파일은 inode를 가진다 Unix/Linux

13 UNIX inode (4K bytes per block)
Unix/Linux

14 Linux ex2 File System inode
/usr/include/linux/ext2_fs.h 208행 Unix/Linux

15 $ ls -l /etc/bashrc (Linux)
-rw-r--r root root :42 /etc/bashrc 수정 날짜 화일명 바이트 단위의 화일크기 그룹 사용자 링크수 다른권한(읽기만 가능, 쓰기 실행 불가능) 그룹권한(읽기 쓰기 가능, 실행 불가능) 사용자권한(읽기 쓰기 가능, 실행 불가능) rw- r-- 소유자 (user/owner) 그룹 사용자 (group) 그 밖의 사용자 (others) - 화일모드(-는 보통화일을 의미) Unix/Linux

16 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

17 $ ls -l /dev/sda (Linux)
brw-rw root disk , :28 /dev/sda 수정 날짜 화일명 minor 장치번호 major 장치번호 그룹 사용자 링크수 다른권한(아무권한없음) 그룹권한(읽기 쓰기가능) 사용자권한(읽기 쓰기가능) 화일모드(b는 블록 특수 화일을 의미) Unix/Linux

18 $ ls -l /dev/tty0 (Linux)
crw-rw root root , :28 /dev/tty0 수정 날짜 화일명 minor 장치번호 major 장치번호 그룹 사용자 링크수 다른권한(아무권한없음) 그룹권한(읽기 쓰기가능) 사용자권한(읽기 쓰기가능) 화일모드(c 는 문자 특수 화일을 의미) Unix/Linux

19 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

20 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

21 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

22 Unix의 계층적 File System mv (move), cp (copy), ln (link)
mv (move) : inode (p344~348 참조) 그대로, 그전 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

23 Unix의 계층적 File System Hard link and Soft link (교재 p320 참조) Hard link
같은 inode 및 data block 포함 같은 파일 시스템에서만 디렉토리는 불가 자체 inode 없고 디렉토리 파일에서의 항목만 차지(같은 inode 값) Soft link(Symbolic link) 첫번 파일 이름만 포함 다른 파일 시스템도 디렉토리도 자체 inode 가지고 약간의 디스크 공간 차지 Unix/Linux

24 Unix의 계층적 File System $ ln xx zz  zz xx 간의 하드 링크 xx zz
$ln –s xx zzz  zzz 와 xx 간의 기호(symbolic) 링크 파일 i-노드테이블 xx zz 파일 i-노드테이블 xx zzz Unix/Linux

25 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

26 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

27 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

28 Unix의 계층적 File System - rws r-x --x -100 111 101 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

29 Unix의 계층적 File System file의 소유권 변경 [ Unix only ]
chown -R newUserID {fileName}+ -R : recursive [ Unix only ] groups [userId] 사용자가 회원으로 속해있는 모든 그룹의 목록들을 표시 chgrp -R groupId {fileName}* 지정된 file의 소속 그룹을 바꾼다 (루트만) cf. 재귀적으로 (-R) file의 그룹 변경 newgrp [-] [groupID] 현재의 shell의 그룹을 다른 것으로 바꾼다 대쉬[-]를 사용하면 login 당시 shell의 그룹으로 바꾼다 Unix/Linux

30 문서 편집 및 처리 터미날 특성 변경: 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

31 vi 를 이용한 기본 텍스트 편집 Bill Joy가 개발 ☞ 말콤 글래드웰의 “아웃라이어” (OUTLIERS, Malcolm Gladwell) 참고 Unix 텍스트 에디터 vi (VIsual editor): 화면 단위 편집기, 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

32 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

33 $ ~ ~ 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 rain H J K L  Unix/Linux

34 (vi 실습1) Uriah Heep Rain Lyrics
It's raining outside but that's not unusual But the way that I'm feeling is becoming usual I guess you could say The clouds are moving away Away from your days And into mine Now it's raining inside and that's kind of a shame And it's getting to me, a happy man And why should you want to Waste all my time The world is yours But I am mine Rain, rain, rain, in my tears Measuring carefully my years Shame, shame, shame, in my mind See what you've done to my life Rain, rain, rain, in my tears Measuring carefully my years Shame, shame, shame, in my mind See what you've done to my life See what you've done to my life Unix/Linux

35 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

36 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

37 vi를 이용한 기본 텍스트 편집 탐색 및 치환 :?sss [Enter] (현재 위치에서 화일의 앞쪽으로 탐색)
:<range>s/sss/ttt/ [Enter] (<range>내의 문자열 sss 처음 것만을 ttt로 치환) :<range>s/sss/ttt/g [Enter] (<range>내의 문자열 sss 모두를 ttt로 치환) Unix/Linux

38 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

39 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 (버퍼이름 a-z 에 복사) "버퍼이름p (버퍼이름의 버퍼에 저장된 내용을 복사) 명령줄에서 버퍼 이용 붙이기 :<range>y(a) (range의 내용을 이름없는 버퍼에 복사) :<line>pu (line 행 다음에 붙임) 최근 명령 취소 u(undo) 최근 명령 재 실행 . (점) 줄 접합 J(Join) ^V제어문자 (텍스트 삽입모드에서만) a^V^Lb (form-feed) c^V^Gd (bell) Unix/Linux

40 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

41 (vi 실습2) 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

42 (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

43 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

44 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

45 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> map으로 설정 확인 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

46 분산 자료 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 hostName [ port ] 호스트 연결 시도 put localFile [ remoteFile ] 지역 화일을 원격지 화일로 복사 pwd 현재 작업 중인 원격지 호스트의 디렉토리 표시 quit bye와 같음 rename remoteFrom remoteTo 원격 화일 이름의 재정의 rmdir remoteDir 사용중인 원격지 호스트에 디렉토리 지우기

47 (vi 실습3) Homework 숙제방에 올리기
같은 컴퓨터에서 작업한 Homework 파일은 숙제방에서 cp 로 복사 $ cp ~자기아이디/homework ./homework 다른 컴퓨터(윈도우 환경 포함)에서 작업한 Homework 파일은 ftp로 숙제방에 $ ftp 아이디로 로그인 > binary > put 파일명 Unix/Linux

48 사용자들과 통신 $ mail –H [-f fileName] {userID}* (또는 $ mailx)
-H : header 출력 -f : 우편 저장 파일 지정 우편 저장: /var/mail/userID $ echo $MAIL 보내기 $ mail mysung … # (tip) BS (BackSpace) 키 안될 때 Contril+BS ^D $ mail music < jam.txt (.mailrc 에 만든 메일그룹에게 파일 전송 가능) 받기 $ mail & ? & h & d 1 & q & x $ write (/usr/bin/write) $ wall ( /usr/sbin/wall ) Unix/Linux

49 전자우편: Mail mail : 전자 우편 메시지 전송 (형) mail -H [ -f fileName ] userID *
userID가 없으면, 전자우편을 읽는 것으로 간주함 (/user/spool/mail/<userID>에서) f 옵션으로 사용자의 전자우편 보관장소를 지정할 수 있음 H 옵션으로 사용자의 전자우편 보관장소로부터 제목들을 볼 수 있음 전자우편 시작하기 화일 ($HOME/.mailrc) $MAILRC에 이 화일경로가 명시됨 사용자의 요구를 맞추어 구성할 수 있음 특히 유용한 기능 전자우편 그룹 형성 group name userID + (Linux) group music mysung stu guest # in ".mailrc" $ mail music < letter ( 자기 자신한테는 오지 않음) (Solaris) 시스템 관리자가 그룹 형성 /etc/mail/aliases에 그룹 등록하고 $ newaliases 실행 $ cat /etc/mail/aliases music: mysung, stu, guest … 8. Networking

50 Mail 명령 모드 ? 도움말 copy [mesgList] [fileName] 메시지 복사, "saved"라는 표시 없음
? 도움말 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) mesgList (전자우편 메시지 집합) . 현재 메시지 nn 번호가 nn인 메시지 ^ 지워지지 않은 메시지 중에서 첫 번째 $ 마지막 메시지 * 모든 메시지 nn-mm 번호가 nn부터 mm사이의 메시지 user 사용자 user로부터 온 메시지 8. Networking

51 Mail mail 보내기 (예) $ mail stu Subject: ……… ^D
(예) $ mail stu < letter mail 받기 (예) $ mail (예) $ mail -f mbox (예) $ mail -H Linux에서 mail group 만들기 (예) $ vi .mailrc group mybf mysung stu guest (예) $ mail mybf (예) $ mail mybf < letter Unix/Linux

52 (참고) 터미널 타입 화면 제어를 위한 터미날 타입 결정 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

53 (참고) 터미널 타입 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

54 Vi 편집기에서 한글이 깨져서 나올 때 접속한 원격 호스트에서 아래 시행하여 지원 폰트 확인한다 $ 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

55 일속에서 재미와 열정을 느끼는 이유 사람들은 자신이 가치 있는 일을 하고 있다는 느낌(sense of meaningfulness)을 받거나, 그 일을 할 때 자신에게 선택권이 있다는 느낌(sense of choice), 그 일을 할만한 기술과 지식을 갖추고 있다는 느낌(sense of competence), 실제로 진보하고 있다는 느낌(sense of progress)을 갖게 될 때 일속에서 재미와 열정을 느낀다. Kenneth W. Thomas (2000). Intrinsic Motivation at work Unix/Linux

56 요약 정리 제 2 장 정리: 유닉스/리눅스에 사용자 등록하는 방법 유닉스/리눅스 시스템으로 로그인/로그아웃하는 방법
패스워드 변경의 중요성 셸의 기능 유틸리티를 수행하는 방법 도움말을 얻는 방법 특별한 터미널 메타문자 가장 일반적인 파일 지향적 유틸리티 유닉스/리눅스 편집기 vi 터미널을 정확하게 설정하는 방법 전자우편을 보내는 방법


Download ppt "2. 일반 사용자를 위한 유닉스 (UNIX for Nonprogrammers)"

Similar presentations


Ads by Google