[부트캠프 - 11일차] 1/6.화 - Linux

developowl·2026년 1월 12일

부트캠프

목록 보기
2/24
post-thumbnail

1. Linux

Linux의 구조

  • Kernel - Linux의 핵심
    • 프로세스 / 메모리 / 파일 시스템 / 장치 관리
    • 컴퓨터의 모든 자원 초기화 및 제어 기능
    • 컴퓨터의 모든 자원 초기화 및 제어 기능 수행
    • Linux는 커널의 대부분이 C언어로 개발됨
  • Shell - 사용자 인터페이스
    • 명령 해석
    • 프로그래밍 기능
    • Linux 기본 쉘: bash shell(Linux shell)
  • Application
    • 각종 프로그래밍 개발 도구
    • 문서 편집 도구
    • 네트워크 관련 도구 등

❗️ Compiler: 고급 언어 → Assembly (not 기계어)

Ubuntu Linux

  • Debian 계열의 Linux 중 가장 성공한 데스크톱 배포판
# 시스템 정보 확인
hostnamectl

가상화

  • 하나의 물리적 컴퓨터에서 여러 운영체제를 동시에 실행할 수 있게 하는 기술.
  • 하나의 물리 컴퓨팅 자원을 마치 여러 개인 것처럼 가상으로 쪼개서 사용하거나 여러 개의 실물 컴퓨팅 자원들을 묶어서 하나의 자원처럼 사용하는 것

<가상화 방법>

  • 가상머신(Virtual Machine) - 하이퍼바이저를 이용
  • 컨테이너(Container) - OS 수준에서 프로세스를 컨테이너로 격리

Virtual Machine

  • 호스트 OS에 가상의 머신을 생성한 후 여기에 게스트 OS를 설치할 수 있도록 해주는 응용 프로그램

가상머신의 장점(상대적인 장점)

  • 스냅샷으로 즉시 복구 가능
  • UTM은 스냅샷 대신 clone 기능

원격 접속 허용

  • SSH
    • Secure SHell 의 약자
    • 원격 호스트에 접속하기 위해 사용되는 보안 프로토콜
    • 서버에 SSH 설치 및 실행
  • IP: 컴퓨터(NIC - Network Interface Card)를 구분하기 위한 주소
  • port: 컴퓨터에서 동작하는 프로세스(or 애플리케이션)를 구분하기 위한 정보
    → 다른 컴퓨터에 접속: 컴퓨터의 Application 에 접속 ( IP:port )
    - Known port: 0~1023 기본 용도로 확정
    - Unknown port:
  • IPv4
    • 32비트 체계
    • 클래스별로 용도 확정
    • 8비트씩 끊어서 10진수로 표기
    • 0.0.0.0 ~ 255.255.255.255
    • IP 주소의 수가 부족해지는 문제 발생
      • → Class less
      • NAT & PAT : 보안(NAT), IP 주소 부족 문제 해결(PAT)
  • IPv6

💡 잠깐 네트워크 내용(재밌는 부분)

NAT(Network Address Translation)

  • 기본적으로 IP 주소를 다른 IP 주소로 변환하는 기술
  • 주로 사설 IP를 공인 IP로 바꿀 때 사용
    • Static NAT(정적 NAT)
      • 사설 IP 1개와 공인 IP 1개를 1:1로 고정 매핑
      • 외부에서 내부 서버에 직접 접근해야 할 때 필수적
    • Dynamic NAT(동적 NAT)
      • 사용 가능한 공인 IP 주소 풀(Pool)을 만들어 두고, 내부 사용자가 나갈 때마다 남는 IP를 하나씩 할당.
      • 1:1 매핑이지만 매번 대상이 바뀔 수 있음

PAT(Port Address Translation)

  • 하나의 공인 IP를 여러 개의 사설 IP가 공유할 수 있게 하는 기술
  • NAT Overload 라고도 함
  • 동작 원리
    • IP 주소뿐만 아니라 포트 번호까지 변환하여 각 사용자를 구분
  • 장점
    • 하나의 공인 IP로 수천 개의 장치를 인터넷에 연결할 수 있어 IP 주소 고갈 문제를 해결
구분NAT (Static/Dynamic)PAT (NAT Overload)
변환 방식1:1 주소 변환n:1 주소 변환
구분 기준IP 주소IP 주소 + 포트 번호
주요 목적서버 외부 노출, 보안공인 IP 절약, 다수 기기 인터넷 연결

포트 포워딩(Port Forwarding)

  • 외부 네트워크에서 내부 네트워크(사설망)에 있는 특정 기기나 서비스에 접속할 수 있도록 통로를 열어주는 기술
    • PAT: 내부 → 외부 / 나갈 때 주소를 바꿔주는 것
    • 포트포워딩: 내부 ← 외부 / 들어오는 길을 안내해주는 이정표 역할
  • 외부에서 접속을 시도할 때 공인 IP 까지는 도달했지만, 사설 IP 를 모르는 상태이기 때문에 포트포워딩이 필요함.
  • 방화벽에 특정 목적을 가진 작은 창문 하나를 내는 것과 같음
구분PAT (NAT Overload)포트 포워딩 (Port Forwarding)
방향내부 → 외부 (나갈 때)외부 → 내부 (들어올 때)
주체여러 기기가 하나의 IP를 공유특정 서비스(포트)를 외부에 노출
비유여러 학생이 하나의 공중전화 사용특정 부서 직통 번호 설정

VPN(Virtual Private Network)

  • 외부 사용자가 마치 내부 네트워크에 직접 연결된 것처럼 안전한 암호화 터널을 만드는 기술
  • 작동 방식
    • 사용자가 외부에서 VPN 서버에 인증을 거쳐 접속하면, 가상의 통로를 통해 내부망으로 들어오게 됨. → 일단 접속되면 내부의 모든 기기에 접근할 수 있는 권한을 가짐
  • 보안
    • 모든 데이터가 암호화되며, 강력한 인증(ID/PW, OTP 등)을 거쳐야만 통로에 들어올 수 있음. 외부에서는 내부에 무엇이 있는지 전혀 알 수 없음.
구분포트 포워딩VPN
접속 범위특정 기기, 특정 포트만 허용내부 네트워크 전체에 접근 가능
보안성낮음 (포트 노출로 해킹 위험)높음 (암호화 터널 및 인증)
설정 편의성간단함 (공유기 설정만 하면 됨)복잡함 (VPN 서버/클라이언트 필요)
비유성벽에 작은 구멍 하나 뚫기성 내부로 통하는 비밀 비밀번호 문 만들기

요약(NAT, PAT, Port Forwarding, VPN)

구분주요 특징핵심 메커니즘주요 용도
NAT주소 변환IP ↔ IP (1:1)외부 노출용 서버 IP 매핑
PAT주소+포트 변환IP ↔ IP+Port (N:1)여러 기기의 인터넷 공유
포트 포워딩특정 통로 개방Port ↔ Port외부에서 내부 서비스 접속
VPN가상 암호 터널암호화 및 가상 인터페이스원격 근무, 안전한 서버 관리

Bridged Mode

  • VM이 공유기에서 직접 IP 할당

(다시 가상화)

사설 IP 주소의 3가지 약속된 대역

(아래 세 범위 중 하나에 해당한다면 100% 사설 IP)

  • Class A (10.x.x.x) : 대규모 기업 내부망에서 주로 사용
  • Class B (172.16.x.x ~ 172.31.x.x) : 중간 규모나 클라우드(AWS VPC 등)의 기본 대역으로 자주 쓰임
  • Class C (192.168.x.x) : 가정용 공유기나 소규모 사무실, 가상머신 같은 환경에서 많이 쓰임

Loopback 대역: 127.x.x.x

  • 네트워크 카드를 타고 밖으로 나가는 게 아니라 컴퓨터 내부에서만 맴도는 주소
# 1. SSH 접속 허용 설정 (미리 문을 열어두는 작업)
sudo ufw allow ssh

# 2. 방화벽 활성화 (이제부터 규칙대로 막기 시작)
sudo ufw enable

# 3. 방화벽 상태 확인
sudo ufw status
  • UFW (Uncomplicated Firewall)
  • 우분투 서버를 처음 설치하면 보통 방화벽이 비활성화(inactive) 상태이거나 모든 접속을 허용 하는 상태.
  • 추후에 방화벽을 켰을 때 미리 sudo ufw allow ssh 를 입력하지 않았더라면, 나의 SSH 접속 또한 방화벽에 막힘.

Run Level

  • 시스템을 가동하는 방법(init 과 함께 사용)

명령어 입력 및 실행

Shell

  • 사용자가 입력한 명령을 해석해 커널로 전달하거나 커널의 처리 결과를 사용자에게 전달하는 역할을 수행
  • Server의 텍스트 모드나 X Window(GUI) 의 터미널에서 입력하는 인터페이스

프롬프트

  • 명령어를 입력할 때 보여지는 문자열
  • 슈퍼 사용자라면 $ 대신 #
  • echo $SHELL - Login Shell 확인 커맨드
  • 명령을 사용하는 방법
    • 대화식(Interactive) - 직접 입력해서 결과를 바로 확인하는 방식
    • 스크립트 - 미리 파일에 기록해두고 그 파일을 Shell 에 넘겨서 한 번에 수행하는 방식
  • ~ 은 사용자의 홈 디렉터리(~의 자리는 현재 디렉토리를 나타냄)
  • admin@basic
    • admin - 사용자
    • basic - 호스트 이름

명령행 작업

명령행 편집

  • 커서 이동: CTRL + b(뒤로), + f(앞으로), + a(가장 앞으로), + e(가장 뒤로) → option + 방향키(가장 앞/뒤로)
    • ESC + b(단어 뒤로), + f(단어 앞으로)

명령의 구조

  • 명령 [옵션][인자]
    • 명령: 사용자가 입력하는 명령
    • 옵션: 명령의 세부 기능으로 옵션은, - 또는 — 로 시작
        • : 옵션이 문자인 경우
      • — : 옵션이 단어인 경우
      • 옵션은 여러 개 사용 가능
      • 옵션은 대부분 순서가 없음
      • 옵션은 결합이 가능
    • 인자: 명령에 전달하는 값
    • 각 요소는 공백으로 구분
    • [] 는 생략 가능하다는 의미
    • ‘ | ‘ 는 선택
    • 문자열, { }, < > 은 필수

명령어 자동 완성

  • 현재 입력 중인 내용으로 시작하는 명령이 1개 밖에 없다면 / Tab → 자동 완성
  • 명령이 여러 개인 경우, Tab을 한 번 더 누르면 모든 명령을 출력

History

  • 입력한 명령어들의 기록
  • 터미널 세션(메모리)에 저장되는 명령어는 보통 1000개
    echo $HISTSIZE # 메모리 버퍼. 보통 1000개
    echo $HISTFILESIZE # 저장 파일. 보통 2000개

echo(메아리): 입력한 문자열이나 변수의 내용을 터미널 화면에 그대로 출력해주는 명령어

  • 파일에 내용 쓰기(리다이렉션): 화면에 출력할 내용을 파일로 돌려서 저장 가능.
    echo “my server test” > test.txt

Shell이 명령어를 찾는 위치 확인

echo $PATH
  • 명령어를 이름만 입력한 경우 PATH에서 찾음
  • 현재 디렉토리의 명령어를 실행하고자 하는 경우 ./ 명령어 형태로 입력해야 한다.
  • bin : binary의 약자

whereis

  • 명령어의 실행 파일 위치, 소스 위치, man 페이지 파일의 위치를 찾아주는 명령어
  • whereis [옵션][파일]
  • 옵션
    • -b: 바이너리 파일만 검색
    • -m: 메뉴얼 파일만 검색
    • -s: 소스 파일만 검색

which

  • PATH 환경 변수에 저장된 디렉터리에서 명령어의 위치를 검색
  • which [옵션][—] [명령어]
  • 옵션
    • a, --all : 모든 내용을 출력
    • -i, --read-alias : 알리아스 설정 환경을 출력
    • --skip-alias : 알리아스 설정을 무시
    • --skip-dot : 점(.)으로 시작하는 디렉터리를 제외
    • --skip-tilde : 틸드(~)로 시작하는 디렉터리($HOME 디렉터리)를 제외
    • --show-dot : 점(.)으로 시작하는 디렉터리를 포함
    • --show-tilde : 틸드(~)로 시작하는 디렉터리를 포함
    • -v, -V, --version : 버전 정보를 출력

기본 명령어

  • passwd: 비밀번호 변경
    • passwd [인자] : 인자를 생략하면 현재 접속 중인 계정이고, 인자에 변경할 계정을 설정
  • alias : 현재 설정된 별명을 확인

시스템 사용자 정보 확인

  • logname : 사용 중인 로그인 네임 확인
  • users : 접속한 사용자의 아이디
  • who : 로그인 한 모든 사용자 계정
  • whoami : 현재 우분투 사용자 확인
  • uname [옵션] : 시스템 정보
    • 옵션
      • -a: 시스템의 모든 정보 확인
      • -m: 시스템이 사용 중인 하드웨어 정보 확인
      • -n: 호스트 네임 확인
      • -r: 운영체제 릴리즈 번호
      • -s: 운영체제 이름
      • -v: 버전 출시 일자

시스템 정보

  • hostname: 현재 사용 중인 호스트 네임
  • arch: CPU 정보
  • env: 환경 변수 확인

sudo와 su

su: Substitute User / Switch User

  • sudo
    • 관리자의 권한을 빌려서 명령을 실행하는 것으로 관리자 비밀번호를 입력해야 함
    • pw → 현재 사용자의 비밀번호
  • su 계정
    • 현재 계정의 환경 변수들을 유지하면서 다른 계정으로 전환
    • 권한만 빌려옴
    • → 다른 계정의 비밀번호
  • su - 계정
    • (현재 계정의 환경 변수를 유지하지 않고) 새로운 계정의 환경변수를 가져오면서 다른 계정으로 전환
    • 해당 사용자로 완전히 로그인한 것과 같은 상태
    • → 다른 계정의 비밀번호
    • su 명령에서 계정을 입력하지 않으면 root로 전환

2. vi 편집기

1) 리눅스 편집기의 종류

유닉스에서부터 사용했던 편집기

  • 행 단위 편집기(한 번에 하나의 행씩 편집하는 도구): ed, ex, sed
  • 화면 단위 편집기: vi (vim - 일반적으로 사용되는 편집기), emacs, nano(메뉴 기반 편집기)
  • GUI 편집기: gedit

모드형과 비모드형 편집기

  • 모드형
    • 입력 모드와 명령 모드가 구분
      • 입력 모드 - 텍스트를 입력할 수 있는 모드
      • 명령 모드 - 텍스트를 수정하거나 삭제하고 복사와 붙이기 등 편집을 하는 모드
    • 같은 글자라도 입력 모드에서는 텍스트로 처리하여 입력되고 명령 모드에서는 텍스트로 입력되는 것이 아니라 편집 명령으로 사용
    • vi는 모드형 편집기
  • 비모드형
    • 입력 모드와 명령 모드가 구분되어 있지 않음
    • 편집 기능을 CTRL 이나 ALT 같은 특수 키와 함께 사용
    • nano 는 비모드형 편집기

vim

  • vi 이후에 개발된 Editor

동작 모드

📌  vi, nano 등으로 파일을 열 때, 시스템 내부에서 일어나는 일

  • 로드(Load): 디스크에 저장되어 있던 파일 내용을 RAM의 Buffer라는 임시 공간으로 복사해 옴.
  • 편집: 우리가 수정하는 내용은 디스크가 아니라 메모리 위의 버퍼에서만 일어남
  • 저장(Write): :w 를 누르는 순간에만 메모리의 버퍼 내용을 다시 디스크로 덮어씌움

→ if) 엄청나게 큰 로그 파일(ex: 10GB)을 일반 편집기로 열면 메모리(RAM의 Buffer)가 부족해서 서버가 뻗을 수 있음.

sed or less 같은 도구를 병행해서 씀

Command Mode

  • 시작점: 파일을 열자마자 만나는 기본 모드
  • 역할: 글자를 직접 치는 게 아니라, 커서 이동, 복사, 붙여넣기, 삭제 등의 명령을 내림
  • 핵심 키: 어떤 모드에서든 Esc 를 누르면 이 모드로 돌아옴

Insert Mode

  • 진입 방법: 명령 모드에서 i or a 를 누름. (insert / append)
  • 역할: 메모장처럼 실제 글자를 입력하는 모드
  • 표시: 화면 하단에 -- INSERT -- 라는 문구가 뜸

Last-line / Command-line Mode

  • 진입 방법: 명령 모드에서 : 를 누름
  • 역할: 저장, 종료, 검색, 치환 등 파일 전체에 영향을 주는 명령을 수행

시작

  • vim [파일 경로]
  • 해당 파일이 존재하면 파일의 내용이 보이고, 존재하지 않는 파일이면 빈 파일이 열림
  • 파일 경로를 생략하면 아래와 같은 화면이 출력됨
  • 수정 권한이 없으면 [읽기 전용] 으로 열림

종료

  • 마지막 행 모드에서 ! 는 강제 실행을 의미

커서 이동

업로드중..

  • 당연히 명령 모드에서 사용해야하는 명령,,
profile
Don’t get mad at the computer.

0개의 댓글