cpio는 일반 파일 아카이버 유틸리티 및 그것의 결합된 파일 형식입니다. 그것은 주로 유닉스-계열 컴퓨터 운영 시스템에 설치됩니다. 소프트웨어 유틸리티는 원래 Programmer's Workbench (PWB/UNIX)의 일부로 테이프 아카이빙 프로그램으로 의도되었었고, 이후 출시되는 거의 모든 유닉스 운영 시스템의 구성 요소가 되었습니다. 그 이름은 프로그램의 작동에서 표준 입력과 표준 출력 사용에 대한 자세한 설명에서 copy in and out이라는 문구에서 파생됩니다.
유닉스의 모든 변종은 tar와 같은 다른 백업과 아카이빙 프로그램도 지원하며, 이 프로그램은 널리 인정받고 있습니다. 리눅스 커널 2.6의 initramfs에서 RPM 패키지 매니저와 Apple의 설치 프로그램 (pax)에서 (pax)에 의한 cpio의 사용은 cpio를 중요한 아카이빙 도구로 만듭니다.
원래 설계 이후, cpio와 그것의 아카이브 파일 형식은 여러 번, 때때로 호환되지 않는, 수정을 거쳤습니다. 가장 주목할만한 것은 아카이브 파일 메타 정보의 바이너리 형식의 사용에서 ASCII-기반 표현으로의, 이제 동작 옵션, 변경입니다.
History
cpio는 Programmer's Workbench 프로젝트의 일부로 버전 7 유닉스에 나타났습니다.
Operation and archive format
cpio는 원래 테이프 장치에 백업 파일 아카이브를 순차적이고 연속적인 방식으로 저장하도록 설계되었습니다. 그것은 임의의 콘텐츠를 압축하지 않지만, 결과 아카이브는 종종 gzip 또는 기타 외부 압축기를 사용하여 압축됩니다.
Archive creation
-o 명령줄 플래그로 시작된 copy-out 작업 중에 아카이브를 만들 때, cpio는 표준 입력 채널에서 파일과 디렉터리 경로 이름을 읽고 결과 아카이브 바이트 스트림을 표준 출력에 씁니다. Cpio는 따라서 전형적으로 find 프로그램과 같이 아카이브할 파일 목록을 생성하는 다른 유틸리티와 함께 사용됩니다.
결과 cpio 아카이브는 파일이름, inode 번호, 소유자, 권한 및 타임스탬프와 같은 파일 메타 정보를 갖는 헤더 섹션으로 구분된 단일 아카이브로 연결된 일련의 파일과 디렉토리입니다. 관례에 따라, 아카이브의 파일 이름은 보통 파일 확장자가 cpio로 지정됩니다.
이 예제는 find 유틸리티를 디렉토리 트리의 아카이브를 생성하기 위해 현재 디렉토리에서 시작하는 경로 이름의 목록을 생성하기 위해 사용합니다:
$ find . -depth -print | cpio -o > /path/archive.cpio
Extraction
명령줄 플래그 i에 의해 시작된 copy-in 작업 동안, cpio는 표준 입력에서 아카이브를 읽고 운영 시스템의 파일 시스템에 아카이브된 파일을 다시 만듭니다.
$ cpio -i -vd < archive.cpio
명령줄 플래그 d는 필요에 따라 디렉터리를 구성하도록 cpio에 지시합니다. 플래그 v (verbose)는 파일이 추출될 때 그것의 이름을 나열합니다.
옵션 플래그가 아닌 임의의 남아있는 명령줄 인수는 쉘과 유사한 글로빙-패턴입니다; 일치하는 이름을 갖는 아카이브에서 오직 파일이 아카이브에서 복사됩니다. 다음 예제는 아카이브에서 /etc/fstab 파일을 추출합니다:
$ cpio -i -d /etc/fstab < archive.cpio
List
cpio 아카이브에 포함된 파일은 다음 호출과 함께 나열될 수 있습니다:
$ cpio -t < archive.cpio
cpio 아카이브는 상대 경로가 아닌 절대 경로 (예를 들어, /bin/ls 대 bin/ls)를 포함할 수 있으므로 목록이 유용할 수 있습니다.
Copy
cpio는 파일을 복사하는 세 번째 유형의 작업을 지원합니다. 그것은 pass-through 옵션 플래그 (p)로 시작됩니다. 이 모드는 실제로 임의의 파일 아카이브 생성없이 copy-out 및 copy-in 단계를 결합합니다. 이 모드에서, cpio는 copy-out작업과 같은 표준 입력에서 경로 이름을 읽지만, 아카이브를 만드는 대신, 그것은 명령줄 인수로 지정된 경로에 지정된 대로 파일 시스템에서 다른 위치에 디렉터리와 파일을 다시 만듭니다.
이 예제는 현재 디렉토리에서 시작하는 디렉토리 트리를 파일 시스템에서 또 다른 경로 new-path로 복사하고, 파일 수정 시간 (flag m)을 보존하고, 필요에 따라 디렉토리를 생성하고 (d), 존재하는 파일을 무조건 교체하지만 (u), 표준 출력의 진행 상황 목록을 생성합니다 (v):
$ find . -depth -print | cpio -p -dumv new-path
POSIX standardization
cpio 유틸리티는 POSIX.1-1988에서 표준화되었지만, 파일 크기 (및 다른) 제한으로 인해 POSIX.1-2001에서는 생략되었습니다. 예를 들어, GNU 버전은 2,147,483,647 바이트 (2GB) 및 8,589,934,591바이트 (8GB)의 파일 크기 제한을 가지는, 각각, "bin" (기본값 및 사용되지 않음) 및 "ustar" (POSIX tar)와 같은 다양한 출력 형식 옵션을 제공합니다.
cpio, ustar 및 pax 파일 형식은 현재 POSIX 1003.1-2008과 호환되는 pax 유틸리티에 대해 POSIX.1-2001에 정의되고, 따라서 cpio와 ustar 형식 아카이브를 읽고 쓸 수 있습니다.
Implementations
대부분의 리눅스 배포판은 cpio의 GNU 버전을 제공합니다. FreeBSD와 macOS는 libarchive와 함께 제공되는 BSD-라이선스 bsdcpio를 사용합니다.