1. Windows vs Linux 소프트웨어 설치
• 설치방법: Windows는 exe/msi 실행파일, Linux는 패키지 관리자(APT) 사용
• 의존성 해결: Windows는 설치파일에 포함(용량 큼), Linux는 자동 다운로드(공유)
• 의존성 = 소프트웨어 동작에 필요한 다른 라이브러리/패키지 (예: nginx → libssl, zlib, libpcre)
• Windows 문제점: DLL Hell(버전 충돌), 프로그램마다 라이브러리 중복 포함 → 디스크 낭비
• Linux 해결책: 공유 라이브러리 시스템(/usr/lib), APT가 의존성 자동 계산
• 저장소 장점: 보안검증(GPG서명), 자동 의존성 해결, 통합업데이트, 버전관리, 디스크효율성
2. 우분투 패키지 구조와 저장소
• 패키지 형식: .deb(데비안/우분투, dpkg·apt) / .rpm(레드햇 계열, rpm·yum·dnf)
• .deb 파일명 구조: 패키지명_버전-리비전_아키텍처.deb
예) galculator_2.1.4-1_amd64.deb
→ 리비전: 패키지 개선 번호(보안·의존성·스크립트 변경 시 증가)
→ 아키텍처: amd64(64비트) / i386(32비트) / all(모든CPU)
• 저장소 컴포넌트
main: 완전 오픈소스, Canonical 공식 지원 5년, 예)Vim, Apache
restricted: 독점/제한, Canonical 공식 지원, 예)Nvidia 드라이버
universe: 오픈소스, 커뮤니티 지원 (Debian에서 가져옴)
multiverse: 독점/제한, 커뮤니티, 예)rar
• 도구 비교: dpkg(저수준,수동해결) / apt-get(중수준,스크립트용) / apt-cache(조회전용) / apt(고수준,대화형) / PPA(최신·써드파티)
• 저장소 구조: dists/ = 배포판 메타데이터, pool/ = 실제 파일 저장 디렉터리
■ 3. dpkg - 저수준 패키지 관리
• dpkg는 Windows의 setup.exe와 유사, .deb 직접 처리하지만 의존성 자동해결 안됨
• 패키지 설치: sudo dpkg -i package.deb
• 패키지 제거(설정유지): sudo dpkg -r 패키지명
• 완전삭제: sudo dpkg –purge 패키지명
• 전체목록: dpkg -l (설치되어있는지 확인용)
• 특정검색: dpkg -l 패키지명
• 정상설치만 필터: dpkg -l | grep ^ii
• 상태확인: dpkg -s 패키지명
• 의존성오류 자동해결: sudo apt-get install -f
• 보류패키지 설정완료: sudo dpkg –configure -a
• 깨진패키지 확인: sudo dpkg –audit
• 검증: sudo dpkg -V [패키지명]
• 패키지 상태코드
ii: 정상설치됨
iU: 압축해제됨, 설정대기중
iF: 설치실패, 설정필요
iH: 반쯤설치됨(Half-installed)
• dpkg-reconfigure: 이미 설치된 패키지의 설정을 다시 실행하는 도구 (초기설정에만 해당, 패키지 이름 정확히 알아야함)
sudo dpkg-reconfigure 패키지명
예) tzdata(시간대), locales(로케일), mysql-server, openssh-server, wireshark-common
• 로그/상태파일
tail -f /var/log/dpkg.log
grep “ install “ /var/log/dpkg.log (설치기록)
grep “ remove “ /var/log/dpkg.log (삭제기록)
cat /var/lib/dpkg/status (패키지 상태DB)
grep “^Package:” /var/lib/dpkg/status | wc -l (설치패키지 수)
sudo cp /var/lib/dpkg/status /var/backups/dpkg.status.backup (상태파일 백업)
■ 4. apt / apt-get - 고수준 패키지 관리
• sudo apt update: 패키지목록 업데이트, 반드시 먼저 해야함 (최신버전으로 변경 X, 미설치시스템에 영향없음)
apt update 동작원리: ①/etc/apt/sources.list 읽기 → ②각 저장소에서 Packages.gz 다운로드 → ③/var/lib/apt/lists/에 저장
• apt 기본명령어
sudo apt upgrade: 업그레이드(보수적, 패키지 제거안함)
sudo apt full-upgrade: 업그레이드(공격적, 필요시 패키지 제거)
sudo apt install 패키지명 / sudo apt -y install 패키지명(확인없이)
sudo apt install –reinstall 패키지명
sudo apt remove 패키지명(설정유지) / sudo apt purge 패키지명(완전삭제)
sudo apt autoremove(불필요 의존성 제거)
sudo apt clean(모든 캐시삭제) / sudo apt autoclean(오래된 .deb삭제)
apt install –download-only 패키지명(다운로드만)
• apt-get 명령어(스크립트·서버용): update / upgrade / dist-upgrade / install / reinstall / remove / purge / autoremove / source(소스다운로드)
sudo apt-get check: APT 상태확인
sudo apt-get install -f: 깨진 의존성 수정
• sources.list 관리
위치: /etc/apt/sources.list(메인), /etc/apt/sources.list.d/*.list(추가저장소, PPA등)
형식: deb [옵션] URL 배포판코드명 컴포넌트
예) deb http://archive.ubuntu.com/ubuntu/ jammy main restricted
■ 5. apt-cache - 패키지 정보조회
• APT 캐시(패키지 데이터베이스)에서 정보를 검색하는 도구, 설치 전 의존성 미리 확인용
• apt-cache search 패키지명 (검색) / –names-only(이름으로만)
• apt-cache show 패키지명 (정보보기)
• apt-cache showpkg 패키지명 (의존성 상세)
• apt-cache depends / rdepends 패키지명 (의존하는것 / 의존받는것)
• apt-cache stats(통계) / unmet(충족안된 의존성) / pkgnames(전체 패키지명) / policy(저장소 우선순위)
• 설치전 조사루틴: search → show → depends → sudo apt install
■ 6. 미러 사이트 변경
• 미러 = Ubuntu 저장소의 복제본 제공서버, 가까운 미러 사용시 다운로드 속도↑
• 원본사이트 서버의 정보를 복사 → 트래픽 분산효과, 원본사이트 마비시 대체, 데이터 안정성
• 국내 미러: KAIST FTP(100Gbps) / Kakao(2Gbps) / ROKFOSS(50Gbps)
• 방법1: vi 에디터로 직접편집
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup (원본백업)
sudo vi /etc/apt/sources.list
vi 내부치환: :%s/http://archive.ubuntu.com/http://ftp.kaist.ac.kr/g
sudo apt update (Get 관련 안되면 인터넷 연결에 문제있는것으로 파악가능)
• 방법2: sed 명령어로 자동변경
sudo sed -i ‘s/http://archive.ubuntu.com/http://mirror.kakao.com/g’ /etc/apt/sources.list
구분자로 | 사용가능: sudo sed -i ‘s|http://archive.ubuntu.com|http://ftp.kaist.ac.kr|g’ /etc/apt/sources.list
• sed 핵심정리: 형식 sed [옵션] ‘s/패턴/대체문자열/플래그’ 파일명 (vi 안열고도 파일 수정가능)
-i: 파일직접수정(in-place)
g(global): 각줄의 모든 일치항목 치환
i(ignore case): 대소문자 무시
p(print): 치환된 줄만 출력
w(write): 치환된 줄을 파일에 저장
■ 7. 주요 패키지 설치 실습
• vim 설치: sudo apt install vim -y
현재 에디터 확인/변경: update-alternatives –display editor / –config editor
syntax on 추가: sudo vi /etc/vim/vimrc
• 한글입력기: sudo apt install language-pack-ko ibus-hangul -y
ibus-setup → Language → Korean → Hangul 추가 (또는 설정GUI: Keyboard→Input Sources→+→Korean)
ibus restart / 한영전환: Shift+Space 또는 한영키
• OpenSSH 서버: 텔넷과 같은 원격접속 기능이지만 데이터 암호화하여 전송(포트22)
sudo apt install -y openssh-server
sudo systemctl enable ssh / start ssh / status ssh
sudo ufw allow 22/tcp
포트리스닝확인: sudo ss -tlnp | grep ssh (netstat보다 속도빠름, 권장) / sudo netstat -tlnp | grep ssh(구식)
주요설정(/etc/ssh/sshd_config): Port(22), PermitRootLogin(no), PasswordAuthentication(yes), PubkeyAuthentication(yes), PermitEmptyPasswords(no), MaxAuthTries(3), LoginGraceTime(60), X11Forwarding(yes)
설정변경후: sudo sshd -t(문법검사) → sudo systemctl restart ssh(재시작) / reload ssh(연결끊김없이 재로드)
접속테스트: ssh localhost / ssh user@ip / ssh -p 2222 user@ip
로그확인: sudo tail -f /var/log/auth.log / sudo journalctl -u ssh -f
• Telnet 서버설치: 데이터를 평문(암호화없이) 전송하여 취약 - 학습/테스트 목적만
sudo apt install xinetd telnetd -y
xinetd: 데몬을 관리하는 슈퍼데몬, 접근 성공/실패 로그기록, 효율적인 리소스관리
→ 서비스별 접근제어와 관련된 TCP wrapper 기능 포함해서 서비스별 접근제어(예: ftp,ssh - 인터넷 접속시 악의적 접근 방지, IP·서브넷·도메인 관련) - /etc/hosts.allow, /etc/hosts.deny로 관리
sudo vi /etc/xinetd.d/telnet 파일 생성
service telnet { disable=no, flags=REUSE, socket_type=stream, wait=no, user=root, server=/usr/sbin/in.telnetd, log_on_failure+=USERID }
sudo systemctl restart xinetd (확인: ss -altn, systemctl status xinetd)
sudo ufw allow 23/tcp
sudo adduser 사용자명(텔넷전용) → telnet 서버IP 23
• UFW 방화벽 명령어
ufw enable/disable(활성/비활성화)
ufw allow 22/tcp(SSH) / allow 23/tcp(Telnet) / allow 80/tcp(HTTP) / allow 443/tcp(HTTPS)
ufw deny 22/tcp(차단)
ufw status(현재상태 확인) - 열려있는 포트 확인가능
• Apache 웹서버설치
웹서버 = 오픈소스 웹서버 소프트웨어, 클라이언트의 요청받아 웹서비스제공(80/443포트)
정적콘텐츠 제공(HTML,CSS,JS) / 동적처리 연동(WAS 필요, 예: PHP, 파이썬) - Client ↔ WAS(정적+동적처리) ↔ Database
sudo apt update && sudo apt install apache2 -y
systemctl enable/start/status apache2
ufw allow 80/tcp, 443/tcp
curl http://localhost(전체응답) / curl -I http://localhost(헤더만)
로그: tail -f /var/log/apache2/access.log, error.log
DocumentRoot 설정: sudo vi /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80> ServerAdmin, DocumentRoot(/var/www/html), ErrorLog, CustomLog </VirtualHost>
sudo apachectl -t(문법검사) → sudo systemctl reload apache2
■ 8. 파일 압축과 묶기
• 압축(Compression): 데이터를 알고리즘으로 줄임 → 파일크기 감소
• 묶기(Archiving): 여러파일/디렉터리를 하나로 합침 → 파일크기 변화없음
• 리눅스는 tar로 묶고, gzip/bzip2/xz 등으로 압축하는 방식 사용
• 형식비교
.tar: 묶기만, 순수묶기
.tar.gz/.tgz: 중간압축률(60-70%), 빠름, 범용·네트워크전송
.tar.bz2: 높음(70-80%), 느림, 장기백업·아카이브
.tar.xz: 매우높음(80-90%), 매우느림, 배포패키지·최대압축
.zip: 중간, 빠름, Windows호환
• tar 기본명령어: 핵심옵션 c(묶기)·x(풀기)·t(목록)·f(파일,항상필요)·v(과정출력) / 압축옵션 z(gzip)·j(bzip2)·J대문자(xz) - 시험출제 가능성
묶기: tar -cvf archive.tar 대상/
풀기: tar -xvf archive.tar / 경로지정: -C /경로/
목록확인: tar -tvf archive.tar (풀지않고 목록만 출력)
• gzip: tar -cvfz(생성) / tar -xvfz(해제) / tar -tvfz(목록)
단일파일: gzip file.txt(원본삭제) / gzip -k(원본유지) / gunzip 또는 gzip -d(해제)
• bzip2: tar -cvfj / -xvfj / -tvfj
단일파일: bzip2 file.txt / bzip2 -k(원본유지) / bunzip2 또는 bzip2 -d
• xz: tar 옵션은 반드시 대문자 J 사용(소문자 j는 bzip2이므로 주의)
tar -cvfJ / -xvfJ / -tvfJ
단일파일: xz file.txt / xz -k / unxz 또는 xz -d
• zip: zip archive.zip file1 file2 / zip -r(디렉터리,재귀) / unzip archive.zip / unzip -d(경로) / unzip -l(목록)
한글파일명 깨짐해결: unzip -O CP949 archive.zip
• 실용예시: tar cvfJ my.tar.xz /etc/systemd/ (xz) / tar cvfj(bzip2) / tar cvfz(gzip)
날짜포함백업: tar cvfz backup_$(date +%Y%m%d).tar.gz /var/www/html/
'운영체제' 카테고리의 다른 글
| [전공 기말고사 정리] 리눅스 운영체제 – 디스크 인터페이스·파일시스템·마운트·디스크 (0) | 2026.07.29 |
|---|---|
| [전공 실습 정리] 네트워크 설정 – nmcli·Netplan·패킷 캡처·VM 라우터 (0) | 2026.07.28 |
| [전공 중간고사 정리] 운영체제 – 리눅스 권한 관리 (0) | 2026.07.28 |
| [전공 중간고사 정리] 운영체제 – 리눅스 사용자와 그룹 (0) | 2026.07.28 |
| [전공 중간고사 정리] 운영체제 – 리눅스 명령어(파일과 디렉터리) (0) | 2026.07.28 |