리눅스 cpio 명령어 완벽 가이드: 아카이브 생성부터 복원까지 실무 핵심 옵션 총정리 (Ubuntu)

개요

리눅스 커널 initramfs 및 백업 시스템에서 널리 쓰이는 cpio 아카이브 도구의 핵심 사용법을 실습과 함께 알아봅니다. copy-out(-o), copy-in(-i), copy-pass(-p)의 세 가지 기본 모드와 주요 옵션별 실행 결과를 통해 실무 백업 및 복구 작업을 손쉽게 마스터할 수 있습니다.

1. cpio 패키지 설치 및 아카이브 생성(copy-out) 기초

Ubuntu 환경에서 cpio 명령어 실습을 진행하기 위해 패키지 목록을 갱신하고 cpio 패키지를 설치합니다.

sudo apt-get update -qq && sudo apt-get install -y cpio

아카이브 생성 실습에 사용할 디렉터리를 생성하고 이동한 뒤 테스트용 텍스트 파일들을 준비합니다.

mkdir -p ~/cpio_demo/src && cd ~/cpio_demo/src && echo ‘file1 content’ > file1.txt && echo ‘file2 content’ > file2.txt

cpio 명령어는 파일 목록을 표준 입력으로 받아 아카이브 파일로 묶거나 기존 아카이브에서 파일을 추출합니다.
현재 디렉터리의 파일 목록을 파이프라인으로 전달받아 단일 아카이브 파일(archive.cpio)로 묶어 생성합니다.
⚙️ [주요 옵션]

-o (--create) : 파일 목록을 입력받아 아카이브를 생성하는 copy-out 모드로 동작합니다.
-i (--extract) : 아카이브 파일에서 내용을 복원하거나 추출하는 copy-in 모드로 동작합니다.
-p (--pass-through) : 아카이브 파일을 거치지 않고 디렉터리 트리 간에 파일을 직접 복사하는 copy-pass 모드로 동작합니다.
-v (--verbose) : 처리 중인 파일 목록을 화면에 상세하게 출력합니다.
-t (--list) : 아카이브를 풀지 않고 내부의 파일 목록만 확인합니다.
-d (--make-directories) : 복원 시 필요한 디렉터리가 없으면 자동으로 생성합니다.
-u (--unconditional) : 기존에 동일한 파일이 존재하더라도 덮어씁니다.
-H (--format) : 아카이브의 포맷(예: crc, newc, tar 등)을 명시적으로 지정합니다.

ls | cpio -ov > ../archive.cpio

생성된 archive.cpio 아카이브 파일의 상세 정보와 용량을 사람이 읽기 쉬운 단위로 확인합니다.

ls -lh ../archive.cpio

2. 아카이브 내용 조회 및 복원(copy-in) 실무

생성된 archive.cpio 아카이브를 실제로 풀지 않고 내부 파일 목록과 권한 정보를 확인하기 위해 -t와 -v 옵션을 조합하여 조회합니다.
표준 입력을 통해 아카이브 내용을 전달받아 압축 해제 전 보관된 항목들을 안전하게 점검할 수 있습니다.

cpio -tv < ~/cpio_demo/archive.cpio

아카이브 복원 실습을 진행하기 위해 복원 전용 디렉터리를 생성하고 해당 위치로 이동합니다.

mkdir -p ~/cpio_demo/restore && cd ~/cpio_demo/restore

archive.cpio 아카이브에서 원본 파일을 현재 디렉터리로 추출하여 복원하기 위해 cpio -idv 명령어를 실행합니다.
필요한 하위 디렉터리를 자동 생성하는 -d 옵션과 처리 과정을 표시하는 -v 옵션을 함께 사용하여 안전하게 복원합니다.

cpio -idv < ~/cpio_demo/archive.cpio

아카이브 내부 파일들이 지정된 디렉터리에 정상적으로 복원되었는지 확인하기 위해 전체 파일 목록과 상세 정보를 조회합니다.

ls -la

3. 디렉터리 트리 고속 복사(copy-pass) 활용

디렉터리 트리 복사 실습을 위해 소스 디렉터리 내에 하위 디렉터리를 생성하고 테스트용 텍스트 파일을 추가합니다.

mkdir -p ~/cpio_demo/src/subdir && echo ‘sub file’ > ~/cpio_demo/src/subdir/subfile.txt

복사된 파일과 디렉터리 구조를 저장할 대상 디렉터리를 생성합니다.

mkdir -p ~/cpio_demo/target_dir

소스 디렉터리로 이동한 뒤 find 명령어로 탐색한 파일 목록을 파이프라인으로 전달하여, 아카이브 파일을 거치지 않고 대상 디렉터리로 직접 복사하는 copy-pass 모드(-p)를 실행합니다.
필요한 디렉터리를 자동 생성하는 -d, 원본 파일 수정 시간을 유지하는 -m, 처리 과정을 출력하는 -v 옵션을 함께 지정하여 디렉터리 구조를 온전하게 복제합니다.

cd ~/cpio_demo/src && find . -depth | cpio -pdmv ~/cpio_demo/target_dir

대상 디렉터리에 원본의 하위 디렉터리 구조와 파일들이 빠짐없이 복사되었는지 확인하기 위해 재귀적으로 파일 목록을 조회합니다.

ls -laR ~/cpio_demo/target_dir

4. 실무 표준 형식(SVR4/CRC) 아카이브 생성 및 gzip 연동

소스 디렉터리로 이동한 뒤 find 명령어로 추출한 파일 목록을 파이프라인으로 전달하여 리눅스 부팅 이미지 표준 포맷인 newc 형식의 아카이브를 생성하고, gzip 최고 압축률(-9)을 적용해 압축 아카이브 파일(initramfs_sample.cpio.gz)을 생성합니다.

cd ~/cpio_demo/src && find . | cpio -ov -H newc | gzip -9 > ../initramfs_sample.cpio.gz

생성된 initramfs_sample.cpio.gz 파일이 gzip으로 정상 압축된 바이너리 데이터 형식인지 확인하기 위해 file 명령어로 파일 유형을 조회합니다.

file ~/cpio_demo/initramfs_sample.cpio.gz

압축 아카이브 복원 실습을 진행하기 위해 전용 디렉터리를 생성하고 해당 위치로 이동합니다.

mkdir -p ~/cpio_demo/gz_restore && cd ~/cpio_demo/gz_restore

압축을 해제하며 표준 출력으로 데이터를 전달하는 zcat 명령어와 cpio 복원 모드(-idv)를 파이프라인으로 연결하여, 아카이브 내부의 파일들을 현재 디렉터리에 일괄 복원합니다.

zcat ~/cpio_demo/initramfs_sample.cpio.gz | cpio -idv

압축 해제 및 복원 작업이 완료된 후 현재 디렉터리에 원본 파일 및 숨김 파일들이 빠짐없이 정상 복원되었는지 확인하기 위해 전체 파일 상세 목록을 조회합니다.

ls -la

지금까지 Ubuntu 환경에서 cpio 명령어를 활용해 아카이브를 생성하고 복원하는 실무 핵심 옵션들을 간단하게 정리해보았습니다.
다양한 옵션과 파이프라인 활용법을 익혀 시스템 백업과 데이터 복구 작업을 한층 더 효율적으로 진행해보시기 바랍니다.