패키지

소프트웨어 관리

우분투에서의 패키지

  • 리눅스에서 소프트웨어는 소스 코드 형식 및 바로 설치가 가능한 패키지 또는 압축된 형태로 배포
  • 소스 코드는 직접 컴파일을 해서 사용
  • 패키지는 자동 설치
  • 압축된 형태는 압축을 풀어서 사용
  • 패키지 형태로 배포가 될 때 압축을 해서 배포를 하는데 리눅스에서 주로 사용하는건 RPM과 deb 두가지 형식, 우분투가 deb 사용, redhat 계열이 RPM 사용
  • 이 부분에서 CentOS(Rocky)와 Ubuntu가 명령어가 달라지게 됨
  • 우분투에서는 snap이라는 형식이 추가
    • deb와 호환
    • 의존성 문제를 해결

특징

  • 파이너리 파일로 구성되서 컴파일을 할 필요 없음
  • 패키지 파일이 관련 디렉터리에 자동으로 설치
  • 패키지를 삭제하면 관련된 파일을 일괄적으로 삭제
  • 기존 패키지를 삭제하지 않고 업그레이드 가능
  • 패키지 설치 상태 검증
  • 의존성 관련 패키지를 자동으로 설치: 의존성을 알 필요가 없음

패키지의 카테고리

  • main: 우분투에서 공식적으로 지원되는 버전으로 자유롭게 배포 가능
  • restricted: 우분투에서 지원은 하지만 완전한 자유 라이선스 소프트웨어는 아님
  • universe: 일반적으로 사용하는 것인데 자유 라이선스 여부를 알 수 없음, 기술 지원 여부도 보장하지 않음
  • multiverse: 자유 라이선스 소프트웨어 이 외의 것을 포함

패키지 이름

  • 패키지이름_버전_데비안리비전우분투리비전넘버_아키텍쳐.deb

패키지 저장소

  • 패키지와 패키지에 대한 정보를 저장하고 있는 서버
  • 페키지 저장소에는 패키지의 기능 추가나 보안 패치 등 지속적인 업그레이드를 수행하고 사용자는 이 저장소에 접속해서 최신 버전을 다운로드 받아서 사용
  • 패키지 저장소에 대한 정보는 /etc/apt/sources.list 에 작성되있음
  • 이 파일 수정하면 저장소를 추가하거나 삭제 가능
  • 특별한 경우에는 이 파일에 private 저장소를 추가해서 사용하기도 함

패키지 관련 명령

APT 명령

  • apt-cache 명령
    • APT 캐시(데이터베이스)에서 정보를 검색해서 출력
    • apt-cache [옵션] 서브명령
    • 옵션은 f(검색 결과로 패키지에 대한 전체 기록을 출력)와 h(간단한 도움말 출력)
서브명령
stats: 캐시에 대한 통계정보
dump: 현재 설치된 패키지를 업데이트
search 검색어: 검색어를 검색
showpkg 패키지명: 패키지에 대한 의존성과 역의존성을 출력
show 패키지이름: 패키지에 대한 정보를 출력
pkgnames: 사용가능한 모든 패키지를 출력
  • apt-get 명령
    • 패키지 저장소를 업데이트하고 패키지를 설치하거나 제거
    • 형식
    • apt-get [옵션] 서브명령 [패키지이름]
옵션
d: 패키지를 다운로드 받음
i: 의존성이 깨진 패키지를 수정하려고 시도
h: 도움말

서브명령
update: 패키지 저장소에서 새로운 패키지 정보를 가져옴
upgrade: 현재 설치된 패키지를 업그레이드
install: 패키지를 설치
remove: 패키지삭제
download: 패키지를 현재 디렉터리에 다운로드
autoclean: 불안전하게 받은 패키지나 오래된 패키지를 삭제
clean: 캐시되어 있는 모든 패키지 삭제해 디스크 공간 확보
check: 의존성이 깨진 패키지 확인
  • apt-get update 명령은 처음 리눅스를 설치했을 때 그리고 새로운 버전의 패키지를 설치하고자 할 때 수행
  • apt-get upgrade 명령은 현재 컴퓨터에 설치된 패키지를 업그레이드. 리눅스를 오래전 설치해서 사용하면 새로운 버전의 패키지 배포된 경우 업그레이드할 때 사용
  • apt-get install 명령은 다운로드 받아서 설치까지 진행하는 명령
    • 설치를 할 때 설치 여부를 묻는 대화상자가 나오게 됨
    • y 옵션 추가하면 설치 여부 묻는 대화상자 나오지 않음
    • 여러개의 패키지 한꺼번에 설치하는 것이 가능 sudo apt-get install -y a b c d
    • 설치만 하고 업그레이드를 하지 않고자 할 때는 맨 뒤에 –no-upgrade 추가
    • 새로 설치는 하지 않고 업그레이드만 하고자 할 때는 –only-upgrade
  • apt-get remove 명령은 패키지 제거
    • 패키지 삭제는 하지만 설정 파일은 남겨둠
    • 설정파일까지 지울 때는 –purge 옵션을 이용
  • apt-get autoremove 명령은 불필요한 패키지를 정리
    • 시스템이 설치될 때 자동으로 설치했으나 불필요한 패키지들이 있을 수 있음
  • apt-get clean 명령은 검색했거나 내려받은 패키지 파일을 삭제
  • apt-get download 패키지이름 : 패키지 다운로드만 받는 것도 가능
  • apt-get source 패키지이름 : 소스코드를 다운로드

dpkg 명령

  • Fedora(CentOS, Rockey) 버전에는 yum이나 dnf, rpm(rpm->yum->dnf)이라는 명령어로 패키지 관리
  • apt-get명령은 yum, dnf에 해당하는 패키지 관리 명령어
  • dpkg는 rpm에 해당하는 명령
  • 설치만 하는 경우 apt-get명령으로 충분한데 시스템의 특정 파일이 어느 패키지에 속했는지를 확인하는 것처럼 세부적인 기능을 사용하고자 할 때 활용
  • 형식: dpkg [옵션] 패키지이름 또는 파일이름
    옵션
    l: 설치된 패키지 목록 출력
    l 패키지이름: 패키지의 설치 상태
    s 패키지이름: 패키지의 상세 정보 출력
    S 경로명: 경로명이 포함된 패키지를 조회
    L 패키지명: 패키지가 설치한 파일 목록 출력
    c deb파일: deb 파일의 내용을 출력
    i deb파일: 설치
    r 패키지이름: 삭제
    P 패키지이름: 해당 패키지와 설정 정보를 같이 삭제
    X deb파일 디렉터리: 디렉터리에 압축 해제

aptitude 명령

  • apt-get 과 유사한 명령어로 패키지를 관리해주는 명령어

스냅 패키지

  • 우분투가 새로 도입한 패키지 형식
  • 샌드박스 형태의 패키지
  • 패키지를 만들 때 프로그램이 사용하는 모든 라이브러리를 패키지 안에 포함시키는 방식
  • 스마트폰 애플리케이션이 이 방식 이용
  • 장점: 개발자가 다른 패키지나 라이브러리 외의 의존성 신경 안써도됨, 기존 시스템과 완전히 격리되 보안 강화
  • 단점: 패키지 용량이 커짐
  • 명령: snap [옵션] 명령 [패키지이름]
  • 옵션은 h로 도움말 출력
명령
 disable
 download
 enable
 find
 info
 install
 list
 remove

wget 명령

  • 리눅스에서 패키지 형태가 아닌 압축 파일 형태로 제공되는 애플리케이션도 존재
  • 이런 경우 wget 명령으로 다운로드 받아서 사용
    wget 다운로드경로
    wget https://www.ebi.ac.jk/~zerbino/velvet_1.2.10.tgz

파일 압축 및 해제

  • 아카이브는 파일을 묶어서 하나로 만드는 작업

파일 아카이브

  • tar(tape archive): 여러 파일이나 디렉터리를 묶어서 하나로 만드는 명령 또는 작업
  • 명령 형식 tar 기능 [옵션] [아카이브파일] [파일명]
  • 기능: 옵션과 사용 방법은 동일하나 -를 붙이지 않음
    c: 새로 생성
    t: 내용 출력
    x: 원본 파일을 추출
    r: 새로운 파일을 추가
    u: 수정된 파일을 업데이트
  • 옵션
    f: 아카이브파일이나 장치를 지정
    v: 처리하고 있는 파일의 정보를 출력
    h: 심볼릭 링크의 경우 원본 파일을 포함
    p: 파일을 복원할 때 원래의 접근 권한을 유지
    j: bzip2로 압축하거나 해제
    z: gzip으로 압축하거나 해제
  • 압축을 할 때 cvf를 이용하고 압축 해제를 할 때는 xvf를 주로 이용
tar cvf file.tar file1 file2 # 압축
tar xvf file.tar # 압축해제

tar rvf file.tar file3 # file.tar에 file3추가