Linux怎么使用file命令識(shí)別文件類型
Linux怎么使用file命令識(shí)別文件類型
file是通過查看文件的頭部?jī)?nèi)容,來獲取文件的類型。使用file命令可以知道某個(gè)文件究竟是二進(jìn)制(ELF格式)的可執(zhí)行文件, 還是Shell Script文件,或者是其它的什么格式。那么Linux怎么使用file命令識(shí)別文件類型?
Linux怎么使用file命令識(shí)別文件類型
我們知道Linux文件系統(tǒng)是Linux內(nèi)核支持的基本功能之一,并由根 / 開始往下形成倒立樹狀的級(jí)連式結(jié)構(gòu)。文件與目錄是Linux文件系統(tǒng)的兩個(gè)基本元素,(廣義的)文件分為普通文件、目錄文件、連接文件和特殊文件??梢酝ㄟ^file命令來識(shí)別各種不同的文件類型。
linux對(duì)于文件的擴(kuò)展名沒有像windows要求的那么嚴(yán)格,所以在使用linux的過程中經(jīng)常會(huì)遇到有些文件根本就沒有擴(kuò)展名,哪么我們應(yīng)該如何去判斷沒有擴(kuò)展名的文件,到底是文件還是目錄呢?其實(shí)我們可以借助file來檢查文件的類型,示例如下:
[root@localhost ~]# file install.log
install.log: UTF-8 Unicode text
install.log為文本文件
[root@localhost ~]# file /usr/local/
/usr/local/: directory
/usr/local為目錄、
在Linux系統(tǒng)中,文件類型根據(jù)文件的權(quán)限以及文件內(nèi)容類型來劃分的。在linux中文件本身是不需要后綴名稱的,我們習(xí)慣上添加后綴名稱僅僅是便于直觀了解這是哪種用途類型。
語法:file [選項(xiàng)] [文件]
file命令檢驗(yàn)文件類型按以下順序來完成:
檢驗(yàn)文件系統(tǒng)(Filesystem)中支持的文件類型。
檢驗(yàn)magic file規(guī)則。
檢驗(yàn)文件內(nèi)容的語言和字符集。
檢驗(yàn)文件系統(tǒng)(Filesystem)中支持的文件類型
文件系統(tǒng)支持的文件類型指的是通過ls -l 中第一個(gè)字符表示的文件類型:
-(regular):正規(guī)文件(包括文本文件(ASCII,會(huì)打印text),可執(zhí)行文件(會(huì)打印excutable),其他二進(jìn)制文件(會(huì)打印data))
d(directory):目錄
l(link):軟鏈接(不包括硬連接,硬鏈接會(huì)以正規(guī)文件顯示
b(block buffered special):隨機(jī)存儲(chǔ)的設(shè)備文件,如硬盤,光盤等存儲(chǔ)設(shè)備
c(character unbuffered special):持續(xù)輸入的設(shè)備文件,如鼠標(biāo),鍵盤
s(socket):socket文件,最常在/var/run目錄下看到這類文件
p(pipe):管道文件(first-in-first-out),它的目的在解決多個(gè)程序同時(shí)存取一個(gè)文件造成的錯(cuò)誤問題
檢驗(yàn)magic file規(guī)則
magic file指的是那些具有特殊文件格式的文件,如C文件,它會(huì)有#include字樣;tar文件的前幾個(gè)字節(jié)會(huì)有特殊的規(guī)則。而檢驗(yàn)magic file規(guī)則就是根據(jù)這些特殊的格式去判斷一個(gè)文件的類型。而這些規(guī)則是保存在$HOME/.magic.mgc,$HOME/.magic,/etc/magic.mgc,/etc/magic/usr/share/misc/magic.mgc,/usr/share/misc/magic中。
*/magic文件是文本文件,而*/magic.mgc文件則是由*/magic編譯后的二進(jìn)制文件。同一目錄下若存在*/magic.mgc則使用該文件,否則使用*/magic。
這些配置的優(yōu)先級(jí)為$HOME/.magic*>/etc/magic*>/usr/share/misc/magic*。
*/magic文件內(nèi)容格式
文件中的每行都指定了一個(gè)規(guī)則測(cè)試去檢驗(yàn)文件類型,這個(gè)規(guī)則由4個(gè)域指定:
offset:指定由文件起始的第幾個(gè)byte開始檢驗(yàn)。
type:要進(jìn)行檢驗(yàn)的數(shù)據(jù)類型,即由offset那個(gè)byte開始的那個(gè)數(shù)據(jù)類型是什么。具體有哪些數(shù)據(jù)類型,可以參才magic(5)。常用的數(shù)據(jù)類型有
byte:一個(gè)byte的值
short:兩個(gè)byte的值
long:四個(gè)byte的值
string:字符串。
test:檢驗(yàn)值。用于檢驗(yàn)offset下的type是否是這個(gè)test值。使用C語言的數(shù)值或字符表示形式。
message:用于顯示檢驗(yàn)結(jié)果的信息顯示
如果type為數(shù)值類型,那么其后面可添加&value,表示先與后面的test值進(jìn)行‘與’操作,再進(jìn)行比較。如果type為字符串類型,則其后可跟/[Bbc]*,/b表示忽略空格,/c表示忽略字母大小寫。
如果test的值為數(shù)值類型,可以數(shù)值前添加=,<,>,&,^,~,分別表示相等、小于、大于、與操作、異或操作、取反操作。如果test的值為字符串類型,可以在其前添加=、<、>。
看過“ Linux怎么使用file命令識(shí)別文件類型 ”的人還看了: