[Linux] 소프트웨어 관리

JIWON·2025년 5월 21일

Linux

목록 보기
9/20
post-thumbnail

🧑‍💻 소프트웨어 관리

1️⃣ 우분투 패키지

  • 리눅스에서는 소프트웨어는 소스코드 형식 또는 바로 설치하여 사용할 수 있는 패키지 형태로 제공
  • 소스 코드로 배포할 때는 대부분 하나의 아카이브 파일(압축 파일) 로 묶은 후 배포
  • 리눅스에서 사용하는 패키지는 주로 RPMdeb
    • 우분투 - deb
    • 레드햇 계열 - RPM
  • 우분투는 16버전 이후로 snap을 도입
  • 스냅 패키지기존 패키지 형식의 의존성 문제를 해결한 것으로 deb와 호환

💠 우분투 패키지의 특징

  • 바이너리 파일로 되어 있어서 컴파일할 필요가 없음
  • 패키지의 파일이 관련 디렉토리에 바로 설치
  • 패키지를 삭제할 때 관련된 파일을 일괄적으로 삭제할 수 있음 (DLL 사용하지 않음)
  • 기존에 설치한 패키지를 삭제하지 않고 바로 업그레이드 할 수 있음
  • 패키지의 설치 상태를 검증할 수 있음
  • 패키지에 대한 정보를 제공
  • 해당 패키지가 의존하는 패키지가 무엇인지 정보 제공
  • 의존성이 있는 패키지를 미리 설치할 수도 있고, apt-get 명령을 사용하면 의존성이 있는 패키지가 자동으로 설치

💠 우분투 패키지의 카테고리✅

  • main: 우분투에 의해 공식적으로 지원되며 자유롭게 배포할 수 있음
  • restricted: 우분투에 의해 지원되나 완전한 자유 라이선스 소프트웨어는 아님
  • universe: 리눅스에서 사용할 수 있는 대부분의 소프트웨어로 자유 소프트웨어일 수도 있고 아닐 수도 있으며 기술적 지원을 보장하지 않음
  • multiverse: 자유 소프트웨어가 아닌 소프트웨어가 포함되어 있으며 개인이 직접 라이선스를 확인해야 함

💠 우분투 패키지의 이름

① 패키지의 이름
② 오리지널 패키지의 버전
③ 오리지널 패키지 버전을 데비안에 적용한 리버전 번호
④ 오리지널 또는 데비안 패키지를 우분투에 적용한 리비전 번호
⑤ 사용하는 시스템 아키텍처로, all은 시스템의 종류와 상관없이 사용할 수 있는 것, amd64는 64비트 운영체제임을 의미
⑥ 확장자로 .deb를 사용


💠 패키지 저장소 정보

  • 패키지 저장소에 대한 정보는 /etc/apt/sources.list.d/ubuntu.sources 파일에 저장되어 있는데 이 파일을 수정하면 저장소를 추가하거나 삭제할 수 있다

2️⃣ 우분투 패키지 설치

💠 apt 명령으로 패키지 관리

  • aptadvanced package tool 의 약자

🔸 apt-cache

apt 캐시에 질의하여 여러가지 정보를 검색

  • 기본형식 : apt-cache [옵션] 서브명령

  • 옵션

    • -f: 검색 결과로 패키지에 대한 전체 기록을 출력

    • -h: 간단한 도움말을 출력

  • 서브명령

    • stats : 캐시에 대한 통계 정보를 출력

    • dump : 현재 설치된 패키지를 업그레이드

    • search 키워드 : 캐시에서 키워드를 검색

    • showpkg 패키지명 : 패키지에 대한 의존성 정보역의존성 정보를 검색하여 출력

    • show 패키지명 : 패키지에 대한 간단한 정보를 출력

    • pkgnames : 사용 가능한 모든 패키지의 이름을 출력

🔍 apt-cache 예시

apt-cache stats : apt 캐시 통계 정보 확인

apt-cache show vsftpd : vsftpd 패키지 간단한 정보 확인 (패키지가 있는지 확인할 때 사용)

apt-cache pkgnames : 사용가능한 패키지 이름 확인


🔸 apt-get 또는 apt

패키지 저장소를 업데이트하고 패키지를 설치하거나 제거할 수 있음

  • 기본 형식 : apt-get [옵션] 서브명령

  • 옵션 :

    • -d : 패키지 내려받기

    • -f : 의존성이 깨진 패키지를 수정하려고 시도

    • -h : 도움말

  • 서브명령

    • update : 패키지 저장소에서 새로운 패키지 정보를 가져옴

    • upgrade : 현재 설치된 패키지를 업그레이드

    • install 패키지명 : 패키지를 설치

    • remove 패키지명 : 패키지를 삭제

    • purge 패키지명 : 패키지를 삭제(설정파일도 삭제)

    • download 패키지명 : 패키지를 현재 디렉토리로 내려받기

    • autoclean : 불완전하게 내려받았거나 오래된 패키지를 삭제, 불필요한 패키지 자동정리

    • clean : /var/cache/apt/archives에 캐시되어 있는 모든 패키지를 삭제하여 디스크 공간을 확보

    • check : 의존성이 깨진 패키지를 확인

🔍 apt-get 예시

sudo apt install xterm : xterm 패키지 설치

sudo apt install xterm goaccess : 여러개 설치하고 싶을 때 (xterm, goaccess)

sudo apt install xterm --no-upgrade : 업그레이드를 하지 않고자 하는경우

sudo apt install xterm --only-upgrade : 업그레이드를 하고자 하는 경우

sudo apt remove xterm : xterm 패키지 삭제

sudo apt purge xterm : 패키지를 삭제할 때 설정 파일까지 같이 삭제

sudo apt --download-only source 패키지이름 : 소스코드를 다운로드 받기

sudo apt source 패키지이름 : 소스코드를 다운로드 받아서 압축을 푸는 경우

sudo apt --compile source 패키지이름 : 소스코드를 다운로드 받아서 압축을 풀고 컴파일까지 수행


💡 연습문제

python3-uno 패키지 설치

  • sudo apt install python3-uno

설치된 패키지 정보 확인

  • sudo apt-cache show python3-uno

💠 dpkg 명령 활용

  • yum이나 dnf 명령과 비슷하게 인터넷이 연결된 환경에서 패키지를 자동으로 설치하는 명령

  • fedora의 rpm과 같은 명령

  • apt 명령도 내부적으로는 dpkg 명령을 사용

  • 일반적으로 패키지를 설치할 때 APT 명령을 사용하면 되지만 시스템의 특정 파일이 어느 패키지에 속했는 지를 확인하는 등 보다 세부적인 기능을 사용하려면 dpkg 명령이 필요

  • 기본 형식 : dpkg [옵션] 파일명 또는 패키지이름

  • 옵션:

    • -l : 설치된 패키지의 목록을 출력

    • -l 패키지명 : 패키지의 설치 상태를 출력

    • -s 패키지명 : 패키지의 상세 정보를 출력

    • -L 패키지명 : 패키지에서 설치된 파일의 목록을 출력

    • -c .deb 파일 : 지정한 .deb 파일의 내용을 출력

    • -i .deb 파일 : 해당 파일을 설치 (sudo)

    • -r 패키지명 : 해당 패키지를 삭제 (sudo)

    • -P 패키지명 : 해당 패키지와 설정 정보를 모두 삭제(sudo)

    • -x .deb 파일 디렉토리 : 해당 파일을 지정한 디렉토리에 풀어놓기

패키지 다운

sudo apt download libutempter0 : 내려받기

ls

sudo dpkg -i libutempter0_1.2.1-3build1_amd64.deb : deb파일 설치


💠 aptitude 명령

  • apt 명령처럼 패키지 관리를 자동화 하여 쉽게 작업할 수 있도록 도와줌
  • apt-get 명령과 유사
  • aptitude 명령의 또 다른 특징은 옵션이나 서브 명령 없이 실행할 경우 curses를 이용한 비주얼 모드로 동작한다는 것
  • curses는 터미널에서 텍스트 그래픽 기능을 제공하므로 메뉴를 선택하면서 작업할 수 있음

  • 기본형식 : aptitude [서브명령]

  • 서브 명령:

    • 단독 실행: curses 프로그램이 나타남

    • search 키워드 : 키워드를 검색하여 일치하는 패키지 목록을 출력

    • update : 패키지 저장소를 업데이트

    • upgrade : 모든 패키지를 최신 버전으로 업그레이드

    • show 패키지명 : 패키지에 대한 자세한 정보를 출력

    • download 패키지명 : 패키지를 내려받기

    • clean : 패키지 캐시 디렉토리에서 모든 패키지 파일을 삭제

    • install : 패키지를 설치

    • remove : 패키지를 삭제

    • purge : 패키지와 설정 파일을 모두 삭제


3️⃣ snap

  • 우분투 16.04버전에서 등장한 새로운 패키지 형식

  • 샌드박스 형식 으로 만든 패키지 형식

    • 샌드박스 : 패키지를 만들 때 사용한 모든 라이브러리를 패키지 안에 포함
    • 공유해서 쓰면 삭제할 때 원본파일도 지워지는 문제때문에
  • 공유 파일을 사용하지 않기 때문에 독립적으로 사용이 가능하고, 외부에서 받은 파일이 보호된 영역에서 실행되므로 외부 파일이 내부 시스템에 악영향을 주는 것을 방지하는 보안 기술

  • 스마트폰은 전부 샌드박스 형태의 앱이 설치됨

  • 장점

    • 다른 패키지나 라이브러리의 의존성을 신경쓰지 않아도 됨
    • 보안이 강화
  • 단점

    • 패키지의 용량이 커진다는 것인데 이는 프로그램에 필요한 모든 라이브러리를 포함하기 때문

💠 스냅 사용

  • 기본형식 : snap [옵션] 명령

  • 옵션:

    • -h : 도움말을 출력
  • 명령:

    • disable : 스냅 서비스와 실행 파일의 사용을 중지

    • download 스냅명 : 지정한 스냅 패키지 내려받기

    • enable : 스냅 서비스와 실행 파일의 사용을 시작

    • find 스냅명 : 지정한 스냅을 검색

    • info 스냅명 : 지정한 스냅의 상세 정보를 출력

    • install 스냅명 : 지정한 스냅을 설치

    • list : 설치한 스냅의 목록을 출력

    • remove 스냅명 : 지정한 스냅을 삭제

🔍 스냅 실습

  • 설치된 snap의 목록 확인 : snap list
  • 현재는 설치된 snap 목록이 없으므로 하나를 설치한 후 다시 수행
  • 스냅 설치 : sudo snap install hello-world
  • 스냅 설치 후 목록 확인 :
  • 검색 : snap find hello-world
    hello-world 가 포함된 내용들 다 나옴
  • hello-world : Hello World! 출력하는 프로그램
  • snap으로 설치한 파일은 /snap 디렉토리 아래 설치된다
  • 설치된 파일 확인 : ls /snap
  • 상세 정보 확인 : snap info hello-world
  • 스냅 삭제 : sudo snap remove hello-world

💡 연습

  1. game 이라는 snap 조회
    snap find game
  2. 검색된 snap 중 하나를 설치
    gog-galaxy-wine 이라는 게임 설치
  3. 설치 한 snap 확인
    ls /snap
  4. 설치한 snap의 상세정보 출력
    snap info gog-galaxy-wine
  5. 설치한 snap 삭제
    sudo snap remove gog-galaxy-wine

4️⃣ 파일 아카이브

  • 아카이브 : 여러 개의 파일을 묶어서 하나로 만드는 것

💠 파일 아카이브

  • tar(tape archive) 명령은 여러 파일이나 디렉토리를 묶어서 저장 장치에 저장하기 위한 명령이었지만 지금은 파일을 아카이브하기 위한 명령어

🔸 tar

  • 기본 형식 : tar 기능 [옵션] [아카이브파일] [파일명]

  • 기능 :

    • c : 새로운 tar 파일을 생성

    • t : tar 파일의 내용을 출력

    • x : tar 파일에서 원본 파일을 추출

    • r : 새로운 파일을 추가

    • u : 수정된 파일을 업데이트

  • 옵션 :

    • f : 아카이브 파일 이름이나 테이프 장치를 지정하는데, 파일명을 - 으로 지정하면 tar 파일 대신 표준 입력에서 읽어들임

    • v : 처리하고 있는 파일의 정보를 출력

    • h : 심볼릭 링크의 원본 파일을 포함

    • p : 파일 복구 시 원래의 접근 권한을 유지

    • j : bzip2로 압축하거나 해제

    • z : gzip으로 압축하거나 해제

  • 자주 사용하는 옵션 :

    • 아카이브 생성하기: cvf 옵션

    • 아카이브의 압축 해제: xvf 옵션

    • 아카이브의 내용 확인하기: tvf 옵션

    • 아카이브 업데이트하기: uvf 옵션

    • 아카이브에 파일 추가하기: rvf 옵션

🔍 tar 실습

  • linux_ex 폴더 안에 one, two, three, four, five, six 폴더 만들기
    mkdir one two three four five six

🔸 아카이브 생성
one 디렉토리를 sample1.tar로 아카이브
tar cvf sample1.tar one

🔸 아카이브 내용 확인
tar tvf sample1.tar

🔸 아카이브에 압축 풀기
tar xvf sample1.tar

🔸 아카이브 one폴더 업데이트
1. touch one/data : 파일 생성
2. tar uvf sample1.tar one : 기존 파일에 업데이트

🔸아카이브에 two 파일추가
tar rvf sample1.tar two

🔸 아카이브 생성 시 gzip으로 압축하기

  • 압축할 때 확장자는 압축되어있다는 것을 알려주기 위해서 gz를 추가하는 경우가 많음
  • one이라는 디렉토리를 sample1.tar.gz 파일로 아카이브 한 후 압축
    tar czvf sample1.tar.gz one

🔸 아카이브 생성 시 bzip2으로 압축하기
tar cvjf two.tar.bz2 two


5️⃣ 파일 압축

  • 리눅스에서 파일 압축은 gzip과 bzip2를 많이 사용

💠 gzip / gunzip

  • 형식 : gzip [옵션] [파일경로]

  • 옵션 :

    • -d : 파일 압축을 해제

    • -l : 압축된 파일의 정보를 출력

    • -r : 하위 디렉터리를 탐색하여 압축

    • -t : 압축 파일을 검사

    • -v : 압축 정보를 화면에 출력

    • -9 : 최대한 압축

🔍 실습

1. test 폴더에 파일 만들기

cp /etc/services . 
cp /etc/hosts .

2. 아카이브 용량 확인

tar cvf test.tar test
ls -l

services파일과 hosts 파일의 용량을 합친 것 보다 아카이브 용량이 더 크다

3. 아카이브를 gzip 해서 용량 확인

gzip test.tar
ls -l

아카이브일 때 용량 20480, gz용량 5706으로 사이즈가 많이 줄었다

4. 압축된 파일의 내용 보기

zcat test.tar.gz | more

압축된 파일의 내용을 볼 수 있다

5. 압축 풀기

# 1번방법
gzip -d test.tar.gz

# 2번방법
gunzip test.tar.gz


💠 bzip2 / bunzip2

  • gzip에 비해 압축률이 좋지만 속도가 느림

  • 형식 : bzip2 [옵션] [파일경로]

  • 옵션 :

    • -d : 파일 압축을 해제

    • -l : 압축된 파일의 정보를 출력

    • -t : 압축 파일을 검사

    • -v : 압축 정보를 화면에 출력

    • --best : 최대한 압축

🔍 실습

1. 아카이브를 bzip2 해서 용량 확인

bzip2 test.tar
ls -l

사이즈가 작기 때문에 많이는 차이나지 않지만 gzip을 했을 때 용량보다 bzip2를 했을 때 용량이 더 작다

5. 압축 풀기

# 1번방법
bzip2 -d test.tar.bz2

# 2번방법
bunzip2 test.tar.bz2

0개의 댓글