linux 사용하기

53
Linux Linux 사사사사 사사사사 2007. 03. 22

Upload: vala

Post on 23-Jan-2016

74 views

Category:

Documents


0 download

DESCRIPTION

Linux 사용하기. 2007. 03. 22. 목 차. 리눅스 명령어 사용방법 vi editor 사용방법 Make 사용방법 RPM 사용방법. Linux 명령어. 명령어 히스토리 기능 : history & 화살표키 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Linux  사용하기

Linux Linux 사용하기사용하기

2007. 03. 22

Page 2: Linux  사용하기

목 차목 차

리눅스 명령어 사용방법

vi editor 사용방법

Make 사용방법

RPM 사용방법

Page 3: Linux  사용하기

Linux Linux 명령어명령어

Page 4: Linux  사용하기

명령어 히스토리 기능 : history & 화살표키

리눅스는 현재까지 사용한 명령어를 기억하고 있으며 필요할 땐 언제나

그 명령어를 다시 사용할 수 있다 . 특히 복잡하고 긴 명령어일 경우에는 키보드로 다시 입력하기 보다는 이전에 사용했던 명령어를 재사용하는 것이 효율적이다 . 명령어를 다시 사용하는 방법에는 다음과 같이 몇 가지 방법이 있다 .

- 화살표키 이용

- history 기능

위의 명령어를 실행 해 보고 그에 반응들을 아래의 빈칸에 적어 보자 .

Page 5: Linux  사용하기

man 페이지 활용하기

리눅스나 유닉스시스템에는 외우기 힘들 정도로 많은 명령어가 있다 .

이들 명령어를 모두다 알고 사용할 수 있으면 좋겠지만 어떤 명령어가 있다는 것과 어떤 상황에서 무엇을 알고자 할 때는 어떤 명령어를 사용해야 한다는 것 정도만 알아도 시스템관리를 훌륭하게 할 수 있다 .

시스템관리를 잘하는 관리자는 명령어 도움말 즉 , 매뉴얼 페이지를 잘 활용한다 .

명령어에 대한 도움말이나 사용법 등을 확인하려면 "man 명령어 " 를 사용하라 .

Page 6: Linux  사용하기

현재 작업디렉토리는 ?

유닉스계의 시스템에서 여기저기 다니면서 작업을 하다보면 현재 내가 어떤 디렉토리에 있는가를 확인해야 할 경우가 있다 . 이때 사용하는 명령어가 pwd이며 현재 디렉토리의 절대 경로를 나타내 준다 .

Page 7: Linux  사용하기

작업 디렉토리 변경

"change directory"의 약어로 디렉토리를 이동하기 위한 명령어로 원하는 디렉토리로 이동하고자 할 때는 "cd 디렉토리명 " 을 하면된다 . 또한 한번에 이동하기 위해 절대경로로 지정하여 이동할 수도 있다 . 그냥 "cd"라고 하면 자기의 홈 디렉토리로 이동합니다 .

Page 8: Linux  사용하기

파일이나 디렉토리 복사하기

파일을 복사해 주는 명령어로 DOS의 copy 명령어와 같으며 사용하는 형식은 다음과 같다 .

$ cp <복사할 파일명 > <복사되어 생성될 파일명 >

Page 9: Linux  사용하기

파일 삭제하기 불필요한 파일을 삭제하기위한 명령어로 "rm"이라는 것을 사용한다 .

DOS의 "del"명령어와 같은 것으로 remove의 약어이다 . 사용하는 형식은 다음과 같다 .

rm 삭제할파일명 파일명 . . . : 지정한 파일만을 지운다 .

rm *.html : html로 끝나는 모든 파일을 지운다 .

 

rm명령어에는 꼭 알아야하는 옵션이 두가지 있다 . 첫 번째 -r옵션은 디렉토리까지 삭제하기 위한 옵션이며 , 둘째 -f는 삭제하기전에

확인과정없이 강제로 지워버리는 옵션이다 .

Page 10: Linux  사용하기

파일과 디렉토리의 이동 및 이름 변경

파일이나 디렉토리를 이동하고 싶거나 이름을 변경 하고자 할 때 사용

되어지는 명령어는 mv 이다 . DOS 에서 move 명령어와 흡사하다 .

mv [바꿀파일 또는 디렉토리명 ] [바뀌어질 파일 또는 디렉토리명 ]

Page 11: Linux  사용하기

디렉토리 만들기와 디렉토리 지우기

필요한 디렉토리를 만들기 위한 명령어로 "mkdir"과 필요없는 디렉토리를 삭제하기 위한 명령어로 rmdir을 사용한다 . rmdir로 디렉토리를 지울 때는 반드시 해당 디렉토리가 비어있어야 하며 비어있지않는 디렉토리를 지우려고 할 때는 "Directory not empty"란 에러메시지를 보여준다 . 그래도 디렉토리와 그안에 들어 있는 파일들까지 한꺼번에 지우기 원한다면 "rm -rf 디렉토리명 " 을 사용하면 된다 .

참고로 mkdir명령어에서 -p옵션은 필요한 디렉토리까지 생성하면서 새로운 디렉토리를 만들어주는 옵션이다 .

Page 12: Linux  사용하기

소유권 변경하기

유닉스계의 OS에서 파일과 디렉토리에는 파일의 소유권과 그룹소유권이 표시된다 .

"ls -l"로 확인해 보면 3 번째 필드에 해당되는 것이 소유권이며 , 네 번째 필드에 해당하는 것이 그룹소유권이다 . 이들 소유권을 변경할 수 있으며 파일소유권을 변경할때는 "chown"(change owner)이란 명령어를 사용하며 그룹소유권을 변경할때는 "chgrp"(change group)란 명령어를 사용한다 .

 사용형식

chown 새로운소유자 변경할파일 ( 디렉토리 )

chgrp 새로운소유그룹 변경할파일 ( 디렉토리 )

Page 13: Linux  사용하기

파일내용보기 - I 파일의 내용을 볼 수 있는 명령어는 cat과 pg 그리고 head와

tail, strings란 명령어가 있으며 도스의 type 명령어와 같으나 이보다 훨씬 다양하게 활용할 수가 있다 .

  cat

지정한 파일의 내용을 보고자 할 때 사용하는 명령어이다 . cat명령어는 보고자하는 파일이 텍스트파일일 경우는 내용을 알아볼 수 있게 출력하지만 , 바이너리파일일 경우에는 내용을 볼 수는 있으나 알 수 없는 문자들로 그 내용을 알기 어렵다 . cat파일은 2 개 이상의 파일이름이 지정되면 모든 파일이 연결되어 보여진다 .

  [ 옵션 ] -b : 행번호를 앞에 붙여서 출력한다 .(빈행은 번호를 붙이지 않는

다 .)

-n : 행번호를 앞에 붙여서 출력한다 .(빈행도 번호를 붙인다 .)

Page 14: Linux  사용하기

파일내용보기 – II

head

head 명령어는 파일내용의 첫부분을 기준으로 출력한다 . 숫자를 지정하

지 않은경우에는 처음 10행만 보여준다 .

tail

tail명령어는 파일내용의 뒷부분을 보고자할 때 사용하는 명령어이다 .

숫자를 지정하지 않은 경우에는 마지막 10행만을 보여준다 . 명령어에 숫자를 지정하면 지정된 숫자 만큼만 출력 해 준다 .

Page 15: Linux  사용하기

디스크 사용량 확인하기

du

du명령어는 Disk Usage의 약어로 해당 디렉토리의 사용량을 출력해 준다 . 그냥 "du"라고 하면 현재 디렉토리 이하의 개별 디렉토리별로 사용량을 체크해 주지만 "-s"(summary)을 주게 되면 전체사용량을 간략히 표현한다 . 이때 표현되는 단위는 block으로 Kbyte 단위이다 . 이를 좀더 알기쉽게 표현하려면 "-h"(human-readable)라는 옵션을 사용하며 단위로 표시하여 좀더 알기쉽게 표현해 준다 .

df

df는 현재 시스템에서 사용중인 파일시스템 즉 마운트된 디스크 정보와 사용량을 보여준다

Page 16: Linux  사용하기

압축관련 유틸리티

tar : 여러개의 파일과 디렉토리를 하나의 파일로 묶어주는 유틸리티

compress : 가장 오래된 압축유틸리티

gzip : 압축효율이 좋아 현재 가장 많이 사용되고 있는 압축유틸리티

bzip2 : gzip을 개선하여 나온 압축유틸리티

Page 17: Linux  사용하기

tar로 파일 묶기

tar는 여러 개의 파일을 하나의 파일로 묶을 수 있으며 묶여진 파일을 다시 풀 수 있는 유틸리티입니다 . 또한 묶여진 파일을 풀기 전에 어떤 파일들이 묶여져 있나를 확인해 볼 수도 있습니다 . 먼저 tar파일의 사용형식은 다음과 같습니다 .

형식 : # tar [옵션 ] 대상파일

Page 18: Linux  사용하기

tar에 필요한 옵션

c : tar파일을 생성할 때 ( 여러 개의 파일을 하나의 파일로 묶을 때 ) 반드시 사용

d : tar파일과 해당 파일시스템간의 차이점을 확인하고자 할 때 사용

r : tar파일에 다른 파일들을 추가하고자 할 경우에 사용

t : tar파일의 내용을 확인하고자 할 때 반드시 사용

f : tar파일을 사용할 때에는 반드시 사용

p : tar파일을 생성할 때 ( 묶을 때 ) 당시의 파일 퍼미션을 그대로 하여 풀어줄 때 사용

v : 묶을 때나 풀어줄 때 파일들의 내용을 자세하게 보려고 할 때 사용

Z : compress로 압축파일을 사용할 때 압축이나 해제까지 한번에 할 때 사용

z : gzip과 관련하여 압축이나 해제를 한꺼번에 하려고 할 때 사용

j : bzip2와 관련하여 압축이나 해제를 한꺼번에 하려고 할 때 사용

Page 19: Linux  사용하기

compress, uncompress

가장 오래된 압축유틸리티이며 특히 오래 전에 압축된 파일들은 거의 대부분 이 유틸리티를 활용하여 압축되어 있습니다 . 파일의 끝에 Z 가 붙어 있는 압축파일들은 compress로 압축된 것입니다 . 일반사용자들 보다 서버관리자가 필히 알아두어야 할 유틸리티입니다 .

그리고 compress로 압축하기 전의 용량과 압축 후에 생성된 용량을 확인해 보시기 바랍니다 . 압축된 후의 용량이 압축전의 용량의 절반쯤 됩니다 . 즉 압축률이 50%쯤이라고 볼 수 있죠 . 그리고 압축이 된 후에는 각각의 파일에 .Z라는 확장자가 붙게 됩니다 .

이는 compress로 압축되었음을 의미하는 것입니다 .

압축을 해제하는 방법은 uncompress라는 명령어를 사용하면 된다 . compress로 압축된 파일은 반드시 uncompress로 압축해제를 해야 합니다 . uncompress는 파일이 .Z로 끝나는 것만을 찾아서 압축해제를 해줍니다 .

Page 20: Linux  사용하기

gzip, gunzip

유닉스환경에서 사용되는 압축유틸리티중 가장 많이 사용하는 유틸리티입니다 . 압축을 하고나면 compress는 파일의 끝에 .Z를 붙여주지만 gzip은 .gz를 붙여줍니다 .

[ 사용하는 방법 ] - 압축할 때 : gzip 압축할파일명 - 압축풀 때 : gzip -d 압축된 파일명 또는 gunzip 압축된 파일명 gzip으로 압축을 할 때에는 거의 대부분 tar로 묶여진 파일을 다시 압축을 할

때 사용하게 됩니다 . tar로 묶여진 파일을 gzip으로 압축을 하게되었을 때의 용량을 비교해 보십시오 .

거의 10배의 압축효율이 있음을 알 수 있습니다 . 이 압축효율 때문에 compress보다는 gzip을 많이 사용하게 된 것입니다 . 또한 압축이 끝난후에는 파일의 끝에 .gz라는 것을 붙여주게되며 gzip으로 압축된 것임을 표시하게 됩니다 .

그리고 나서 압축을 해제 하고 싶다면 gzip –d 또는 gunzip 이라는 명령어를 사용하면 된다 .

Page 21: Linux  사용하기

tar와 gzip을 한번에

tar와 gzip을 동시에 할 수 있는 방법이 있으며 이는 tar의 옵션으로 다음과 같이 사용하실 수 있습니다 . 이런 작업을 하시려면 원래 사용하던 tar의 옵션에 z 라는 옵션을 추가해서 사용하시면 됩니다 .

즉 , 다음과 같이 사용하시면 됩니다 .

묶고 압축할 때

$ tar cvzf 압축파일 .tar.gz 압축대상파일 및 디렉토리

압축해제와 묶음 풀 때

$ tar xvzf 압축파일 .tar.gz

Page 22: Linux  사용하기

bzip2, bunzip2 bzip2라는 유틸리티는 gzip보다 압축효율이 좋아서 차세대

압축유틸리티로 좋은 평을 받고 있는 유틸리티입니다 . 사용하는 방법은 gzip과 거의 유사하며 압축된 후의 파일 끝에 .bz2라고 붙여줍니다 .

Tar와 bzip2를 한번에 tar와 bzip2를 동시에 할 수 있는 방법이 있으며 이는 tar의

옵션으로 다음과 같이 사용하실 수 있습니다 . 이런 작업을 하시려면 원래 사용하던 tar의 옵션에 j 라는 옵션을 추가해서 사용하시면 됩니다 .

즉 , 다음과 같이 사용하시면 됩니다 .

묶고 압축할 때 $ tar cvjf 압축파일 .tar.gz 압축대상파일 및 디렉토리 압축해제와 묶음 풀 때 $ tar xvjf 압축파일 .tar.gz

Page 23: Linux  사용하기

웹 상에 있는 파일 다운로드 받기 : wget

웹 상에 있는 파일을 wget을 이용해 다운받을 수 있다 .

wget [옵션 ] URL

Page 24: Linux  사용하기

리눅스 종료시 사용하는 명령어들 - sync : 명령어 변경후 disk 에 저장되지 못한 block 들을 write 시키도록 하는 명령어

- halt : 아무런 경고 없이 시스템을 즉시 종료 시킨다 .

- reboot : 시스템을 reboot 한다 . (shutdown -r 과 같음 )

- shutdown [ 옵션 ] 시간 [ 메시지 ]

           -t n : n 초 후에 시스템 종료 신호 보냄

-r : reboot

           shutdown now : 즉시 system down

- init : run level 변경으로 인한 시스템 종료방법 .

        - init 0 : system down

        - init 1 : single mode booting

        - init 2 : multiuser mode booting (network = X)

        - init 3 : multiuser mode booting (network = O), text mode

        - init 4 : 사용자 정의 ( 사용안함 )

        - init 5 : multiuser mode booting (network = O), X-window mode

        - init 6 : reboot

  ※ /etc/inittab 에 명시되어 있음 .

Page 25: Linux  사용하기

Vi editorVi editor

Page 26: Linux  사용하기

vi editorvi editor

linux에서 가장 많이 사용되는 에디터인 vi editor에 대해 설명합니다 . 처음에는 불편한 부분이 많지만 조금만 익숙해 진다면 그 어떤 에디터보다 편하고 기능면에서도 파워풀하다는 것을 느낄 수 있을 것이다 .

먼저 vi 에서는 다음의 세가지 상태 ( 명령대기상태 , 글자입력상태 , 명령줄상태 ) 로 나눌 수가 있다 .

Page 27: Linux  사용하기

vi editorvi editor

① vi를 실행한 직후는 명령대기 상태이다 .

② 명령대기 상태에서 글자입력 상태로 바꿀려면 i, I, a, A, o, O 중 하나를 누른다 .

③ 명령대기 상태에서 명령줄 상태로 바꾸려면 :,/,? 중 하나를 누른다 .

④ 글자입력 상태에서 명령대기상태로 바꿀려면 ESC키를 누르면 된다 .

⑤ 명령줄 상태에서 명령대기상태로 바꿀려면 ESC키 , ENTER키 중 하나를 누른다 .

⑥ 명령대기 상태에서 현재 편집중인 파일을 저장 하려면 : 을 눌러 명령줄 상태가 되게한 후 w 를 입력하고 ENTER키를 누른다 .

Page 28: Linux  사용하기

vi editorvi editor

⑦ 명령대기 상태에서 현재 편집중인 파일을 저장하고 vi를 빠져 나갈려면 : 을 눌러 명령줄 상태가 되게한 후 wq!를 입력하고 ENTER키를 누른다 .

⑧ 명령대기 상태에서 현재 편집중인 파일을 저장하지 않고 vi를 빠져 나갈려면 : 을 눌러 명령줄 상태가 되게한 후 q!를 입력하고 ENTER키를 누른다 .

⑨ 명령대기 상태에서 글자 찾기를 할려면 ? Or / 를 눌러서 명령줄 상

태가 되게한 후 찾고자 하는 글을 입력하고 ENTER키를 누른다 .

Page 29: Linux  사용하기

vi editorvi editor

명령 대기상태 명령어

명령대기 상태에서는 커서의 이동 , 빈 줄의 추가 , 삭제하기 ,

바꾸기 ,

메모리 복사와 붙여 넣기 등을 할 수 있으며 , 이 들에 대한 명령 키와

설명은 다음 표에 열거되어 있다 .

Page 30: Linux  사용하기

커서의 이동

명령키 설 명

h 커서를 한칸 왼쪽으로 이동한다 .

j 커서를 한줄 아래로 이동한다 .

k 커서를 한줄 위로 이동한다 .

l 커서를 한칸 오른쪽으로 이동한다 .

^ 커서를 현재 줄의 처음으로 이동한다 .

$ 커서를 현재 줄의 끝으로 이동한다 .

숫자 G 커서를 지정한 숫자의 줄로 이동한다 .

Page 31: Linux  사용하기

vi editorvi editor

글자입력 상태로

명령키 설 명

i 커서가 있는 위치에서 글자입력 상태가 된다 .

a 커서의 오른쪽에서 글자입력 상태가 된다 .

I 현재 줄의 왼쪽 끝에서 글자입력 상태가 된다 .

A 현재 줄의 오른쪽 끝에서 글자입력 상태가 된다 .

Page 32: Linux  사용하기

vi editorvi editor

삭제하기

명령키 설 명

x 커서가 있는 한 글자를 삭제한다 .

dd 커서가 있는 한 줄을 삭제한다 .

dw 커서가 있는 한 단어를 삭제한다 .

D 현재 줄의 커서가 있는 곳 부터 줄의 끝까지 삭제한다 .

Page 33: Linux  사용하기

vi editorvi editor

바꾸기

명령키 설 명

r 커서가 있는 한 글자를 바꾼 후 다시 명령대기 상태가 된다 .

cw 커서가 있는 한 단어를 바꾼 후 다시 명령대기 상태가 된다 .

메모리 복사 (yank) 와 붙여 넣기 (put)

명령키 설 명

숫자 yy 커서가 있는 줄부터 지정된 숫자 만큼의 줄을 메모리에 복사한다 .

Y 커서가 있는 한 줄을 메모리에 복사한다 .

p 메모리에 복사되어 있는 내용을 커서가 있는 줄부터 붙여 넣는다 .

Page 34: Linux  사용하기

vi editorvi editor

명령줄 상태 명령어 명령대기 : 을 누르면 : 으로 시작하는 명령줄 상태가 되고 ,

/ 를 누르면 / 로 시작하는 명령줄 상태가 된다 . (탐색모드 위 -> 아래 )

? 를 누르면 ? 로 시작하는 명령줄 상태가 된다 . (탐색모드 아래 -> 위 )

Page 35: Linux  사용하기

vi editorvi editor

/로 시작하는 명령줄 상태

입력 설 명

/문자열 커서의 현재 위치부터 지정한 문자열을 찾아 준다 . ( 위에서 아래로 )

? 문자열 커서의 현재 위치부터 지정한 문자열을 찾아 준다 . ( 아래에서 위로 )

: 으로 시작하는 명령줄 상태

입력 설 명

:w 현재 편집 중인 내용을 저장한다 .

:w 파일명 현재 편집 중인 내용을 지정한 파일명으로 저장한다 .

:q vi 를 빠져 나간다 .

:q! 저장에 대한 경고 메세지가 나오지 않도록 하고 vi 를

빠져 나간다 .

:wq! 현재 편집 중인 내용을 저장하고 vi 를 빠져 나간다 .

:set numbers 행의 번호가 표시되게 한다 .

:set nonumbers 행의 번호가 표시되지 않게 한다 .

Page 36: Linux  사용하기

makemake

Page 37: Linux  사용하기

makemake

리눅스 시스템 (linux system)에서 우리는 종종 make utility를 사용하는데 , 이것은 어떤 프로그램 그룹을 유지하는 데 필요한 유틸리티이다 .

즉 , 이것의 목적은 프로그램 그룹 중에서 어느 부분이 새롭게 컴파일

되어야 하는지를 자동적으로 판단해서 GCC와 같은 커맨드를 이용하여 그들을 재 컴파일시켜 프로그램의 일관성을 유지토록 한다 .

make는 일련의 프로그램 개발에만 사용되지 않고 컴파일러처럼 일종의 명령어 방식으로 처리되는 모든 곳에서 사용가능 하다 . 다시 말하면 입력파일이 바뀌면 자동적으로 결과파일을 바꿔 주었으면 할 때 등에 사용된다 . 이를 위해 어떤 일관된 처리 루틴을 사용하는 데 이를 Makefile이라 한다 . Makefile는 make가 이해할 수 있도록 일종의 쉘 스크립터 언어처럼 작성되어 진다 .

Page 38: Linux  사용하기

makemake

보통 리눅스 시스템에서 Makefile은 기본적으로 아래와 같이 목표 (target), 의존 관계 (dependency), 명령 (command)

의 세가지로 이루어진 규칙을 사용한다 . make가 지능적으로 파일을 갱신하는 것도 모두 이 간단한 규칙 (rule)에 의해서 이다 .

target : dependency …….

command ……. .

Page 39: Linux  사용하기

makemake

목표 (target)부분은 명령 (command)이 수행되어져서 나온 결과 파일을 지정한다 . 당연히 목적파일 (object file)이나 실행파일이 된다 . 명령 (command)부분에 정의된 명령들은 의존관계 부분에 정의된 파일의 내용이 바뀌었거나 목표부분에 해당하는 파일이 없을 때 이것에 정의된 것들이 차례로 실행된다 . 명령부분은 반드시 TAB을 사용하여 띄우도록 하고 목표부분에는 결과 파일만이 올 수 있는 것이 아니고 보통 make clean, make all등과 같이 레이블 (label)이 올 수도 있다 .

Page 40: Linux  사용하기

makemake

예제

프로그램 소스 : main.c, read.c write.c, io.h

먼저 make를 사용하지 않고 명령어를 주어 각각 컴파일해서 test라는 실행파일을 생성시킨다 .

# gcc –c main.c

# gcc –c read.c

# gcc –c write.c

# gcc –o test main.o read.o write.o

# ./test

Page 41: Linux  사용하기

makemake

다음으로 Makefile을 사용하여 컴파일하기

Makefile 내용

test : main.o read.o write.o

gcc –o test main.o read.o write.o

main.o : io.h main.c

gcc –o main.c

read.o : io.h read.c

gcc –o read.c

write.o : io.h write.c

gcc –o write.c

Page 42: Linux  사용하기

makemake

각 파일들의 의존관계

main.o read.o write.o

main.c read.c write.c

io.h

test

Page 43: Linux  사용하기

makemake

매크로 (Macro)기능과 레이블 (Label)기능을 사용하여 Makefile작성을 원활히 할 수 있다 . 먼저 매크로의 사용에 대해서 살펴보면 ,

매크로는 특정 내용을 치환하여 프로그램을 단순화시키고자 할 때 사용되는 것으로 반드시 $(..)안에 넣어서 사용한다 . 위에서 사용된 test 예제에서 매크로를 사용하여 작성한 Makefile이 아래에 있다 .

여기서 사용한 매크로는 OBJECTS라는 것으로 , main.o, read.o,

write.o 부분을 OBJECTS로 치환하여 사용하였다 .

이 매크로 중에서는 CC, CFLAGS, LEX처름 미리 지정된 매크로(Pre-defined Macro)도 있다 . 참고로 make –p를 실행해 보면 make에서 미리 지정되어 있는 모든 값들 ( 매크로 , 환경 변수 등 ) 을 미리 볼 수 있으며 , 다음은 UNIX계열의 make에서 미리 정해져 많이 사용되고 있는 매크로들 이다 .

Page 44: Linux  사용하기

makemake

OBJECTS = main.o read.o write.o

test : $(OBJECTS) # OBJECTS라는 Macro를 사용하여 Makefile를 작성한다 . gcc –c $@ $(OBJECTS)

main.o : io.h main.c gcc –c main.c

read.o : io.h read.c gcc –c read.c

write.o : io.h write.c gcc –c write.c

Page 45: Linux  사용하기

makemake

Pre-defined Macro

ASFLAGS = : as 명령어의 옵션 세팅

AS = as

CFLAGS = : gcc의 명령어의 옵션 세팅

CC = cc (=gcc)

CPPFLAGS = : g++의 옵션 세팅

CXX = g++

LDLFLAGS = : ld의 옵션 세팅

LD = ld

LFLAGS = : lex의 옵션 세팅

LEX = lex

Page 46: Linux  사용하기

makemake

레이블 (Label) 사용에 대해 살펴보면 , 목표 부분에 해당하는 부분이 레이블로 처리되어 간략화될 수 있다 . 다음 슬라이드는 clean이라는 레이블을 사용하여 컴파일시에 생성된 오브젝트 파일들을 제거하는 예제이다 .

레이블로 사용될 때는 당연히 의존 관계 부분은 없어도 된다 .

그리고 레이블 clean을 사용하여 실행시키려면 아래와 같이 수행한다 .

# make clean

rm main.o read.o write.o

/* make clean으로 object file이 삭제된다 . */

Page 47: Linux  사용하기

makemake

OBJECTS = main.o read.o write.o

test : $(OBJECTS) # OBJECTS라는 Macro를 사용하여 Makefile를

작성한다 . gcc –c $@ $(OBJECTS)

main.o : io.h main.c gcc –c main.c

read.o : io.h read.c gcc –c read.c

write.o : io.h write.c gcc –c write.c

clean :

rm $(OBJECTS)

Page 48: Linux  사용하기

makemake

매크로 (Macro)와 레이블 (Label)을 사용한 예제 test.c 소스파일을 Makefile을 작성하여 실행파일 test를 생성하는 예제

[ test.c ]#include <stdio.h>int main(int argc, char *argv){ printf(“\nHello\n”); return 1;}

[ Makefile ] INC = -I/usr/include # 헤더파일의 위치를 지정한다 TARGET = test # 생성될 타겟 파일을 지정 SRCS = test.c # 소스파일을 지정 CC = gcc # 컴파일러를 지정한다

all : $(CC)$(INC) –o $(TARGET) $(SRCS)

Page 49: Linux  사용하기

makemake

Suffix Rule/Internal Macro 확장자 규칙이란 간단히 말해서 파일의 확장자를 보고 그에 따라 적절한 연산 동작을 수행시키는 규칙

.SUFFIXES

Makefile에서 주의깊게 처리할 파일들의 확장자를 자동으로 처리

.SUFFIXES = .c .o

.c와 .o 확장자를 가진 파일들을 확장자 규칙에 의해 처리될 수 있도록 해주며 , 미리 정의된 .c(C Source File)를 컴파일해서 .o(Object File)을 만들어내도록 자동적으로 동작한다 .

Page 50: Linux  사용하기

makemake

Internal Macro 임의로 사용할 수 없으며 주로 연산 , 처리에 자주 사용된다

$* /* 확장자가 없는 현재의 목표파일 (target)*/

$@ /* 현재의 목표파일 (target)*/

$< /* 현재의 목표파일 (target)보다 더 최근에 갱신되어진 파일이름 */

$? /* 현재의 목표파일 (target)보다 더 최근에 갱신되어진 파일이름 */

$< 와 $?의 기능은 거의 비슷하다 . 각 내부 매크로에 대한 예 .

main.o : main.c io.h

gcc -c $*.c

Page 51: Linux  사용하기

makemake

$*는 확장자가 없는 현재의 목표파일임으로 $*는 결국 main에 해당한다 .

test : $(OBJS)

gcc -c $@ $*.c

# $@는 현재의 목표파일이다 . 따라서 test에 해당한다 .

.c.o :

gcc -c $<

오브젝터 파일인 .o보다 소스파일인 .c가 더 최근에 갱신되었다면 .c파일은 자동적으로 컴파일 된다 . 즉 , main.o 가 생성한 후에 main.c를 갱신하게 되면 main.c는 $<에 의해 자동적으로 새롭게 컴파일된다 .

Page 52: Linux  사용하기

RPM RPM 사용방법사용방법

Page 53: Linux  사용하기

RPM 명령어 사용법  - Redhat Package Manager 의 약어 . 설치는 쉽지만 , 설치되는 디렉토리 변경이 어려운 단점이

있다 .

 - rpm [ 옵션 ] 파일명 -i : 새로설치 -U : 이전버전이 있으면 업그레이드 설치 , 없으면 새로설치

-F : 현재 설치하려는 RPM 의 이전버전이 있을경우만 설치 -v : 설치중 메시지를 보여준다 .

        -e : 제거시 사용 -qa : 현재 설치된 모든 패키지 목록을 찾는데 사용한다 .

        -qi : 현재 설치된 패키지의 간략한 정보를 출력 .

        -ql : 설치된 패키지의 내용을 보여준다 . 경로확인시 사용 .

        --force : 패키지의 충돌등을 무시하고 강제설치 .

        --nodeps : 의존성 문제를 일으켜 설치가 안될경우에 쓰는 옵션

ex) rpm -Uvh XFree86-Mach64-3.3.6-20-kr.i386.rpm

            rpm -e httpd --nodeps : 의존성이 있더라도 무시하고 제거 rpm -qa : 모든 패키지를 보여준다 . ( 특정 패키지 확인시 grep 과 같이 씀 )

            rpm -ql sendmail : sendmail 이 설치된 경로를 보여준다 .