cpio 명령어의 기본 동작 모드
cpio는 리눅스 환경에서 아카이브 생성 및 복원 작업에 사용되는 저수준 도구로, 주로 표준 입력과 출력을 통해 데이터 스트림을 처리합니다. 이 명령은 세 가지 주요 동작 모드를 제공합니다:
- -o (copy-out 모드): 지정된 파일들을 아카이브로 백업합니다.
- -i (copy-in 모드): 아카이브로부터 파일을 시스템으로 복원합니다.
- -p (pass-through 모드): 아카이브 없이 직접 파일을 다른 위치로 복사합니다.
주요 옵션 설명
| 옵션 | 설명 |
|---|---|
| -o | 아카이브 생성 (백업) |
| -i | 아카이브로부터 복원 |
| -v | 처리 중인 파일 목록을 화면에 출력 (verbose) |
| -c | 포터블 형식으로 저장하여 호환성 향상 |
| -B | 블록 크기를 5120바이트로 설정 (기본값 512) |
| -d | 복원 시 필요한 디렉터리 자동 생성 |
| -u | 모든 파일을 강제 덮어쓰기 (최신 여부와 무관) |
예제: find와 함께 사용한 백업 작업
[root@centos2 ~]# find /etc -print | cpio -ovcB > /root/etc_backup.cpio
이 명령은 /etc 디렉터리 내 모든 파일을 찾아 etc_backup.cpio 아카이브에 저장합니다. 옵션 -v를 사용하면 처리 중인 각 파일 경로가 출력되어 진행 상황을 확인할 수 있습니다.
절대 경로와 상대 경로의 차이
절대 경로(/etc)로 백업한 경우, 복원 시에도 시스템의 동일한 위치에 덮어써집니다. 반면 상대 경로(./etc)를 사용하면 현재 작업 디렉터리를 기준으로 복원됩니다. 아래 예시는 상대 경로 기반 백업 및 격리된 환경에서의 복원을 보여줍니다.
[root@centos2 ~]# cd /etc [root@centos2 etc]# find . -print | cpio -ovcB > /root/etc_relative.cpio [root@centos2 ~]# mkdir -p /root/recovery_test [root@centos2 ~]# cd /root/recovery_test [root@centos2 recovery_test]# cpio -ivdcu < /root/etc_relative.cpio
복원 결과, 원본 /etc의 구조가 현재 디렉터리 내에 그대로 재현됩니다.
파일 시스템 내 직접 복사 (Pass-through Mode)
-p 모드는 아카이브 파일을 생성하지 않고, 파이프를 통해 실시간으로 파일을 복사합니다. 예를 들어 /boot의 내용을 /tmp/test/boot에 복제할 수 있습니다.
[root@centos2 ~]# mkdir /tmp/test [root@centos2 ~]# find /boot -print | cpio -pd /tmp/test
복사 후 /tmp/test에는 boot 디렉터리가 생성되고, 내부 파일들이 정상적으로 복제된 것을 확인할 수 있습니다.
RPM 패키지 내부 파일 추출
RPM 패키지는 내부적으로 cpio 아카이브 형식을 사용하므로, rpm2cpio 명령어로 변환 후 특정 파일만 선택적으로 추출할 수 있습니다. 일반적인 구문은 다음과 같습니다:
rpm2cpio [패키지_경로] | cpio -idv [추출할_파일_경로]
실제 예제: inittab 파일 추출
먼저 해당 파일이 속한 패키지를 확인합니다.
[root@centos2 ~]# rpm -qf /etc/inittab initscripts-9.49.47-1.el7.x86_64
CD-ROM에 마운트된 RPM 파일에서 /etc/inittab만 추출해 봅니다.
[root@centos2 ~]# cd /root/extract_area [root@centos2 extract_area]# rpm2cpio /mnt/cdrom/Packages/initscripts-9.49.47-1.el7.x86_64.rpm | cpio -idv ./etc/inittab
결과적으로 현재 디렉터리에 ./etc/inittab이 생성되며, 소유권과 권한도 원본과 동일하게 유지됩니다. 이 방법은 패키지를 설치하지 않고도 필요한 구성 파일이나 스크립트를 미리 검토할 때 유용합니다.