Gom3rye

리눅스를 활용한 시스템 관리 본문

현대 오토에버 클라우드 스쿨

리눅스를 활용한 시스템 관리

Gom3rye 2025. 5. 21. 17:55

소프트웨어 관리

우분투 패키지

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

특징

  • 바이너리 파일로 되어 있어서 컴파일할 필요가 없다.
  • 패키지의 파일이 관련 디렉토리에 바로 설치된다.
  • 패키지를 삭제할 때 관련된 파일을 일괄적으로 삭제할 수 있다.
    • DDL (Dynamic Linking Library) - 공유의 개념을 사용하는 것
    → 윈도우에서는 DDL 사용했었고 맥은 사용(심볼릭 링크의 원본은 1개, 나머지는 다 링크로 연결되어 있는 것)
    → 다 연결되었기 때문에 공통된 것은 또 따로 다운받지 않아도 됐지만 삭제할 때 의존성 문제로 문제가 되었다.
  • 기존에 설치한 패키지를 삭제하지 않고 바로 업그레이드 할 수 있다. (위와 같은 이유)
  • 패키지의 설치 상태를 검증할 수 있다.
  • 패키지에 대한 정보를 제공한다.
    • Open Source → 중앙 저장소 CLAN이 document를 읽어보고 괜찮으면 중앙 저장소에 업로드를 시켜주는 것
                            → 사설 저장소
  • 의존하는 패키지가 무엇인지 정보를 제공

우분투 패키지의 카테고리

- main: 우분투에 의해 공식적으로 지원되면 자유롭게 배포 가능

- restricted: 우분투에 의해 지원되나 완전한 자유 라이선스 소프트웨어는 아님

- universe: 리눅스에서 사용할 수 있는 대부분의 소프트웨어로 자유 소프트웨어일 수도 있고 아닐 수도 있으며 기술적 지원을 보장하지 않는다.

- multiverse: 자유 소프트웨어가 아닌 소프트웨어가 포함되어 있으면 개인이 직접 라이선스를 확인해야 한다.

 

우분투 패키지의 이름 구성

패키지명_버전_데비안리비전ubuntu리비전_아키텍쳐.deb

 

우분투 패키지 저장소 정보

다른 저장소를 사용하고자 하면 /etc/apt/sources.list 파일에 기재를 하면 된다.

apt-cache [옵션] 서브명령

우분투 패키지 설치

  • apt 명령으로 패키지 관리 (advanced package tool의 약자)
  • apt-cache : apt 캐시에 질의해 여러 정보를 검색
  • 옵션
    • f: 검색 결과로 패키지에 대한 전체 기록을 출력
    • h: 간단한 도움말을 출력
  • 서브 명령
    • status: 통계 정보
    • dump: 현재 설치된 패키지를 업데이트
    • search 키워드: 캐시에서 키워드 검색
    • show 패키지명: 패키지에 대한 간단한 정보를 출력
    • showpkg 패키지명: 패키지에 대한 의존성 정보와 역의존성 정보를 출력
    • pkgnames: 사용 가능한 모든 패키지의 이름을 출력

apt-cache stats

APT 캐시 통계 정보 (전체 패키지가 몇 개인지 정보가 쭉 나온다.)

apt-cache pkgnames

사용 가능한 패키지 이름

apt-cache show vsftpd

vsftpd 패키지 정보 확인 (있나 없나 확인할 수 있음)

apt-cache showpkg vsftpd

vsftpd 의존성 확인

apt-get [옵션] [서브명령]

패키지 저장소를 업데이트 하고 패키지를 설치하거나 제거할 수 있다. (get을 생략하고 사용 가능)

  • 옵션
    • d: 패키지를 내려받기만 한다.
    • f: 의존성이 깨진 패키지를 수정하려고 시도
    • h: 도움말
  • 서브명령
    • update: 패키지 저장소에서 새로운 패키지 정보를 가져온다.
    • upgrade: 현재 설치된 패키지는 업그레이드
    • install 패키지명: 설치
    • remove 패키지명: 삭제
    • download 패키지명: 현재 디렉토리로 내려받는다.
    • autoclean: 불완전하게 내려받았거나 오래된 패키지를 삭제
    • clean: /var/cache/apt/archives 에 캐시되어 있는 모든 패키지를 삭제해 디스크 공간을 확보
    • check: 의존성이 깨진 패키지를 확인

sudo apt-get update

패키지 정보 업데이트

sudo apt-get upgrade

패키지 업그레이드

sudo apt-get install xterm

xterm 패키지 설치

sudo apt xterm goaccess

xterm과 goaccess 패키지를 설치

sudo apt install xterm --no-upgrade

업그레이드를 하지 않고자 하는 경우

sudo apt install netcat --only-upgrade

업그레이드를 하고자 하는 경우


sudo apt remove xterm

xterm 패키지 삭제

sudo apt purge xterm

패키지를 삭제할 때 설정 파일까지 삭제

sudo apt autoremove

불필요한 패키지 자동 정리


sudo apt clean

내려받은 패키지를 삭제하고 정리 (자주 사용하면 한 번씩 쓰게 된다.)


sudo apt download xterm

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 [옵션] 파일명 또는 패키지이름

dpkg 명령 활용

  • yum이나 dnf 명령과 비슷하게 인터넷이 연결된 환경에서 패키지를 자동으로 설치하는 명령
  • Fedora의 rpm 같은 명령
  • apt 명령도 내부적으로는 dpkg 명령을 이용
  • 일반적인 경우는 apt 명령으로 패키지를 설치하는데 시스템의 특정 파일이 어느 패키징 ㅔ속했는지를 확인하는 등 세부적인 기능을 사용할 때 dpkg 명령을 사용
  • 옵션
    • l: 설치된 패키지 목록 출력
    • l 패키지명: 패키지 설치 상태 출력
    • s 패키지명: 패키지 상세 정보 출력
    • S 패키지명: 경로 이름이 포함된 패키지를 검색
    • L 패키지명: 패키지에서 설치된 파일의 목록을 출력
    • c deb이름: 지정한 deb 파일을 출력
    • i deb이름: 지정한 deb 파일을 설치
    • r 패키지명: 패키지 삭제
    • P 패키지명: 패키지와 설정 파일 모두 삭제
    • x deb이름 디렉토리: 해당 파일을 지정한 디렉토리에 압축 해제

dpkg -c 로 deb 파일 안의 내용을 볼 수 있다.

deb 파일-> sudo dpkg -i 로 설치

dpkg -x : xterm 디렉토리를 만들어서 그 안에 deb 파일 압축 풀기

파일을 가지고 조작하는 것은 dpkg가 좋다.

aptitude [서브명령]

apt 명령처럼 패키지 관리를 자동화해 쉽게 작업할 수 있도록 도와준다.

  • apt-get과 거의 유사
  • 옵션 없이 사용하면 curses를 이용한 비주얼 모드로 동작하고 메뉴를 선택해서 작업을 이어간다.

서브 명령

  • 단독 실행: curses 프로그램이 나타남
  • search 키워드: 키워드를 검색하여 일치하는 패키지 목록을 출력
  • update: 패키지 저장소를 업데이트
  • upgrade: 모든 패키지를 최신 버전으로 업그레이드
  • show 패키지명: 패키지에 대한 자세한 정보를 출력
  • download 패키지명: 패키지를 내려받기
  • clean: 패키지 캐시 디렉토리에서 모든 패키지 파일을 삭제
  • install: 패키지를 설치
  • remove: 패키지를 삭제
  • purge: 패키지와 설정 파일을 모두 삭제
sudo apt install aptitude
aptitude

우분투가 만든 새 패키지

snap

  • 우분투 16.04 버전에서 등장한 새로운 패키지 형식으로 샌드박스(패키지를 만들 때 사용한 모든 라이브러리를 패키지 안에 포함시키는 것) 형식이다.
    • 예전에 공유해서 쓰고 원본 패키지가 지워지면 문제가 생겨서 샌드박스 형식 사용
  • 공유 파일을 사용하지 않기 때문에 독립적으로 사용이 가능하고 보호된 영역에서 실행되므로 외부 파일이 내부 시스템에 악영향을 주는 것을 방지하는 보안 기술이기도 하다.
  • 장점
    • 다른 패키지나 라이브러리의 의존성을 신경쓰지 않아도 된다.
    • 보안이 강화 되었다.
  • 단점
    • 패키지의 용량이 커진다. (다 포함시키니까)
  • 옵션
    • h
  • 명령
    • disable: 스냅 서비스 중지
    • download 스냅이름: 다운로드
    • enable: 스냅 서비스와 실행 파일의 사용을 시작
    • find 스냅이름: 스냅을 검색
    • info 스냅이름: 스냅 상세 정보를 출력
    • install 스냅이름: 스냅 설치
    • list: 스냅 목록 보기
    • remove 스냅이름: 삭제
  • 설치된 스냅의 목록 확인
snap list
  • 없으면 snap 설치
sudo snap install hello-world

publisher 에서 canonical 로 써져 있으면 우분투에서 만든 것

  • hello world를 검사
snap find hello-world
  • hello world 설치했으니 실행시켜보기
hello-world

 

snap으로 설치한 파일은 /snap 디렉토리 아래 설치된다.

  • hello-world 있나 확인해보기
ls /snap

  • 상세 정보 확인
snap info hello-world
  • 스냅 삭제
sudo snap remove hello-world

 

연습 문제:

  1. game이라는 snap 조회
  2. 검색된 snap 중 하나를 설치
  3. 설치한 snap을 확인
  4. 설치한 snap의 상세 정보를 출력
  5. 설치한 snap 삭제

답:

snap find game
sudo snap install game-2048 # 설치할 때는 쓰는 거니까 관리자 명령어로 들어가기
ls /snap
snap info game-2048
sudo snap remove game-2048 # 쓰고 지우는 건 관리자만 할 수 있다. -> sudo 사용

파일 아카이브와 압축

tar 기능[옵션] [아카이브파일] [파일명]

archive : 여러 개의 파일을 묶어서 하나로 만드는 것, tar : tape archive의 준말

  • 여러 파일이나 디렉토리를 묶어서 저장 장치에 저장하기 위한 명령이었지만 지금은 파일을 아카이브하기 위한 명령어
  • 기능
    • c: 생성
    • t: 파일의 내용 출력
    • x: 원본 파일 추출(압축 해제)
    • r: 새로운 파일 추가
    • u: 수정된 파일을 업데이트 (이미 압축이 되어 있는 상태에서 추가하거나 바꾸는게 가능하다.)
  • 옵션
    • f: 파일 이름이나 장치 지정
    • v: 파일의 정보를 출력
    • h: 심볼릭 링크의 원본 파일을 포함
    • p: 파일 복구 시 원래의 파일 접근 권한을 유지
    • j: bzip2 로 압축하거나 해제
    • z: gzip으로 압축하거나 해제
  • 자주 사용하는 옵션
    • cvf : 아카이브 생성 (c는 생성하는 것이고 v는 처리 중인 파일을 출력해주는 것이고 f는 아카이브의 이름을 지정할 때 사용)
    • tvf : 아카이브의 내용 확인
    • xvf : 아카이브 풀기
    • uvf : 아카이브 업데이트
    • rvf : 아카이브에 파일 추가
    • czvf : 아카이브 생성 시 gzip 압축하기
      • 압축할 때 확장자는 압축되었다는 것을 알려주기 위해서 gz를 추가하는 경우가 많다.
    • cvjf : 아카이브 생성시 bzip2로 압축하기

ex. two 라는 디렉토리를 two.tar로 아카이브

tar cvf two.tar two

ex. two.tar 내용 확인

tar tvf two.tar

ex. two.tar 아카이브 풀기

tar xvf two.tar

ex. two라는 디렉토리에 data라는 빈 파일을 생성하고 two.tar를 업데이트하고 내용 확인

touch two/data
tar uvf two.tar two
tar tvf two.tar two

ex. /etc/services 파일을 현재 디렉토리로 복사하고 그걸 two.tar 아카이브에 추가하고 아카이브 내용 확인

cp /etc/services . # services 파일이 생겼을 것
tar rvf two.tar services
tar tvf two.tar

ex. two 라는 디렉토리를 two.tar.gz 파일로 아카이브 한 후 압축

tar czvf two.tar.gz two

size 변화 보면 왜 압축을 하는지 알 수 있다.

ex. two 라는 디렉토리를 two.tar.bz2 파일로 아카이브 한 후 압축

tar cjvf two.tar.bz2 two

→ 이게 더 사이즈가 작게 압축된다. ⇒ 압축 풀 때 더 시간 걸린다.

  • database → text (csv) → .zip s3 글래시어 // 아마존은 자동으로 자주 쓰는 파일과 아닌 파일을 분류해 따로 저장한다. (자주 사용하지 않는 데이터는 압축해서 저장)

파일 압축

gzip [옵션] [파일 경로]

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

  • gzip/gunzip : 압축 하고/풀기
  • 옵션
    • d: 파일 압축 해제
    • I: 압축된 파일의 정보 확인
    • r: 하위 디렉토리를 탐색해서 압축
    • t: 압축 파일 조회
    • v: 압축 정보를 화면에 출력
    • 9: 최대한 압축

실습

  • test.tar 파일 압축하기

사이즈가 많이 준 것을 볼 수 있다.

zcat

압축된 파일의 내용 보기

zcat test.tar.gz

gunzip

압축 풀기 (= gzip -d)

gunzip test.tar.gz

bzip2 [옵션] [파일명]

bunzip2

  • gzip에 비해 압축률이 좋지만 속도가 느림
  • 옵션
    • d: 압축 해제
    • I: 압축된 파일의 정보
    • t: 압축 파일 검사
    • v: 압축 정보 출력
    • best: 최대한 압축

ex. test.tar 파일을 bzip2로 압축

bzip2 test.tar

압축 해제

bunzip2 test.tar.bz2

C언어 컴파일

먼저 c 컴파일러인 gcc가 있는지 확인해보자.

없으니 gcc 설치

sudo apt install gcc

소스 코드 작성해보기 → vi hello.c

#include <stdio>
int main(){
    print("Hello World\\n");
    return 0;
}

gcc hello.c 로 컴파일 성공하면 a.out 이라는 실행 파일이 생성된다.

a.out 파일 실행 -> a.out : command not found 뜬다.

이유 ⇒ 리눅스는 실행 명령을 주게 되면 path에서만 찾기 때문에.

        --> path 이외의 곳에 있는 파일을 실행할 때는 절대경로로 입력하던가 상대경로를 가지고 입력해야 한다.

실행 파일명 변경하기

gcc -o hello hello.c

hello 라는 이름으로 실행 파일명이 하나 더 생긴 걸 볼 수 있다.

make 명령

많은 파일로 구성된 프로그램은 gcc로 일일이 컴파일해서 실행 파일로 만드는 것이 번거롭다.

  • makefile 이라는 설정 파일을 이용해서 여러 소스 파일을 한꺼번에 컴파일하고 링크를 해서 실행 파일을 생성해주는 명령

설치

sudo apt install make

첫 번째 소스 파일 작성 : one.c

#include <stdio.h>
extern int two();                                                                                          int main(){
int main(){
		printf("Go to Module Two\\n");
		two();
		printf("End of Module One\\n");
		return 0;
}

두 번째 소스 파일 작성: two.c

#include <stdio.h>
int two(){
        printf("In Module Two\\n");
        printf("This is a Module Two\\n");
        printf("Emd of Module Two\\n");
        return 0;
 

makefile 작성 : vi makefile

TARGET: 만들 실행 파일 이름 → one

OBJECTS: 만들 실행 파일에 필요한 오브젝트 파일들 → one.o와 two.o

링킹 단계 : 오브젝트 파일들을 링킹해서 실행 파일을 생성하는 단계

TARGET=one
OBJECTS=one.o two.o                                                                                                                                                                                                   ${TARGET} : ${OBJECTS}
        gcc -o ${TARGET} ${OBJECTS}  # 링킹 단계
one.o : one.c                        # 컴파일 단계 (-c는 컴파일만 하고 링크는 하지 말라는 의미)
        gcc -c one.c
two.o : two.c
        gcc -c two.c 

🔁 전체 흐름 요약

  1. make를 실행하면 먼저 TARGET을 만들려고 해요.
  2. TARGET을 만들기 위해 OBJECTS가 필요한데, 이 파일들이 없으면
  3. 각각의 .o를 만들기 위해 .c 파일들을 컴파일합니다.
  4. .o 파일들이 준비되면 gcc -o one one.o two.o를 실행해서 최종 실행 파일 one을 만듭니다.

728x90
반응형

'현대 오토에버 클라우드 스쿨' 카테고리의 다른 글

(중요!) 리눅스를 활용한 패키지 관리  (0) 2025.05.23
리눅스를 활용한 패키지 관리  (2) 2025.05.22
Linux  (0) 2025.05.20
Linux  (0) 2025.05.20
Linux  (0) 2025.05.20