有时你会因一个文件而迷惑,这个文件可能是在你的文件夹中的一个未知类型的文件,它可能是你的父母或者客户给你的。不幸的是,你不知道它到底是一种什么样的文件。在Mac上文件是不带有拓展名的,所以可能并没有足够的信息来告诉你“Flongnozzle-2012”到底包含了什么内容。然而终端(Terminal)可以为你提供一些便利,你可以使用一些内嵌的命令行工具来帮助你鉴别文件。
识别文件内容
对于这种情况,file命令恰好是我所需要的。file指令可以检测一个文件的内容然后试图去弄清楚它是什么。
1 2 3 |
% file launchHandler.m launchHandler.m: ASCII C++ program text |
当然,这其实是Objective-C文件,不过终端已经非常接近了,终端将其鉴别为一个内有代码的文件。“等等,MarkD(注:作者),它仅仅看下文件的拓展名不就行了吗?”file命令也支持这种情况,不过拓展名并不是必须的:
1 2 3 4 5 |
% cp launchHandler.m splunge % file splunge splunge: ASCII C++ program text |
没有文件拓展名,不过我们依然鉴别出了这个文件是什么。将file命令指向一个可能包含可执行代码的文件或目录,它会告诉你其内在的结构:
1 2 3 |
% file /bin/ls /bin/ls: Mach-O 64-bit executable x86_64 |
你可能会说,如果你有一个体积庞大的二进制文件(例如,原生的App)怎么办,下面是办法:
1 2 3 4 5 |
% file /Applications/Reason/Reason.app/Contents/MacOS/Reason Reason.app/Contents/MacOS/Reason: Mach-O universal binary with 2 architectures Reason.app/Contents/MacOS/Reason (for architecture i386): Mach-O executable i386 Reason.app/Contents/MacOS/Reason (for architecture x86_64): Mach-O 64-bit executable x86_64 |
将file指向一个图片文件来看看图片的一些信息:
1 2 3 |
% file Flongnozzle-2012 Flongnozzle-2012: PNG image data, 1932 x 904, 8-bit/color RGB, non-interlaced |
哦等等,这里有一个终端的使用小技巧:将文件的图标从Finder中拖入终端窗口,这就相当于将你拖动的这个文件或文件夹的完整路径粘贴进去了。
进一步探索
有时file也不会让你满意,或者你可能想要知道关于文件的更多信息。一般来说,你总是可以通过QuickLook在Finder中浏览一下文件,如果这样不起作用,那么你可以使用hexdump命令来看看出文件的字节数,也可以传入参数-c来看看翻译成ASCII码之后的信息。
例如,回到我们之前的那个图片文件:
1 2 3 4 5 6 7 |
% hexdump -C Flongnozzle-2012 | head 00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 |.PNG........IHDR| 00000010 00 00 07 8c 00 00 03 88 08 02 00 00 00 a2 e0 9b |................| 00000020 61 00 00 0c 45 69 43 43 50 49 43 43 20 50 72 6f |a...EiCCPICC Pro| 00000030 66 69 6c 65 00 00 48 0d ad 57 77 54 53 c9 17 be |file..H..WwTS...| 00000040 af="crayon-v">H..WwTS...| 00000040 afد不带有拓展名的,所以可能并没有足够的信息来告诉你“Flongnozzle-2012”到底包含了什么内容。然而终端(Terminal)可以为你提供一些便利,你可以使用一些内嵌的命令行工具来帮助你鉴别文件。
识别文件内容 对于这种情况,file命令恰好是我所需要的。file指令可以检测一个文件的内容然后试图去弄清楚它是什么。
当然,这其实是Objective-C文件,不过终端已经非常接近了,终端将其鉴别为一个内有代码的文件。“等等,MarkD(注:作者),它仅仅看下文件的拓展名不就行了吗?”file命令也支持这种情况,不过拓展名并不是必须的:
没有文件拓展名,不过我们依然鉴别出了这个文件是什么。将file命令指向一个可能包含可执行代码的文件或目录,它会告诉你其内在的结构:
你可能会说,如果你有一个体积庞大的二进制文件(例如,原生的App)怎么办,下面是办法:
将file指向一个图片文件来看看图片的一些信息:
哦等等,这里有一个终端的使用小技巧:将文件的图标从Finder中拖入终端窗口,这就相当于将你拖动的这个文件或文件夹的完整路径粘贴进去了。 进一步探索 有时file也不会让你满意,或者你可能想要知道关于文件的更多信息。一般来说,你总是可以通过QuickLook在Finder中浏览一下文件,如果这样不起作用,那么你可以使用hexdump命令来看看出文件的字节数,也可以传入参数-c来看看翻译成ASCII码之后的信息。 例如,回到我们之前的那个图片文件:
|