I. 프로세스 관리
런레벨 | 디렉터리 | 설명 |
Runlevel 0 |
/etc/rc.d/rc0.d |
모든 프로세스를 종료 시키고, 파일 시스템을 언마운트하는 작업을 포함한다. |
Runlevel 1 |
/etc/rc.d/rc1.d |
단일 사용자 모드로, 보통 시스템 관리자가 시스템에 특정 설정을 할때 사용한다. |
Runlevel 2 |
/etc/rc.d/rc2.d |
다중 사용자 모드이지만, NFS를 지원하지 않는다. |
Runlevel 3 |
/etc/rc.d/rc3.d |
다중 사용자 모드로, 대부분 배포판에서 기존적인 런레벨로 사용한다. |
Runlevel 4 |
/etc/rc.d/rc4.d |
사용자 정의 레벨로 정의될 수 있도록 비어있다. |
Runlevel 5 |
/etc/rc.d/rc5.d |
그래픽 로그인 프롬프트를 띄우는 용도로 사용된다. |
Runlevel 6 |
/etc/rc.d/rc6.d |
재실행 모드로, init.d가 시스템이 재실행 될것인지, 종료 될 것인지 결정한다. |
-디렉토리의 모든 파일은 모두 링크파일 형태이다. |
포그라운드 |
명령을 입력하면, 실행중인 프로세스가 종료되기 전까지 기다렸다가, 다음 명령을 실행할 수 있다. (일반적인 쉘 프롬프트 모드) |
백그라운드 |
명령 뒤에 '&'를 붙여 동작시키며, 프로세스의 종료 여부에 관계없이 다른 명령을 내릴 수 있다. |
# cp -R /usr/sbin/ /tmp/& [1]26662 //기다릴때 ID값 부여받음 # <Enter> [1]+ Done 2 cp -i -R /usr/sbin /tmp& |
<Ctrl+C> |
포그라운드로 실행 중인 프로세스를 <Ctrl+C>의 인터럽트 키를 눌러 강제로 종료할 수 있다. |
<Ctrl+Z> |
실행중인 프로세스가 백그라운드에서 멈춘 상태로 대기하며, 즉, 실행되어 있기는 하지만 사용할 수 없는 상태가 된다. |
# firefox # | |
jobs |
이미 백그라운드로 실행된 프로그램이나 <Ctrl+Z>를 실행한 프로그램의 확인이 가능하다. |
옵션(-p: 프로세스 그룹리더의 PID 출력, -l: 일반적인 정보+PID출력, -s: 멈춰있는 프로세스 출력, -r: 실행중인 프로세스 출력) |
|
# knapshot & [2] 5201 # jobs [1]+ Stopped firefox [2]- Running gnome-calculator & # | |
bg |
<Ctrl+Z>로 백그라운드에 멈춰진 프로세스를 백그라운드상에서 활성화하는 역할을 한다. (번호를 붙이지 않으면 작업 실행 역순으로 멈춰진 프로세스에 대해 bg명령이 실행된다) |
# jobs [1]+ Stopped firefox [2]- Running gnome-calculator & # bg 1 [1]+ firefox & # jobs [1]+ Running firefox & [2]- Running gnome-calculator & |
|
fg |
백그라운드로 실행되고 있는 프로그램을 포그라운드로 불러내는 역할을 한다. |
# jobs [1]+ Stopped firefox [2]- Rinning gnome-calculator & # fg firefox |
top [옵션] |
|
# top |
|
top 명령어로 알 수 있는 것 |
|
(swap 사용량, 시스템 유지시간, 좀비 프로세스의 수) - ※디스크 사용량은 알 수 없음 |
ps [옵션] |
|
옵션 |
의미 |
-a |
현재 실행중인 전체 사용자의 모든 프로세스를 출력한다. |
-e |
모든 프로세스를 출력한다. |
-u |
프로세스를 실행한 사용자 정보와 프로세스 시작시간 등을 출력 |
-x |
제어터미널을 갖지 않는 프로세스 출력 |
-l | Long Format |
-f |
Full format |
# ps -ef //가장 자주 쓰임 | |
필드 | 의미 |
PID(process ID) |
프로세스마다 주어지는 번호 |
TTY(TeleTypewriter) |
명령어가 실행되는 터미널 번호(할당된 것이 없는 경우 '?' 출력) |
STAT |
실행되고 있는 프로세스 상태(R, S, D, T, Z, W, N) |
R: 실행되고 있거나 실행될 수 있음(Running) | |
START |
프로세스가 시작된 시간 |
TIME |
CPU가 사용한 시간 |
USER |
사용자의 이름 |
COMMAND |
사용자가 실행한 명령어 |
UID(User ID) |
사용자의 ID |
PGID(Parent Group ID) |
사용자 부모 프로세스의 그룹 ID |
SID(Session ID) |
세션 ID |
PRI(Priority) | 실행하는 우선순위에 따른 프로세스 (번호가 높을수록 우선순위가 낮다) |
NI(Nice) | nice에 의한 우선순위에 따른 프로세스 |
RSS(Resident Set Size) | 프로세스가 사용하는 메모리의 크기 |
SZ(Size) | 프로세스가 사용하는 자료와 스택의 크기 |
SHRD(Shared) | 프로세스가 사용하는 공유메모리 |
%CPU | 최근 1분간 프로세스가 사용하는 CPU 점유율 |
%MEM | 최근 1분간 프로세스가 사용하고 있는 메모리 점유율 |
WCHAN | 프로세스가 실행하고 있는 커널 루틴 |
pstree [옵션] |
|
옵션 |
의미 |
-a |
명령어에 인수를 함께 보여준다. |
-c |
독립적인 하위트리는 보여주지 않는다. |
-h |
현재 프로세스와 부모 프로세스를 좀더 두드러지게 출력한다. |
-l | 특별한 긴줄이 있어도 그대로 보여준다. |
-n | 이름 순서대로가 아닌 PID 순서대로 정렬해 같은 부모를 가진 자식 끼리 모아 출력한다. |
-p | PID도 출력한다. |
-u | UID도 출력한다. |
-G | 프로세스 관계를 보기 좋게 출력한다. |
# pstree | |
# pstree -np //PID순으로 정렬하며, 프로세스명과 PID 출력 |
kill [옵션] [PID] |
|
옵션 |
의미 |
-s |
특별히 보낼 시그널(이름,번호)을 지정한다. |
-l |
시그널로 사용할 수 있는 리스트들을 보여준다. |
-a |
프로세스 ID를 pid로 변환 시, 다른 uid를 갖는 프로세스도 변환시킬 수 있도록 허용한다. |
-p |
프로세스 ID를 지정한 경우, 그 프로세스에 시그널을 보내지 않고 그 프로세스의 이름만 보여준다. |
-9 | 프로세스 강제 종료 옵션이다. ex) kill -SIGKILL [PID1] [PID2] |
-SIGKILL | |
-KILL | |
-HUP | 프로세스 정보를 다시 읽어들인다. |
# jobs -l |
시그널 |
의미 |
SIGHUP |
로그아웃이나 접속을 끊을때 발생하며, 실행중인 프로그램의 설정파일을 변경 시키고 변화된 내용 적용시 사용 |
SIGINT |
현재 작동중인 프로그램을 키보드로 실행 중지 할때 사용(Ctrl+C) |
SIGQUIT |
SIGINT와 유사하나 SIGQUIT는 비정상으로 종료하게 되어, core 파일을 생성하고 종료 |
SIGKILL |
무조건 실행중인 프로그램을 강제 종료함 |
SIGSEGV |
메모리 액세스가 잘못되었을때 발생 |
SIGTERM | 실행 중인 프로그램을 종료(안전한 종료-기본값) |
killall [옵션] [프로세스명or데몬명] |
|
# jobs -l [8] 5399 Stopped firefox & [9]- 5420 Running gnome-calculator & # killall firefox [8] Exit 15 firefox # jobs -l [9]- 5420 Running gnome-calculator & [10]+5426 Exit firefox # jobs -l [9]+ 5420 Running gnome-calculator & |
|
#killall -s SIGHUP sshd //ssh 데몬에 대한 환경설정 리로드 |
#!include <signal.h> void (*signal(int signum, void (*handler)(int))) (int) ; |
|
SIG_IGN |
시그널을 무시한다. |
SIG_DFL |
시그널의 초기 기본 동작을 하도록 한다. |
SIG_ERR(반환 값) |
signal은 이전의 시그널 핸들러의 포인트나 에러시 SIG_ERR을 리턴한다. |
nice [-n 조정수치] [프로세스명] |
|
-프로세스 PID의 우선순위에 조정 수치를 더해 결정 -NI 값을 지정할 때 사용 -값이 작을수록 우선순위가 높음 -일반 사용자는 우선순위를 높일 수 없음 -지정 가능한 값의 범위는 -20 ~ 19 이다. -조정수치를 생략하면 기본적으로 10을 증가 |
nohup [명령] [인수] |
|
-이것과 함께 수행된 명령어 대하여 Hangup신호를 무시한 채 지속적으로 실행하도록 하고, 우선권을 5만큼 증가 시켜 로그아웃하더라도 계속 백그라운드로 실행할 수 있도록 해준다. -관리자가 장시간 자리 비우거나 비접속 상태에 있어야 하는 경우 유용하다. -표준 출력이 tty였다면 표준 출력과 표준 에러는 nohup.out 파일에 추가되고, 쓰기 작업 불가일 경우엔 $HOME/nohup.out 파일에 추가된다. -nohub.out 또는 $HOME/nohup.out 파일을 생성하고 그룹/타인 에게는 접근 권한을 부여하지 않는다. -실행한 명령을 자동으로 백그라운드로 보내지 않아서, 명시적으로 명령행 뒤에 &을 붙이다던지 해줘야 한다. |
cron |
-/etc/rc.d/init.d 같은 crond 시작 스크립트 파일에 의해 실행되며, 즉시 리턴 하므로 '&'문자를 끝에 사용할 필요가 없다. -일반 사용자가 crontab이라는 명령어를 사용해서 주기적(분,시간,일자 단위)으로 작업을 등록할 수 있다. -시스템에서 사용할 주기적 작업은 /etc/crontab에 등록한다. -환경설정시 숫자값 이외에, jan, feb, sun, mon 등도 사용가능하다. -실행결과를 메일로 보내기 위해서 MAILTO 필드에 메일을 받을 사용자의 이메일 주소를 지정한다. -각 사용자는 crontab 파일을 가질 수 있고 이 파일들은 /var/spool/cron 아래에 저장된다. -crontab명령어의 사용자 접근 제어 관련파일은 /etc/cron.allow 와 /etc/cron.deny 가 있다. |
1 * * * * root run-parts /etc/cron.1 |
이 파일은 한 시간마다 한번씩, 매 시간 1분에 실행된다. |
2 4 * * * root run-parts /etc/cron.2 |
이 파일은 하루에 한번씩, 매일 4시 2분에 실행된다. |
42 4 1 * * root run-parts /etc/cron.3 |
이 파일은 한달에 한번씩, 1일 4시 42분에 실행된다. |
#include <unistd.h> pid_t fork(void); |
-반환값: 성공 시 자식프로세스의 PID가 부모에게 리턴되며, 자식에게는 0이 리턴된다.(실패시 -1이 부모에게 리턴되고, 자식은 생성X) -에러값: EAGAIN(부모의 페이지 테이블을 복사하기 위한 충분한 메모리 할당 불가), ENOMEM(메모리가 꽉차서 커널 구조체 할당 불가) |
exec [ [-] 명령 [인수]] |
-exec() 시스템 호출은 프로세스의 메모리 공간을 수행 가능 파일로 대체하여 다른 프로그램을 호출한다. -인수는 명령의 인수가 되며, 첫번째 인수가 - 이면 쉘은 명령에 전달하는 0번째 인수에 대시를 넣는다. |
1) RPM(레드햇 패키지 관리자)
- RedHat Package Manager의 약자로, 리눅스를 조금 더 편리하게 사용할 수 있도록 하기 위해 만든 패키지 프로그램이다.
- 소스 자체를 컴파일된 바이너리 파일로 묶어둔 것으로 컴파일이 필요없다.
- 레드햇 계열뿐 아니라 많은 배포판이 RPM 방식을 채택하고 있다.
- .rpm 확장자를 가지는 패키지를 설치/삭제 할 수 있다.
- 설치된 패키지 목록을 볼 수 있다.
- 업그레이드시 사용자가 설정한 내용을 안전하게 보호해준다.
- 설치 시 의존성 문제를 고려하여 순서에 맞게 설치하여야 한다.
용도
- 패키지 자동설치 및 제거: *.rpm 파일만 있으면, 해당 디렉토리에 자동적으로 설치가 가능하다.
- 업그레이드 기능: 기존 파일을 보존하면서, 새로운 버전의 패키지로 업그레이드할 수 있다.
- 패키지 정보검색: 설치되었거나, 설치할 패키지에 대한 정보를 검색할 수 있다.
- 패키지 검증: 어떤 패키지에 속하는 특정파일을 검증해서 다시 설치할 수 있다.
RPM 패키지 이름 구성 요소
패키지이름-버전-릴리즈-아키텍쳐.rpm |
|
Vim-enhanced-7.0. 109-3.i386.rpm |
|
Vim |
대표패키지명 |
enhanced |
보조패키지명 |
7 |
major 버전(프로그램 자체가 완전히 변경되었을 경우) |
0 | minor 버전(기능의 추가가 있을 경우 = upgrade) |
109 | 패치 횟수(기존 기능에서 버그 수정 = update) |
3 | 배포 횟수 |
i386 | CPU 아키텍쳐 |
rpm | 확장자 |
*rpm 명령어
rpm [옵션] [rpm_package_name] |
||
설치 및 제거 옵션 |
||
옵션 | 내용 | 비고 |
-i (install) |
패키지 설치,동일한 패키지가 설치되어 있으면 설치 불가 |
처음 설치 시 : O / 업그레이드 설치 시 : X |
-U (upgrage) |
동일 패키지가 설치되어 있으면 버전 비교 후 이전 버전 삭제 새 버전 업그레이드 |
처음 설치 시 : O / 업그레이드 설치 시 : O |
-F (Freshen) |
동일 패키지가 설치되어 있으면 버전 비교 후 업그레이드 |
처음 설치 시 : X / 업그레이드 설치 시 : O |
-e (erase) |
패키지 삭제 |
|
-V (verbose) |
작업과정 자세히 보기 |
|
-h (hash) |
설치 작업 시 진행 상황을 해쉬(#)의 bar형태로 보여줌 |
|
--nodeps |
패키지 설치 시 의존성 검사를 하지 않음 |
|
--force |
설치 도중 발생하는 에러를 무시하고 강제로 설치함 |
|
--replacepkgs | 이미 같은 패키지가 설치되어 있어도 다시 재설치 시 사용 | 이 3가지 옵션을 조합 = --force |
--replacefiles | 이미 같은 파일이 설치되어 있어도 다시 재설치 시 사용 | |
--oldpackage | 새로운 패키지를 지우고 구버전을 설치 할 때 사용 | |
--test | 실제로 설치하지 않고 가상으로 설치한 후 충돌 사항 점검 후 보고 |
|
--percent | 패키지 설치 시 %로 완료를 표시 |
|
질의 기능 옵션 | ||
옵션 | 내용 | 비고 |
-q | 이미 설치되어진 패키지에 대한 질의를 할때 사용 | |
-a (all) | 모든 패키지에 대하여 질의 기능 수행 | |
-f (file name) | 파일 이름 입력을 표준 입력에서 받음 | |
-l | 패키지 안의 파일을 보여줌 | |
--provides | 패키지가 제공하는 기능을 보여줌 |
rpm 명령어 활용 예시
rpm -qa | grep [대표패키지명] //설치된 패키지 확인 (grep을 통해 문자열이 들어 있는 패키지만 검색) |
rpm -ivh [풀패키지명] //패키지 설치 시 |
rpm -Fvh [풀패키지명] //패키지 업그레이드 시 |
rpm -e [대표패키지명] //패키지 삭제 시 [ --nodeps 옵션을 붙여 의존성 무시 삭제가 가능] |
rpm -qi [대표패키지명] //패키지 정보 확인 |
rpm -qp [패키지명] //아직 설치되지 않은 rpm 파일에 대하여 질의할 때 사용 |
rpm -qf [패키지파일명] //설치된 특정 파일을 포함하는 패키지에 대한 질문을 수행 ex. rpm -qf /etc/fstab |
rpm -ql //리눅스에 설치된 패키지의 위치와 파일명을 찾을때 사용 |
rpm 그외 기능
검증(Verfy) 기능: 패키지 설치 이후 RPM DB에 저장된 내용과 원본을 비교해 초기 설치와 다른점이 있는지 검사하는 기능이다. |
|
rpm -V [패키지명] / rpm -Va |
|
오류 발생 시 다음과 같은 문자들이 발생한다. |
|
. |
아무런 이상 없음 |
5 |
MD5 체크섬 |
S | 파일 크기 |
L | 심볼릭링크 |
T | 갱신일 |
D | 장치 |
U | 사용자 |
G | 그룹 |
M | 퍼미션과 파일타입 |
RPM 서명(Query) 기능: 다운받은 RPM 파일이 원본이 아닌 경우도 있어 바이러스가 없는 정상 파일인지 확인하는 기능이다. |
rpm --checksig [패키지명] //서명 확인 |
rpm --resign [패키지명] // RPM 파일 삽입 |
RPM 데이터베이스 재제작: rpm으로 수없이 설치, 삭제를 반복하다보면 DB에 문제가 생길 수 있는데, 이럴때 다시 작성 해주어야 한다. |
# rpm -qi bmp free list corrupt (42)- contact rpm-list@redhat.com ▲ DB에러 발생 |
rpm --rebuilddb //RPM DB 최신정보로 갱신 (작업결과 확인은 /var/lib/rpm) |
2) dpkg(데비안 패키지 관리자)
- 사용가능한 패키지 목록만 갱신하는 기능을 가지고있다.
- 패키지 설치시 필요한 의존성 문제를 해결 할 수 있는 체크기능을 가졌다.
- 자동설치가 가능한 실행프로그램 작성기능을 제공한다.
- 특별한 패키지의 정보,내용을 알려준다.
- 확장자는 .dep, 명령어는 dpkg이다.
- root권한으로만 가능해서, 일반사용자는 사용할 수 없다.
- 시스템에서 제거된 패키지목록은 확인할 수 없다.
dpkg [옵션] [패키지파일 절대경로] |
|
옵션 |
내용 |
-i, --install |
패키지 설치 |
-R |
주어진 디렉터리 밑 모든 패키지 설치 |
-r, --remove |
패키지 제거 |
--purge | 패키지뿐만 아니라 연관된 설정파일까지 모두 제거 |
-s, --status | 패키지의 상황 정보를 보여줌 |
-L | 패키지의 모든 파일을 볼 수 있음 |
-l | 패키지들의 설치 상태, 현재 버전 및 짧은 설명을 알수있음 |
--info | 패키지에 대한 정보를 출력 |
--contents | 패키지에 들어 있는 파일들을 출력 |
--unpack, --configre, --pending | 패키지 풀기만 하고 설치는 하지않음 (의존성 문제 관련 옵션) |
--clear-avail | 이용가능한 패키지 파일의 모든 정보를 지움 |
--force- | 주의를 주어 오류를 줄임(강제옵션) |
--refuse- | 오류가 생길 시 실행을 멈춤(강제옵션) |
--no-force-thing, --refuse-thing | (강제옵션) |
3) yum: 레드햇 계열에서 사용되며, /etc/yum.conf에 지정된 서버로부터 업데이트된 패키지들을 검사하고 다운로드할 수 있는 콘솔 프로그램이다.
그리고 rpm에서 불편했던 의존성 문제도 같이 검사하여 자동으로 설치/제거 해준다.
cachedir |
업데이트를 위해 다운받은 db파일들과 패키지들을 임시로 저장하는 디렉터리경로 |
keepcache |
yum이 성공적인 설치 이후에 헤더와 패키지의 캐시를 유지할 것인지 결정 (1 또는 0 지정, [기본값: 1<유지>]) |
debuglevel |
debug 레벨로서 0 ~ 2 까지 있다. |
logfile |
업데이트 내역을 기록하는 로그파일 위치이다. |
distroverpkg |
배포판의 버전을 결정하기 위해 사용하는 패키지 |
tolerant |
패키지들의 명령에 대한 에러 메세지의 출력 여부 (1 또는 0 지정, [1: 메세지 출력X]) |
exactarch |
인스톨한 패키지들의 아키텍쳐들만 업데이트할지 여부(1 또는 0 지정, [1: 업데이트O]) |
obsoletes |
업데이트 동안 영향을 주는 것으로 yum의 obsoletes 프로세싱 로직을 활성화 함 |
gpgcheck | yum이 패키지상의 GPG시그니쳐를 확인할 것인지 설정(1 또는 0 지정, [기본값: 0]) |
plugins | yum의 플러그인들을 활성화하거나 비활성화하는 전역 스위치(1 또는 0 지정, [기본값: 0<비활성화>]) |
metadata_expire=1h | 데이터가 만료되는 시간 |
installonly_limit = 3 | 동시에 설치되는 패키지들의 수를 지정 [0으로 설정 시 비활성화] |
*yum 명령어
yum [옵션] [대표패키지명] (-y: y/N 스킵) |
|
옵션 |
내용 |
intsall |
패키지 설치 |
update |
패키지 업데이트 |
check-update |
패키지를 업데이트 하기 전 업데이트된 패키지가 있는지의 여부 체크 |
remove |
패키지 삭제 |
list |
현재 시스템에 설치된 패키지 목록 확인 |
info |
업데이트 서버에 등록되어 사용가능한 패키지들에 대한 상세 정보를 출력 |
4) apt-get: 데비안 계열에서 사용되며, /etc/apt/sources.list에 지정된 서버로부터 업데이트된 패키지들을 검사하고 다운로드할 수 있는 커맨드라인 툴이다. 그리고 dpkg에서 불편했던 의존성 문제도 같이 검사하여 자동으로 설치/제거 해준다.
*apt-get 명령어
apt-get [옵션] [패키지명] |
|
옵션 |
내용 |
update |
소스들로 부터의 패키지 인덱스 파일들을 재동기화하기 위해 사용 |
upgrade |
설치된 패키지들의 최신 버전을 설치하기 위해 사용 |
dist-upgrade |
upgrage기능에 새로운 버전의 패키지들과 의존성을 변경시키면서 지능적으로 관리 |
dselect-upgrade |
dselect에 의해 구버전의 패키지 삭제후 새로운 패키지를 설치 |
install |
완전한 파일명이 아닌 패키지명으로, 설치 또는 업그레이드될 패키지 지정 |
remove |
완전한 파일명이 아닌 패키지명으로, 삭제될 패키지 지정(패키지명에 +가 붙으면 설치와 같은 역할) |
purge |
패키지들이 삭제되면서 설정파일 모두 삭제 |
source | 소스 패키지들을 패치 |
build-dep | 소스 패키지에 대한 빌드 의존성을 만족시키기 위한 시도에서 패키지들을 설치하거나 삭제함 |
download | 지정된 바이너리 패키지를 현재 디렉터리로 다운로드 |
check | 검사 툴 |
clean | 검색된 패키지 파일들의 로컬 저장소의 파일들을 제거 |
autoclean | 검색된 패키지 파일들의 로컬 저장소에서 더 이상 다운로드 될 수 없어서 쓸모 없는 패키지 파일들을 삭제 |
autoremove | 의존성을 만족시키기 위해 자동적으로 설치되었고 이제 더이상 필요하지 않는 패키지들을 제거하기위해 사용 |
- 압축 해제
- 압축이 해제된 디렉터리로 이동해서 "./configure"명령으로 소스코드 컴파일 설정
- "make" 명령으로 컴파일
- "make install" 명령으로 컴파일한 파일 설치 - (root 권한 필요: $ su -c "make install")
- 설치과정 통합 해야 할 경우 "make all" 실행
- GPL이 적용된 자유 소프트웨어이다.
- 주로 C 또는 C++언어로 프로그래밍하는데 사용된다.
- 비주얼 환경을 제공하지 않기 때문에 터미널을 통해서 프로그램을 사용해야 한다.
gcc [옵션] [결과물] [대상] |
|
옵션 |
내용 |
-v | gcc버전 확인 |
-c | c소스크드 파일을 목적파일로 컴파일 |
-o | 링크 작업을 하며, 실행 바이너리 즉, 출력파일의 이름을 정할때 사용 |
-l |
헤더파일이 들어있는 곳을 지정하기 위해 사용 |
-L |
라이브러리의 위치를 지정 |
-D |
매크로를 지정 |
gcc [C파일] (실행파일 이름 미지정시 자동으로 a.out 파일이 생성) |
|
gcc -c [C파일] ▶ 목적파일 생성 / gcc -o [생성파일] [목적파일] ▶ 바이너리 실행파일 생성 |
|
# gcc -c main.c print.c //동시에 두 파일 컴파일 |
|
# gcc -o result main.o print.o //동시에 두파일 링크작업 |
- 하나의 프로젝트를 효율적으로 관리하고 일관성 있게 관리하기 위하여 Makefile이라는 형식을 사용하고 make라는 유틸리티를 사용한다.
- 소스파일을 직접 배포하는 경우에 사용한다.
- Makefile 내부에서 각각의 타겟들은 탭('\t')으로 시작하는 명령이 뒤따라온다.
# make -f Makefile.linux //Makefile의 이름을 다르게 명시할때 사용 |
/*커널 컴파일 작업시 사용*/ # make config //설정 작업 # make menuconfig //메뉴 방식의 설정 작업 # make clean //만든 파일을 지우고 깨끗한 상태로 만듦 # make bzImage //bzImage를 만듦 # make modules //커널 모듈을 만듦 # make modules_install //커널 모듈을 인스톨함 |
/*분량이 작은 소스코드 같은 경우 사용*/ # make / # make all # make install |
foo: foo.o bar.o gcc -o foo foo.o bar.o foo.o: foo.c gcc -c foo.c bar.o: bar.c gcc -c bar.c |
목표: 목표를 달성하는데 필요한 구성 요소들... 목표를 달성하기 위한 명령1 목표를 달성하기 위한 명령2 ... |
목표(target): 의존관계(dependency, 목표를 달성하는데 필요한 구성 요소들) ... 명령(command, 목표를 달성하기 위한 명령) ... |
목표부분: 명령이 수행되어 나온 결과 파일을 지정한다. 의존관계: 목표를 달성하기 위해 있는 명령어가 있다. 명령부분: 정의된 명령어들은 일반적으로 쉘에서 쓸 수 있는 모든 명령어들을 사용할 수 있다. |
/* make를 쓰지 않고 gcc 명령어를 사용한 방식 (io.h 헤더파일 사용한다는 가정) */ # gcc -c main.c # gcc -c read.c # gcc -c write.c # gcc -o test main.o read.o write.o |
/* 위 방식과 똑같이 작동하는 makefile 형식 */ test: main.o test.o write.o gcc -o test main.o read.o write.o 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 ================================ [▲ 실행] # make |
/* 매크로 사용 + 삭제 레이블 사용*/ OBJECTS = main.o read.o write.o test: $(OBJECTS) gcc -o test $(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) =============================== [▲ clean 실행] # make clean |
특징
- 용량이 줄어듦
- 압축 시 원본 삭제
- 같은 압축 도구로 중복 압축 불가능
- 디렉터리 압축 불가능
- 단일 파일 개별 압축
gzip|bzip2 [target] (압축 시 사용) | ||
옵션 |
의미 |
비고 |
-c |
압축/해제한 결과 표준 출력으로 내보냄 |
|
-r |
서브 디렉터리까지 압축/해제 |
|
-d |
압축을 풀 때 사용 |
gzip압축 해제: gunzip [target] = gzip -d [target] bzip압축 해제: bunzip2 [target] = bzip2 -d [target] |
-l |
현재 압축된 파일의 내용을 보여줌(압축 후 크기, 압축률 등) |
|
-1~-9 |
압축시 블럭 크기를 100k, 200k, ..., 900k로 설정 |
|
*tar (확장자: .tar)
특징
- 용량이 늘어남
- 압축 시 원본 유지
- 같은 압축 도구로 중복 압축 가능
- 디렉터리 압축 가능
- 복수 파일 단일 압축
tar [옵션] [압축파일명] [target] |
|
옵션 |
의미 |
-c (create) |
새 tar 묶음 생성 |
-x (extract) |
tar 묶음 파일 해제 |
-t (list) |
묶음 풀기전 tar 파일 내용 리스트를 보여줌 |
-f (file) |
묶음 파일 명을 지정 |
-v (visual) | 파일이 묶기거나 풀리는 과정을 보여줌 |
-h | 심볼릭 링크가 가리키는 파일을 묶어줌 |
-z | tar + gzip |
-j | tar + bzip2 |
-J | tar + xz |
tar 활용 예시
# tar -cvf [압축파일명] [target] //압축시 |
# tar -tvf //압축파일 내용 볼때 |
# tar -xvf [target] // 압축 해제시 |
.tar.gz 파일의 압축 해제 ▶ # tar -zxvf |
.tar.bz2 파일의 압축 해제 ▶ # tar -jxvf |
.tar.xz 파일의 압축 해제 ▶ # tar-Jxvf |
'자격증 > 리눅스 마스터 1급' 카테고리의 다른 글
Part2) 리눅스 시스템 관리 -시스템 보안 및 관리(1) | 시스템 분석 (0) | 2018.03.05 |
---|---|
Part2) 리눅스 시스템 관리 - 장치 관리 | 장치의 설치 및 관리 (0) | 2018.02.28 |
Part2) 리눅스 시스템 관리 - 일반 운영 관리(2) | 파일 시스템 관리 (0) | 2018.02.21 |
Part2) 리눅스 시스템 관리 - 일반 운영 관리(1) | 사용자 관리 (0) | 2018.02.20 |
Part1) 리눅스의 실무의 이해 - 네트워크의 이해(2) | 네트워크 설정 (0) | 2018.02.14 |