본문 바로가기

IT's Life/Linux

Linux 추출 RPM 패키지 파일 (cpio 명령)


RPM 패키지에서 파일을 추출하는 방법을 설명하기 전에 cpio 명령을 살펴 보겠습니다. 

cpio 명령은 아카이브 패키지에서 파일을 저장하고 읽는 데 사용됩니다. 즉, cpio 명령은 아카이브 패키지에서 파일 또는 디렉토리를 추출하거나 파일 또는 디렉토리를 아카이브 패키지로 복사 할 수 있습니다.

파일 라이브러리 라고도 하는 아카이브 패키지 는 실제로 다른 파일과 일부 관련 정보 (파일 이름, 액세스 권한 등)를 포함하는 cpio 또는 tar 형식의 파일입니다. 아카이브는 디스크의 파일이거나 테이프 또는 파이프 일 수 있습니다.

cpio 명령은 cpio 아카이브 라이브러리에 데이터 (파일)를 백업하거나 cpio 문서 라이브러리를 사용하여 데이터를 복구 할 수 있기 때문에 백업 또는 복원 명령으로 생각할 수 있습니다. 


cpio 명령을 사용하여 데이터를 백업 또는 복원하려면 다음을 참고하십시오.

  • cpio를 사용하여 데이터를 백업 할 때 절대 경로를 사용하면 데이터를 복원 할 때 데이터가 절대 경로로 자동 복원되며 백업 데이터가 상대 경로를 사용하는 경우 데이터는 상대 경로로 복원됩니다.
  • cpio 명령은 자체적으로 백업 (또는 복원) 파일을 지정할 수 없으며, 성공적인 읽기를 위해서는 대상 파일 (또는 디렉토리)의 전체 경로가 필요하므로이 명령은 종종 find 명령과 함께 사용됩니다.
  • cpio 명령은 데이터를 복원 할 때 동일한 이름으로 파일을 자동으로 덮어 쓰거나 디렉토리를 작성하지 않습니다 (현재 폴더로 직접 추출).

cpio 명령에는 다음과 같은 세 가지 기본 모드가 있습니다.

1. "-o"모드 : 파일 라이브러리에 데이터를 백업하는 복사 모드를 나타내며 명령 형식은 다음과 같습니다.

[root @ localhost ~] # cpio -o [vcB]> [파일 丨 장치]

옵션의 의미는 다음과 같습니다.

  • -o : 복사 모드, 백업;
  • -v : 백업 프로세스를 표시합니다.
  • -c : 최신 휴대용 형식 저장 방법을 사용하십시오.
  • -B : 입력 / 출력 블록을 모드의 512 바이트 대신 5120 바이트로 설정하십시오.

예를 들어, cpio를 사용하여 데이터를 백업하는 명령은 다음과 같습니다.

[root @ localhost ~] #find / etc -print | cpio -ocvB> /root/etc.cpio # 

find 명령을 사용하여 / etc /에 백업 할 디렉토리를 지정하고> export to etc.cpio 파일 

[root @ localhost ~] #을 사용하십시오. II -h 등 cpio 

-rw--r--r-. 1 루트 루트 21M 6 월 5 일 12:29 등 cpio 

# etc.cpio 파일 생성


2. "-i"모드 : 파일 라이브러리에서 데이터를 복구하는 복사 모드를 나타냅니다. 명령 형식은 다음과 같습니다.

[root @ localhost ~] # cpio -i [vcdu] <[파일 | 장치]

각 옵션의 의미는 다음과 같습니다.

  • -i : 복사 모드, 복원;
  • -v : 복원 프로세스를 표시합니다.
  • -c : 최신 휴대용 포맷 저장 방법;
  • -d : 복원시 새 디렉토리를 자동으로 작성합니다.
  • -u : 오래된 파일을 새로운 파일로 자동 덮어 씁니다.

예를 들어, cpio를 사용하여 이전에 백업 한 데이터를 복원하려면 명령은 다음과 같습니다.

[root @ localhost ~] # cpio -idvcu </root/etc.cpio # 

등의 백업 복원 

# 현재 디렉토리 / root /를 보면 / etc / 디렉토리가 생성되지 않습니다. 이는 백업시 / etc / 디렉토리가 절대 경로를 사용하기 때문에 데이터가 / etc / system 디렉토리로 직접 복원되고 / root / etc / 디렉토리에서 생성되지 않기 때문입니다.


3. "-p"모드 : 복사 모드를 나타냅니다 .-p 모드를 사용하여 디렉토리에서 모든 파일을 읽을 수 있지만 cpio 라이브러리에 백업하지 말고 직접 다른 파일로 복사하십시오. 

예를 들어, -p를 사용하여 / boot /를 / test / boot 디렉토리에 복사하면 다음 명령을 실행할 수 있습니다.

[root @ localhost ~] # cd / tmp / #Enter 

/ tmp / 디렉토리 

[root @ localhost tmp] #rm -rf * # 

/ tmp / 디렉토리의 모든 데이터 삭제 

[root @ localhost tmp] # mkdir test # 

백업 작성 디렉토리 

[root @ localhost tmp] # find / boot / -print | cpio -p / tmp / test #backup 

/ boot / 디렉토리를 / tmp / test / 디렉토리 

[root @ localhost tmp] # ls test / boot 

# 있다/ / boot / 디렉토리는 tmp / test / 디렉토리에 백업됩니다.


cpio 명령을 사용하여 RPM 패키지에서 지정된 파일을 추출하십시오.

서버를 사용하는 동안 시스템 파일이 수정되거나 실수로 삭제 된 경우 cpio 명령을 사용하여 원래 RPM 패키지에 필요한 시스템 파일을 추출하여 잘못 처리 된 소스 파일을 복구 할 수 있습니다. 

RPM 패키지를 사용하면 다음 명령 형식을 사용하여 파일을 하나씩 추출 할 수 있습니다.

[root @ localhost ~] # rpm2cpio 패키지 전체 이름 | cpio -idv .file 절대 경로

이 명령에서 rpm2cpio는 RPM 패키지를 cpio 형식으로 변환하는 명령으로, cpio 명령은 cpio 파일 라이브러리에서 지정된 파일을 추출 할 수 있습니다. 


예를 들어 실수로 / bin / ls 명령을 삭제했다고 가정하면 일반적으로 두 가지 방법으로 수정할 수 있습니다.

-force 옵션을 사용하여 coreutils-8.4-19.el6.i686 패키지 (ls 명령이 포함 된 RPM 패키지)를 설치하십시오.

cpio 명령을 사용하여 coreutils-8.4-19.el6.i686 패키지에서 / bin / ls 파일을 추출하고 적절한 위치에 복사하십시오.

여기서 우리는 두 번째 방법을 선택합니다. ls 명령이 해당 RPM 패키지에 속하는지 어떻게 알 수 있습니까? 매우 간단 rpm -qf 합니다. 다음과 같이 명령을 사용하십시오  .

[root @ localhost ~] # rpm -qf / bin / ls 

coreutils-8.4-19.el6.i686 #ls 

파일이 속하는 패키지보기


이를 바탕으로 cpio 명령을 사용하여이 RPM 패키지에서 ls 명령 파일을 추출한 다음 해당 위치로 복사하면됩니다.

[root @ localhost ~] # mv / bin / ls / root / 

# / bin / ls 명령을 / root / 디렉토리로 옮기면 실수로 삭제 된 것처럼 보입니다 

[root @ localhost ~] # ls 

-bash : ls : command not 발견 

# 1!이 시간에 명령, 시스템 오류 "명령을 찾을 수 없습니다"보고합니다 

[루트 @ localhost를 ~] # 명령을 내리면 /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm 

CPIO -idv ./bin | / ls 

# ls 명령 파일을 현재 디렉토리에 추출하십시오 

[root @ localhost ~] # cp / root / bin / ls / bin / 

# 추출 된 ls 명령 파일을 / bin / 디렉토리 

[root @ localhost ~] #에 복사하십시오 . ls 

anaconda-ks.cfg bin inittab install.log install.log.syslog ls 

#는 ls 명령이 정상적으로 사용될 수 있음을 알 수 있습니다.