我有一个没有文件扩展名的奇怪文件,据说是 git 存储库内容的存档。根据file (1)
,这是一个“X1 存档”:
$ file my_git_repo
my_git_repo: X1 archive data
但是,我无法找到任何方法来提取或查看该文件的内容。我试过了:
tar
unzip
bzip2
xz
lzip
lzma
lzop
gzip
uncompress
但这些工具都无法识别我的文件。我也尝试过查看维基百科和拱门维基寻求帮助,但这些页面都没有提到“X1”。我还尝试过在谷歌上搜索“X1 archive”或“extract X1 file”的变体,但主要得到的是名为“X1”的产品或服务的结果,并且似乎没有与名为“X1”的文件格式相关的结果。最后,我尝试使用诸如 之类的工具查看该文件strings
,该文件确实包含我期望在 git 存储库中的文件的文件名以及该存储库中文件的片段,所以我认为该文件不是只是随机数据或类似的数据。
我有什么类型的文件以及如何查看其内容?
答案1
好吧,我已经弄清楚了这一点。
我注意到文件的第一行包含一个奇怪的字符串:
% head -n 1 my_git_repo | strings
X11 forwarding request failed on channel 0
那根绳子看起来很熟悉。我的默认 SSH 配置尝试转发 X11 连接,但是当它失败时(例如通过 ssh 对 git 服务器运行 git 操作时),该字符串会打印在 stderr 上:
$ git archive --remote=ssh://[email protected]/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”是损坏文件的前两个字符有关。