7 분 소요

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)

태그: ,

카테고리:

업데이트:

댓글남기기