Compression
如何提取“X1 檔案”?
我有一個沒有文件副檔名的奇怪文件,據說它是 git 儲存庫內容的存檔。根據
file (1)
,這是一個“X1 檔案”:$ file my_git_repo my_git_repo: X1 archive data
但是,我想不出任何方法來提取或查看此文件的內容。我試過了:
tar
unzip
bzip2
xz
lzip
lzma
lzop
gzip
uncompress
但是這些工具都不能辨識我的文件。我也嘗試在Wikipedia和Arch Wiki上尋求幫助,但這些頁面都沒有提到“X1”。我還嘗試了“X1 存檔”或“提取 X1 文件”的Google搜尋變體,但主要是我得到了名為“X1”的產品或服務的結果,似乎與名為“X1”的文件格式無關。最後,我嘗試使用 之類的工具查看該文件
strings
,該文件確實包含我希望在我的 git 儲存庫中的文件的文件名以及該儲存庫中文件的片段,所以我不認為這個文件是只是隨機數據或類似的東西。我有什麼樣的文件,如何查看其內容?
好的,這個我想通了。
我注意到文件的第一行包含一個奇怪的字元串:
% head -n 1 my_git_repo | strings X11 forwarding request failed on channel 0
那根弦似曾相識。我的預設 SSH 配置嘗試轉發 X11 連接,但是當它失敗時——例如通過 ssh 對 git 伺服器執行 git 操作時——該字元串會列印在 stderr 上:
$ git archive --remote=ssh://git@my.git.server/my_git_repo.git master > my_git_repo.tar X11 forwarding request failed on channel 0
我猜測創建 git 存檔的庫同時擷取了 stdout 和 stderr 而不僅僅是 stdout,這將解釋該文件的第一行是如何形成的。
因此,如果我刪除該文件的第一行,我會得到更合理的輸出
file (1)
:$ tail -n +2 my_git_repo > my_git_repo.edit $ file my_git_repo.edit my_git_repo.edit: Zip archive data, at least v1.0 to extract
如果我將文件重命名為
my_git_repo.zip
並嘗試使用 來查看文件的內容unzip -l
,我發現它包含我期望的文件,並且當我使用 提取檔案時unzip
,我得到了我想要的文件。我不確定從哪裡
libmagic
得到這個文件是“X1 存檔”的想法,但我猜它與“X1”是損壞文件的前兩個字元有關。