有人的地方,就有江湖。人往往是最難揣摩的。如果有一面神奇的魔鏡能看出一個人的內(nèi)心,世界會不會變得更加美好呢?
Linux 的世界里,file 就是這樣一面魔鏡,它可以看到每個文件的內(nèi)心。file 命令可以識別出文件的類型和編碼格式,這是其他命令所做不到的。
查看文件類型
開門見山,我們直接用 file 這面魔鏡來看看文件的“內(nèi)心”。
#不加任何選項, 直接查看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 命令的輸出不出現(xiàn)文件名,只顯示文件格式以及編碼。
#使用-i選項來查看poetry文件[roc@roclinux ~]$ file -i poetry.txtpoetry.txt: text/plain; charset=us-ascii
上面的例子中,我們使用了-i選項,可以輸出文件的 MIME 類型字符串。
小科普,MIME 類型,即 Multipurpose Internet Mail Extensions,稱為多用途互聯(lián)網(wǎng)郵件擴(kuò)展類型,用來標(biāo)識和記錄文件的打開方式,一些常見的類型包括:
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文件。
設(shè)置輸出分隔符
從上面的例子可以看出,file 命令的輸出格式是:
文件名:文件類型和編碼格式
如果希望將中間的分隔符由冒號(:)改成其他符號,則可以使用-F選項來實現(xiàn)。
[roc@roclinux ~]$ file poetry.txtpoetry.txt: ASCII text [roc@roclinux ~]$ file -F “=》” poetry.txtpoetry.txt=》 ASCII text
有些同學(xué)會問,這樣的功能有何意義呢?在一些自動化文件分析的腳本中,開發(fā)者為了避免分隔符和普通字符重復(fù)而造成誤解析的情況,通常是會手工調(diào)整間隔符的。
查看軟鏈接文件
file 命令能查看所有文件的類型信息,那么問題來了,對于一個軟鏈接文件,file 命令是返回軟鏈接文件本身的類型信息,還是返回軟鏈接所指向的目標(biāo)文件的類型信息呢?讓我們通過試驗得出結(jié)論吧:
#新建一個軟鏈接文件[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
試驗是找到真相的最好方法。通過上面的示例,我們已經(jīng)很清楚地看到了:
如果通過 file 命令直接查看軟鏈接文件,則查看的就是軟鏈接文件本身的信息。
如果使用-L選項來查看軟鏈接文件,則查看的是軟鏈接指向的目標(biāo)文件的信息。
按照清單去工作
如果我們需要用 file 命令查看大量文件的類型信息,恰好這些文件的名稱都被存儲在了一個文本文件中,那么-f選項就派上用場了。
我們可以通過-f選項來指定這個文本文件,file 命令就會乖乖地去逐個查看每一個文件的類型信息,示例如下:
#文件中含有三個待查文件, 我們故意設(shè)置了一個不存在的文件, 位于最后一個[roc@roclinux ~]$ cat poetry_list.txt/root/book/poetry.txt /root/book/poetry_s.txt Nothing.txt #使用-f選項執(zhí)行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 行內(nèi)容:
poetry.txt。
指向poetry.txt的軟鏈接poetry_s.txt。
Nothing.txt,一個明顯不存在的文件。
從結(jié)果可以看出,前兩個如期輸出了類型信息,最后一個也如期報了錯誤。
-z 選項,想說愛你不容易
一次偶然的機(jī)會,我在 man file 中發(fā)現(xiàn)了-z選項,原文解釋是“Try to look inside compressed files”,看來 file 還可以查看壓縮文件內(nèi)部的文件。
那為什么要用“Try to”這樣的字樣呢,為了弄明白這個細(xì)節(jié),于是,我的試驗開始了。
第一輪試驗開始,我們先來試驗“一個未經(jīng)壓縮的 tar 包”:
#制作一個未經(jīng)壓縮的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 包內(nèi)部,第一輪試驗宣告失敗。
馬上進(jìn)入第二輪試驗,我們看看一個經(jīng)過 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 呢?我們又趕快進(jìn)入了第三輪試驗。
#制作一個.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)
如你所見,第三輪試驗仍然是失敗的。我已經(jīng)開始懷疑人生了。信念讓我堅持,不能服輸。哈哈,就這樣,我們再次踏上征程。我懷疑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)
結(jié)果依然讓我失望,這到底是要鬧哪樣啊?到了這步田地,也就剩下單個 gzip 壓縮文件的情況沒有嘗試了,我再碰碰運(yùn)氣吧,如果-z選項還是不能如愿地顯示壓縮文件包含文件的類型信息,我就打算給 file 的作者寫郵件投訴了。
于是,第五輪試驗開始了。
#制作一個僅包含1個文件的gz文件[roc@roclinux ~]$ gzip -c poetry.txt 》 poetry.gz #嘗試用-z選項查看, 竟然查出結(jié)果了, 看到了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 包內(nèi)部文件的窺探,而對于 tar、tar.gz、tar.bz2 和 bz2 包全部都不支持。
大膽猜測,file 的作者可能是迫于開發(fā)時間的壓力,僅僅支持了 gzip 的情況,但是又不希望未來僅支持這一種壓縮類型,因此寫上“Try to”,為日后的擴(kuò)展留下了可能性。
原文標(biāo)題:每天一個 Linux 命令(62):file 命令
文章出處:【微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
責(zé)任編輯:haq
-
Linux
+關(guān)注
關(guān)注
87文章
11345瀏覽量
210394 -
File
+關(guān)注
關(guān)注
0文章
19瀏覽量
14381
原文標(biāo)題:每天一個 Linux 命令(62):file 命令
文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
常用linux命令
Linux實時查看日志的四種命令詳解
![<b class='flag-5'>Linux</b>實時查看日志的四種<b class='flag-5'>命令</b>詳解](https://file1.elecfans.com/web3/M00/05/B8/wKgZPGeEft6AfYW9AAAvPO3y9mw633.png)
詳解Linux sort命令之掌握排序技巧與實用案例
Linux grep命令詳解
盤點(diǎn)Linux系統(tǒng)中的常見命令
![盤點(diǎn)<b class='flag-5'>Linux</b>系統(tǒng)中的常見<b class='flag-5'>命令</b>](https://file1.elecfans.com/web3/M00/00/D4/wKgZO2dOZdqAFQhEAAA91zFQXQ8462.png)
Linux常用命令
![<b class='flag-5'>Linux</b>常用<b class='flag-5'>命令</b>](https://file.elecfans.com/web2/M00/8A/6C/pYYBAGO9DiuANww7AABrMCuQJho521.png)
Linux系統(tǒng)中shell命令解析
Linux lsof命令的基本用法
![<b class='flag-5'>Linux</b> lsof<b class='flag-5'>命令</b>的基本用法](https://file1.elecfans.com/web1/M00/F3/7F/wKgaoWcYc2mAFw5cAAA4fI5XmGk856.png)
Linux開發(fā)怎么學(xué)?
CC256x與HCI命令應(yīng)用說明
![CC256x與HCI<b class='flag-5'>命令</b>應(yīng)用<b class='flag-5'>說明</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論