在海量文件中搜索特定的魔法字节

在海量文件中搜索特定的魔法字节

我想知道如何搜索特定文件类型:我已经进入 SSH 服务器并尝试搜索文件.jpg,但服务器的所有者(我的老师)已删除所有扩展名。

我尝试过grep -lr "JFIF",发现许多目录具有相同的文件名,因此我跳入使用该grep命令找到的随机目录并尝试cat在其上使用该命令,但终端无法显示整个二进制文件。

而且该strings命令在 ssh 服务器上被阻止,我的老师说你必须找到一个 jpg 文件,并且该文件包含序列号(SN),但我不知道在哪里可以找到它。

如果你们想要 SSH 基数,我很乐意把它们提供给你们,无论如何,我的老师说你可以使用命令file来做到这一点,但我不知道该怎么做。

顺便说一句:他说(SN)

答案1

我会尽力给你一些提示,以便你可以自己解决你的作业。

请遵循以下步骤:

  1. file通过执行来阅读的手册man file
  2. 然后尝试一下file somefile,看看会发生什么
  3. 尝试file在不同的文件类型上运行
  4. 现在您应该能够理解如何判断某个文件是否是 jpeg 图像。
  5. 现在阅读手册find(或使用谷歌查找如何使用它来查找某个目录和所有子目录中的所有文件)
  6. 现在找出如何使用-exec选项find来将其与以前使用的file命令连接起来
  7. 现在你应该能够找出所需目录中所有文件的文件类型并列出它们
  8. 现在阅读有关管道|grep命令的信息,了解如何仅过滤 JPEG 文件。

答案2

首先我要感谢@incBrain 和@Serg 没有直接回答我的问题,这帮助我了解了很多新的东西:)。

我的任务是找到一个.jpg扩展名被删除的特定文件,我首先想到的是.jpg 魔法字节也就是说JFIF,通过 @incBrain 指令,我能够构建这个命令

find / -exec file {} \; | grep "JFIF"

该行将find命令链接到file使用命令然后获取两个&命令-exec的输出并通过命令的管道符号将其作为输入传输,该命令仅显示其二进制文件中包含的文件(又名) 。findfile|grepJFIF.jpg files

我的问题实际上是找到一个特定的序列号,起初我以为序列号包含在文件的二进制文件中,但那是错的,然后一个疯狂的想法浮现在我的脑海里

哦!为什么我看不到图片,我的意思是如果我找不到序列号,拿到图片就好了

我在互联网上搜索了将文件从 SSH 传输到我的机器的好方法,然后我发现了这个有效的代码块!

scp [email protected]:/home/example/file.txt /Local_Directory

我希望这个答案将来能对某人有所帮助:)。

答案3

一个可能的解决方案是:使用find递归列出常规文件(-type f),并对file每个文件执行命令。将输出重定向到grep以过滤掉文件类型。

然而在这里,我想做一些比这更有趣的事情;更尴尬,但更有趣。

$ find .  -maxdepth 1 -type f -printf "%f\t" -exec hexdump -n8 {} \;  | awk '/d8ff e0ff 1000 464a/{print $1}'

您可能知道也可能不知道,每个文件的前 8 个字节都指定了文件类型。因此,find我们使用搜索所有常规文件,打印其名称,然后执行 hexdump 提取前 8 个字节,并过滤掉awk仅包含这 8 个字节的文件名。

这是一个小证明:

$ hexdump -n 10 1450763029649.jpg               
0000000 d8ff e0ff 1000 464a 4649               
000000a

$ hexdump  -C -n 10 1450763029649.jpg           
00000000  ff d8 ff e0 00 10 4a 46  49 46                    |......JFIF|
0000000a

答案4

file * | grep -i "jpeg"

这将搜索目录中的每个文件并返回其文件类型。通过管道,|这些结果随后由 grep 搜索以找到文件类型为“jpeg”或基本上是 .jpg 文件的文件。

相关内容