
如果我透過 Internet 下載 100 MB 的簽章二進位文件,則需要 200 MB 的磁碟空間才能開啟它。該文件只是簽名,未加密。
當磁碟空間不足時,由於 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)
現在您需要將文件截斷到正確的長度。truncate
GNU 中有一個實用程序coreutils
,它將出現在許多 Unix 系統上。但是,您需要知道預告片的位元組偏移量。這可以透過 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