본문으로 이동

pax (명령어)

한울위키, 우리 모두의 백과사전.
(Pax (유닉스)에서 넘어옴)

pax
원저자Mark H. Colburn (The USENIX Association 후원)
개발자다양한 오픈 소스상용 소프트웨어 개발자
발표일1989년(37년 전)(1989)
저장소
  • {{URL|example.com|optional display text}}모듈:EditAtWikidata 29번째 줄에서 Lua 오류: attempt to index field 'wikibase' (a nil value).
프로그래밍 언어콜번 pax, 뮐러 pax, Heirloom Project pax: C
엔진
    모듈:EditAtWikidata 29번째 줄에서 Lua 오류: attempt to index field 'wikibase' (a nil value).
    운영 체제유닉스, 유닉스 계열, IBM i, 윈도우
    플랫폼크로스 플랫폼
    종류명령어
    라이선스콜번 pax: Prior BSD License
    뮐러 pax: BSD-4-Clause
    Heirloom Project pax: zlib
    윈도우: 사유 소프트웨어

    pax는 다양한 운영체제에서 사용할 수 있으며 1995년부터 정의된 아카이빙 유틸리티이다.[1] tarcpio 사이에 발생한 호환되지 않는 옵션들과 다양한 유닉스 버전에서 이들의 구현을 정리하기보다는, IEEE는 두 아카이버의 유용한 옵션을 모두 지원할 수 있는 새로운 아카이브 유틸리티인 pax를 설계했다. pax 명령어는 유닉스 및 유닉스 계열 운영체제IBM i[2], 그리고 마이크로소프트 윈도우 NT[3]에서 윈도우 2000까지 사용할 수 있다.

    2001년에 IEEE는 기본적으로 확장 속성이 추가된 tar와 유사한 새로운 pax 형식을 정의했다.[4][5] 이 형식은 대부분의 리눅스 배포판 및 FreeBSD의 pax 명령어에서는 지원되지 않지만, GNU 및 FreeBSD의 tar 명령어에서는 지원된다. 이 형식은 AIX, Solaris 및 HP-UX의 pax 명령어에서도 지원된다.

    "pax"라는 이름은 portable archive exchange의 약어이지만, "평화"를 의미하는 라틴어 단어를 암시하기도 한다. 명령어 호출 및 구조는 tarcpio의 평화로운 통합을 나타낸다.

    역사

    pax의 첫 공개 구현은 마크 H. 콜번(Mark H. Colburn)이 1989년에 작성했다. 콜번은 이를 comp.sources.unix에 유즈닉스/IEEE POSIX의 TAR 및 CPIO 대체 프로그램으로 게시했다. HP-UX, IRIX, SCO UNIX의 pax 매뉴얼 페이지는 pax를 콜번의 작품으로 언급한다.[6]

    1990년 7월의 POSIX.2 드래프트 10부터 pax 명령어를 다룬다.[7] 또한 1991년 POSIX.2 및 IEEE 1003.1b 드래프트는 cpio 및 ustar 아카이브 형식을 특징으로 하는 pax 명령어를 다룬다.

    또 다른 pax 프로그램 버전은 키스 뮐러(Keith Muller)가 1992~1993년에 만들었다.[8] 이 버전은 4.4BSD (1995년)에 처음 등장했다.[9] pax 명령어는 1995년 X/Open issue 4 (Single Unix Specification 버전 1)에 cpio 및 ustar 아카이브 형식을 특징으로 등장했으며[1] 이 두 형식은 1997년 Single Unix Specification에서도 유일하게 다루어진 형식이었다.

    1997년, 썬 마이크로시스템즈는 ustar 형식에 확장을 추가하는 방법을 제안했다. 이 방법은 새로운 pax 파일 형식으로 POSIX.1-2001 표준에 채택되었다. pax 유틸리티에 대한 POSIX 사양은 이 형식을 포함하도록 업데이트되었다.[1]

    기능

    모드

    pax는 -r ("읽기") 및 -w ("쓰기") 옵션의 조합으로 호출되는 네 가지 일반 모드를 가지고 있다.

    이 표는 모달 동작을 요약한다:

    옵션 모드 설명
    (없음) "목록" 아카이브의 내용을 보여주지만, 아무것도 수정하거나 추출하지 않는다.
    -r "읽기" 아카이브의 내용을 읽고 추출한다.
    -w "쓰기" 아카이브를 생성하거나 아카이브에 파일을 추가한다.
    -rw "복사" 파일 및 디렉터리 트리를 지정된 디렉터리로 읽고 복사한다.

    이 모델은 유사한 기본 작업 세트를 가진 cpio와 유사하다.

    예시

    아카이브 내용 나열:

    $ pax < archive.tar
    

    아카이브 내용을 현재 디렉터리로 추출:

    $ pax -r < archive.tar
    

    현재 디렉터리의 아카이브 생성:

    $ printf '.' | pax -w > archive.tar
    $ pax -w . > archive.tar
    

    현재 디렉터리 트리를 다른 위치로 복사:

    $ printf '.' | pax -w > archive.tar
    $ pax -rw target_dir .
    

    대상 디렉터리는 미리 존재해야 한다.

    명령어 호출

    기본적으로 pax는 아카이브 및 목록 작업에 표준 입출력을 사용한다. 이는 아카이브 파일을 지정하는 "tar 스타일" 옵션 -f로 변경할 수 있다. Pax는 디렉터리 내용을 재귀적으로 고려한다는 점에서 cpio와 다르다. 이 동작을 비활성화하려면 POSIX pax에는 이를 비활성화하는 옵션 -d가 있다.

    pax 명령어는 cpiotar 기능의 혼합이다. tar와 마찬가지로 pax는 디렉터리 항목을 재귀적으로 처리하는데, 이 기능은 cpio 스타일 동작을 위해 -d로 비활성화할 수 있다. 파일 입출력 처리도 혼합되어 있다. 명령줄에 파일 이름 목록이 지정되면 파일 입력 또는 목록 작성(tar와 유사)을 위한 셸 글로브로 간주된다. 그렇지 않으면 pax는 파일 목록에 표준 입력을 사용하는 cpio 스타일 동작을 취한다. 마지막으로 pax는 tar의 -f FILE 옵션을 사용하여 명명된 아카이브 파일에 읽기/쓰기를 지원한다.

    예를 들어, 현재 디렉터리를 cpio 스타일로 아카이빙하려면, cpio를 사용하는 것처럼 find와 함께 pax를 사용할 수 있다.

    $ find . -depth -print | pax -wd > archive.tar
    

    (find에 필터가 없으면 위 예시와 동일해지므로 이 구성은 의미가 없다.)

    아카이브에서 내용을 추출하는 명령어는 cpio와 동일하다.

    $ pax -r < archive.tar
    

    이러한 명령어는 tar와 유사한 구문으로도 호출할 수 있다.

    $ pax -wf archive.tar . # 쓰기 (아카이브)
    $ pax -rf archive.tar   # 읽기 (추출)
    $ pax -f archive.tar    # 목록
    $ pax -rw . archive_dir # 복사
    

    압축

    대부분의 pax 구현은 압축을 위해 -z (Gzip) 및 -j (Bzip2) 스위치를 사용한다. 그러나 이 기능은 POSIX에서 지정되지 않았다. pax는 압축된 아카이브에 추가할 수 없다는 점을 유의해야 한다.
    gzip으로 압축된 아카이브를 추출하는 예시:

    $ pax -rzf archive.tar.gz
    

    tar 및 cpio와 마찬가지로 pax 출력은 다른 압축/압축 해제 프로그램으로 파이프될 수 있다. 여기에 xz가 사용된 예시:

    $ pax -w . | xz > archive.tar.xz
    

    xz로 압축된 아카이브를 입력으로 나열하는 예시:

    $ xzcat archive.tar.xz | pax
    

    형식 지원

    POSIX.1-2001은 pax 명령어가 최소한 cpio, ustar 및 pax 아카이브 형식을 지원해야 한다고 요구한다.

    4.4BSD 구현에서 파생된 pax 명령어 버전은 일반적으로 -x 옵션을 통해 선택 가능한 해당 버전에서 지원하는 형식을 상속한다.

    • cpio – IEEE Std 1003.2 ("POSIX.2") 표준에 지정된 확장 cpio 교환 형식.
    • bcpio – 구식 바이너리 cpio 형식.
    • sv4cpio – System V release 4 cpio.
    • sv4crc – 파일 CRC 체크섬이 포함된 System V release 4 cpio.
    • tar – BSD4.3에서 발견된 구식 BSD tar 형식.
    • ustar (기본값) – IEEE Std 1003.2 ("POSIX.2") 표준에 지정된 tar 교환 형식.

    POSIX.1-2001 pax 형식은 이 BSD 버전의 pax 명령어에서 지원되지 않는다. 이 형식은 대부분의 리눅스 배포판(pax 명령어가 MirCPIO-paxmirabilis의 MirBSD 브랜치에서 파생됨)[10][11][12]FreeBSD에서는 지원되지 않는다.[9] 이 형식은 AIX[13], Solaris[14] 및 HP-UX의 pax 명령어에서 지원된다. 또한 Python tarfile 모듈[15], BSD 라이선스가 적용된 libarchive[16][17], 7-ZIP[18] 및 GNU tar[19]와 FreeBSD tar[20]에서도 지원된다. 2003년 군나르 리터(Gunnar Ritter)가 개발한 Heirloom Project pax 명령어는 pax 형식뿐만 아니라 많은 추가 형식도 지원한다.[21]

    다중 볼륨

    pax는 다중 볼륨 아카이빙을 지원한다. 볼륨의 끝에 도달하면 다음 메시지가 나타난다.

    $ pax -wf /dev/fd0 .
    주의! pax 아카이브 볼륨 변경이 필요합니다.
    /dev/fd0이 아카이브 볼륨 2를 위해 준비되었습니다.
    다음 저장 매체를 로드하고(필요한 경우) 쓰기 가능 상태인지 확인하십시오.
    계속하려면 "y"를 입력하고, pax를 종료하려면 "."를 입력하거나, 새 장치로 전환하려면 "s"를 입력하십시오.
    저장 매체를 변경할 수 없는 경우 "s"를 입력하십시오.
    장치가 준비되어 온라인 상태입니까? >
    

    다중 미디어에서 아카이브를 복원할 때, 아카이브의 끝에 도달하기 전에 미디어의 끝에 도달하면 pax는 동일한 방식으로 다음 미디어를 요청한다.

    표준화, 수용 및 인기도

    2001년에 IEEE에 의해 표준화되었음에도 불구하고, 2010년 기준으로 pax는 비교적 인기가 적거나 채택률이 낮다. 이는 부분적으로 유닉스 사용자들로부터 이에 대한 필요성이 없었기 때문이며, 단지 POSIX 위원회가 더 일관된 인터페이스를 원했을 뿐이다. Pax는 또한 상당히 수다스럽고 문제가 발생하면 사용자 상호 작용을 기대한다.

    pax는 2005년 7월 6일에 출시된 버전 3.0부터 리눅스 기본 규격에 의해 모든 준수 시스템에 존재해야 하지만[22] 지금까지 기본적으로 이를 탑재하고 설치하는 리눅스 배포판은 거의 없다. 그러나 대부분의 배포판은 pax를 별도로 설치 가능한 패키지로 포함한다.[23][24][25]

    pax는 또한 윈도우 NT에도 존재했는데, 여기서는 파일 아카이브(테이프는 지원되지 않음)로 제한되었다.[3] 나중에 인테릭스 하위 시스템으로 이동되었다. Win32 ACL 아카이빙 또는 복원을 지원하지 않는다.[26] pax는 윈도우 2000에도 존재했다.[27]

    Installer (macOS)에서 처리하는 패키지는 종종 Archive.pax.gz 파일에 내용의 대부분을 담고 있으며, 이는 시스템의 pax(heirloom) 유틸리티를 사용하여 읽을 수 있다.[28]

    같이 보기

    각주

    1. The Open Group Base Specifications Issue 6 - POSIX.1-2001 (IEEE Std 1003.1) Copyright © 2001-2004 The IEEE and The Open Group
    2. IBM. “IBM System i Version 7.2 Programming Qshell” (PDF) (영어). 《IBM. 2020년 9월 5일에 확인함. 
    3. 에릭 피어스 (1997). 《Windows NT in a nutshell: a desktop quick reference for system administrators》. 오라일리 미디어. 271쪽. ISBN 978-1-56592-251-8. 
    4. “GNU tar: 8.1 Using Less Space through Compression”. 《www.gnu.org》. 2016년 3월 6일에 원본 문서에서 보존된 문서. 2018년 4월 22일에 확인함. 
    5. “GNU tar: 4.3.2 Extended File Attributes”. 《www.gnu.org》. 2019년 12월 28일에 원본 문서에서 보존된 문서. 2021년 1월 27일에 확인함. 
    6. TAR versus Portability – PAX and USTAR, invisible-island.net
    7. IEEE P1003.2 Draft 11.2−September 1991 (pdf) - Shell and Utilities, princeton.edu - Draft 11 indicates changes to pax so it must have been in draft 10
    8. pax, svnweb.freebsd.org
    9. pax(1) – FreeBSD 일반 명령어 매뉴얼 페이지
    10. “MirCPIO — paxmirabilis: tar and even ar!”. 《MirBSD》. 2020년 1월 24일에 확인함. 
    11. “MirCPIO in Launchpad”. 《launchpad.net》. 2018년 4월 22일에 확인함. 
    12. “Bug #456405 "pax lack of support for "pax" format fails LSB" : Bugs : MirCPIO”. 《bugs.launchpad.net》. 2018년 4월 22일에 확인함. 
    13. pax for AIX 7.3, ibm.com
    14. pax for Solaris 11.1, docs.oracle.com
    15. tarfile, python.org
    16. libarchive, libarchive.org
    17. libarchive(3), freebsd.org
    18. HISTORY of the 7-Zip, 7-zip.org
    19. tar manual, gnu.org
    20. tar, freebsd.org
    21. “pax.1”. 《heirloom.sourceforge.net》. 2018년 4월 22일에 확인함. 
    22. Release notes for LSB 3.0 보관됨 2011-07-17 - 웨이백 머신 note that pax was added: LSB 3.0. Commands and Utilities requires pax, but LSB 2.1.0. Commands and Utilities does not require it
    23. pax, pkgs.org
    24. spax, pkgs.org
    25. heirloom-pax, pkgs.org
    26. “System Administration of Backups, Tar, and Pax in Interix”. 2010년 8월 23일에 원본 문서에서 보존된 문서. 
    27. Virtual x86, copy.sh
    28. “Extracting files from a pax.gz package”. cocoabuilder.com. 2015년 2월 14일에 원본 문서에서 보존된 문서. 2013년 8월 15일에 확인함. 

    추가 자료

    외부 링크