0 views
mkdir 명령어
1. 개요
mkdir(Make Directory) 명령어는 리눅스 및 유닉스 운영체제에서 새로운 디렉터리(폴더)를 생성하는 기본 유틸리티다.- 사용자가 지정한 경로에 빈 디렉터리를 만들며, 파일 시스템의 계층 구조를 확장하는 가장 기초적인 도구다.
2. 동작 원리
- 사용자가 단순히 폴더 아이콘을 만드는 것처럼 보이지만, 커널 내부에서는 파일 시스템의 메타데이터를 조작하는 정교한 작업이 일어난다.
2.1 시스템 호출과 아이노드 (System Call & Inode)
- System Call: 쉘(Shell)이
mkdir명령을 해석하면 커널의mkdir()시스템 호출(System Call)을 실행한다. - 아이노드 할당 (Inode Allocation):
- 리눅스에서 디렉터리도 일종의 '파일'이다. 따라서 새로운 고유 번호인 아이노드(Inode)를 할당받는다.
- 이 아이노드에는 디렉터리의 권한(Permission), 소유자(Owner), 생성 시간(Timestamp) 등의 메타데이터가 기록된다.
- 디렉터리 엔트리 생성 (Directory Entry):
- 생성된 디렉터리의 실제 데이터 블록에는 기본적으로 두 가지 항목이 자동으로 기록된다.
.(Dot): 자기 자신을 가리키는 포인터...(Dot Dot): 상위 디렉터리(Parent)를 가리키는 포인터.
- 생성된 디렉터리의 실제 데이터 블록에는 기본적으로 두 가지 항목이 자동으로 기록된다.
- 부모 디렉터리 갱신: 상위 디렉터리의 데이터 블록에 '새 디렉터리 이름'과 '새 아이노드 번호'를 매핑하여 기록한다.
2.2 디스크 공간 vs 아이노드 공간
mkdir은 데이터 블록(용량)을 거의 차지하지 않지만, 아이노드 하나를 반드시 소비한다.- 따라서 디스크 용량이 남아있더라도 아이노드가 꽉 차면(Inode Exhaustion) 디렉터리를 생성할 수 없다.
3. 사용법 및 구문
3.1 기본 구문
mkdir [OPTION]... DIRECTORY...
3.2 주요 옵션 분석
| 옵션 | 설명 | 비고 |
|---|---|---|
-p | Parents. 상위 디렉터리가 없으면 에러 없이 자동으로 함께 생성한다. | 가장 중요하고 자주 쓰이는 옵션 |
-m | Mode. 디렉터리 생성 시 권한(Permission)을 직접 지정한다. | chmod를 따로 할 필요가 없어 보안상 유리함 |
-v | Verbose. 생성된 디렉터리마다 메시지를 출력한다. | 스크립트 디버깅 시 유용 |
3.3 실전 코드 예시
-
다중 계층 디렉터리 한 번에 만들기 (
p)- 초보자가 가장 많이 겪는 에러인
No such file or directory를 방지하는 필수 옵션이다.
# [에러 발생] project 폴더가 없으면 app 폴더를 만들 수 없음 mkdir project/app/src # [성공] 없는 상위 폴더(project, app)까지 싹 다 만들어줌 mkdir -p project/app/src - 초보자가 가장 많이 겪는 에러인
-
특정 권한으로 보안 폴더 만들기 (
m)- 기본 권한에 의존하지 않고, 생성 시점부터 타인의 접근을 차단한다.
# 소유자(7)만 읽기/쓰기/실행 가능, 그룹/기타 사용자는 접근 불가(0) mkdir -m 700 private_folder -
여러 디렉터리 동시 생성 (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명령을 실행하면 커널 내부에서 다음과 같은 일이 발생한다.- Open Source: 원본 파일을 읽기 모드(
O_RDONLY)로 연다. - Open/Create Destination:
- 목적지 파일이 없으면 새로 생성(
O_CREAT)한다. - 이미 존재하면 내용을 비우고(
O_TRUNC) 덮어쓸 준비를 한다.
- 목적지 파일이 없으면 새로 생성(
- Read & Write Loop: 원본 파일에서 데이터 블록(Buffer)을 읽어와 목적지 파일에 쓴다. 이 과정은 파일 끝(EOF)에 도달할 때까지 반복된다.
- Close: 두 파일의 디스크립터를 닫고 변경 사항을 저장한다.
- Open Source: 원본 파일을 읽기 모드(
2.2 아이노드(Inode)의 변화
- 이것이
mv(이동) 명령어와cp의 결정적인 차이점이다.- 원본 파일:
- 기존 아이노드 번호를 유지한다.
- 사본 파일:
- 완전히 새로운 아이노드 번호를 할당받는다.
- 물리적인 디스크 공간을 새롭게 차지하며, 원본과 사본은 서로 독립적인 개체가 된다. (즉, 사본을 수정해도 원본은 변하지 않는다.)
- 원본 파일:
3. 사용법 및 구문 (Syntax)
3.1 기본 구문
cp [OPTION]... SOURCE... DEST
cp [OPTION]... SOURCE... DIRECTORY
3.2 주요 옵션 분석
| 옵션 | 설명 | 비고 |
|---|---|---|
-r****, -R | Recursive. 디렉터리를 복사할 때 하위 폴더와 파일까지 모두 포함하여 복사한다. | 디렉터리 복사 시 필수 |
-i | Interactive. 목적지에 이미 같은 이름의 파일이 있을 경우, 덮어쓸지 사용자에게 물어본다. | 실수 방지용 (필수 권장) |
-p | Preserve. 원본 파일의 소유자(Owner), 그룹, 권한(Mode), 시간 정보(Timestamp)를 그대로 유지한다. | 백업 시 유용 |
-a | Archive. -r과 -p를 포함하여 심볼릭 링크 등 모든 속성을 최대한 원본 그대로 복사한다. | 시스템 전체 백업 시 표준 |
-f | Force. 목적지 파일을 열 수 없거나 권한이 없어도 강제로 지우고 복사를 시도한다. | 주의해서 사용 |
3.3 실전 코드 예시
-
디렉터리 통째로 복사하기 (
r)cp는 기본적으로 파일만 복사하므로, 폴더를 복사하려면 반드시 재귀 옵션을 켜야 한다.
# data 폴더를 data_backup 폴더로 전체 복사 cp -r data data_backup -
속성 유지하며 백업하기 (
a)- 서버 이전이나 설정 파일 백업 시, 권한이 바뀌면 프로그램이 오작동할 수 있다. 이때
-a를 사용한다.
# 원본의 소유권, 시간, 권한을 완벽하게 보존 cp -a /etc/nginx/nginx.conf ./nginx.conf.bak - 서버 이전이나 설정 파일 백업 시, 권한이 바뀌면 프로그램이 오작동할 수 있다. 이때
-
덮어쓰기 방지 (
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) 역할을 한다.
- 소켓 생성:
- 사용자가 명령을 내리면 커널에 요청하여 TCP/UDP 소켓을 생성한다.
- 바인딩 및 연결:
- 서버 모드 (
l): 특정 포트에 소켓을 바인딩(Bind)하고LISTEN상태로 대기한다. - 클라이언트 모드: 대상 IP와 포트로
CONNECT요청(3-Way Handshake)을 보낸다.
- 서버 모드 (
- 데이터 스트리밍:
- 연결이 수립되면,
nc는 들어오는 데이터를 그대로 상대방에게 쏘아 보내고, 상대방이 보낸 데이터를 그대로 출력한다. - 어떠한 가공이나 헤더 수정 없이 Raw Data를 취급한다.
- 연결이 수립되면,
2.2 구현체의 종류
nc는 역사적으로 여러 버전이 존재하며, 기능이 미세하게 다르다.- netcat-traditional
- 가장 오래된 버전.
e옵션(프로그램 실행)이 있어 보안상 위험하다.
- 가장 오래된 버전.
- netcat-openbsd
- 대부분의 최신 리눅스 배포판(Ubuntu, CentOS 등)의 기본 버전. 보안을 위해
e옵션이 제거되어 있다.
- 대부분의 최신 리눅스 배포판(Ubuntu, CentOS 등)의 기본 버전. 보안을 위해
- ncat
- Nmap 프로젝트에서 개발한 현대적 버전. SSL/TLS 지원 등 기능이 가장 강력하다.
- netcat-traditional
3. 사용법 및 구문 (Syntax)
3.1 기본 구문
# 클라이언트 모드 (접속)
nc [HOST] [PORT]
# 서버 모드 (대기)
nc -l [PORT]
3.2 주요 옵션 분석
| 옵션 | 설명 | 비고 |
|---|---|---|
-l | Listen. 서버 모드로 동작하여 연결을 기다린다. | 포트 지정 필수 |
-p | Port. 사용할 로컬 포트를 지정한다. | -l과 함께 쓰이거나 생략 가능 |
-v | Verbose. 상세 정보를 출력한다. | 연결 성공/실패 여부 확인 시 필수 |
-n | No DNS. 호스트명 룩업(DNS 조회)을 하지 않고 IP로만 통신한다. | 속도가 빠르다. |
-z | Zero-I/O. 데이터를 전송하지 않고 포트가 열려있는지만 스캔한다. | 포트 스캔 시 사용 |
-u | UDP. TCP 대신 UDP 프로토콜을 사용한다. | 기본값은 TCP |
3.3 실전 코드 예시
-
간단한 채팅 서버 만들기
- 두 터미널(혹은 두 컴퓨터) 사이에서 텍스트를 주고받을 수 있다.
# [Server] 1234 포트 열고 대기 nc -l 1234 # [Client] 서버 IP(localhost)의 1234 포트로 접속 nc localhost 1234- 연결 후 입력하는 텍스트가 상대방 화면에 그대로 뜬다.
-
포트 스캔 (Telnet 대용)
- 특정 서버의 포트가 방화벽에 막혀있는지 확인할 때 가장 빠르고 정확하다.
# google.com의 80번 포트가 열려있는지 확인 (상세 출력) nc -v -z google.com 80 # 결과: Connection to google.com 80 port [tcp/http] succeeded! -
파일 전송
- 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로 구성된다.
- libcrypto:
- 대칭키(AES, ChaCha20), 비대칭키(RSA, ECDSA), 해시 함수(SHA-256) 등 기본적인 암호화 알고리즘을 구현한 라이브러리다.
- 난수 생성기(RNG)와 큰 수 연산(BigNum) 등 로우 레벨의 수학적 연산을 담당한다.
- libssl:
libcrypto를 기반으로 하여 TLS/SSL 프로토콜(핸드셰이크, 레코드 프로토콜)을 구현한 라이브러리다.
- openssl (CLI):
- 사용자가 터미널에서 입력한 명령어를 파싱하여 위 라이브러리의 함수를 호출한다.
- libcrypto:
2.2. 인증서 생성 및 검증 흐름 (PKI 관점)
- OpenSSL을 사용해 HTTPS 인증서를 만드는 과정은 PKI(Public Key Infrastructure)의 핵심 원리를 따른다.
- Key Pair 생성:
- 수학적으로 연결된 개인키(Private Key)와 공개키(Public Key)를 생성한다. (RSA 또는 ECC 알고리즘 사용)
- CSR (Certificate Signing Request) 생성:
- 공개키와 조직 정보(도메인, 국가 등)를 담아 인증 기관(CA)에 보낼 요청서를 만든다.
- 이때 ASN.1 형식을 사용하며 바이너리(DER) 혹은 텍스트(PEM)로 인코딩된다.
- 서명 (Signing):
- CA(혹은 자기 자신)의 개인키로 CSR의 해시값을 암호화하여 전자 서명을 첨부한다.
- 이것이 최종적인 '인증서(Certificate)'가 된다.
- Key Pair 생성:
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)
- 가장 대표적인 두 가지 스캔 방식의 내부 동작은 다음과 같다.
- TCP Connect Scan (
sT):- 일반적인
connect()시스템 콜을 사용한다. - 과정:
- SYN → SYN/ACK → ACK (3-Way Handshake 완료)
- 특징:
- 연결이 성립되므로 대상 서버의 로그에 기록이 남기 쉽다.
- 권한이 없는(Non-root) 사용자도 실행 가능하다.
- 일반적인
- TCP SYN Scan (
sS, Stealth Scan):- 과정:
- SYN → SYN/ACK → RST (연결 강제 종료)
- 특징:
- 3-Way Handshake를 완료하지 않고 중간에 끊어버린다.
- 따라서 애플리케이션 로그에 남지 않을 확률이 높으며(반-개방 스캔), 속도가 빠르다.
- 루트(Root/Admin) 권한이 필요하다.
- 과정:
- TCP Connect Scan (
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) 알고리즘에 기반한다.- 두 파일에서 공통적으로 존재하는 가장 긴 줄의 순서를 찾는다.
- 이 순서(LCS)에 포함되지 않은 줄들을 '변경된 부분(Diff)'으로 간주한다.
- 이를 통해 파일 중간에 새로운 내용이 삽입되어 줄 번호가 밀려도, 이후의 내용이 일치함을 인식할 수 있다.
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. 주요 특징
- 결정론적 (Deterministic): 동일한 입력값에 대해서는 항상 동일한 해시값이 출력된다.
- 단방향성 (One-way): 해시값(결과)을 보고 원래의 데이터(입력)를 역산하여 찾아내는 것이 수학적으로 매우 어렵다.
- Avalanche Effect: 입력 데이터에서 단 1비트만 바뀌어도 결과값은 완전히 다른 형태로 나타난다.
2.2. 처리 단계
- Padding: 입력 메시지의 길이가 512비트의 배수가 되도록 특정 비트를 추가한다.
- Initialize Variables: 해시 연산에 사용할 4개의 32비트 변수(A, B, C, D)를 초기화한다.
- Main Loop: 데이터를 512비트 블록 단위로 가져와 비선형 함수를 적용하여 변수들을 업데이트한다.
- 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...