0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux命令file的案例说明

Linux爱好者 ? 来源:C语言中文网 ? 作者:C语言中文网 ? 2020-12-24 11:41 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

有人的地方,就有江湖。人往往是最难揣摩的。如果有一面神奇的魔镜能看出一个人的内心,世界会不会变得更加美好呢?

Linux 的世界里,file 就是这样一面魔镜,它可以看到每个文件的内心。file 命令可以识别出文件的类型和编码格式,这是其他命令所做不到的。

查看文件类型

开门见山,我们直接用 file 这面魔镜来看看文件的“内心”。

#不加任何选项, 直接查看poetry文件[roc@roclinux ~]$ file poetry.txtpoetry.txt: ASCII text

使用不带任何选项的 file 命令,即可查看指定文件的类型信息。

在上面的例子中可以看出 poetry.txt 的文件类型为 text,编码格式为 ASCII。

#使用-b选项来查看poetry文件[roc@roclinux ~]$ file -b poetry.txtASCII text

上面的例子中,我们使用了-b选项,可以使 file 命令的输出不出现文件名,只显示文件格式以及编码。

#使用-i选项来查看poetry文件[roc@roclinux ~]$ file -i poetry.txtpoetry.txt: text/plain; charset=us-ascii

上面的例子中,我们使用了-i选项,可以输出文件的 MIME 类型字符串。

小科普,MIME 类型,即 Multipurpose Internet Mail Extensions,称为多用途互联网邮件扩展类型,用来标识和记录文件的打开方式,一些常见的类型包括:

text/plain:普通文本。

text/html:HTML文本。

application/pdf:PDF文档。

application/msword:Word文档。

image/png:PNG图片。

mage/jpeg:JPEG图片。

application/x-tar:TAR文件。

application/x-gzip:GZIP文件。

设置输出分隔符

从上面的例子可以看出,file 命令的输出格式是:

文件名:文件类型和编码格式

如果希望将中间的分隔符由冒号(:)改成其他符号,则可以使用-F选项来实现。

[roc@roclinux ~]$ file poetry.txtpoetry.txt: ASCII text [roc@roclinux ~]$ file -F “=》” poetry.txtpoetry.txt=》 ASCII text

有些同学会问,这样的功能有何意义呢?在一些自动化文件分析的脚本中,开发者为了避免分隔符和普通字符重复而造成误解析的情况,通常是会手工调整间隔符的。

查看软链接文件

file 命令能查看所有文件的类型信息,那么问题来了,对于一个软链接文件,file 命令是返回软链接文件本身的类型信息,还是返回软链接所指向的目标文件的类型信息呢?让我们通过试验得出结论吧:

#新建一个软链接文件[roc@roclinux ~]$ ln -s poetry.txt poetry_s.txt #通过file命令查看软链接文件[roc@roclinux ~]$ file poetry_s.txtpoetry_s.txt: symbolic link to `poetry.txt‘ #使用-L选项来查看软链接文件[roc@roclinux ~]$ file -L poetry_s.txtpoetry_s.txt: ASCII text

试验是找到真相的最好方法。通过上面的示例,我们已经很清楚地看到了:

如果通过 file 命令直接查看软链接文件,则查看的就是软链接文件本身的信息。

如果使用-L选项来查看软链接文件,则查看的是软链接指向的目标文件的信息。

按照清单去工作

如果我们需要用 file 命令查看大量文件的类型信息,恰好这些文件的名称都被存储在了一个文本文件中,那么-f选项就派上用场了。

我们可以通过-f选项来指定这个文本文件,file 命令就会乖乖地去逐个查看每一个文件的类型信息,示例如下:

#文件中含有三个待查文件, 我们故意设置了一个不存在的文件, 位于最后一个[roc@roclinux ~]$ cat poetry_list.txt/root/book/poetry.txt /root/book/poetry_s.txt Nothing.txt #使用-f选项执行file命令[roc@roclinux ~]$ file -f poetry_list.txt/root/book/poetry.txt: ASCII text/root/book/poetry_s.txt: symbolic link to `poetry.txt’Nothing.txt: ERROR: cannot open `Nothing.txt ‘ (No such file or directory)在上面的例子中,poetry_list.txt 包含了 3 行内容:

poetry.txt。

指向poetry.txt的软链接poetry_s.txt。

Nothing.txt,一个明显不存在的文件。

从结果可以看出,前两个如期输出了类型信息,最后一个也如期报了错误。

-z 选项,想说爱你不容易

一次偶然的机会,我在 man file 中发现了-z选项,原文解释是“Try to look inside compressed files”,看来 file 还可以查看压缩文件内部的文件。

那为什么要用“Try to”这样的字样呢,为了弄明白这个细节,于是,我的试验开始了。

第一轮试验开始,我们先来试验“一个未经压缩的 tar 包”:

#制作一个未经压缩的tar包[roc@roclinux ~]$ tar -cvf poetry.tar poetry.txt poetry_s.txtpoetry.txt poetry_s.txt #尝试使用-z选项[roc@roclinux ~]$ file -z poetry.tarpoetry.tar: POSIX tar archive (GNU)

似乎并不尽如人意,file 只是看出 poetry.tar 是一个 tar 包,并没有深入到 tar 包内部,第一轮试验宣告失败。

马上进入第二轮试验,我们看看一个经过 gzip 压缩过的 tar 包情况如何?

#制作一个tar.gz包[roc@roclinux ~]$ tar -czvf poetry.tar.gz poetry.txt poetry_s.txtpoetry.txtpoetry_s.txt #使用-z选项查看[roc@roclinux ~]$ file -z poetry.tar.gzpoetry.tar.gz: POSIX tar archive (GNU) (gzip compressed data, from Unix, last modified: Tue Mar 1 17:43:59 2016)输出的信息稍微丰富了一些,但还是停留在 tar 包的文件类型的层面,仍然没有窥探到里面的 poetry.txt 和 poetry_s.txt 文件。第二轮试验也宣告失败。 那 bzip2 压缩的 tar 包是否 OK 呢?我们又赶快进入了第三轮试验。

#制作一个.tar.bz2文件[roc@roclinux ~]$ tar -cjvf poetry.tar.bz2 poetry.txt poetry_s.txtpoetry.txtpoetry_s.txt #使用-z选项查看[roc@roclinux ~]$ file -z poetry.tar.bz2poetry.tar.bz2: POSIX tar archive (GNU) (bzip2 compressed data, block size = 900k)

如你所见,第三轮试验仍然是失败的。我已经开始怀疑人生了。信念让我坚持,不能服输。哈哈,就这样,我们再次踏上征程。我怀疑file只能窥探到单个文件压缩的情况,于是,第四轮试验开始了。

#制作一个只包含1个文件的bz2文件[roc@roclinux ~]$ bzip2 -c poetry.txt 》 poetry.bz2 #使用-z选项查看[roc@roclinux ~]$ file -z poetry.bz2poetry.bz2: ASCII text (bzip2 compressed data, block size = 900k)

结果依然让我失望,这到底是要闹哪样啊?到了这步田地,也就剩下单个 gzip 压缩文件的情况没有尝试了,我再碰碰运气吧,如果-z选项还是不能如愿地显示压缩文件包含文件的类型信息,我就打算给 file 的作者写邮件投诉了。

于是,第五轮试验开始了。

#制作一个仅包含1个文件的gz文件[roc@roclinux ~]$ gzip -c poetry.txt 》 poetry.gz #尝试用-z选项查看, 竟然查出结果了, 看到了ASCII text字样[roc@roclinux ~]$ file -z poetry.gzpoetry.gz: ASCII text (gzip compressed data, was “poetry.txt”, from Unix, last modified: Tue Mar 1 19:01:22 2016) #再试试没有-z选项的情况, 确实没有探测出ASCII text类型[roc@roclinux ~]$ file poetry.gzpoetry.gz: gzip compressed data, was “poetry.txt”, from Unix, last modified: Tue Mar 1 19:01:22 2016

终于,终于,我们终于成功了,我们通过试验找到了答案。

直到这步我们才知道,man 中 -z 选项的解释虽然是“Try to look inside compressed files”,但其实只支持对 gzip 包内部文件的窥探,而对于 tar、tar.gz、tar.bz2 和 bz2 包全部都不支持。

大胆猜测,file 的作者可能是迫于开发时间的压力,仅仅支持了 gzip 的情况,但是又不希望未来仅支持这一种压缩类型,因此写上“Try to”,为日后的扩展留下了可能性。

原文标题:每天一个 Linux 命令(62):file 命令

文章出处:【微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11522

    浏览量

    214291
  • File
    +关注

    关注

    0

    文章

    19

    浏览量

    14547

原文标题:每天一个 Linux 命令(62):file 命令

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Linux基础命令which详解

    Linux系统中,which命令用于查找并显示指定命令的可执行文件路径。这对于系统管理员和开发人员来说是一个非常有用的工具,可以帮助定位命令所在的位置,确认
    的头像 发表于 07-29 17:58 ?170次阅读

    一文掌握Linux命令

    作为一名运维工程师,熟练掌握Linux命令是基本功中的基本功。无论是日常工作中的系统维护,还是面试时的技术考核,Linux命令都是绕不开的核心技能。本文将从实战角度出发,系统梳理运维工
    的头像 发表于 07-22 15:23 ?106次阅读

    Linux常用命令大全

    Linux常用命令是指在Linux操作系统中广泛使用的命令工具,这些命令工具可以完成各种不同的任务,如管理文件和目录、操作进程、网络通信、软
    的头像 发表于 05-03 18:08 ?1189次阅读

    Linux系统中最重要的三个命令

    Linux三剑客是Linux系统中最重要的三个命令,它们以其强大的功能和广泛的应用场景而闻名。这三个工具的组合使用几乎可以完美应对Shell中的数据分析场景,因此被统称为Linux三剑
    的头像 发表于 03-03 10:37 ?472次阅读

    Linux ip命令常用操作

    Linux?ip命令常用操作 在Linux系统中,ip命令是用于管理网络接口和路由的强大工具。相比于旧的?ifconfig命令,ip
    的头像 发表于 02-19 10:23 ?760次阅读

    常用linux命令

    使用command A | command B | command C命令,将A命令产生的标准输出作为B命令的标准输入(注意只能接收前一个命令的标准输出)。
    的头像 发表于 01-20 14:26 ?447次阅读

    Linux实时查看日志的四种命令详解

    如何在Linux中实时查看日志文件的内容?那么有很多实用程序可以帮助用户在文件更改或不断更新时输出文件的内容。在Linux中实时显示文件内容的常用命令是tail命令(有效地管理文件)。
    的头像 发表于 01-13 10:45 ?3181次阅读
    <b class='flag-5'>Linux</b>实时查看日志的四种<b class='flag-5'>命令</b>详解

    Linux grep命令详解

    Linux grep命令是一种非常常用的文本搜索工具,它可以在给定的文件中搜索匹配的字符串,并输出匹配的行。grep是全称“global search regular expression print”,可以识别正则表达式,并使用正则表达式进行搜索。
    的头像 发表于 12-25 09:39 ?1018次阅读

    盘点Linux系统中的常见命令

    作为运维同学怎能不知道Linux系统中的lsmod、lsof、lspci、lsscsi命令呢,今天就来盘一盘她及实例。
    的头像 发表于 12-03 09:48 ?870次阅读
    盘点<b class='flag-5'>Linux</b>系统中的常见<b class='flag-5'>命令</b>

    Linux常用命令

    remove nplay 复制、剪切、删除 复制: cp file1 file2 递归复制: cp -r dir/* dir/ 剪切: mv file path 删除: rm -rf fil
    的头像 发表于 11-06 16:04 ?402次阅读
    <b class='flag-5'>Linux</b>常用<b class='flag-5'>命令</b>

    Linux系统中shell命令解析

    shell是Linux系统的用户界面,提供了用户与内核交互的一种接口,它接收用户输入的命令并到送到内核去执行,因此也被称为Linux命令解释器。
    的头像 发表于 11-05 15:40 ?989次阅读

    Linux实用命令大全

    Linux实用命令大全
    的头像 发表于 10-23 13:50 ?705次阅读
    <b class='flag-5'>Linux</b>实用<b class='flag-5'>命令</b>大全

    Linux lsof命令的基本用法

    linux 系统中,一切皆文件。通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以 lsof 命令不仅可以查看进程打开的文件、目录,还可以查看进程监听的端口等 socket 相关的信息。本文将介绍 lsof 命令
    的头像 发表于 10-23 11:52 ?1429次阅读
    <b class='flag-5'>Linux</b> lsof<b class='flag-5'>命令</b>的基本用法

    CC256x与HCI命令应用说明

    电子发烧友网站提供《CC256x与HCI命令应用说明.pdf》资料免费下载
    发表于 09-11 09:37 ?0次下载
    CC256x与HCI<b class='flag-5'>命令</b>应用<b class='flag-5'>说明</b>

    Linux中cut命令的实用示例

    Linux command cut 用于文本处理。您可以使用此命令通过选择列从文件中提取部分文本。
    的头像 发表于 08-05 15:14 ?759次阅读