본 강의에 들어가기 전
C 기초 특강
토론 주제
과학(Science)/공학(Engineering)
일반화(Generalization)/특별화(Specialization)
아마추어(Amateur)/프로페셔널(Professional)
하드웨어(hardware)/소프트웨어(software)
프로그래밍 언어
인터프리터(interpreter)/컴파일러(compiler)
BASIC
FORTRAN Pascal
Visual BASIC
COBOL
C
C++
Visual C++
Java C#
Java Script PHP JSP Shell Python Ruby
C 언어 학습
실습 환경
UNIX/LINUX 환경
vi 사용법
gcc(compiler) 사용법
C 기초
Keyword 소개
기본 입출력 함수(printf, scanf)
타입, 변수, 기본 연산
조건문과 반복문 (if-else, for, while)
함수
포인터
라이브러리 활용
문자열
수학
파일 입출력
실습환경 구축
Xshell4 설치
www.netsarang.co.kr
lily.mmu.ac.kr 계정 신청
USB등으로 개인 폴더 유지
Xshell 사용법 (1)
다운로드 및 설치
(www.netsarang.co.kr)
새로 만들기 – 연결
이름(N) : 원하는 이름 지정 (lily)
호스트(H) : lily.mmu.ac.kr
Xshell 사용법 (2)
SSH 사용자 이름 : id 입력 SSH 사용자 인증 : 암호 입력
Xshell 사용법 (3)
문자코드 글자체, 크기
접속 초기 화면
유닉스시스템 접속에 성공하면 메시지 출력
마지막으로 접속한 시간과 IP 주소 출력
홈디렉토리
로그인한 직후의 작업 디렉토리
프롬프트
사용자의 입력을 기다리는 표시
콘쉘 : $
기초명령의 사용
banner
화면에 큰 문자를 출력
예 : banner unix
date
날짜와 시간을 출력
clear
화면을 깨끗이 지움
man
명령에 대한 설명 출력
예 : man banner
현재 디렉토리 확인: pwd
현재 작업 디렉토리의 절대 경로 출력
사용법
pwd
ssh lily.mmu.ac.kr
$ pwd
/home/kgu
$
디렉토리 이동: cd
현재 작업 디렉토리를 지정한 디렉토리로 이동
디렉토리명을 지정하지 않으면 자신의 홈 디렉토리로 이동
사용법
cd [디렉토리명]
ssh lily.mmu.ac.kr
$ cd /tmp
$ pwd /tmp
$ cd
$ pwd
/home/kgu
$
/tmp 로 이동
홈디렉토리
로 이동
디렉토리 파일 목록 확인: ls
파일이나 디렉토리에 대한 정보 출력
옵션
ls [옵션] [파일 또는 디렉토리명]
옵션 기 능
a
All. 시스템에 숨겨진 파일(디렉토리들)을 모두 보여줌l
Long. 파일과 디렉토리에 대한 상세 정보를 보여줌d
Directory. 디렉토리에 대한 정보만 출력R
Recursive. 서브 디렉토리내의 모든 디렉토리들을 반복 출력F
파일 종류를 구분. (실행 파일은 *, 디렉토리는 /를 붙임)u
파일, 디렉토리 이름을 최종 접근 시간 순으로 화면에 출력디렉토리 파일 목록 확인 - ls
사용법
ssh lily.mmu.ac.kr
$ ls -a
. .. .profile
$ ls .profile .profile
$
현재 디렉토리의 모든 파일목록
지정한 파일 정보
1) ls 2) ls -a 3) ls -l 4) ls -al 5) ls -d 6) ls -F 7) ls -u 8) ls /tmp 9) ls /etc
10)ls /etc/passwd 11)ls –l /etc/passwd
파일 내용 보기: cat
간단한 파일 보기 명령으로 짧은 파일에 적합
옵션
-n : 행번호 출력
사용법
간단한 파일 생성도 가능
Cat > test.txt
화면 입력이 test.txt 파일로 생성됨
종료 시 Ctrl-d
cat [옵션] 파일명
ssh lily.mmu.ac.kr
$ cat /etc/hosts
#
# Internet host table
#
127.0.0.1 localhost 192.168.10.118 loghost
$
파일 내용 보기: more
파일의 내용을 한 화면씩 출력
옵션
+행번호 : 지정한 행부터 출력
명령
다음 페이지 : space
이전 페이지 : b
종료 : q
문자열 찾기 : /문자열
사용법
more [옵션] 파일명
ssh lily.mmu.ac.kr
$ more /etc/services
파일 내용 보기: tail
파일의 마지막 부분 출력
옵션
+행번호 : 지정한 행부터 끝까지 출력
-숫자 : 화면에 출력할 행 수
-f : 파일 출력이 종료되지 않고 주기적으로 반복 출력
사용법
tail [옵션] 파일명
ssh lily.mmu.ac.kr
$ tail /etc/services
파일 복사: cp
특정 파일이나 디렉토리를 다른 이름으로 복사
옵션
-i : 파일을 덮어쓸 때 경고 메시지 출력
-r : 디렉토리 복사
사용 형태
cp [옵션] 원본파일명 복사파일명
사용 형식 동 작
cp 파일1 파일2 파일1을 파일2로 복사.
cp 파일들 디렉토리 파일들을 디렉토리 밑에 같은 이름으로 복사.
cp -r 디렉토리1 디렉토리2 디렉토리1을 디렉토리2로 복사.
디렉토리1의 파일도 모두 복사됨.
파일 복사: cp
사용법 실습하기
1) mkdir Unix/ch3 2) cd Unix/ch3 3) mkdir Practice 4) cd Practice
5) cp /etc/services test.txt 6) ls
7) cp /etc/services . 8) mkdir Temp
9) cp test.txt Temp 10)cp Temp Tmp
11)ls
12) cp -r Temp Tmp 13) ls Temp
14) ls Tmp ssh lily.mmu.ac.kr
$ cp hello.c h.c
$ cp f1.c f2.c f3.c dir1
$ cp -r dir1 dir2
$
파일 삭제: rm
지정한 파일이나 디렉토리를 삭제
옵션
-i : 확인 후 삭제
-f : 무조건 삭제
-r : 디렉토리 삭제
rm [옵션] 파일명/디렉토리명
<주의>
한번 삭제한 파일은 되살릴 수 없음 !!
파일 이동: mv
파일 이름을 바꾸거나 이동
옵션
-i : 확인 후 이동
사용 형식
mv [옵션] 원래이름 새이름
사용 형식 동 작
mv 파일1 파일2 파일1의 이름을 파일2로 바꿈.
mv 파일명… 디렉토리 지정한 파일들을 디렉토리로 옮김.
mv 디렉토리1 디렉토리2 디렉토리1의 이름을 디렉토리2로 바꿈.
vi의 사용 방법
파일 내용을 잘못 수정한 경우 버퍼의 내용 무시
작업 취소 기능 제공
디스크 버퍼
(임시 저장장소)
① 편집기에서 파일 호출 ② 편집기에서
파일 수정③ 파일 저장
vi의 동작 모드
Vi에서는 대소문자를 별도의 명령으로 해석한다.
명령 모드 입력 모드
i,I,a,A,o,O Esc 입력한 내용을
명령어로 해석
입력한 내용이 버퍼로 옮겨져 추가, 수정됨 vi 시작
커서이동 페이지이동
글자 삭제 줄 삭제 등
마지막행 모드
특별명령처리 vi 종료
:, /, ?
vi 종료
검색,저장 줄 이동 등 바꾸기 ZZ
q,q! w HDD Enter
Esc
vi 시작하기
vi
새로운 파일 시작
파일 저장할 때 이름 지정
vi 파일_이름
지정한 이름이 없으면 새로운 파일 생성
지정한 이름이 있으면 기존 파일 열기
ssh lily.mmu.ac.kr
$ vi
ssh lily.mmu.ac.kr
$ vi first
vi 초기 화면
화면 크기에 따라 행과 칼럼수는 달라진다.
~ ~
~ ~
~ ~
~ ~
~ ~
~ ~
~ “first.txt” [새 파일]
80칼럼
26행
빈 줄
입력 명령
입력 명령(명령모드->입력모드)
명령키 수행 작업
i 커서 앞에 삽입 a 커서 뒤에 삽입
o 현재 줄 다음에 삽입
I 현재 줄 첫 칸 앞에 텍스트 입력 A 현재 줄 끝에 텍스트 입력
O 현재 줄 앞에 삽입
입력이 끝나면 “입력모드”에서 “명령모드”로 돌아와야 한다.
Esc
주의!
저장 및 종료 명령
저장 명령
저장하거나 종료하려면 “명령모드”로 돌아와야 한다.
종료 명령
(저장 후 종료 또는 그냥 종료)명령키 수행 작업
:w 현재의 파일명으로 파일 저장 :w 파일명 지정한 파일명으로 파일 저장
명령키 수행 작업
:q 작업 내용을 저장하였으면 vi 종료 :q! 작업내용을 저장하지 않고 vi 종료 :wq 작업 내용을 저장한 후 vi 종료
:wq 파일명 작업 내용을 지정한 파일명으로 저장한 후 vi 종료 ZZ(shift-zz) 작업 내용을 저장한 후 vi 종료
[실습하기] 입력 및 저장
실습하기
실습 디렉토리 구성
파일 생성 : text.txt
ssh lily.mmu.ac.kr
$ cd
$ mkdir Unix/ch4
$ cd Unix/ch4
$ vi test.txt
mane is Gil-dong Hong.
I wake up in the morning.
This is a living loom.
A that’s a bedloom.
[실습하기] 입력 및 저장
실습하기
vi test.txt
ssh lily.mmu.ac.kr
mane is Gil-dong Hong.
I wake up in the morning.
This is a living loom.
A that’s a bedloom.
ssh lily.mmu.ac.kr
My mane is Gil-dong Hong.
I wake up in the morning.
This is a living loom.
And that’s a bedloom. test2.txt
1) i 2) My
3) Esc키
4) G5) o 6) nd
7) Esc키
8) :w test2.txt
커서이동명령 [1/3]
화살표 키 이용
H, J, K, L 키 이용
커 서 k
h
l
j
오른쪽 왼쪽
아래로 위로
이동 명령어
한 행 위 k
한 행 아래 j
한 문자 오른 쪽 l
한 문자 왼쪽 h
행의 시작 ^ 또는 0
행의 마지막 $
이전 행의 처음 -
다음 행의 처음 + 또는
커서이동명령 [2/3]
현재 화면에서 커서
이동 지정한 곳으로 이동
이동 명령키
키 화면 맨 위로 H
키 화면 중간으로 M
키 화면 맨 아래로 L
다음 단어의 첫문자로 w 이전 단어의 첫문자로 b 다음 단어의 끝 글자로 e
이동 명령키
줄 번호 n 위치로 :n 또는 nG 파일의 끝 줄로 이동 :$ 또는 G n줄 만큼 앞으로 이동 n+
n줄 만큼 뒤로 n-
현재 문장의 처음으로 (
다음 문장의 처음으로 )
현재 문단의 처음으로 {
다음 문단의 처음으로 }
커서이동명령 [3/3]
커서이동 예제
1 #include <stdio.h>
2
3 main() { 4 char c;
5
6 printf(“Hello, C World\n”);
7 printf("=====\n");
8 printf(“select menu item\n");
9 printf("1. unix\n");
10 printf("2. linux\n");
11 printf("=====\n");
12 }
~
~
H
L M
^ $
j k
w
b
e
[실습하기] 커서 이동
실습하기
vi test.txt
ssh lily.mmu.ac.kr
My mane is Gil-dong Hong.
I wake up in the morning.
This is a living loom.
And that’s a bedloom.
1) 커서를 1행으로 이동 : 1G 또는 :1 2) 1행의 두번째 단어로 이동 : w 3) 2행으로 이동 : j
4) 커서를 좌로 이동 : ㅣ
5) 마지막 행으로 이동 : G 또는 :$
화면이동
화면에 나타나지 않은 부분으로 화면 이동
#include <stdio.h>
main() {
printf(“Hello 1\n”);
printf(“Hello 2\n”);
printf (“Hello 8\n”);
}
ssh lily.mmu.ac.kr
printf(“Hello 3\n”);
printf(“Hello 4\n”);
printf(“Hello 5\n”);
printf(“Hello 6\n”);
printf(“Hello 7\n”);
이 동 명령키
반 화면 위로 ^u
반 화면 아래로 ^d
한 화면 위로 ^b
한 화면 아래로 ^f
한 줄만 위로 ^y
한 줄만 아래로 ^e
파일내용 다시 출력 ^l
[실습하기] 화면 이동
실습하기
vi /etc/profile
왼쪽 순서에 따라 화면 이동을 실습
ssh lily.mmu.ac.kr
# ident
# The profile trap “” 2 3
export LOGNAME PATH if [ “$TERM = “” ]
…..
1):set nu 2)^u
3)^d 4)^f 5)^b 6)^y 7)^e 8)^l
9):set nonu
내용 삭제 및 취소
명령모드에서 동작
명령어 삭제 대상 수행 작업
x, #x 문자 커서 위치의 문자 삭제(예:3x) dw, #dw 단어 커서 위치의 단어 삭제
dd, #dd 줄 커서 위치의 줄 삭제
D(shift-d) 줄의 일부 커서 위치부터 줄 끝까지 삭제
u 방금 수행한 명령 취소
U 해당 줄의 모든 편집 취소
[실습하기] 삭제 및 취소
ssh lily.mmu.ac.kr
My mane is Gil-dong Hong.
I wake up in the morning.
This is a living loom.
And that’s a bedloom.
ssh lily.mmu.ac.kr Gil-dong Hong.
I wake up in the morning.
This
1)1G 2)11x 3)jj 4)llll 5)D
6)j
7)dd
8)u
9)dd
10):w
내용 수정
명령모드에서 동작
키 수정 대상 수행 작업
r 문자 현재 커서위치의 한 문자 변경 R 문자열 현재 커서부터 ESC 입력까지 변경
cw 단어 커서 위치부터 현재 단어의 끝까지 내용 변경 cc 줄 커서가 위치한 줄의 내용 변경
s, ns 문자열 현재 커서부터 내용 변경(예:5s)
C 줄 일부 커서 위치에서 줄 끝까지 내용 변경
[실습하기] 수정
ssh lily.mmu.ac.kr
My mane is Gil-dong Hong.
I wake up in the morning.
This is a living loom.
And that’s a bedloom.
ssh lily.mmu.ac.kr
My name is Gil-dong Hong.
I wake up in the morning.
This is a living room.
And that’s a bedroom.
1) 1G 2) w 3) cw 4) name 5) Esc키 6) jjw 7) r r 8) r ] 9) j j 10)7s
11)bedroom 12) Esc키 13):w
편집기능 – 복사, 잘라내기, 붙이기
명령모드에서 동작
행 삭제와 잘라내기는 동일한 동작이다.
명령어 수행 작업
yy, #yy 현재 행을 버퍼로 복사 (예:4yy)
p 현재 행 다음에 버퍼 내용 삽입
P 현재 행 위쪽에 버퍼 내용을 삽입
dd, #dd 현재 행을 잘라내기
버퍼의 사용
버퍼
Vi는 작업 내용을 버퍼에 저장 – 실행 취소 가능
복사하기, 잘라내기에 사용
버퍼 종류
Unnamed buffer (이름 없는 버퍼)
Named buffers (이름이 있는 버퍼) “a, “b, … “z
Numbered buffers(번호가 있는 버퍼) “1, “2, …,“9
사용 예
“a3yy -> 현재 행부터 아래로 3줄을 a버퍼에 저장
“ap -> a버퍼의 내용을 붙이기
범위지정 방법
편집하는 범위를 지정하는 방법
마지막행 모드에서 사용
“: 범위 편집_명령” 형태로 사용
범위 의 미
1,$ 첫 줄에서 마지막 줄까지(파일내의 모든 줄)
% 첫 줄에서 마지막 줄까지(파일내의 모든 줄) 1,. 첫 줄에서 현재 줄까지
.,$ 현재 줄에서 마지막 줄까지
.-2 현재 줄에서 앞쪽으로 2번째 줄
10,20 10번째 줄에서 20번째 줄까지
마지막행 모드에서 복사와 잘라내기
마지막행 모드에서 사용
명령어 수행 작업
:#y #으로 지정한 행을 복사(:10y -> 10행을 복사)
:<범위>y 범위로 지정한 행을 복사(예, :10,20y -> 10행~20행까지 복사) :#d #으로 지정한 행을 삭제(:10d -> 10행을 삭제)
:<범위>d 범위로 지정한 행을 복사(예, :10,20d -> 10행~20행을 삭제) :pu 현재 행 다음에 버퍼내용 붙이기
:#pu #으로 지정한 행 다음에 버퍼내용 붙이기(예, :5pu)
[실습하기] 버퍼를 이용한 복사
실습하기
vi test.txt -> test2.txt로 복사
ssh lily.mmu.ac.kr
My name is Gil-dong Hong.
I wake up in the morning.
This is a living room.
And that’s a bedroom.
ssh lily.mmu.ac.kr
My name is Gil-dong Hong.
And that’s a bedroom.
I wake up in the morning.
This is a living room.
And that’s a bedroom.
1) :3 2) yy 3) p 4) j 5) dd
ssh lily.mmu.ac.kr
My name is Gil-dong Hong.
I wake up in the morning.
This is a living room.
This is a living room.
And that’s a bedroom.
6) p
7) “ayy 8) :w
9) :e test.txt 10)“ap
test.txt
test2.txt
검색 기능
마지막행 모드에서 사용
명령어 수행 작업
/문자열 현재 위치부터 파일 앞쪽으로 문자열 탐색
?문자열 현재 위치부터 파일 뒤쪽으로 문자열 탐색 n 다음 문자열 탐색
N 역방향으로 문자열 탐색
[실습하기] 문자열 탐색
실습하기
vi test.txt
ssh lily.mmu.ac.kr
My name is Gil-dong Hong.
And that’s a bedroom.
I wake up in the morning.
This is a living room.
And that’s a bedroom.
1)/room 2)n
3)?name 4)n
5)N
바꾸기 기능
마지막행 모드에서 사용
명령어 수행 작업
:s/문자열1/문자열2/ 커서가 위치한 줄에서만 문자열1을 문자열2로 바꿈
:<범위>s/문자열1/문자열2/ <범위>안의 모든 줄에 대해서 각 줄
의 첫번째 문자열1을 찾아 문자열2로 바꿈
:<범위>s/문자열1/문자열2/g <범위>안의 모든 줄에 대해서
모든문자열1을 문자열2로 바꿈
:<범위>s/문자열1/문자열2/gc <범위>안의 모든 줄에 대해서 각 문
자열1을 문자열2로 치환할 때 수정
할지 안 할지를 묻는다
[실습하기] 범위를 이용한 바꾸기
실습하기
vi test.txt
ssh lily.mmu.ac.kr
My name is Gil-dong Hong.
And that’s a bedroom.
I wake up in the morning.
This is a living room.
And that’s a bedroom.
ssh lily.mmu.ac.kr
My name was Gil-sun Hong.
But that’s a bedroom.
I wake up in the morning.
This was a living room.
But that’s a bedroom.
1):s/dong/sun/
2):%s/is/was/g 3):2,5
s/And/But/g
4):w
기타 기능 [1/2]
파일 읽어오기 / 여러 파일 편집
vi에서 쉘 명령 실행
명령어 수 행
:r 파일명 지정한 파일을 현재 커서 위치에 삽입 :e 파일명 현재 파일 대신 지정한 파일을 읽음
:n vi 시작시 여러 파일을 지정하였을 경우 다음 파일로 이동
명령어 수행 작업
:!명령 vi를 중단하고 지정한 명령 수행 (vi로 돌아올 때 : ) :sh vi를 잠시 빠져나가서 쉘을 수행 (vi로 돌아올때 : exit)
[실습하기] 쉘 명령 실행
실습하기
vi test2.txt
ssh lily.mmu.ac.kr
My name is Gil-dong Hong.
I wake up in the morning.
This is a living room.
This is a living room.
And that’s a bedroom.
1):!ls -l 2)Esc키
3):sh
4)ls -l
5)exit
기타 기능 [2/2]
알아두면 유용한 명령키들
명령어 수 행
:f 파일명 파일 이름을 지정한 이름으로 변경
:w %.old 현재 파일을 .old 이름으로 저장해 둘 때
^g 기본적인 파일정보 출력(파일명, 라인수 등) J 현재 줄과 다음 줄 연결
. 바로 이전에 수행한 명령 재 실행
~ 현재 커서 위치의 한 문자를 소문자 혹은 대문자로 전환
[실습하기] 기타 명령어
실습하기
vi test2.txt
ssh lily.mmu.ac.kr
My name is Gil-dong Hong.
I wake up in the morning.
This is a living room.
This is a living room.
And that’s a bedroom.
1):3 2)J 3)l 4)~
5).
6).
7):w
ssh lily.mmu.ac.kr
My name is Gil-dong Hong.
I wake up in the morning.
THIS is a living room.This is a living room.