본문 바로가기

자격증/리눅스 마스터 1급

Part2) 리눅스 시스템 관리 - 일반 운영 관리(3) | 프로세스 관리, S/W설치 및 관리

I. 프로세스 관리


프로세서의 제어

1) 프로세스의 실행 레벨
 런레벨 디렉터리 설명

 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가 시스템이 재실행 될것인지, 종료 될 것인지 결정한다. 

-디렉토리의 모든 파일은 모두 링크파일 형태이다.
-링크파일들은 모두 /etc/rc.d/init.d 디렉터리의 실제 파일로 링크되어있다.
-이 디렉토리에 존재하는 모든 파일들은 K나 S로 시작한다.(K: 해당 부팅레벨에선 실행X, S: 해당 부팅레벨에서 부팅시에 실행[숫자는 실행순서])
-링크 생성, 삭제 명령어는 "chkconfig"이다.



2) 백그라운드(Background)/포그라운드(Foreground) 실행

 포그라운드 

 명령을 입력하면, 실행중인 프로세스가 종료되기 전까지 기다렸다가, 다음 명령을 실행할 수 있다. (일반적인 쉘 프롬프트 모드)

 백그라운드 

 명령 뒤에 '&'를 붙여 동작시키며, 프로세스의 종료 여부에 관계없이 다른 명령을 내릴 수 있다.

 # cp -R /usr/sbin/ /tmp/&

 [1]26662 //기다릴때 ID값 부여받음

 # <Enter>

 [1]+ Done

 2 cp -i -R /usr/sbin /tmp&


3)프로세스의 제어의 예

<Ctrl+C>

 포그라운드로 실행 중인 프로세스를 <Ctrl+C>의 인터럽트 키를 눌러 강제로 종료할 수 있다.  

<Ctrl+Z> 

 실행중인 프로세스가 백그라운드에서 멈춘 상태로 대기하며, 즉, 실행되어 있기는 하지만 사용할 수 없는 상태가 된다. 

 # firefox
 ^Z
 [1]+ Stopped   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




프로세서 관리 명령어

1) top: 리눅스 시스템의 전반적인 운용상황을 실시간으로 모니터링하거나 프로세스 관리를 할 수 있는 유틸리티이다.

 top [옵션]

 # top

 top 명령어로 알 수 있는 것

  1. 기본으로 실행 시 5초에 한번씩 실시간으로 새로고침하여 시스템에 실행되고 있는 프로세스의 실시간 정보를 보여준다.
  2. CPU 사용율과 현황을 보여준다.
  3. 메모리 사용율과 현황을 보여준다.
  4. 시스템의 부하율 정보를 보여준다.
  5. 현재 실행되고 있는 프로세스들의 실행 현황 등 시스템의 전반적인 상황을 한 눈에 볼 수 있다.
  6. 시스템 관리자 권한이 아니더라도 실행 가능하다.
  7. 명령어 실행 중 명령어를 입력할 수 있다.(k: 강제종료시킬 프로세스PID입력, space:변환된 값 출력, h:명령어 목록, q: top종료 등)
 (swap 사용량, 시스템 유지시간, 좀비 프로세스의 수) - ※디스크 사용량은 알 수 없음



2) ps: 현재 실행 중인 프로세스에 대한 상세한 정보를 보는 명령어이다.

 ps [옵션]

 옵션

 의미 

-a

 현재 실행중인 전체 사용자의 모든 프로세스를 출력한다.

-e

 모든 프로세스를 출력한다. 

-u

 프로세스를 실행한 사용자 정보와 프로세스 시작시간 등을 출력

-x

 제어터미널을 갖지 않는 프로세스 출력

-l

 Long Format
 [F값 의미 ▶ 01: 주기억 장치내에 있음 / 02: 시스템프로세스 / 04: 주기억 장치내 Locked / 10: 스왑되고있음 / 20: 다른 프로세스에 의해 추적되고있음]

-f

 Full format 

 # ps -ef //가장 자주 쓰임



ps 명령어 실행 했을 때의 필드 
 필드 의미 

 PID(process ID) 

 프로세스마다 주어지는 번호

 TTY(TeleTypewriter)

 명령어가 실행되는 터미널 번호(할당된 것이 없는 경우 '?' 출력)

 STAT

 실행되고 있는 프로세스 상태(R, S, D, T, Z, W, N)

 R: 실행되고 있거나 실행될 수 있음(Running)
 S: 인터럽트 될 수 있는 Sleep, 하나의 이벤트가 완결되기를 기다림(Sleeping)
 W: 2.6.x 커널부터 사용 X
 T: 멈춤(Terminated)
 Z: 작동하지 않는 프로세스(Zombie)
 X: 죽은 프로세스(Dead)
 D: 인터럽트 될 수 없는 Sleep

 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

 프로세스가 실행하고 있는 커널 루틴


3) pstree: 현재 프로세스 상황을 트리형식으로 출력한다.

 pstree [옵션] 

옵션

 의미 

-a

 명령어에 인수를 함께 보여준다. 

-c

 독립적인 하위트리는 보여주지 않는다. 

-h

 현재 프로세스와 부모 프로세스를 좀더 두드러지게 출력한다. 

-l

 특별한 긴줄이 있어도 그대로 보여준다. 

-n

 이름 순서대로가 아닌 PID 순서대로 정렬해 같은 부모를 가진 자식 끼리 모아 출력한다. 

-p

 PID도 출력한다. 

-u

 UID도 출력한다. 

-G

 프로세스 관계를 보기 좋게 출력한다. 

  # pstree

  # pstree -np //PID순으로 정렬하며, 프로세스명과 PID 출력



4) kill: 백그라운드에 있는 프로세스 종료는 kill 또는 killall 명령을 사용해서 가능하다. 프로세스나 프로세스 그룹에게 지정된 시그널을 출력한다.

 kill [옵션] [PID] 

옵션

 의미 

-s

 특별히 보낼 시그널(이름,번호)을 지정한다. 

-l

 시그널로 사용할 수 있는 리스트들을 보여준다. 

-a

 프로세스 ID를 pid로 변환 시, 다른 uid를 갖는 프로세스도 변환시킬 수 있도록 허용한다. 

-p

 프로세스 ID를 지정한 경우, 그 프로세스에 시그널을 보내지 않고 그 프로세스의 이름만 보여준다. 

-9

 프로세스 강제 종료 옵션이다. ex) kill -SIGKILL [PID1] [PID2]

-SIGKILL

-KILL

-HUP

 프로세스 정보를 다시 읽어들인다.

 # jobs -l
 [1]+ 5377 Stropped   firefox
 [2]- 5398 Rinning   gnome-calculator &
 # kill 5398
 [2] 종료됨
 # kill -9 5377



시그널의 종류

시그널 

 의미 

SIGHUP

 로그아웃이나 접속을 끊을때 발생하며, 실행중인 프로그램의 설정파일을 변경 시키고 변화된 내용 적용시 사용

SIGINT

 현재 작동중인 프로그램을 키보드로 실행 중지 할때 사용(Ctrl+C)

SIGQUIT

 SIGINT와 유사하나 SIGQUIT는 비정상으로 종료하게 되어, core 파일을 생성하고 종료

SIGKILL

 무조건 실행중인 프로그램을 강제 종료함 

SIGSEGV

 메모리 액세스가 잘못되었을때 발생 

SIGTERM

 실행 중인 프로그램을 종료(안전한 종료-기본값)




5) killall: 다수의 경우 각각의 PID 값을 알아내고 모두 입력해야 하는 kill 명령과 달리 데몬에 의해 동작되는 모든 프로세스에게 한번에 같은 시그널을 보낼 경우에 많이 사용한다. 즉, 프로세스명 또는 데몬 명으로 프로세스를 종료한다.

 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 데몬에 대한 환경설정 리로드


※kill 과 killall 공통점과 차이점
-kill 명령은 프로세스 번호를 알아야 하지만, killall은 알필요 없다.
-kill 명령어는 PID 이외에 작업 번호로도 프로세스를 종료시킬 수 있다.
-두 명령어 모두 시그널 이름 미지정시, SIGTERM 시그널이 전송된다.
-두 명령어 모두 같은 시그널 이름 및 번호를 공유해서 사용한다.


6) signal 함수: 
ANSI C 시그널을 처리한다.

 #!include <signal.h>

 void (*signal(int signum, void (*handler)(int))) (int) ;

 SIG_IGN 

 시그널을 무시한다. 

 SIG_DFL 

 시그널의 초기 기본 동작을 하도록 한다. 

 SIG_ERR(반환 값)

 signal은 이전의 시그널 핸들러의 포인트나 에러시 SIG_ERR을 리턴한다. 



7) nice: 프로세스의 우선순위를 변경하기 위한 명령어이다.

 nice [-n 조정수치] [프로세스명]

 -프로세스 PID의 우선순위에 조정 수치를 더해 결정

 -NI 값을 지정할 때 사용

 -값이 작을수록 우선순위가 높음

 -일반 사용자는 우선순위를 높일 수 없음

 -지정 가능한 값의 범위는 -20 ~ 19 이다.

 -조정수치를 생략하면 기본적으로 10을 증가




8) nohup: 로그아웃 하더라도 HUP 프로세스의 적용을 받지않고 계속 실행이된다. 즉, 터미널을 빠져나가더라도 실행했던 프로그램을 끝까지 실행할때 사용한다.

 nohup [명령] [인수]

 -이것과 함께 수행된 명령어 대하여 Hangup신호를 무시한 채 지속적으로 실행하도록 하고, 우선권을 5만큼 증가 시켜 로그아웃하더라도 계속 백그라운드로 실행할 수 있도록 해준다.

 -관리자가 장시간 자리 비우거나 비접속 상태에 있어야 하는 경우 유용하다.

 -표준 출력이 tty였다면 표준 출력과 표준 에러는 nohup.out 파일에 추가되고, 쓰기 작업 불가일 경우엔 $HOME/nohup.out 파일에 추가된다.

 -nohub.out 또는 $HOME/nohup.out 파일을 생성하고 그룹/타인 에게는 접근 권한을 부여하지 않는다.

 -실행한 명령을 자동으로 백그라운드로 보내지 않아서, 명시적으로 명령행 뒤에 &을 붙이다던지 해줘야 한다.



9) cron: 계획된 명령을 실행하는 데몬이다. 반복적으로 어떤 특정한 시간에 어떤 특정한 작업을 시작하도록 할때 사용한다.

 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 가 있다.


/etc/crontab파일 설명

 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분에 실행된다.




9) fork: 새로운 프로세스 생성시 자신의 사본을 생성하여 자식프로세스로 생성하는 함수이다.

 #include <unistd.h>

 pid_t fork(void); 

 -반환값: 성공 시 자식프로세스의 PID가 부모에게 리턴되며, 자식에게는 0이 리턴된다.(실패시 -1이 부모에게 리턴되고, 자식은 생성X)

 -에러값: EAGAIN(부모의 페이지 테이블을 복사하기 위한 충분한 메모리 할당 불가), ENOMEM(메모리가 꽉차서 커널 구조체 할당 불가)



10) exec: 쉘 프로세스를 변경한다.

 exec [ [-] 명령 [인수]] 

 -exec() 시스템 호출은 프로세스의 메모리 공간을 수행 가능 파일로 대체하여 다른 프로그램을 호출한다.

 -인수는 명령의 인수가 되며, 첫번째 인수가 - 이면 쉘은 명령에 전달하는 0번째 인수에 대시를 넣는다.





II. S/W설치 및 관리

패키지를 통한 S/W 설치

1) RPM(레드햇 패키지 관리자)


RPM에 대한 설명
  1. RedHat Package Manager의 약자로, 리눅스를 조금 더 편리하게 사용할 수 있도록 하기 위해 만든 패키지 프로그램이다.
  2. 소스 자체를 컴파일된 바이너리 파일로 묶어둔 것으로 컴파일이 필요없다.
  3. 레드햇 계열뿐 아니라 많은 배포판이 RPM 방식을 채택하고 있다.
  4. .rpm 확장자를 가지는 패키지를 설치/삭제 할 수 있다.
  5. 설치된 패키지 목록을 볼 수 있다.
  6. 업그레이드시 사용자가 설정한 내용을 안전하게 보호해준다.
  7. 설치 시 의존성 문제를 고려하여 순서에 맞게 설치하여야 한다.

용도

  • 패키지 자동설치 및 제거: *.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(데비안 패키지 관리자)


dpkg에 대한 설명
  1. 사용가능한 패키지 목록만 갱신하는 기능을 가지고있다.
  2. 패키지 설치시 필요한 의존성 문제를 해결 할 수 있는 체크기능을 가졌다.
  3. 자동설치가 가능한 실행프로그램 작성기능을 제공한다.
  4. 특별한 패키지의 정보,내용을 알려준다.
  5. 확장자는 .dep, 명령어는 dpkg이다.
  6. root권한으로만 가능해서, 일반사용자는 사용할 수 없다.
  7. 시스템에서 제거된 패키지목록은 확인할 수 없다.

*dpkg 명령어

 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에서 불편했던 의존성 문제도 같이 검사하여 자동으로 설치/제거 해준다.


yum의 설정파일: /etc/yum.conf ▶ yum 동작을 위한 옵션 설정

 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 

 의존성을 만족시키기 위해 자동적으로 설치되었고 이제 더이상 필요하지 않는 패키지들을 제거하기위해 사용 




소스코드 컴파일 및 설치


1) 일반적인 컴파일 및 설치 과정
  1. 압축 해제
  2. 압축이 해제된 디렉터리로 이동해서 "./configure"명령으로 소스코드 컴파일 설정
  3. "make" 명령으로 컴파일
  4. "make install" 명령으로 컴파일한 파일 설치 - (root 권한 필요: $ su -c "make install")
  5. 설치과정 통합 해야 할 경우 "make all" 실행
2) GNU 컴파일러 GCC

gcc에 대하여
  1. GPL이 적용된 자유 소프트웨어이다.
  2. 주로 C 또는 C++언어로 프로그래밍하는데 사용된다.
  3. 비주얼 환경을 제공하지 않기 때문에 터미널을 통해서 프로그램을 사용해야 한다.
컴파일 작업: C소스코드 파일을 입력으로 하여 목적 파일을 생성해 내는 과정을 의미한다.
링크 작업: 컴파일 결과 생성된 목적 파일들에 필요한 함수들과 라이브러리들을 연결해 바이너리 형태의 샐행 파일을 만들어 내는 과정이다. 

*gcc 명령어

 gcc [옵션] [결과물] [대상] 

옵션

내용 

-v

 gcc버전 확인 

-c

 c소스크드 파일을 목적파일로 컴파일

 -o

 링크 작업을 하며, 실행 바이너리 즉, 출력파일의 이름을 정할때 사용

-l

 헤더파일이 들어있는 곳을 지정하기 위해 사용 

-L

 라이브러리의 위치를 지정

-D

 매크로를 지정 



gcc 활용예시

 gcc [C파일] (실행파일 이름 미지정시 자동으로 a.out 파일이 생성)

 gcc -c [C파일] ▶ 목적파일 생성 / gcc -o [생성파일] [목적파일] ▶ 바이너리 실행파일 생성

 # gcc -c main.c print.c //동시에 두 파일 컴파일

 # gcc -o result main.o print.o //동시에 두파일 링크작업




3) make

make에 대하여
  1. 하나의 프로젝트를 효율적으로 관리하고 일관성 있게 관리하기 위하여 Makefile이라는 형식을 사용하고 make라는 유틸리티를 사용한다.
  2. 소스파일을 직접 배포하는 경우에 사용한다.
  3. 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


make 사용하기

 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

        ...



Makefile의 내부구조: 목표(target), 의존관계(dependency), 명령(command)의 세개로 이루어진 기본적인 규칙이다.

 목표(target): 의존관계(dependency, 목표를 달성하는데 필요한 구성 요소들) ...

       명령(command, 목표를 달성하기 위한 명령)

       ... 

 목표부분: 명령이 수행되어 나온 결과 파일을 지정한다.

 의존관계: 목표를 달성하기 위해 있는 명령어가 있다.

 명령부분: 정의된 명령어들은 일반적으로 쉘에서 쓸 수 있는 모든 명령어들을 사용할 수 있다.


Makefile 예제

 /* 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


cmake: 간단한 플랫폼과 컴파일러 독립적인 설정 파일을 사용하여 소프트웨어 컴파일 과정을 제어하기 위해 사용된다. cmake는 변수와 함수를 포함하는 복합적인 문법을 사용하여 비교적 다양하고 구체적인 설정이 가능하다.


4) 압축&해제

압축률: xz > bzip2 > gzip > compress

*gzip & bzip2 (확장자: gzip=.gz, bzip2=.bz2)


특징

  • 용량이 줄어듦
  • 압축 시 원본 삭제
  • 같은 압축 도구로 중복 압축 불가능
  • 디렉터리 압축 불가능
  • 단일 파일 개별 압축

 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