Shell命令-文件及目錄操作之file、md5sum
1. file:顯示文件的類型
file命令的功能說明
用於辨識文件類型。通過
file
指令,我們得以辨識該文件的類型。file命令的語法格式
file
[-bchiklLNnprsvz0] [--apple] [--mime-encoding] [--mime-type] [-e testname]file
[-bcLvz][-f <名稱文件>][-m <魔法數字文件>...][文件或目錄...]file命令的選項說明
file
參數很多,表1為file
命令的參數及說明:表1:
file
命令的參數及說明
參數選項 | 解釋說明 |
---|---|
-b | 列出辨識結果時,不顯示文件名稱。 |
-c | 詳細顯示指令執行過程,便於排錯或分析程序執行的情形。 |
-f<名稱文件> | 指定名稱文件,其內容有一個或多個文件名稱時,讓file依序辨識這些文件,格式為每列一個文件名稱。 |
-L | 直接顯示符號連接所指向的文件的類別。 |
-m<魔法數字文件> | 指定魔法數字文件。 |
-v | 顯示版本信息。 |
-z | 嘗試去解讀壓縮文件的內容。 |
- [文件或目錄...] 要確定類型的文件列表,多個文件之間使用空格分開,可以使用
shell
通配符匹配多個文件。file命令的實踐操作
範例1: 顯示文件類型:
[[email protected] /test]# file /test/ /test/: directory -------------------------------------------------------------- ==>不顯示文件名稱<== -------------------------------------------------------------- [[email protected] /test]# file -b /test/ directory -------------------------------------------------------------- ==>顯示MIME類別<== -------------------------------------------------------------- [[email protected] /test]# file -i /test/ /test/: inode/directory; charset=binary [[email protected] /test]# file -b -i /test/ inode/directory; charset=binary [[email protected] /test]#
範例2:顯示符號鏈接的文件類型
--------------------------------------------------------------
==>創建一個軟連接文件<==
--------------------------------------------------------------
[[email protected] /test]# touch oldboy.txt
[[email protected] /test]# ln -s oldboy.txt oldboy_soft_link
--------------------------------------------------------------
==>查看的結果<==
--------------------------------------------------------------
[[email protected] /test]# file oldboy_soft_link
oldboy_soft_link: symbolic link to `oldboy.txt‘
[[email protected] /test]# ll oldboy_soft_link
lrwxrwxrwx 1 root root 10 4月 13 10:57 oldboy_soft_link -> oldboy.txt
[[email protected] /test]# file -L oldboy_soft_link
oldboy_soft_link: empty
--------------------------------------------------------------
==>empty是空的意思,內面沒有內容<==
--------------------------------------------------------------
[[email protected] /test]# file oldboy.txt
oldboy.txt: empty
[[email protected] /test]# file -L oldboy.txt
oldboy.txt: empty
--------------------------------------------------------------
==>添加內容,再次查看<==
--------------------------------------------------------------
[[email protected] /test]# echo "I love linux" > oldboy.txt
[[email protected] /test]# cat oldboy.txt
I love linux
[[email protected] /test]# file oldboy.txt
oldboy.txt: ASCII text
[[email protected] /test]# file -L oldboy.txt
oldboy.txt: ASCII text
2. md5sum:md5校驗
md5sum命令的功能說明
在網絡傳輸、設備之間轉存、復制大文件等時,可能會出現傳輸前後數據不一致的情況。這種情況在網絡這種相對更不穩定的環境中,容易出現。那麽校驗文件的完整性,也是勢在必行的。
md5sum
命令用於生成和校驗文件的md5
值。它會逐位對文件的內容進行校驗。是文件的內容,與文件名無關,也就是文件內容相同,其md5
值相同。md5
值是一個128位的二進制數據,轉換成16進制則是32(128/4)位的進制值。md5
校驗,有很小的概率不同的文件生成的md5可能相同。比md5
更安全的校驗算法還有SHA*
系列的。在網絡傳輸時,我們校驗源文件獲得其md5sum
,傳輸完畢後,校驗其目標文件,並對比如果源文件和目標文件md5
一致的話,則表示文件傳輸無異常。否則說明文件在傳輸過程中未正確傳輸。md5sum命令的語法格式
md5sum
[OPTION]... [FILE]...md5sum
[參數] [文件]md5sum命令的選項說明
md5sum
參數不常用,表1為md5sum
命令的參數及說明:表1:
md5sum
命令的參數及說明
參數選項 | 解釋說明 |
---|---|
-b | 以二進制模式讀入文件內容 |
-t | 以文本模式讀入文件內容 |
-c | 根據已生成的md5值,對現存文件進行校驗 |
--status | 校驗完成後,不生成錯誤或正確的提示信息,可以通過命令的返回值來判斷。 |
md5sum命令的實踐操作
範例1: 不加參數,直接生成文件
md5
值(md5sum file
)
--------------------------------------------------------------
==>直接生成文件md5值<==
--------------------------------------------------------------
[[email protected] /test]# md5sum oldboy.txt
d41d8cd98f00b204e9800998ecf8427e oldboy.txt
--------------------------------------------------------------
==>往文本裏寫內容<==
--------------------------------------------------------------
[[email protected] /test]# echo "I love linux" > oldboy.txt
--------------------------------------------------------------
==>md5值發生了變化<==
--------------------------------------------------------------
[[email protected] /test]# md5sum oldboy.txt
553430bbfd91aca9db36ae6addccd06c oldboy.txt
md5sum
校驗的是文件內容,與文件名無關範例2: 以文本模式或二進制模式讀入文件並對其進行校驗
[[email protected] /test]# file oldboy.txt
oldboy.txt: ASCII text
[[email protected] /test]# md5sum oldboy.txt
553430bbfd91aca9db36ae6addccd06c oldboy.txt
[[email protected] /test]# md5sum -b oldboy.txt
553430bbfd91aca9db36ae6addccd06c *oldboy.txt
[[email protected] /test]# md5sum -t oldboy.txt
553430bbfd91aca9db36ae6addccd06c oldboy.txt
雖然是不同的讀入模式,但是在進行求md5的時候,是一樣的,因為是逐位校驗的。
範例3:
md5
值重定向(可以留著做校驗而用的)
[[email protected] /test]# md5sum oldboy.txt > oldboy.md5
[[email protected] /test]# md5sum oldboy.txt
553430bbfd91aca9db36ae6addccd06c oldboy.txt
[[email protected] /test]# cat oldboy.md5
553430bbfd91aca9db36ae6addccd06c oldboy.txt
範例3: md5
校驗,(-c參數)如果一致,則返回OK
,否則返回錯誤信息
--------------------------------------------------------------
==>-c參數校驗<==
--------------------------------------------------------------
[[email protected] /test]# md5sum -c oldboy.md5
oldboy.txt: 確定
--------------------------------------------------------------
==>往oldboy.txt裏追加內容<==
--------------------------------------------------------------
[[email protected] /test]# echo "Me too" >> oldboy.txt
[[email protected] /test]# cat oldboy.txt
I love linux
Me too
--------------------------------------------------------------
==>失敗<==
--------------------------------------------------------------
[[email protected] /test]# md5sum -c oldboy.md5
oldboy.txt: 失敗
md5sum: 警告:1 個校驗和不匹配
範例4: 不顯示校驗信息,(--status
參數)以命令返回值來判斷,校驗一致返回0
,不一致返回1
--------------------------------------------------------------
==>不一致返回1<==
--------------------------------------------------------------
[[email protected] /test]# md5sum -c oldboy.md5
oldboy.txt: 失敗
md5sum: 警告:1 個校驗和不匹配
[[email protected] /test]# md5sum -c --status oldboy.md5
[[email protected] /test]# echo $?
1
--------------------------------------------------------------
==>校驗一致返回1<==
--------------------------------------------------------------
[[email protected] /test]# md5sum oldboy.txt > oldboy.md5
[[email protected] /test]# md5sum -c oldboy.md5
oldboy.txt: 確定
[[email protected] /test]# md5sum -c --status oldboy.md5
[[email protected] /test]# echo $?
0
特殊說明
1)md5sum
是校驗文件內容,與文件名是否相同無關
2)md5sum
值逐位校驗,所以文件越大,校驗時間越長。總結
通過md5sum
來校驗生成文件校驗碼,來發現文件傳輸(網絡傳輸、復制、本地不同設備間的傳輸)異常造成的文件內容不一致的情況。工作實踐應用場景:
需要比較2個rc1.tar.gz
包和rc2.tar.gz
兩個包,變更是不是和開發說的一致
- 獲取包,確保包正確無誤
獲取包後,驗證包的MD5值:md5sum rc*.tar.gz
- 解壓縮到指定目錄
確保對應的目錄存在
tar -zxvf rc1.tar.gz -C ./test_rc1
tar -zxvf rc2.tar.gz -C ./test_rc2
- 遞歸生成各文件的的MD5值
find ./test_rc1 -type f -print0| xargs -0 md5sum >> rc1_md5.txt
find ./test_rc2 -type f -print0| xargs -0 md5sum >> rc2_md5.txt
- 比較兩文件的MD5值
diff -c rc1_md5.txt rc2_md5.txt
或者用
UltraCompare Professional
比對結果今天就寫到這裏,有什麽疑問或出現什麽錯誤,隨時歡迎大神們發表評論指點迷津
Shell命令-文件及目錄操作之file、md5sum