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 명령이 정상적으로 사용될 수 있음을 알 수 있습니다.
'IT's Life > Linux' 카테고리의 다른 글
Linux yum, yum 소스 구성이란 무엇입니까 (네트워크 yum 소스 및 로컬 yum 소스) (0) | 2019.08.15 |
---|---|
Linux SRPM 소스 패키지 설치 (두 가지 방법) (0) | 2019.08.14 |
Linux RPM 패키지 확인 및 디지털 인증서 (디지털 서명) (0) | 2019.08.14 |
Linux rpm 명령 쿼리 패키지 (-q, -qa, -i, -p, -l, -f, -R) (0) | 2019.08.14 |
Linux RPM 패키지 설치, 제거 및 업그레이드 (rpm 명령) (0) | 2019.08.14 |