리눅스 명령어 2

Linux

0 views

mkdir 명령어

1. 개요

  • mkdir (Make Directory) 명령어는 리눅스 및 유닉스 운영체제에서 새로운 디렉터리(폴더)를 생성하는 기본 유틸리티다.
    • 사용자가 지정한 경로에 빈 디렉터리를 만들며, 파일 시스템의 계층 구조를 확장하는 가장 기초적인 도구다.

2. 동작 원리

  • 사용자가 단순히 폴더 아이콘을 만드는 것처럼 보이지만, 커널 내부에서는 파일 시스템의 메타데이터를 조작하는 정교한 작업이 일어난다.

2.1 시스템 호출과 아이노드 (System Call & Inode)

  1. System Call: 쉘(Shell)이 mkdir 명령을 해석하면 커널의 mkdir() 시스템 호출(System Call)을 실행한다.
  2. 아이노드 할당 (Inode Allocation):
    • 리눅스에서 디렉터리도 일종의 '파일'이다. 따라서 새로운 고유 번호인 아이노드(Inode)를 할당받는다.
    • 이 아이노드에는 디렉터리의 권한(Permission), 소유자(Owner), 생성 시간(Timestamp) 등의 메타데이터가 기록된다.
  3. 디렉터리 엔트리 생성 (Directory Entry):
    • 생성된 디렉터리의 실제 데이터 블록에는 기본적으로 두 가지 항목이 자동으로 기록된다.
      • . (Dot): 자기 자신을 가리키는 포인터.
      • .. (Dot Dot): 상위 디렉터리(Parent)를 가리키는 포인터.
  4. 부모 디렉터리 갱신: 상위 디렉터리의 데이터 블록에 '새 디렉터리 이름'과 '새 아이노드 번호'를 매핑하여 기록한다.

2.2 디스크 공간 vs 아이노드 공간

  • mkdir은 데이터 블록(용량)을 거의 차지하지 않지만, 아이노드 하나를 반드시 소비한다.
    • 따라서 디스크 용량이 남아있더라도 아이노드가 꽉 차면(Inode Exhaustion) 디렉터리를 생성할 수 없다.

3. 사용법 및 구문

3.1 기본 구문

mkdir [OPTION]... DIRECTORY...

3.2 주요 옵션 분석

옵션설명비고
-pParents. 상위 디렉터리가 없으면 에러 없이 자동으로 함께 생성한다.가장 중요하고 자주 쓰이는 옵션
-mMode. 디렉터리 생성 시 권한(Permission)을 직접 지정한다.chmod를 따로 할 필요가 없어 보안상 유리함
-vVerbose. 생성된 디렉터리마다 메시지를 출력한다.스크립트 디버깅 시 유용

3.3 실전 코드 예시

  1. 다중 계층 디렉터리 한 번에 만들기 (p)

    • 초보자가 가장 많이 겪는 에러인 No such file or directory를 방지하는 필수 옵션이다.
    # [에러 발생] project 폴더가 없으면 app 폴더를 만들 수 없음
    mkdir project/app/src
    
    # [성공] 없는 상위 폴더(project, app)까지 싹 다 만들어줌
    mkdir -p project/app/src
    
  2. 특정 권한으로 보안 폴더 만들기 (m)

    • 기본 권한에 의존하지 않고, 생성 시점부터 타인의 접근을 차단한다.
    # 소유자(7)만 읽기/쓰기/실행 가능, 그룹/기타 사용자는 접근 불가(0)
    mkdir -m 700 private_folder
    
  3. 여러 디렉터리 동시 생성 (Brace Expansion 활용)

    • 쉘의 중괄호 확장 기능을 활용하면 대량의 폴더를 순식간에 만들 수 있다.
    # year_2023, year_2024, year_2025 생성
    mkdir year_{2023..2025}
    

cp 명령어

1. 개요

  • cp (Copy) 명령어는 리눅스 및 유닉스 시스템에서 파일이나 디렉터리를 복사하는 명령어다.
    • 원본 데이터는 그대로 유지한 채, 지정된 위치에 동일한 데이터와 속성을 가진 새로운 파일 객체를 생성한다.

2. 동작 원리

  • cp는 단순히 데이터를 읽고 쓰는 과정을 넘어, 파일 시스템의 메타데이터(Inode)를 어떻게 처리하느냐가 핵심이다.

2.1 파일 복제 프로세스 (I/O Flow)

  • cp source_file dest_file 명령을 실행하면 커널 내부에서 다음과 같은 일이 발생한다.
    1. Open Source: 원본 파일을 읽기 모드(O_RDONLY)로 연다.
    2. Open/Create Destination:
      • 목적지 파일이 없으면 새로 생성(O_CREAT)한다.
      • 이미 존재하면 내용을 비우고(O_TRUNC) 덮어쓸 준비를 한다.
    3. Read & Write Loop: 원본 파일에서 데이터 블록(Buffer)을 읽어와 목적지 파일에 쓴다. 이 과정은 파일 끝(EOF)에 도달할 때까지 반복된다.
    4. Close: 두 파일의 디스크립터를 닫고 변경 사항을 저장한다.

2.2 아이노드(Inode)의 변화

  • 이것이 mv(이동) 명령어와 cp의 결정적인 차이점이다.
    • 원본 파일:
      • 기존 아이노드 번호를 유지한다.
    • 사본 파일:
      • 완전히 새로운 아이노드 번호를 할당받는다.
      • 물리적인 디스크 공간을 새롭게 차지하며, 원본과 사본은 서로 독립적인 개체가 된다. (즉, 사본을 수정해도 원본은 변하지 않는다.)

3. 사용법 및 구문 (Syntax)

3.1 기본 구문

cp [OPTION]... SOURCE... DEST
cp [OPTION]... SOURCE... DIRECTORY

3.2 주요 옵션 분석

옵션설명비고
-r****, -RRecursive. 디렉터리를 복사할 때 하위 폴더와 파일까지 모두 포함하여 복사한다.디렉터리 복사 시 필수
-iInteractive. 목적지에 이미 같은 이름의 파일이 있을 경우, 덮어쓸지 사용자에게 물어본다.실수 방지용 (필수 권장)
-pPreserve. 원본 파일의 소유자(Owner), 그룹, 권한(Mode), 시간 정보(Timestamp)를 그대로 유지한다.백업 시 유용
-aArchive. -r-p를 포함하여 심볼릭 링크 등 모든 속성을 최대한 원본 그대로 복사한다.시스템 전체 백업 시 표준
-fForce. 목적지 파일을 열 수 없거나 권한이 없어도 강제로 지우고 복사를 시도한다.주의해서 사용

3.3 실전 코드 예시

  1. 디렉터리 통째로 복사하기 (r)

    • cp는 기본적으로 파일만 복사하므로, 폴더를 복사하려면 반드시 재귀 옵션을 켜야 한다.
    # data 폴더를 data_backup 폴더로 전체 복사
    cp -r data data_backup
    
  2. 속성 유지하며 백업하기 (a)

    • 서버 이전이나 설정 파일 백업 시, 권한이 바뀌면 프로그램이 오작동할 수 있다. 이때 -a를 사용한다.
    # 원본의 소유권, 시간, 권한을 완벽하게 보존
    cp -a /etc/nginx/nginx.conf ./nginx.conf.bak
    
  3. 덮어쓰기 방지 (i)

    • 중요한 파일을 실수로 날리는 것을 막는다.
    cp -i new_ver.txt current_ver.txt
    # 파일이 존재하면 질문함: cp: overwrite 'current_ver.txt'?
    

nc 명령어

1. 개요

  • nc (Netcat)는 TCP 또는 UDP 프로토콜을 사용하여 네트워크 연결을 읽고 쓰는(Read/Write) 유틸리티다.

2. 동작 원리

  • nc의 핵심 원리는 "표준 입출력(Standard I/O)과 네트워크 소켓(Socket)의 연결"이다.

2.1 파이프라인 브리지 (Pipeline Bridge)

  • 리눅스에서 모든 것은 파일이다.
    • nc는 키보드 입력(stdin)이나 파일 내용을 네트워크 패킷으로 변환하고, 반대로 네트워크에서 들어오는 패킷을 화면(stdout)이나 파일로 변환하는 중계자(Bridge) 역할을 한다.
  1. 소켓 생성:
    1. 사용자가 명령을 내리면 커널에 요청하여 TCP/UDP 소켓을 생성한다.
  2. 바인딩 및 연결:
    • 서버 모드 (l): 특정 포트에 소켓을 바인딩(Bind)하고 LISTEN 상태로 대기한다.
    • 클라이언트 모드: 대상 IP와 포트로 CONNECT 요청(3-Way Handshake)을 보낸다.
  3. 데이터 스트리밍:
    1. 연결이 수립되면, nc는 들어오는 데이터를 그대로 상대방에게 쏘아 보내고, 상대방이 보낸 데이터를 그대로 출력한다.
    2. 어떠한 가공이나 헤더 수정 없이 Raw Data를 취급한다.

2.2 구현체의 종류

  • nc는 역사적으로 여러 버전이 존재하며, 기능이 미세하게 다르다.
    • netcat-traditional
      • 가장 오래된 버전. e 옵션(프로그램 실행)이 있어 보안상 위험하다.
    • netcat-openbsd
      • 대부분의 최신 리눅스 배포판(Ubuntu, CentOS 등)의 기본 버전. 보안을 위해 e 옵션이 제거되어 있다.
    • ncat
      • Nmap 프로젝트에서 개발한 현대적 버전. SSL/TLS 지원 등 기능이 가장 강력하다.

3. 사용법 및 구문 (Syntax)

3.1 기본 구문

# 클라이언트 모드 (접속)
nc [HOST] [PORT]

# 서버 모드 (대기)
nc -l [PORT]

3.2 주요 옵션 분석

옵션설명비고
-lListen. 서버 모드로 동작하여 연결을 기다린다.포트 지정 필수
-pPort. 사용할 로컬 포트를 지정한다.-l과 함께 쓰이거나 생략 가능
-vVerbose. 상세 정보를 출력한다.연결 성공/실패 여부 확인 시 필수
-nNo DNS. 호스트명 룩업(DNS 조회)을 하지 않고 IP로만 통신한다.속도가 빠르다.
-zZero-I/O. 데이터를 전송하지 않고 포트가 열려있는지만 스캔한다.포트 스캔 시 사용
-uUDP. TCP 대신 UDP 프로토콜을 사용한다.기본값은 TCP

3.3 실전 코드 예시

  1. 간단한 채팅 서버 만들기

    • 두 터미널(혹은 두 컴퓨터) 사이에서 텍스트를 주고받을 수 있다.
    # [Server] 1234 포트 열고 대기
    nc -l 1234
    
    # [Client] 서버 IP(localhost)의 1234 포트로 접속
    nc localhost 1234
    
    • 연결 후 입력하는 텍스트가 상대방 화면에 그대로 뜬다.
  2. 포트 스캔 (Telnet 대용)

    • 특정 서버의 포트가 방화벽에 막혀있는지 확인할 때 가장 빠르고 정확하다.
    # google.com의 80번 포트가 열려있는지 확인 (상세 출력)
    nc -v -z google.com 80
    
    # 결과: Connection to google.com 80 port [tcp/http] succeeded!
    
  3. 파일 전송

    • FTP나 SCP를 사용할 수 없는 환경에서 파일을 전송할 수 있다.
    # [Receiver - 받는 쪽] 1234 포트로 들어오는 데이터를 file.txt에 저장
    nc -l 1234 > received_file.txt
    
    # [Sender - 보내는 쪽] file.txt 내용을 읽어서 Receiver에게 전송
    nc [Receiver_IP] 1234 < file.txt
    

openssl 명령어

1. 개요

  • OpenSSL은 SSL(Secure Sockets Layer) 및 TLS(Transport Layer Security) 프로토콜을 구현한 오픈 소스 암호화 라이브러리이자 커맨드 라인 도구(CLI)다.

2. 동작 원리

  • OpenSSL 명령어는 단순한 유틸리티가 아니라, 거대한 암호화 엔진인 libcrypto와 통신 프로토콜 엔진인 libssl의 기능을 사용자가 쉽게 호출할 수 있도록 만든 인터페이스다.

2.1. 아키텍처 구조

  • OpenSSL은 크게 두 가지 핵심 라이브러리와 이를 제어하는 CLI로 구성된다.
    1. libcrypto:
      • 대칭키(AES, ChaCha20), 비대칭키(RSA, ECDSA), 해시 함수(SHA-256) 등 기본적인 암호화 알고리즘을 구현한 라이브러리다.
      • 난수 생성기(RNG)와 큰 수 연산(BigNum) 등 로우 레벨의 수학적 연산을 담당한다.
    2. libssl:
      • libcrypto를 기반으로 하여 TLS/SSL 프로토콜(핸드셰이크, 레코드 프로토콜)을 구현한 라이브러리다.
    3. openssl (CLI):
      • 사용자가 터미널에서 입력한 명령어를 파싱하여 위 라이브러리의 함수를 호출한다.

2.2. 인증서 생성 및 검증 흐름 (PKI 관점)

  • OpenSSL을 사용해 HTTPS 인증서를 만드는 과정은 PKI(Public Key Infrastructure)의 핵심 원리를 따른다.
    1. Key Pair 생성:
      1. 수학적으로 연결된 개인키(Private Key)와 공개키(Public Key)를 생성한다. (RSA 또는 ECC 알고리즘 사용)
    2. CSR (Certificate Signing Request) 생성:
      1. 공개키와 조직 정보(도메인, 국가 등)를 담아 인증 기관(CA)에 보낼 요청서를 만든다.
      2. 이때 ASN.1 형식을 사용하며 바이너리(DER) 혹은 텍스트(PEM)로 인코딩된다.
    3. 서명 (Signing):
      1. CA(혹은 자기 자신)의 개인키로 CSR의 해시값을 암호화하여 전자 서명을 첨부한다.
      2. 이것이 최종적인 '인증서(Certificate)'가 된다.

3. 사용법 및 구문 (Syntax)

  • 기본 구문은 다음과 같다.

    openssl [subcommand] [options] [arguments]
    

3.1. 버전 확인 및 기본 정보

  • 가장 먼저 설치된 버전과 지원하는 알고리즘을 확인한다.

    # 버전 확인 (보안 취약점 확인 시 중요)
    openssl version -a
    
    # 지원하는 암호화 알고리즘 목록 확인
    openssl list -public-key-algorithms
    

3.2. 개인키(Private Key) 생성

  • 최근에는 보안 강도가 높고 연산 효율이 좋은 ECC(Elliptic Curve Cryptography) 방식이 선호되나, 호환성을 위해 RSA도 많이 사용된다.

    # [RSA] 2048비트 개인키 생성 (전통적 방식)
    openssl genrsa -out private.key 2048
    
    # [ECC] prime256v1 곡선을 사용한 개인키 생성 (최신 권장)
    openssl ecparam -genkey -name prime256v1 -out private_ecc.key
    
    # 주의: 생성된 키는 권한 설정이 필수다.
    chmod 600 private.key
    

3.3. CSR 및 인증서 생성

  • 자체 서명 인증서(Self-Signed Certificate)는 개발 환경에서 주로 사용된다.

    # 1. CSR 생성 (인증 기관 제출용)
    # -new: 새 요청 생성, -key: 사용할 개인키 지정
    openssl req -new -key private.key -out request.csr
    
    # 2. Self-Signed 인증서 생성 (개발용, 유효기간 365일)
    # -x509: CSR 없이 바로 인증서 생성, -nodes: 키를 암호화하지 않음
    openssl req -new -x509 -nodes -sha256 -days 365 -key private.key -out certificate.crt
    

3.4. 인증서 내용 확인 (디버깅)

  • 생성된 파일은 텍스트(Base64)로 인코딩되어 있어 눈으로 읽기 어렵다. 다음 명령어로 내용을 파싱한다.

    # 인증서 내용 텍스트로 출력
    openssl x509 -in certificate.crt -text -noout
    
    # CSR 내용 확인
    openssl req -in request.csr -text -noout
    

3.5. SSL/TLS 연결 테스트 (실무 필수)

  • 서버에 설치된 인증서가 유효한지, 어떤 프로토콜을 지원하는지 외부에서 진단할 때 사용한다.

    # 특정 도메인의 443 포트로 SSL 핸드셰이크 시도
    openssl s_client -connect google.com:443
    
    # 전체 인증서 체인 확인 (Root CA까지 연결이 올바른지 확인)
    openssl s_client -showcerts -connect example.com:443
    

nmap

1. 개요

  • Network Mapper의 약자로, 네트워크 디스커버리와 보안 감사를 위해 설계된 오픈 소스 유틸리티다.
    • 호스트의 활성화 여부, 열린 포트, 운영체제(OS) 정보, 실행 중인 서비스 버전 등을 탐지한다.

2. 동작 원리

  • Nmap은 단순히 연결 요청을 보내는 것이 아니라, TCP/IP 프로토콜 스택의 미세한 특징을 이용하여 대상을 분석한다.

2.1. 패킷 조작 (Raw Packet Crafting)

  • Nmap은 운영체제의 일반적인 네트워크 소켓(Socket)을 거치지 않고, Raw Socket을 통해 직접 패킷 헤더를 조작하여 전송한다.
    • 이를 통해 비정상적인 플래그 조합을 보내 서버의 반응을 유도할 수 있다.

2.2. 스캔 방식의 차이 (Scan Techniques)

  • 가장 대표적인 두 가지 스캔 방식의 내부 동작은 다음과 같다.
    1. TCP Connect Scan (sT):
      • 일반적인 connect() 시스템 콜을 사용한다.
      • 과정:
        • SYN → SYN/ACK → ACK (3-Way Handshake 완료)
      • 특징:
        • 연결이 성립되므로 대상 서버의 로그에 기록이 남기 쉽다.
        • 권한이 없는(Non-root) 사용자도 실행 가능하다.
    2. TCP SYN Scan (sS, Stealth Scan):
      • 과정:
        • SYN → SYN/ACK → RST (연결 강제 종료)
      • 특징:
        • 3-Way Handshake를 완료하지 않고 중간에 끊어버린다.
        • 따라서 애플리케이션 로그에 남지 않을 확률이 높으며(반-개방 스캔), 속도가 빠르다.
        • 루트(Root/Admin) 권한이 필요하다.

2.3. OS 및 버전 탐지 (Fingerprinting)

  • Nmap은 대상에게 복잡한 패킷 조합(Bogus 패킷 등)을 보내고, 돌아오는 응답의 TTL(Time To Live), Window Size, TCP 옵션 순서 등을 분석한다.
    • 운영체제마다 TCP/IP 스택을 구현하는 방식이 미세하게 다르다는 점 (RFC 표준의 모호한 부분을 각기 다르게 구현함)을 이용해 OS를 추론한다.

3. 사용법 및 구문 (Syntax)

  • 기본 문법 구조는 다음과 같다.

    nmap [Scan Type] [Options] {target specification}
    

3.1. 필수 명령어 (Basic Scans)

# 1. 기본 스캔 (가장 일반적)
# 호스트의 열린 포트 1000개를 스캔
nmap 192.168.1.1

# 2. 스텔스 스캔 (SYN Scan) - Root 권한 필요
# 로그를 최소화하며 빠르게 스캔
sudo nmap -sS 192.168.1.1

# 3. 버전 및 OS 탐지 (심층 분석)
# -sV: 서비스 버전(예: Apache 2.4.41) 확인
# -O: 운영체제(예: Linux 4.x) 추측
nmap -sV -O 192.168.1.1

# 4. 종합 스캔 (Aggressive Mode)
# OS 탐지, 버전 탐지, 스크립트 스캔, 트레이스라우트를 한 번에 수행
nmap -A 192.168.1.1

3.2. 포트 및 대상 지정

# 특정 포트 지정 (-p)
nmap -p 80,443 192.168.1.1      # 80, 443 포트만
nmap -p 1-65535 192.168.1.1     # 전체 포트 스캔 (시간 소요됨)

# 다수 대역 지정 (CIDR)
nmap 192.168.1.0/24             # C클래스 대역 전체 스캔

diff 명령어

1. 개요

  • 파일 비교 유틸리티로, 두 개의 파일 내용을 줄 단위로 비교하여 차이점을 출력한다.

2. 동작 원리

  • 단순히 첫 번째 줄끼리, 두 번째 줄끼리 비교하는 것이 아니다.
    • 최소한의 편집(Minimum Edit Distance)으로 파일 A를 파일 B로 변환하는 방법을 수학적으로 계산한다.

2.1. LCS (Longest Common Subsequence) 알고리즘

  • diff의 핵심 엔진은 최장 공통 부분 수열(LCS) 알고리즘에 기반한다.
    1. 두 파일에서 공통적으로 존재하는 가장 긴 줄의 순서를 찾는다.
    2. 이 순서(LCS)에 포함되지 않은 줄들을 '변경된 부분(Diff)'으로 간주한다.
    3. 이를 통해 파일 중간에 새로운 내용이 삽입되어 줄 번호가 밀려도, 이후의 내용이 일치함을 인식할 수 있다.

2.2. 마이어스 알고리즘 (Myers' Algorithm)

  • 표준 GNU diff 유틸리티는 LCS를 최적화한 Myers' Diff Algorithm을 사용한다.
    • 탐색 방식: 편집 그래프(Edit Graph)상에서 (0,0)에서 시작해 (N,M)까지 도달하는 최단 경로를 찾는다.
    • 비용 계산: 대각선 이동(일치)은 비용이 0, 가로/세로 이동(삽입/삭제)은 비용이 1이다.
    • 결과: 이 알고리즘 덕분에 우리는 사람이 보기에 가장 직관적인 형태의 변경 내역을 얻을 수 있다.

3. 사용법 및 구문 (Syntax)

  • 기본 문법은 두 개의 파일을 인자로 받는다.

    diff [options] file1 file2
    

3.1. 기본 출력 해석 (Normal Format)

  • 옵션 없이 실행하면 유닉스 전통의 편집 스크립트 형식으로 출력된다.

    $ diff original.txt modified.txt
    
    2c2          # 왼쪽 파일 2번째 줄이 오른쪽 파일 2번째 줄로 변경(Change)됨
    < Hello      # 왼쪽 파일 내용 (<)
    ---
    > Hi         # 오른쪽 파일 내용 (>)
    4a5          # 왼쪽 파일 4번째 줄 뒤에 오른쪽 파일 5번째 줄이 추가(Add)됨
    > Welcome    # 추가된 내용
    
  • 기호 설명:

    • a (Add): 추가됨
    • d (Delete): 삭제됨
    • c (Change): 변경됨
    • <: 첫 번째 파일의 내용
    • >: 두 번째 파일의 내용

3.2. 유니파이드 포맷 (Unified Format, u)

  • 개발자들이 가장 선호하며 Git에서 기본적으로 사용하는 가독성 높은 형식이다.

    $ diff -u original.txt modified.txt
    
    --- original.txt    2023-10-01... # 원본 (-)
    +++ modified.txt    2023-10-02... # 수정본 (+)
    @@ -1,5 +1,6 @@  # 변경된 청크(Chunk)의 위치 정보
     Line 1
    -Hello              # 삭제된 줄 (-)
    +Hi                 # 추가된 줄 (+)
     Line 3
     Line 4
    +Welcome            # 추가된 줄 (+)
    

3.3. 디렉토리 비교 (r)

  • 두 폴더 내의 모든 파일을 재귀적으로 비교할 때 사용한다.

    # dir1과 dir2 내부의 모든 파일 차이점 비교
    diff -r dir1/ dir2/
    

md5sum 명령어

1. 개요

  • MD5는 128비트 암호화 해시 함수다.
    • 임의의 길이를 입력받아 수학적 연산을 거쳐 고정된 길이인 32자리 16진수 결과값을 출력한다.

2. 동작 원리

  • MD5는 데이터를 512비트 단위의 블록으로 나누어 처리를 수행한다.
    • 내부적으로는 복잡한 비트 연산(AND, OR, XOR, NOT)과 비트 시프트(Shift) 과정을 거친다.

2.1. 주요 특징

  1. 결정론적 (Deterministic): 동일한 입력값에 대해서는 항상 동일한 해시값이 출력된다.
  2. 단방향성 (One-way): 해시값(결과)을 보고 원래의 데이터(입력)를 역산하여 찾아내는 것이 수학적으로 매우 어렵다.
  3. Avalanche Effect: 입력 데이터에서 단 1비트만 바뀌어도 결과값은 완전히 다른 형태로 나타난다.

2.2. 처리 단계

  1. Padding: 입력 메시지의 길이가 512비트의 배수가 되도록 특정 비트를 추가한다.
  2. Initialize Variables: 해시 연산에 사용할 4개의 32비트 변수(A, B, C, D)를 초기화한다.
  3. Main Loop: 데이터를 512비트 블록 단위로 가져와 비선형 함수를 적용하여 변수들을 업데이트한다.
  4. Output: 최종적으로 A, B, C, D 변수를 결합하여 128비트(32글자) 해시값을 완성한다.

3. 사용법 및 구문 (Syntax)

3.1. 기본 사용법

  • 가장 흔히 쓰이는 명령어는 md5sum이다.
# 파일의 MD5 해시값 확인
$ md5sum example.txt
a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6  example.txt

# 문자열을 직접 해시 (echo 사용)
$ echo -n "hello" | md5sum
5d41402abc4b2a76b9719d911017c592  -

주의: echo 사용 시 -n 옵션을 주지 않으면 줄바꿈 문자(\n)까지 포함되어 해시값이 달라진다.

3.2. 무결성 검증 (Check)

  • 파일이 전송 중에 변조되었는지 확인할 때 매우 유용하다.
# 1. 파일의 해시값을 저장
$ md5sum download.iso > check.md5

# 2. 나중에 파일과 저장된 해시값을 비교
$ md5sum -c check.md5
download.iso: OK

Loading comments...