
인터넷을 통해 다운로드한 100MB의 서명된 바이너리 파일이 있는 경우 이를 열려면 200MB의 디스크 공간이 필요합니다. 파일은 암호화되지 않고 서명만 됩니다.
디스크 공간이 부족하면 gpg 명령이 실패하여 원본 파일을 가져올 수 없습니다. 서명된 gpg 파일이 원본 파일 + 시작과 끝의 몇 바이트의 서명임을 확인했습니다. 새 파일을 생성하지 않고 파일에서 이러한 바이트를 제거하여 디스크 공간을 절약할 수 있습니까? 서명은 다음을 사용하여 확인할 수 있습니다.
# gpg --verify filename.gpg
디스크에 새 파일을 생성하지 않고. 샘플 워크플로는 아래에 설명되어 있습니다.
# # Sample workflow
# cd /tmp/new
# wget http://someaddress/filename.gpg
# ls
filename.gpg
# du -h filename.gpg
100M filename.gpg
# gpg filename.gpg
gpg: Signature made Thu May 28 10:53:26 2015 UTC using RSA key ID XXXXXXXXX
gpg: Good signature from "Example <[email protected]>"
# ls
filename filename.gpg
# du -ch *
100M filename
100M filename.gpg
200M total
# rm filename.gpg
디스크 공간이 부족하면 gpg filename.gpg 명령이 실패합니다.
답변1
다음과 같이 다운로드 프로세스를 결합하고 하나의 파이프 프로세스로 서명을 확인할 수 있습니다.
wget -qO- http://someaddress/filename.gpg|gpg >filename
답변2
예, 더 많은 디스크 공간을 사용하지 않고도 처음과 끝에서 바이트를 제거할 수 있습니다. 그러나 대부분의 유틸리티는 파일을 새 파일에 복사하고 이전 파일을 삭제한 다음 새 파일의 이름을 이전 파일과 동일하게 바꿉니다. gpg
이 범주에 속한다고 가정하는 것이 안전하다고 생각합니다 . 물론 이는 파일에 필요한 디스크 공간을 두 배로 사용합니다.
당신이 해야 할 일은:
- PGP 헤더의 크기만큼 파일의 바이트를 "아래로" 이동합니다.
- PGP 트레일러를 제거하려면 파일 길이를 설정하세요.
올바른 유틸리티를 사용하면 이 작업을 단일 단계로 수행하는 것도 가능하며 이를 수행하는 C 프로그램을 쉽게 작성할 수도 있습니다.
하지만 이미 사용 가능한 도구만 사용하여 작업을 수행하고 싶다고 가정합니다. 실제로 다음을 사용하여 이 작업을 수행할 수 있습니다 dd
.
dd if=filename.gpg of=filename.gpg bs=49 skip=1 conv=notrunc
이는 헤더 길이가 49바이트라는 가정에 따른 것입니다. (YMMV)
이제 파일을 올바른 길이로 잘라야 합니다. 많은 Unix 시스템에 존재하는 truncate
GNU 라는 유틸리티가 있습니다 . coreutils
그러나 트레일러의 바이트 오프셋을 알아야 합니다. 이는 GNU를 사용하여 수행할 수 있습니다 grep
.
grep -b '^-----BEGIN PGP SIGNATURE-----' filename.gpg
그러면 다음과 같이 출력됩니다.
104857600:-----BEGIN PGP SIGNATURE-----
마지막 단계는 이 값을 다음과 함께 사용하는 것입니다 truncate
.
truncate -s 104857600 filename.gpg
그러나 예고편의 길이를 이미 알고 있는 경우에는 해당 바이트 수만큼 파일을 줄이도록 grep
지시 할 수 있습니다.truncate
truncate -s -103 filename.gpg