A. linuxshell怎麼計算設備文件的md5
計算設備文件的md5所要用到的命令就是 md5sum
man一下md5sum命令,得到md5sum命令的用法:
md5sum [OPTION]… [FILE]…
1、計算指定文件的MD5值(如a.rmvb)
md5sum a.rmvb
輸出結果類似如下:
a.rmvb
即計算出的md5值加上文件名
測試了一下,發現這命令算一2G多的電影所用時間不過幾十鈔,效率還行。
2、計算字元串MD5值(如字元串 「password」)
echo -n 「password」 | md5sum
輸出:
–
上面echo加 -n的作用是去除串結尾的回車符,因為echo命令默認會添加一回車符。
像如果是:
echo 「password」 | md5sum
那輸出的將會是:
–
不加-n與加-n結果是不一樣的。正確的做法一般是要加-n參數。
B. linux中使用md5sum文件
md5sum isofile > hashfile, 將 md5sum 檔案與 hashfile 檔案內容比對, 驗證雜湊值
是否一致 md5sum –c hashfile
可以多關.注《Linux就該這么學》這本書,我都是從這裡面學到的
C. Linux鏡像中有md5sum.txt和MD5SUMS,感覺是在交叉校驗md5,這些值是怎麼得出的
根據文件生成的,下載的文件計算一下md5,值與給出的一致,就說明是完整的,
Linux命令有md5sum,
Windows命令 certutil,比如certutil -hashfile filename MD5
D. 我想知道linux所有命令源代碼,我是說命令的源代碼在哪裡查看,或是在哪裡能夠找到命令源代碼大全!!
一般來說,不同的命令可能隸屬於不同的軟體包,這樣就沒有一個地方會有所有命令的源代碼。(命令的個數也會與你所安裝的軟體包有關)
但是,一些常用的命令,例如
basename cat chgrp chmod chown chroot cksum comm cp csplit cut date dd df dirname echo
env expand expr factor false fmt fold groups head hostid hostname id install join kill link ln
logname ls md5sum mkdir mkfifo mknod mv nice nl nohup od paste pathchk pinky pr printenv
pwd readlink rm rmdir seq sha1sum sleep sort split stty su sum sync tac tail tee test touch
tr true tsort tty uname unexpand uniq unlink uptime users wc who whoami yes
都包含在 coreutils 軟體包中,coreutils 軟體包的源碼可以在
http://ftp.gnu.org/gnu/coreutils/
下載到。
另外,還有一部分命令是 bash 內置的,例如 cd 等,可以在 bash 的源碼中找到。
http://ftp.gnu.org/gnu/bash/
E. linux shell md5sum 指令的詭異問題
初看你的代碼,貌似沒什麼問題,琢磨了半天才發現原來和相同文件的個數有關。
當你的相同文件數目大於等於3時,就會出這個問題。只有兩個文件相同時,則不會出。
比如你的
text,
text1,
text2
是相同的,第一次進入時
比較和處理text,
text1
沒有問題。
第二次進入時,此時要比較
text1
和
text2,相當於要執行
"md5sum
text1"
|
getline;
sum1=$1;
print
$0
"md5sum
text2"
|
getline;
sum2=$1;
print
$0
但是由於
"md5sum
text1"
|
getline
這條管道語句已經在上次比較
text
和
text1
時執行過了,awk在第二次執行的時候就不會再創建管道執行同樣的md5sum命令讓getline讀取,而是嘗試從之前打開的管道中讓getline讀取內容,顯然,此時已經沒有內容可讀了,因此此時getline
會失敗
(如果你用
if
語句判斷這條命令的返回值,會發現返回值不等於1
(應該是0,表示
end
of
file)。所以這條語句並不會更新
$0
$1
這些變數,所以後面你
print
$0
實際上列印的是
ls
-lS
得到的輸入。
解決方法很簡單,在每次
"md5sum
"name
|
getline
之後,用close命令,比如
"md5sum
"name1
|
getline;
sum1=$1;
close("md5sum
"name1)
print
$0
"md5sum
"name2
|
getline;
sum2=$1;
close("md5sum
"name2)
print
$0
這樣就在每次getline之後,都關閉管道,從而確保下次總能重新創建管道及執行md5sum命令。
F. 如何查詢linux 的MD5值是多少
Linux下查詢文件的MD5值:md5sum xxx.iso.md5
MD5演算法常常被用來驗證網路文件傳輸的完整性,防止文件被人篡改。MD5全稱是報文摘要演算法(Message-Digest Algorithm 5),此演算法對任意長度的信息逐位進行計算,產生一個二進制長度為128位(十六進制長度就是32位)的「指紋」(或稱「報文摘要」),不同的文件產生相 同的報文摘要的可能性是非常非常之小的。
在linux或Unix上,md5sum是用來計算和校驗文件報文摘要的工具程序。一般來說,安裝了Linux後,就會有md5sum這個工具,直接在命令行終端直接運行。可以用下面的命令來獲取md5sum命令幫助 man md5sum
使用md5sum來產生指紋(報文摘要)命令如下:md5sum file > file.md5 或者 md5sum file >>file.md5
註: > 和 >> 的區別在於: > 表示把由file文件產生的摘要重定向到文件file.md5,但是會覆蓋file.md5裡面的內容;而 >> 則將輸出的摘要附加到file.md5文件的後面。也可以把多個文件的報文摘要輸出到一個md5文件中,這要使用通配符*,比如某目錄下有幾個iso文 件,要把這幾個iso文件的摘要輸出到iso.md5文件中,命令如下:md5sum *.iso > iso.md5
使用md5報文摘要驗證文件,方法有二:
a、把下載的文件file和該文件的file.md5報文摘要文件放在同一個目錄下,然後用如下命令進行驗證:md5sum -c file.md5 然後如果驗證成功,則會輸出:正確;
b、下載了文件file,然後運行下面的命令:md5sum file 命令會輸出一個md5的報文摘要,然後把這個報文摘要直接與file.md5中的內容比較,如果一樣,就說明驗證正確。
G. linux shell腳本攻略中,通過md5sum來查找出文件夾中的重復文件問題
getline函數調用時,awk將會把下一條記錄讀入賦值給$0,因此相當於已經跳到下一行了。
你的程序上面那個,由於在awk中有多次getline,因此一開始把記錄定位到第二行,即第一個文件,然後每調用一次"md5sum "name1 | getline; 記錄就跳到了下一行,輸出是不會重復的。
而下面的那個程序,沒有多次getline調用,awk按行掃描,每次會把當前行的文件名賦值給name2,同時name1又記錄了上一次的文件名,因此出現了test01兩次,test02兩次
事實上,輸出和掃描行的對應關系是:
先在BEGIN段跳過兩行,當前行為test,name賦值得到test
然後逐行掃描,當前掃描行是test01時, 輸出了test test01
當前掃描行是test02時, 輸出了 test01 test02
當前掃描行是test02時, 輸出了 test02 test03
所以一共出現6行,中間有重復
H. 如何在linux使用md5對其進行加密
這里以字元串123456為例子,它的md5密文值為:
這里以1.txt為需要被加密的文件。
一、 用oppnssl md5 加密字元串和文件的方法。
1. oppnssl md5 加密字元串的方法
a.手動輸入命令及過程如下:
#openssl //在終端中輸入openssl後回車。
OpenSSL> md5 //輸入md5後回車
123456 //接著輸入123456,不要輸入回車。然後按3次ctrl+d。
123456 //123456後面的就是密文了
解釋:為何在輸入123456後不回車呢?
是因為openssl默認會把回車符當做要加密的字元串中的一個字元,所以得到的結果不同。如果你輸入123456後回車,在按2次ctrl+d。得到的結果是:
OpenSSL> md5
123456
//因為openssl不忽略回車符導致的
b.或者直接用管道命令
# echo -n 123456 | openssl md5 //必須要有-n參數,否則就不是這個結果了。
解釋:為何要加-n這個參數?
-n就表示不輸入回車符,這樣才能得到正確的結果。如果你不加-n,那麼結果和前面說的一樣為:
//因為openssl不忽略回車符導致的
2.用openssl加密文件。
#openssl md 5 -in 1.txt
##################################################3
Openssl其他相關加密的命令參數:引自:實用命令:利用openssl進行BASE64編碼解碼、md5/sha1摘要、AES/DES3加密解密 收藏
一. 利用openssl命令進行BASE64編碼解碼(base64 encode/decode)
1. BASE64編碼命令
對字元串『abc』進行base64編碼:
# echo abc | openssl base64
YWJjCg== (編碼結果)
如果對一個文件進行base64編碼(文件名t.txt):
# openssl base64 -in t.txt
2. BASE64解碼命令
求base64後的字元串『YWJjCg==』的原文:
# echo YWJjCg== | openssl base64 -d
abc (解碼結果)
如果對一個文件進行base64解碼(文件名t.base64):
# openssl base64 -d -in t.base64
二. 利用openssl命令進行md5/sha1摘要(digest)
1. 對字元串『abc』進行md5摘要計算:echo abc | openssl md5
若對某文件進行md5摘要計算:openssl md5 -in t.txt
2. 對字元串『abc』進行sha1摘要計算:echo abc | openssl sha1
若對某文件進行sha1摘要計算:openssl sha1 -in t.txt
三. 利用openssl命令進行AES/DES3加密解密(AES/DES3 encrypt/decrypt)
對字元串『abc』進行aes加密,使用密鑰123,輸出結果以base64編碼格式給出:
# echo abc | openssl aes-128-cbc -k 123 -base64
U2FsdGVkX18ynIbzARm15nG/JA2dhN4mtiotwD7jt4g= (結果)
對以上結果進行解密處理:
# echo U2FsdGVkX18ynIbzARm15nG/JA2dhN4mtiotwD7jt4g= | openssl aes-128-cbc -d -k 123 -base64
abc (結果)
若要從文件里取原文(密文)進行加密(解密),只要指定 -in 參數指向文件名就可以了。
進行des3加解密,只要把命令中的aes-128-cbc換成des3就可以了。
註:只要利用openssl help就可以看到更多的安全演算法了。
###############################################
二、 利用php的md5函數加密字元串
#touch a.php //創建a.php文件
#vi a.php //用vi 編輯a.php文件
將<?php echo md5(123456); ?>輸入進去後保存
#php a.php //運行a.php文件
顯示:
三、 利用md5sum命令
A.在linux或Unix上,md5sum是用來計算和校驗文件報文摘要的工具程序。一般來說,安裝了Linux後,就會有md5sum這個工具,直接在命令行終端直接運行。可以用下面的命令來獲取md5sum命令幫助 man md5sum
#md5sum –help
有個提示:「With no FILE, or when FILE is -, read standard input.」翻譯過來就是「如果沒有輸入文件選項或者文件選項為 - ,則從標磚讀取輸入內容」,即可以直接從鍵盤讀取字元串來加密。
利用md5sum加密字元串的方法
# md5sum //然後回車
123456 //輸入123456.然後按兩次ctrl+d.
顯示:
123456 紅色代表加密後的值
還可以用管道命令:
#echo -n '123123' | md5sum
或者寫成md5加密腳本,名字叫md5.sh,
將以下內容復制進腳本里:
#!/bin/bash
echo -n $1 | md5sum | awk '{print $1}'
保存後,給腳本執行許可權。
#sh md5.sh 123456
顯示:
B.其實也可以將文本放入文本文件,然後用md5sum 加密改文本,也可以得到字元串加密的值。過程如下:
#touch a.txt
#echo -n 123456 > a.txt //將123456寫進文本文件,不能丟了 –n參數,避免回車符干擾
#md5sum a.txt
顯示: a.txt
ctrl+d有兩個含義:
一是向程序發送文件輸入結束符EOF。
二是向程序發送exit退出指令。程序收到信號後具體動作是結束輸入、然後等待,還是直接退出,那就要看該程序捕獲信號後是如何操作的了。
md5sum屬於第一個含義。兩次strl+d了,第一次讀取EOF指令,再次捕獲就會當成exit指令。而shell一類的程序,會直接把ctrl+d解析為退出指令。