PART 02 > ch 01 일반 운영 관리(2)

정희수·2021년 2월 21일

프로세스 관리

프로세스의 제어

프로세스들은 우선순위를 가지며 관리되고 ps -l로 프로세스 우선순위를 확인할 수 있다. 해당 명령어로 PRI와 NI가 나타난다.
PRI는 커널이 사용하는 우선순위 항목으로 0~139값이다. 0~99는 시스템에 예약된 우선순위이고 사용자 공간 프로세스(user space process)는 100~139가 할당된다. PRI는 조작될 수 없다.
NI(nice)는 root나 사용자가 조작하는 값으로 -20~19까지 설정 가능하다. 값을 낮추는 것은 root만 가능하다.
NI 값을 설정하면 리눅스가 PRI를 변경하여 우선순위를 조정한다.

프로세스와 /proc 디렉터리

/proc의 개요

/proc은 가상 파일 시스템, 프로세스 상태 정보와 기타 시스템 및 하드웨어 정보를 확인 할 수 있다.
ps 명령어로 프로세스 정보 확인할때 해당 디렉터리 참고한다. 새로운 프로세스 생성되면 /proc/PID 서브 디렉터리가 생성되고 해당 프로세스 정보 저장된다.

/proc/PID의 구조

p334

/proc 디렉터리의 주요 정보 파일 및 디렉터리

p334

프로세스 스케줄링

스케줄링이란 특정 시간에 특정 작업을 수행하게 하는 것이다. 리눅스에서는 at과 cron이 있는데 모두 데몬으로 실행 중이어야 한다.
(1)at은 주로 한 번만 실행 (2)cron은 주기적으로 프로세스를 실행할 때 사용한다.

at,atq, crontab

at

atd 데몬에 의해 실행되고 지정한 작업은 queue에 저장되고 저장된 작업은 /var/spool/at 디렉터리 아래 파일로 저장된다.
결과는 root 사용자의 메일로 전송한다.

[Option] 작업번호 필수 지정
-q 큐이름: 대기큐 지정(a-z A-Z). 지정 안 하면 기본큐 a 사용
-c 작업: 작업 정보 출력
-d: 예약한 작업 삭제(=atrm) => atrm 4 4번 작업 삭제
-l: 큐에 있는 작업 출력(=atq) => 작업 번호, 실행 날짜/시간, 저장된 큐, 사용자 순서
at -d 1 1번 작업 삭제
at -c 1 1번 작업 정보 출력
at now+3hours

  • at 사용자 제한
    /etc/at.allow와 /etc/at.deny로 at 사용자 제한 할 수 있다.
    (존재 O,상관 X) => 등록된 사용자만 가능
    (상관 X,존재 O) => 등록된 사용자만 불가
    (존재 X,존재 X) => 일반사용자 불가능 root만 가능

cron

주기적으로 실행하는 작업은 시스템 운영에 필요한 작업 or 사용자의 필요에 의한 작업 이 있다.
시스템 운영에 필요한 경우 (1) root권한으로 /etc/crontab에 등록 (2) 사용자는 crontab 명령어 수행으로 등록 가능하다.

crontab 파일 총 7개 필드
분 시 일 월 요일 사용자이름 command
- 일(1~31), 요일은 (0~7, 0과 7은 일요일)
- 사용자이름은 일반적으로 생략
- command는 실행할 명령어

  • crontab
    cron 등록 명령어 실행하면 vi실행됨 => 작업 내용은 /var/spool/cron/사용자ID 파일로 저장된다.
    [Option]
    -l: crontab 설정된 내용 출력
    -e: crontab 내용 작성하거나 수정
    -r: crontab 파일 삭제
    -u: root 사용자가 다른 사용자의 crontab 파일 다룰 때=> -e 옵션과 함께 주로 사용
    -i: -r의 옵션으로 삭제하기 전에 y,n 묻기

    주의! 삭제의 경우 at은 -d, crontab은 -r

crontab -ir 크론탭 설정 파일 삭제전 질의 묻기
crontab schedule.txt 해당 파일에 설정된 내용을 등록


p339 크론탭 설정 예시

  • crontab 사용자 권한은 at과 동일하다.

프로세스 관련 명령어

ps, pstree, top, kill, killall, jobs, bg, nice, renice, nohup, pgrep, pkill

ps

동작중인 프로세스의 상태 출력
[Option]
a: 터미널과 연관된 프로세스
x: 데몬프로세스처럼 터미널에 종속되는 프로세스
u: 프로세스의 소유자 기준으로 출력
e: 해당 프로세스에 관련된 환경 변수 정보 함께 출력
f: 프로세스간 상속 관계를 트리 구조로 출력
ps aux 시스템에 동작중인 모든 프로세스를 소유자정보와 함께 출력

  • 프로세스 상태 코드 STAT 주요값 (p342)
    R(running) 실행 혹은 실행될 수 있는 상태
    S(sleeping) 인터럽트에 의한 sleep상태, 이벤트 끝나기를 기다리는 상태
    D(disk wait) 디스크 I/O에 의해 대기 상태
    T(traced or stopped) 정지 상태
    Z(zombie) 작업 종료되었으나 부모 프로세스로부터 회수되지 않아 메모리 차지하는 상태

pstree

프로세스 상태를 트리구조로 출력
[Option]
-h: 실행중인 프로세스와 실행한 명령부분 진하게 강조
-p: pid도 출력

pstree -h 실행중인 프로세스 정보를 트리 구조로, 실행한 명령 부분 진하게 강조하여 보여준다.

top

동작중인 프로세스의 상태를 실시간으로 화면에 출력
[Option]
-d 갱신시간: 초단위
-p: 특정 PID값 모니터링
-b: 배치모드 => 다른 프로그램이나 파일 전송할 때 사용(-n 옵션과 함께 사용)
-n: top명령어 실행 횟수
top -d 2 -p 1222 1222 PID 프로세스를 2초 간격으로 정보 출력
top -bn 3 > top.log top 명령어 배치모드로 3회 실행하여 top.log 파일에 저장

[top 주요 항목]
RES: 프로세스가 사용하는 실제 메모리양(resident size)
SHR: 프로세스가 사용하는 공유메모리양
TIME+: 프로세스가 시작하여 사용한 총 cpu 시간
COMMAND: 프로세스를 실행한 명령

첫째줄: 현재 시간, 서버 구동후 시간, 접속한 사용자수, 1분/5분/10분 시스템 부하
둘째줄: 프로세스 상태
세번째줄: cpu 사용량

명령어실행 목적어
killPID,작업번호
killall프로세스이름
pkill프로세스이름

kill

PID나 작업번호로 프로세스에 특정 시그널을 보내는 명령. 옵션 없으면 SIGTERM(15)를 보낸다.
보통 중지시킬 수 없는 프로세스를 종료시킬때 사용한다.
kill -l 시그널 종류 출력
kill 724 724 PID에 SIGTERM 시그널 보낸다. (=kill -15 724, kill -TERM 724, kill -s SIGTERM 724)
kill %2 작업 번호가 2인 프로세스를 종료

killall

프로세스이름으로 실행한다. 한 데몬의 여러 프로세스를 한 번에 종료시킬 때 사용 => killall [option] 프로세스명
[Option]
-v: 시그널 전송 결과 출력(--verbose)
killall -HUP httpd httpd 데몬을 다시 실행시킨다. httpd 프로세스들이 재시작된다.
killall -9 -u posein posein사용자의 모든 프로세스들에게 SIGKILL 보낸다.

jobs

백그라운드 혹은 중지된 프로세스 목록 출력
jobs
jobs -l PID 추가로 출력

fg

백그라운드 프로세스 -> 포어그라운드 프로세스
fg %2 = fg 2

bg

포어그라운드로 실행중인 프로세스를 (1)ctrl+z 눌러 작업 중지시키고 (2)bg 명령어로 백그라운드로 전환

실행중인 프로세스 우선순위 변경시 PID, 사용자이름, 프로세스 그룹ID를 이용한다.
nice프로세스명으로 우선순위 조정, 명령 실행시 새로운 프로세스 추가, 기존 NI값에 증감되는 형태
renice는 주로 PID 사용하고(옵션으로 사용자이름, 그룹id가능) 기존 프로세스를 교체하여 조정한다. NI값 바로 지정 가능
root만 NI 낮출 수 있는 것은 동일하다.

nice

프로세스명으로 NI값 설정(NI기본값은 0), 지정 가능 범위는 -20~19, 일반사용자는 증가만 가능, root만 감소 가능
기존 프로세스 그대로이고 새 NI 값 가지는 프로세스 추가로 발생, 기존 NI값에서 증감하는 방식
[Option]
-n: 증감 값, 기본은 10이다.
nice 설정된 NI 값 출력
nice --10 bash bash의 NI값 10감소 => 우선순위 높인다.

nice 명령어 실행하면 NI값이 변경된 프로세스가 추가로 발생한다. exit하면 원래의 프로세스로 돌아간다.

renice

주로 PID로 NI값 설정, 기존 프로세스를 교체, NI값 바로 지정 => PRI는 시스템 상황에 맞춰 변경된다.
사용법 renice [option] NI PID
[Option]
-u: 사용자 이름
-g: 그룹ID
renice 1 987 -u daemon root -p 1222 PID가 987과 1222, 사용자가 daemon과 root인 프로세스의 NI를 1로 지정

nohup

로그아웃하거나 작업 중인 터미널 창 닫혀도 실행중 프로세스를 백그라운드 프로세스로 작업될 수 있도록하는(=계속 작업 수행돼) 명령어
& 명시해야한다. 즉, nohup은 백그라운드로 실행되는 명령행 앞에 붙이는 명령
nohup tar cvf source.tar /opt/src &

pgrep

프로세스 이름으로 PID 검색하는 명령. 옵션에 따라 사용자나 그룹명으로도 검색 가능하다.
[Option]
-u: 사용자 이름
-U: UID
-g: 그룹 이름
-G: GID
-t: 특정 터미널에서 실행중인
-l: 프로세스명도 출력
pgrep httpd
pgrep -u posein,yuloje
pgrep -t tty2

pkill

프로세스명으로 시그널 보내는 명령. 기본 시그널 TERM(15)이다.
[Option]
-u: 사용자 이름
-U: UID
-g: 그룹 이름
-G: GID
-t: 특정 터미널에서 실행중인
-l: 프로세스명도 출력
pkill -9 -u yuloje yuloje 사용자의 프로세스를 강제종료(KILL) 시그널 전송


소프트웨어 설치 및 관리

패키지를 통한 SW 설치

리눅스에서 사용되는 프로그램은 C언어로 된 소스 파일을 tar로 묶은 후 압축하여 배포된다.
프로그램 설치를 위해서는 1.압축 풀기 2.디렉터리 이동 후 configure,make,make install 작업을 걸쳐야 한다. 특히 configure작업은 어렵다.
따라서 리눅스 배포판은 패키지 관리기법을 만들었고 최근에는 온라인 기반을 지원한다.

배포판기본 패키지 관리 기법온라인 패키지 관리 기법
레드햇 계열RPMYUM
데비안 계열Dkpgapt-get
수세 계열YaSTzypper

RPM

RPM 개요

.rpm 형태로 파일 배포하고 rpm 명령어로 설치,갱신,제거,검증,질의 관리 가능하다.
rpm파일 형식은 패키지이름-버전-릴리즈.리눅스버전.아키텍처.rpm 이다.
-릴리즈: 몇 번 빌드했는지
-리눅스버전: 기준이 되는 리눅스 버전 (ex)el7(enterprise linux 7), centos 등
-아키텍처: 패키지가 사용 가능한 시스템 (ex)x86_64
(ex) httpd-2.4.6-90.el7.centos.x86_64.rpm =>최근에는 리눅스버전에 el7과 centos 함께 표기하기도 하다.

rpm 사용법

1.설치 및 갱신 2.제거 3.질의 4.검증모드 5.리빌드 => 총 5가지 모드로 나눌 수 있다.

  • 설치 및 갱신 모드
    [Option]
    -i: 새 패키지 설치, 이전 버전 패키지 존재시 설치X
    -U: 기존 패키지 업그레이드, 설치된 패키지 없으면 새 패키지 설치(이 경우 -i와 같다)
    -F: 이전 버전이 설치된 경우만 설치
    -v: 메시지 자세히 보여준다.
    -h: 설치 상황 '#'기호 표시한다.(--hash)
    rpm -i gftp-2.0.19-fc15.i686.rpm rpm 설치
    rpm -Uvh 패키지명 패키지 업데이트, 메시지와 진행상황을 #기호로 출력
    rpm -Fvh 패키지명 기존 패키지 있는경우만 업데이트, 메시지와 진행상황 #기호로 출ㄺ

  • 제거 모드
    -e옵션을 사용. 의존성 존재시 제거되지 않는다. 의존성 있는 경우 (1)관련 패키지 삭제 혹은 (2)--nodeps옵션 지정한다.
    [Option]
    -e: 삭제, 의존성 존재시 삭제되지 않는다.
    --nodeps: 의존성 갖는 패키지 있어도 삭제
    rpm -e httpd --nodeps

  • 질의(query) 모드 (p356)
    패키지 관련 정보 알아내기 위해 -q 옵션 사용한다. 패키지 설치 유무나 버전정보만 출력한다.
    [Option]
    -q: 질의시 필수 옵션 => 패키지이름과 버전 표시
    -i: 패키지 정보. -p 옵션과 함께 사용하면 rpm 패키지 파일 정보 알 수 있다.
    -l: 패키지가 설치한 파일 목록. -p와 함게 사용하면 rpm 패키지에서 설치한 파일 목록
    -a: 시스템에 설치된 모든 패키지 목록 출력
    -p 패키지 파일명: rpm 패키지의 파일에 대한 정보 출력(--package)
    -c: 해당 패키지의 설정 파일이나 스크립트 파일 출력(--configgiles)
    -f 파일명: 지정한 파일을 설치한 패키지 이름 출력
    -d: 패키지 관련 문서 및 man 페이지 정보 출력
    --R: 의존하고 있는 패키지 목록. 즉 설치나 동작시 필요한 패키지 목록(--requires)
    --changelog: 특정 패키지 바뀐 내용 최근부터 연대순으로 출력
    --scripts: 설치 및 제거 관련 스크립트 보여주기
    --filesbypkg: rpm 패키지가 많을 경우 목록 파일 앞에 패키지 붙이기
    --queryformat: 질의 결과를 원하는 형태로 출력할때 사용

rpm -qa 설치된 모든 패키지 정보 출력
rpm -qi sendmail 패키지 정보 출력
rpm -ql sendmail 패키지가 설치한 파일 목록
-qc: 환경설정 파일 및 실행 데몬 스크립트
-qf: 해당파일 설치한 패키지 정보
-qd
-qR
rpm -q --changelog sendmail 바뀐 내역 최근부터 연대순으로 보이기
-qip: 패키지 파일 정보 출력
-qlp: 패키지 파일에서 설치되는 파일 목록 정보
rpm -qp --filesbypkg *.rpm 확인하고 싶은 패키지 파일 많은 경우 각 파일 앞에 패키지 이름 붙이기
rpm -qa --queryformat "%10{size} %{name}\n"

  • 검증모드
    -V(--verify) 옵션을 사용하여 패키지의 메타데이터 정보를 이용해 변경된 정보를 찾아내는 모드이다. 파일의 크기, 허가권, 소유권, 파일 형식 등 정보 출력한다.
    [검증코드] p357
    S: 파일 크기 변경
    M: 파일 모드(permission & filetype) 변경
    U: 소유자 변경
    T: 수정시간(modify time) 변경

    [Option]
    -V: 검증 시 기본 옵션
    -a: 모든 패키지 검사
    rpm -Va 설치된 모든 패키지 검증

  • 리빌드 모드 rpmbuild
    --rebuild옵션으로 소스파일인 .src.rpm 파일을 패키지 파일로 만드는 모드
    rpmbuild --rebuild gftp-2.0-8.fc18.src.rpm => root가 실행한 경우 /root/rpmbuild 디렉 안에, x86_64기반인 경우 /root/rpmbuild/RPMS/x86_64 디렉 안에 생성.

yum

rpm 기반 시스템에서 네트워크를 통해 패키지 쉽게 설치와 자동 업데이트 수행하는 명령행 기반 유틸리티
의존성 문제 자동으로 해결

yum 관련 파일 및 디렉터리

yum 환경 설정 파일 /etc/yum.conf
설치 및 업데이트 저장소 관련 파일 /etc/yum.repos.d 디렉터리 안에
... p359

yum 사용법

yum [option] [command] [패키지 파일명]
[Option]
-y: 모든 질의에 yes 답한다.
-v: 자세한 정보 출력(--verbose)


[command] [ ]값은 없어도 되는 값, 없는 경우 전체 패키지가 대상
list [항목값][패키지명]: 전체 패키지에 대한 정보 출력, 항목값 기본은 all이고 / 설치된 installed / 업데이트 가능 updates 등 가능. 패키지명으로도 검색가능하다.
info [패키지명]: 패키지 정보
update [패키지명]
install [패키지명]
search [문자열..]: 문자열 포함된 패키지 찾기
remove, erase [패키지명]: 패키지 제거


group list: 패키지 그룹에 대한 정보 출력
group info 패키지그룹명: 관련된 패키지 정보
group update 패키지그룹명: 지정한 그룹의 패키지를 업데이트
group install 패키지그룹명
group remove 패키지그룹명

whatprovides: 특정 파일이나 기능과 관련된 패키지 정보 검색
clean [설정값]: yum과 관련한 저장된 정보 삭제. all, packages,,,
history [sub-command]: yum 명령어 사용 이력 정보. 하위 명령어로 list, info, undo, redo 작업번호
[Ex]
yum search music music이라는 문자열이 들어있는 패키지 찾기
yum list 전체 패키지 정보 출력
yum list installed
yum info 모든 패키지 정보 출력
yum group list 패키지 그룹별 설치 정보 출력한다. 설치된 그룹은 Installed Groups / 설치되지 않은 그룹은 Available Groups
yum clean all yum 관련 정보 모두 삭제
yum history yum 관련 작업 이력 모두 출력
yum history undo 20 ID가 20인 작업 취소

데비안 패키지 관리

데비안 패키지 관리 개요

데비안 리눅스는 패키지 관리 도구 dpkg를 사용한다. 관련 프로그램을 .deb 파일로 배포한다.
.deb 파일 형식은 패키지이름_버전-릴리즈-아키텍처 이다.


데비안 패키지 관리 프로그램으로 (1)dselect (2)alien이 있다.
(1)dselect는 메뉴 이동 방식으로 명령해 옵션 방식인 dpkg비해 사용이 쉽다.
(2)alien은 deb및 rpm 등 다른 종류의 리눅스 패키지 형식을 상호 변환해주는 유틸리티이다.

dpkg

-i 패키지파일명: 패키지 설치
-R 디렉터리명: -i 옵션과 함께 사용하여 지정한 디렉터리 안의 모든 패키지를 설치
-l: 설치된 패키지 출력
-L 패키지명: 패키지가 설치한 파일 목록(--listfiles)
-l 패키지파일명: 패키지 정보 출력
--unpack 패키지파일명: 환경설정은 안 하고 패키지 풀기만
--configure 패키지명: --unpack한 패키지 환경설정
-r 패키지명: 패키지 제거하는데 환경 설정 파일은 남긴다.
-P: 환경설정까지 삭제(--purge)
-s 패키지명: 패키지에 대한 상태 출력(--stauts) => 패키지 버전, 패키지 관리자, 설명, 환경 설정 파일 등 출력

dpkg -iR 디렉터리 디렉터리내 모든 패키지 설치
dpkg -L vim vim 패키지에서 설치된 파일을 목록으로 보여준다.

apt-get

데비안 리눅스 배포판에서 패키지 관리를 쉽게하기 위한 명령행 기반의 유틸리티이다.
/etc/atp/sources.list파일에 패키지 관련 정보를 관리하여 의존성과 충돌성을 해결한다. agt-get은 ATP(advanced Tool Packaging) 라이브러리 이용한 명령행 기반의 도구로 어려울 수 있는데 최근에는 GUI기반의 synaptic과 aptitude등을 이용한다.
사용법: apt-get [option] [command] [패키지명]
[option]
-y: 모든 질의에 yes
--purge: remove명령시 환경설정까지 제거한다
[command]
update: 패키지 목록을 갱신한다. /etc/apt/sources.list에서 관련 정보 가져온다.
upgrade: update후에 사용한다. 모든 패키지를 최신 버전으로 갱신한다.
install 패키지명: 패키지 설치시 사용. .deb파일들이 /var/cache/apt/archive에 생성된다.
remove 패키지명: 패키지를 삭제한다.
clean: /var/cache/apt/archive에 생성된 파일을 삭제한다.

소스 코드 컴파일

소스 설치법의 개요

리눅스에서 소스 프로그램 설치를 위해서는 1.압축풀기 2.디렉터리이동 3.configure 4.make 5.make install 5단계를 걸친다. 압축도구 tar, GNU C컴파일러인 gcc, 의존성 검사 도구 make 등의 응용 프로그램이 필요하다.

[소스 설치 주요 3단계]

설치단계설명
configure소스 프로그램의 환경 설정 스크립트이다. tar.gz는 대부분 프로그램 소스인데 환경설정이 필요하다.
configure는 사용자들이 자신의 환경에 맞게 손쉽게 수정하도록 제공되는 스크립트이다. Makefile을 만든다
해당 파일은 비소스 파일을 나열하고 다른 파일 참조하는 방법에 대한 정보
makeconfigure에 의해 변경된 내용을 반영하고 컴파일 작업하여 실행파일 만든다.
Makefile을 읽고 소스 코드에서 실행 가능한 프로그램과 라이브러리를 자동으로 빌드하는 자동화 도구이다.
타깃과 의존성 관련 작업을 한 후 실행파일을 만든다
make install컴파일된 실행 파일을 지정한 속성으로 지정된 디렉터리에 설치한다

make clean configure 작업으로 생성된 파일을 제거한다. configure 재작업하기 전에 실행한다.

cmake

소스 컴파일시 사용되는 make 대체 프로그램으로 멀티플랫폼을 지원한다. cmake는 지정한 운영체제에 맞는 make파일을 생성한다.
(ex)mysql은 configure와 make 작업을 cmake로 통합해 설치한다.
[특징]
1. 소프트웨어 빌드를 위한 언어로 독자적인 설정 스크립트를 이용한다.
2. 다양한 플랫폼을 지원한다.
3. C,C++,Java,Fortran에 대해 의존 관계를 분석할 수 있다.
4. SWIG, Qt, FLTK 등을 지원
5. Visual Studio .Net 및 Visual Studio를 지원
6. 이클리스용 빌드 파일 생성 가능
7. 타임스탬프로 파일 내용 변화 알 수 있다.
8. 평행 빌드를 지원
9. 크로스 컴파일 가능
10. Dart, CTest, CPack등을 포함한다.

tar와 압축 관련 유틸리티

  • tar(tape archive)
    여러 파일들을 하나의 파일로 묶어주는 명령으로 사용한다.
    파일 묶을때 디렉터리를 지정하면 하위 파일과 디렉터리까지 묶여진다. 또한, 파일 속성,하드링크,심볼릭링크 등도 보존된다.
    리눅스에서는 옵션을 이용해 압축 관련 작업을 동시에 진행할 수 있다. 압축 형식에는 compress(tar.Z), gzip(tar.gz), bzip(tar.bz2), xz(tar.xz) 등이 있다.


    사용법: tar \[option] \[파일명]
    옵션 사용시 - 생략 가능하지만 인자값이 있는 옵션 여러개 지정시에는 - 기호 사용해야한다.
    [Option]
    -c: 새로운 tar파일 생성
    -r: 기존 tar 파일 뒤에 파일 추가한다.
    -x: tar 파일 푼다.
    -t: tar에 묶인 파일 목록 출력
    -v: 명령 대상 파일을 보여준다. c옵션과 함께 사용해 묶여지는 동안 파일 이름 보여준다.
    -f 파일명: tar 파일 이름을 지정한다. 파일명 대신 - 쓰면 표준 입출력이 된다.

-C: 디렉터리 변경시 사용
-Z: compress(tar.Z) 관련 옵션
-z: gzip(tar.gz) 관련 옵션
-j: bzip(tar.bz2) 관련 옵션
-J: xz(tar.xz) 관련 옵션
tar cvf posein.tar *c 현 디렉터리에서 .c 파일을 posein.tar파일로 묶는데, 진행사항 출력
tar cf posein.tar posein/ posein디렉터리와 서브 디렉터리의 모든 파일을 posein.tar로 묶는다.
tar rvf posein.tar jalin.txt yuloje.c 현 디렉터리의 jalin.txt와 yuloje.c 파일을 posein.tar파일로 묶는다.
tar tvf posein.tar posein.tar 내용을 보여준다.
tar zcvf posein.tar.gz *.c 현 디렉터리에서 .c로 끝나는 모든 파일을 gzip 압축과 동시에 posein.tar.gz파일로 묶는다.
tar Jxvf php-5.5.4.tar.xz -C /usr/local/src xz로 압축된 php-5.5.4.tar.xz를 /usr/local/src에 푼다.

압축률 순서압축 프로그램설명
1compress예전 유닉스 계열 표준 압출 파일(tar.Z)
2gzipGNU에서 만듬(tar.gz)
3bzip2블록정렬 알고리즘과 허브만 부호화를 사용하여 만든 압축프로그램(.bz2)
4xzLZMA2 알고리즘 이용하여 만든 데이터 무손실 압축 프로그램, 최근 공개용 소프트웨어 사이트에서 주로 사용(.xz)
  • compress,uncompress(파일명 뒤에 .Z)
    압축률이 낮아 현재는 거의 사용 안 한다.
    [option]
    -c: 표준 출력으로 지정하는 옵션, 보통 생략하지만 tar 등과 병행해서 사용하면 반드시 표기해야한다.
    -v: 압축 관련 정보 출력
    compress text.txt text.txt는 사라지고 text.txt.Z 압축파일이 생성된다.
    compress posein.tar posein.tar는 사라지고 posein.tar.Z 압축파일이 생성된다.
    tar cvf - * | compress > backup.tar.Z 현재 디렉터리 안 모든 파일을 tar로 묶고 compress 압축한다.
    uncompress -c backup.tar.Z | tar xvf - 압축파일 해제하고 tar로 묶여있는 파일을 현 디렉터리에 푼다.
  • gzip, gunzip(파일명 뒤에 .gz)
    compress 대체하기 위해 만들어졌다.
    [option]
    -c: 표준 출력으로 지정하는 옵션, 보통 생략하지만 tar 등과 병행해서 사용하면 반드시 표기해야한다.
    -d: 압축 풀때 사용하는 옵션
    -l: 압축 파일에 대한 정보 출력(압축 되기 전 파일명과 크기, 압축된 크기, 압출률 등)

gunzip posein.tar.gz (=gzip -d posein.tar.gz)
gzip -cd yuloje.tar.gz | tar xvf - 압축파일 풀고, tar파일을 현재 디렉터리에 푼다.

zcat gzip 패키지에 같이 들어있는 명령으로 압축되어있는 텍스트 파일 내용을 확인한다.

  • bzip2,bunzip2(파일명 뒤에 .bz2)
    블록정렬 알고리즘과 허브만 부호화를 사용한 압축프로그램. gzip보다 압축률은 좋지만 압축 시간이 더 걸린다.
    [option]
    -c: 표준 출력으로 지정하는 옵션, 보통 생략하지만 tar 등과 병행해서 사용하면 반드시 표기해야한다.
    -d: 압축 풀때 사용
    bunzip2 posein.tar.bz2

  • xz,unxz(파일명 뒤에 .xz)
    LZMA2 알고리즘을 이용한 데이터 무손실 압축 프로그램이다. 최근 SW사이트에서 이 압축 포맷으로 파일을 배포하고 있다.
    [option]
    -c: 표준 출력으로 지정하는 옵션, 보통 생략하지만 tar 등과 병행해서 사용하면 반드시 표기해야한다.
    -z: 압축할때 사용(기본이라 불필요)
    -d: 압축풀때

  • zip,unzip(파일명 뒤에 .zip)
    주로 DOS/Windows 계열 os가 사용, 리눅스에서도 가능하다.
    사용법: zip \[option] 압축파일명 파일명 다른 압축 프로그램과 달리 압축파일명을 기재
    [option]
    -r: 압축 대상이 dir인 경우 하위 dir을 포함하여 압축
    zip posein posein.tar posein.tar를 압축하여 posein.zip 파일이 생성된다.
    zip -r backup data/ backup.zip 생긴다.

gcc(GNU compiler Collection)

GNU 프로젝트로 만들어진 컴파일러 모음이다. 다양한 언어를 지원한다.
C컴파일러 도구로서 C언어로 작성한 파일을 gcc로 컴파일하면 a.out이라는 실행파일이 생성된다.
a.out이 PATH에 등록된 디렉터리에 위치하지 않으면 ./a.out으로 실행해야한다.

오브젝트파일을 링커가 링킹해서 실행파일을 만든다

[option]
-o: 실행파일 이름 지정(옵션 없으면 a.out으로 생성)
-c: 링크는 안 하고 목적 파일만 만들어 .o 파일을 만든다.
gcc sum.c sum.c파일 컴파일해서 a.out 실행파일을 생성한다.
gcc -c sum.c sum.c를 컴파일해서 오브젝트 파일을 생성한다. => sum.o로 생성된다.
gcc -o linkedlist linkedlist.c test_linkedlist.c 두 .c파일을 컴파일해서 linkedlist 실행파일을 생성한다.

make 유틸리티 활용

make는 컴파일을 자동화해주는 도구이다. 소스파일에서 프로그램 실행 파일 및 기타 비소스 파일 생성을 제어한다.
make는 Makefile에서 관련정보를 가져오는데, 해당 파일은 비소스 파일을 나열하고 다른 파일 참조하는 방법에 대한 정보가 기재되어있다. make는 makefile을 토대로 빌드한다.
[option]
-f: makefile 이외에 다른 파일에서 정보를 참조할때

  • Makefile
    [Makefile 기본 규칙]

    목표파일(target):의존성있는 파일들 나열(목표파일 생성에 관계되는 모든 파일)
    (tab 키 후에 입력)관련명령 기입


    make lin 입력하면 lin 실행파일이 생성된다. (p375 예시 보기)

라이브러리 관리

라이브러리의 개요

반복적인 코드를 라이브러리 형태로 재사용을 가능케 한다. 사용자의 프로그램과 링크(Link)되어 실행가능한 형태로 완성된다.
(1) 정적 링크 라이브러리와 (2) 동적 링크 라이브러리가 있다.

  • 정적 링크 라이브러리(static)
    컴파일 할 때 실행 파일에 포함되어 배포된다. => 실행 파일이 커지고 메모리를 많이 차지하게 된다.
  • 동적 링크 라이브러리(dynamic)
    필요할 때만 라이브러리를 메모리에 적재한다.


    운영체제에서도 많은 명령어(응용프로그램)들이 공유 라이브러리를 가지는데 주로 동적 공유 라이브러리를 사용하여 디스크 공간을 효율적으로 사용케한다.

공유 라이브러리의 개요

운영체제에서 주로 동적 링크를 사용하는데 동적으로 링크되어 공유되는 라이브러리를 공유 라이브러리(shared library)라 부른다.

공유 라이브러리 특징

  • 의존성
    필요한 라이브러리가 존재하지 않거나 찾을 수 없으면 해당 프로그램은 실행되지 않는다.

  • 링크
    동적으로 링크된 실행파일은 실행시 공유 오브젝트에 대한 동적 링커인 ld.so에 의해 검사된다.
    동적 링커 ld.so는 실행파일을 점검하고 공유 라이브러리에 대한 의존성 문제를 해결한다.
    ld.so가 지정된 라이브러리를 못 찾으면 파일은 실행되지 않는다.

공유 라이브러리 관련 디렉터리 및 파일

공유 라이브러리는 .so 파일명을 가진다(shared object)
공유 라이브러리는 (1) /lib=> ls,mv와 같은 기본적인 명령어와 시스템과 연관된 라이브러리 (2) /usr/lib => 응용 프로그램과 관련된 라이브러리 에 위치한다.
CentOS 7부터는 x86_64로만 배포되며 대부분 공유 라이브러리 파일을 /lib64안에 둔다.
* /etc/ld.so.conf
기본적인 공유라이브러리(/lib,/usr/lib,/lib64) 이외에 추가로 디렉터리 등록할때 사용하는 환경설정 파일
수정 후 ldconfig 명령 수행해서 내용 갱신 해야한다.

  • /etc/ld.so.cache
    공유라이브러리가 위치한 디렉터리에서 찾을 수 있는 라이브러리 파일 목록 정보를 담는 파일이다.

공유 라이브러리 관련 명령어

  • ldconfig
    공유 라이브러리 관련 정보 갱신(다시 읽어들여)하고 설정하는 명령(주로 /etc/ld.so.conf 수정후 내용 갱신할때)
    [option]
    -p: 현재 캐시에 저장된 공유 라이브러리 목록 정보 출력
    ldconfig
    ldconfig -p

  • ldd
    특정 파일이나 프로그램이 의존하고 있는 공유 라이브러리 정보를 출력
    [option]
    -v: 관련 라이브러리 정보를 버전 등 자세히 출력(--verbose)
    ldd /bin/ls
    ldd -v /bin/cp cp 명령어가 의존하는 공유라이브러리 정보를 버전 등과 같이 자세히 출력

공유 라이브러리 관련 환경 변수

특정 프로그램 실행시 라이브러리 등록이 필요하면, 공유 라이브러리 환경 변수 LD_LIBRARY_PATH에 디렉터리 경로를 등록하면 된다.
설정을 지속적으로 유지하고 싶으면 /etc/profile이나 ~/.bash_profile에 등록해야한다.

profile
nonstop sw developer

0개의 댓글