[ 2020 2학기 / 7주차 ]
1. 프로그램 작성과 컴파일
1.1 gedit 문서편집기
GNU의 대표적인GUI 텍스트 편집기다.
<Gedit 실행 방법>
• 메인 메뉴
[프로그램] -> [보조 프로그램] -> [지에디트] 선택
• 터미널
$ gedit [파일이름] &
• 파일 관리자:
텍스트 파일 클릭하면 자동실행
<gedit 메뉴>
파일 | 새로 만들기, 열기, 저장, 되돌리기, 인쇄 |
편집 | 입력 취소, 다시 실행, 잘라내기, 복사, 붙여넣기, 삭제 |
보기 | 도구 모음, 상태표시줄, 전체화면, 강조 모드 |
검색 | 찾기, 바꾸기, 줄로 이동 |
도구 | 맞춥법 검사, 오타가 있는 단어 강조, 언어 설정, 문서 통계 |
문서 | 모두 저장, 모두 닫기, 새 탭 그롭, 이전 문서 |
1.2 모듈 프로그램
• 단일 모듈 프로그램
코드의 재사용(reuse)이 어렵고, 여러 사람이 참여하는 프로그래밍이 어렵다. 예를 들어 다른 프로그램에서 copy 함수를 재사용하기 힘들다.
• 다중 모듈 프로그램
여러 개의 .c 파일들로 이루어진 프로그램이다. 일반적으로 복잡하며 대단위 프로그램인 경우에 적합하다.
1.3 gcc 컴파일러
$ gcc [-옵션] 파일
c 프로그램을 컴파일 한다. 옵션을 사용하지 않으면 실행파일 a.out를 생성한다.
<옵션 사용>
• -c 옵션: 목적 파일 생성
$ gcc –c longest.c
• -o 옵션: 실행 파일 생성
$ gcc –o longest longest.o 혹은 $ gcc –o longest longest.c
2. 자동 빌드 도구
2.1 make 시스템의 필요성
• 다중 모듈 프로그램을 구성하는 일부 파일이 변경된 경우
변경된 파일만 컴파일하고, 파일들의 의존 관계에 따라서 필요한 파일 만 다시 컴파일하여 실행 파일을 만들면 좋다.
• make 시스템
메이크파일을 이용하여 파일의 상호 의존 관계를 파악하여 실행 파일을 쉽 게 다시 만든다.
대규모 프로그램의 경우에는 헤더, 소스 파일, 목적 파일, 실행 파일의 모 든 관계를 기억하고 체계적으로 관리하는 것이 필요하다.
2.2 메이크파일
실행 파일을 만들기 위해 필요한 파일들과 그들 사이의 의존 관계, 만드는 방법 등을 기술한 파일이다.
$ make [-f 메이크파일]
make 시스템은 메이크파일(makefile 혹은 Makefile)을 이용하여 보통 실행 파일을 빌드한다. 옵션을 사용하여 별도의 메이크파일을 지정할 수 있다.
2.3 메이크파일의 구성
예) Makefile
main:main.o copy.o
gcc -o main main.o copy.o
main.o: main.c copy.h
gcc -c main.c
copy.o: copy.c copy.h
gcc -c copy.c
3. GDB 디버거
3.1 gdb(GNU debugger)
$ gdb [실행파일]
gdb 디버거는 실행파일을 이용하여 디버깅 모드로 실행한다.
3.2 gdb 기능
• 소스보기 : l(ist)
l [줄번호] | 지정된 줄을 프린트 |
l [파일명]:[함수명] | 지정된 함수를 프린트 |
set listsize n | 출력되는 줄의 수를 n으로 변경 |
• 정지점 : b(reak), clear, d(elete)
b [파일:]함수 | 파일의 함수 시작부분에 정지점 설정 |
b n | n번 줄에 정지점을 설정 |
b +n | 현재 줄에서 n개 줄 이후에 정지점 설정 |
b -n | 현재 줄에서 n개 줄 이전에 정지점 설정 |
info b | 현재 설정된 정지점을 출력 |
clear 줄번호 | 해당 정지점을 삭제 |
d | 모든 정지점을 삭제 |
• 프로그램 수행
r(un) 인수 | 명령줄 인수를 받아 프로그램 수행 |
k(ill) | 프로그램 수행 강제 종료 |
n(ext) | 멈춘 지점에서 다음 줄을 수행하고 멈춤 |
s(tep) | n과 같은 기능 함수호출 시 함수내부로 진입 |
c(ontinue) | 정지점을 만날 때 까지 계속 수행 |
u | 반복문에서 빠져나옴 |
finish | 현재 수행하는 함수의 끝으로 이동 |
return | 현재 수행중인 함수를 빠져나옴 |
quit | 종료 |
• 변수 값 프린트: p(rint)
p [변수명] | 해당 변수 값 프린트 |
p 파일명::[변수명] | 특정 파일의 전역변수 프린트 |
p [함수명]::[변수명] | 특정 함수의 정적 변수 프린트 |
info locals | 현재 상태의 지역변수 리스트 |
4. 이클립스 통합개발환경
4.1 이클립스 통합개발환경
• 다양한 언어(C/C++, Java 등)를 지원하는 통합개발환경
• 설치
CentOS 설치시 [S/W Development Workstation]을 선택하여 자동 설치
메인메뉴 [시스템]->[관리]->[소프트웨어 추가/제거]에서 선택 설치
4.2 새로운 C 프로젝트 생성
• File →New → C/C++ Projects 선택
• 프로젝트 이름을 지정
• 프로젝트 타입 Hello World ANSI C Project 선택
• Finish 버튼 클릭하면 간단한 HelloWorld.c 프로그램 자동 생성
• 프로젝트 타입 Empty Project 선택하면 빈 프로젝트 생성
4.3 메인화면
• 좌측 탐색 창
새로 생성된 프로젝트를 확인
프로젝트 및 파일들을 탐색 가능
소스 파일은 src 폴더에 헤더 파일은 include 폴더에 저장됨
• 중앙 상단
소스 및 각종 파일 등을 편집 수정할 수 있는 창
하단은C 파일을 컴파일 혹은 실행한 결과를 보여주는 창들이다.
• 우측
우측은 사용법을 보여준다.
5. VI 에디터
5.1 vi 에디터
$ vi 파일*
기본 텍스트 에디터로 매우 강력한 기능을 가지고 있으나 배우는데 상당한 시간과 노력이 필요하다.
5.2 명령 모드/ 입력 모드
• vi 에디터는 명령 모드와 입력 모드가 구분되어 있으며 시작하면 명령 모드이다.
• 마지막 줄 모드
:wq 작업 내용을 저장하고 종료 (ZZ와 동일한 기능)
:q 아무런 작업을 하지 않은 경우의 종료
:q! 작업 내용을 저장하지 않고 종료
5.3 내부 명령어
- 원하는 위치로 이동하는 명령
- 입력모드로 전환하는 명령
- 수정 혹은 삭제 명령
- 복사 및 붙이기
- 기타 명령
① 원하는 위치로 이동하는 명령
• 커서 이동
h, ← | 한 칸 왼쪽 |
j, ↓ | 한 칸 아래쪽 |
k, ↑ | 한 칸 위쪽 |
l, → | 한 칸 오른쪽 |
BACKSPACE | 왼쪽으로 한 칸 |
SPACE | 왼쪽으로 한 칸 SPACE 오른쪽으로 한 칸 |
- | 이전 줄의 처음(명령모드) |
+ | 다음 줄의 처음 (명령모드) |
RETURN | 다음 줄의 처음(명령모드) |
0 | 현재 줄의 맨 앞(명령모드) |
$ | 현재 줄의 끝(명령모드) |
^ | 현재 줄의 첫 글자(명령모드) |
W | 다음단어의 첫 글자(명령모드) |
B | 이전단어의 첫 글자(명령모드) |
• 화면 이동
^F | 한 화면 아래로 |
^B | 한 화면 위로 |
^D | 반 화면 아래로 |
^U | 반 화면 위로 |
• 특정 줄로 이동
nG | n번째 줄로 이동 |
1G | 첫 줄로 이동하기 |
G | 마지막 줄로 이동하기 |
:n | n번째 줄로 이동 |
• 탐색(search)
/탐색패턴 | forward 탐색 |
?탐색패턴 | backward 탐색 |
② 입력모드로 전환하는 명령
• 입력모드로 전환
i | 커서 위치 앞에 삽입 |
a | 커서 위치 뒤에 삽입 |
I | 현재 줄의 앞에 삽입 |
A | 현재 줄의 뒤에 삽입 |
o | 현재 줄의 아래에 전개 |
O | 현재 줄의 위에 전개 |
③ 수정 혹은 삭제 명령
• 현재 커서를 중심으로 수정
r | 단지 한 글자만 변경 |
R | 입력하는 대로 겹쳐 쓰기 |
s | 현재 글자 삭제, 삽입 상태 |
C | 커서로부터 줄 끝까지 변경 (커서로 부터 줄 끝까지 지우고 삽입) |
cc | 현재 줄 전체를 변경 |
cw | 현재 단어를 삭제하고 변경 |
• 삭제
x | 커서가 있는 문자 지우기 |
X | 커서의 왼쪽 문자 지우기 |
D | 커서부터 줄끝까지 지우기 |
dd | 현재 줄의 전체를 지우기 |
:n,m d | n~m번째 줄 삭제 |
④ 복사/붙이기
• 줄 내용 복사(copy)
nY | 현재 줄에서부터 n개의 줄을 복사 |
:n,m y | n번째 줄에서 m번째 줄까지를 버퍼에 복사함 |
• 마지막으로 삭제/복사한 내용을 붙이기(put)
P | 버퍼 내용을 커서의 뒤(혹은 아래)에 삽입 |
p | 버퍼 내용을 커서의 앞(혹은 위)에 삽입 |
⑤ 대치, 수행취소/재수행
• 대치 명령 - 각 줄의 해당되는 첫 번째 단어만 대치
:s/패턴/스트링 | 현재 줄에서 대치 |
:n,m s/패턴/스트링 | 지정된 줄 범위에서 대치 |
:n s/패턴/스트링 | 지정된 줄(n)에서 대치 |
s/패턴/스트링/g | 각 줄의 해당되는 모든 단어 대치 |
• 수행취소/재수행
u | 방금 전 수행 내용 취소(Undo) |
U | 현재 줄 수행 내용을 취소 |
. | 방금 전 수행 내용을 반복(Redo) |
⑥ 기타
• 다른 파일 편집
:e 파일이름 | 현재 파일 대신에 주어진 파일 열기 |
:e! 파일이름 | 저장 여부를 점검하지 않고 파일 변경 |
:e# | 이전 파일을 다시 열기 |
• 줄 번호 붙이기
:set number | 줄번호 붙이기 |
:se nu | |
:set nonumber | 줄번호 없애기 |
:se non |
• 쉘 명령어 수행
:!ls | 편집기 내에서 쉘 명령어 수행 |
:!cat |
'Study > LINUX' 카테고리의 다른 글
[2020-2 리눅스 이론] 8주차 (0) | 2020.11.22 |
---|---|
[2020-2 리눅스 실습] 7주차 (0) | 2020.11.14 |
[2020-2 리눅스 이론] 6주차 (0) | 2020.11.08 |
[2020-2 리눅스 이론] 5주차 (0) | 2020.10.31 |
[2020-2 리눅스 실습] 5주차 (0) | 2020.10.31 |