[Linux] 9. 소프트웨어 관리
1. 우분투 패키지 개요
리눅스에서 주로 사용하는 SW 패키지
deb
: 데비안, 우분투 계열에서 사용하는 패키지RPM(Redhat Package Manager)
: 레드햇 계열 리눅스에서 주로 사용
우분투 deb 패키지 특징
- 바이너리 파일로 구성되어 있어 컴파일이 필요 없음
- 패키지의 파일들이 관련 디렉터리에 바로 설치됨
- 패키지를 삭제할 때 관련된 파일을 일괄적으로 삭제할 수 있음
- 기존에 설치한 패키지를 삭제하지 않고 바로 업그레이드 할 수 있음
- 패키지의 설치 상태를 검증할 수 있으며, 패키지에 대한 정보를 제공함
- 해당 패키지와 의존성을 가지고 있는 패키지가 무엇인지 알려줌
우분투 S/W 패키지의 카테고리
- 공식적으로 데비안 배포판에 포함된 모든 패키지는 데비안 자유 소프트웨어 지침에 따라 자유롭게 사용하고 배포할 수 있음
- 우분투는 네 개의 카테고리로 나누어 소프트웨어를 제공하고 있음
main
: 우분투에 의해 공식적으로 지원됨 자유롭게 배포할 수 있음restricted
: 우분투에 의해 지원되나 완전한 자유 라이선스 소프트웨어는 아님universe
: 리눅스에서 사용할 수 있는 거의 대부분의 소프트웨어로 자유 소프트웨어일 수도 있고 아닐 수도 있으며, 기술적 지원을 보장하지 않음multiverse
: 자유 소프트웨어가 아닌 소프트웨어가 포함되어 있으며, 개인이 직접 라이선스를 확인해야 함
우분투 S/W 패키지의 이름 구성
파일명_버전-리비전_아키텍처.deb
ex) gnome-shell_32.6.1-0ubuntu5_amd54.db
- 파일명 :
gnome-shell
- 패키지 버전 : 3.26.1
- 패키지 리비전(리비전은 소스의 버전이 업그레이드되지는 않았지만 패키지의 보안 문제나 의존성 변화, 스크립트의 변화 등이 있음을 의미):
0buntu5
- 아키텍처(사용하는 시스템 아키텍처로 i386은 인텔을, all은 시스템과 상관없는 문서나 스크립트 등을 뜻) :
amd64
(64bit) - 확장자:
.deb
우분투 S/W 패키지 저장소(1)
- 우분투는 패키지와 패키지에 대한 정보를 저장하고 있는 서버인
패키지 저장소
를 이용 - 패키지 저장소에서는 패키지의 기능 추가나 보안 패치 등 지속적인 업그레이드를 집중적으로 관리
- **사용자는 패키지 저장소에 접속하여 최신 패키지를 내려 받아 설치 가능
우분투 S/W 패키지 저장소(2)
- 패키지 저장소에 대한 정보는
/etc/apt/sources.list
파일에 저장패키지 유형
: deb는 바이너리 패키지 저장소를,deb-src
는 패키지의 소스 저장소를 의미(deb
)패키지 저장소 주소
: URL 주소 사용 (http://kr.archive.ubuntu.com/ubuntu/)우분투 버전 정보
: 저장소에서 관리하는 패키지에 해당하는 우분투의 버전 표시, 버전은 번호가 아니라 버전의 코드명 사용 (focal fossa -> 20.04 LTS)카테고리
: 저장소가 가지고 있는 소프트웨어 카테고리 표시 (main restricted
)
2. 우분투 패키지 설치
APT(Advanced Package Tool) 명령으로 패키지 관리하기
(1) apt-cache 명령: APT 캐시(패키지 목록)에서 정보 검색하여 출력
apt-cache |
|
---|---|
기능 | APT 캐시에 질의하여 여러가지 정보를 검색한다 |
형식 | apt-cache [옵션] 서브 명령 |
옵션 | -f : 검색 결과로 패키지에 대한 전체 기록을 출력한다, -h : 간단한 도움말 출력 |
서브 명령 | stats : 캐시에 대한 통계 정보를 출력한다 , dump : 현재 설치되어 있는 패키지를 업그레이드 한다, serch 키워드 : 캐시에서 키워드를 검색한다, showpkg 패키지명 : 패키지에 대한 의존성 정보와 역의존성 정보를 검색하여 출력한다, show 패키지명 : 패키지에 대한 간단한 정보를 출력한다, pkgnames : 사용 가능한 모든 패키지의 이름을 출력한다 |
(1) apt-cache
명령 사용법
stats
-APT 캐시(패키지 데이터베이스)의 통계정보 보기
$ apt-cache stats
- 전체 패키지 이름 : 패키지 이름의 전체 개수
- 일반 패키지 : 일반적으로 사용하는 패키지의 개수
- 개별 버전 전체(total distinct version) : 캐시에 있는 패키지 버전의 개수를 의미
pkgnames
-사용 가능한 전체 패키지 이름 보기
$ apt-cache pkgnames
search
-패키지 설치 전에 패키지 이름 검색하기(이름과 간단한 설명 출력)
$ apt-cache search vsftpd
(vsftpd 패키지에 대한 검색)
show
-특정 패키지의 버전, 크기, 카테고리 등의 자세한 정보 출력하기
$ apt-cache show vsftpd
(vsftpd 패키지 정보 확인)`
showpkg
-패키지 의존성 검색하기
$ apt-cache showpkg vsftpd
(vsftpd 패키지에 대한 의존 패키지 정보 확인)
(2) apt-get
명령: 패키지 갱신 관리 및 설치 (root 권한으로 수행)
apt-get |
|
---|---|
기능 | 패키지를 관리한다 |
형식 | apt-get [옵션] 서브 명령 |
옵션 | -d : 패키지를 내려받기, -f : 의존성이 깨진 패키지를 수정하려고 시도, -h : 간단한 도움말 출력 |
서브 명령 | update : 패키지 저장소에서 새로운 패키지 정보를 가져온다, upgrade : 현재 설치되어 있는 패키지를 업그레이드한다, install 패키지명 : 패키지를 설치한다, remove 패키지명 : 패키지를 삭제한다, download 패키지명 : 패키지를 현재 디렉터리로 내려받는다, autoclean : 불완전하게 내려받았거나 오래된 패키지를 삭제한다, clean : /var/cache/apt/archives에 캐시되어 있는 모든 패키지를 삭제하여 디스크 공간을 확보한다, check : 의존성이 깨진 패키지를 확인한다 |
사용 예 | apt-get upgrade , apt-get install vsftpd , apt-get clean |
(2) apt-get
명령 사용법
update
-패키지 저장소에서 패키지 정보를 읽어 자신의 APT 캐시의(패키지 목록)를 update
$ sudo apt-get update
upgrade
-현재 설치되어 있는 모든 패키지 중에서 새로운 버전이 있는 패키지를 모두 업그레이드(시간이 매우 많이 걸림)
$ sudo apt-get upgrade
install
-특정 패키지 설치 또는 업그레이드 하기
$ sudo apt-get install netcat
(netcat 패키지 설치)
$ sudo apt-get install netcat goaccess
(netcat, goaccess의 2개 패지키 설치)
(2) apt-get
명령 사용법
remove
-패키지 삭제하기
$ sudo apt-get remove netcat
autoremove
-자동으로 설치되었으나 필요 없는 패키지 정리하기
$ sudo apt-get autoremove
download
-패키지를 설치하지 않고 내려 받기만 하기
$ sudo apt-get download netcat
(netcat 패키지 다운로드)
ex) $ sudo apt-get install -f [절대경로]
, $ sudo dpkg -i [절대경로]
기존 명령 | 줄임 명령(apt) | 설명 |
---|---|---|
apt-cache search |
apt search |
APT 캐시에서 패키지 검색 |
apt-cache show |
apt show |
특정 패키지에 대한 자세한 정보 출력 |
apt-cache install |
apt install |
특정 패키지 설치 |
apt-cache remove |
apt remove |
특정 패키지 삭제 |
apt-cache update |
apt update |
APT 캐시의 패키지 목록 갱신 |
apt-cache upgrade |
apt upgrade |
설치된 패키지들의 업그레이드 |
apt-cache autoremove |
apt autoremove |
불필요한 패키지 삭제 |
실습
APT 캐시에 gnome-chess 패키지가 있는지 검색
$ apt-cache search gnome-chess
gnome-chess 패키지의 자세한 정보 출력
$ apt-cache show gnome-chess
gnome-chess 패키지 설치
$ sudo apt-get install gnome-chess
gnome-chess 실행하기
$ gnome-chess &
우분투 소프트웨어 센터에서 원하는 프로그램 선택하여 설치 가능
3. 파일 아카이브와 압축
파일 아카이브(tar
명령)를 풀고 컴파일을 하여 소프트웨어 설치
- 여러 파일이나 디렉터리를 묶어서 하나의 파일을 만들어서 관리
- 다른 시스템과 파일을 주고받거나 백업을 하기 위해 여러 파일이나 디렉터리를 하나의 아카이브 파일로 생성
tar |
|
---|---|
기능 | 파일과 디렉터리를 묶어 하나의 아카이브 파일을 생성한다 |
형식 | tar 기능[옵션] [아카이브 파일] 파일명 |
기능 | c : 새로운 tar 파일을 생성한다, t : tar 파일의 내용을 출력한다, x : tar 파일에서 원본 파일을 추출한다, r : 새로운 파일을 추가한다, u : 수정된 파일을 업데이트한다 |
옵션 | f : 아카이브 파일이나 테이브 장치를 지정한다. 파일명을 ‘-‘로 지정하면 tar 파일 대신 표준 입력에서 읽어들인다 , v : 처리하고 있는 파일의 정보를 출력한다, h : 심벌릭 링크의 원본 파일을 포함한다, p : 파일 복구 시 원래의 접근 권한을 유지한다, j : bzip2로 압축하거나 해제한다, z : gzip으로 압축하거나 해제한다 |
사용 예 | tar cvf unix.tar Unix , tar xvf unix.tar |
tar
명령어 사용법
tar cvf 아카이브파일 디렉터리
-파일을 묶어서 아카이브 파일 생성하기
$ tar cvf ch2.tar ch2
tar tvf 아카이브파일
-아카이브 파일 내용 확인하기
$ tar tvf ch2.tar
tar xvf 아카이브파일
-아카이브 파일 풀기, ch9 디렉터리 생성하여 풀기
$ mkdir ch9
$ mv ch2.atr ch9
$ cd ch9
$ tar xvf ch2.tar
tar rvf 아카이브파일 추가파일
-아카이브에 파일 추가하기
$ cp /etc/hosts .
# tar rvf ch2.tar hosts
(1) tar
명령어 사용법
tar uvf 아카이브파일 디렉터리
-아카이브 파일 업데이트, data 파일수정
$ vi ch2/data # 편집 후, 수정
$ tar uvf ch2.tar ch2
$ tar tvf ch2.tar ch2
u
기능은 지정한 파일이 아카이브에 없는 파일이거나, 아카이브에 있는 파일이지만 수정된 파일일 경우 아카이브의 마지막에 추가함
tar cvzf 아카이브파일 디렉터리
-아카이브 생성과 동시에 gzip
으로 압축
$ tar cvzf ch2.tar.gz ch2
- 아카이브와 압축해제는 동일하게
tar xvf
로 수행함
tar cvjf 아카이브파일 디렉터리
-아카이브 생성과 동시에 bzip2
로 압축
$ tar cvjf ch2.tar.bz2 ch2
- 아카이브와 압축해제는 동일하게
tar xvf
로 수행함
(2) gzip, gunzip, zcat, bzip2, bunzip2, bzcat
명령어
gzip, bzip2 파일
-gzip
또는 bzip2
형식으로 파일 압축하기
# .gz 파일 생성
$ gzip ch2.tar
# .bz2 파일 생성
$ bzip2 ch2.tar
# 설치 필요: sudo apt-get install bzip2
zcat, bzcat 파일
-gzip
또는 bzip2
형식으로 압축된 파일의 내용 보기
$ zcat ch2.tar.gz
$ bzcat ch2.tar.bz2
gunzip, bunzip2 압축파일
-gzip
또는 bzip2
형식으로 파일 압축풀기
$ gunzip ch2.tar.gz
$ bunzip2 ch2.tar.bz2
4. 소프트웨어 컴파일
직접 소스를 컴파일하여 소프트웨어를 설치해야 하는 경우가 있음
컴파일러 설치하기
- C 언어로 작성한 프로그램을 컴파일하기 위해서는 C 컴파일러가 필요
- 리눅스에서는 gcc(GNU C) 컴파일러를 주로 이용
- gcc 설치 필요 (컴파일러 설치)
$ sudo apt-get install gcc
간단한 C 프로그램 작성, 컴파일 및 실행하기
$ vi hello.c
(프로그램 작성)
#include <stdio.h>
int main() {
printf("Hello, World.\n");
}
$ gcc hello.c
(컴파일) 또는$ gcc -o hello hello.c
(-o 옵션: 실행파일명 변경)$ ./a.out
(실행) 또는$ ./hello
(실행)
make
명령 사용하기
make
명령은makefile
에 설정된 정보를 읽어서 여러 소스 파일을 컴파일하고 링크하여 최종 실행 파일을 생성할 수 있음$ vi one.c
(첫 번째 프로그램 작성)
#include <stdio.h>
extern int two();
int main() {
printf("Go to module Two.\n");
two();
printf("End of moudle One.\n");
}
$ gcc one.c
(에러 발생)
$ vi two.c
(두 번째 프로그램 작성)
#include <stdio.h>
int two();
printf("Module Two.\n");
printf("End of Moudle Two.\n");
}
(참고, makefile 없이 두 개 프로그램 연결하여 실행파일 만들기)
$ gcc -c one.c
# one.o object 파일 생성
$ gcc -c two.c
# two.o object 파일 생성
$ gcc -o run one.o two.o
makefile
작성하기
$ vi makefile
run : one.o two.o
gcc -o run one.o two.o
one.o : one.c
gcc -c one.c
two.o : two.c
gcc -c two.c
# make 설치
$ sudo apt-get install make
# makefile 실행
$ make
# 프로그램 실행
./run
매크로를 사용해서 makefile
작성하기
$ vi makefile
TARGET=run
OBJECTS=one.o two.o
${TARGET} : ${OBJECTS}
gcc -o ${TARGET} %{OBJECTS}
one.o : one.c
gcc -c one.c
two.o : two.c
gcc -c two.c
# makefile 실행
$ make
# 프로그램 실행
$ ./run
요약
- 우분투 SW 패키지 개요 (
deb 패키지
) - 우분투 패키지 관리 및 설치 (
apt-cache, apt-get
) - 파일 아카이브와 압축 (
tar, gzip, gunzip, zcat, bzip2, bunzip2, bzcat
) - 소프트웨어 컴파일 (
gcc, make
)
댓글남기기