Linux命令之md5sum
在网络传输、设备之间转存、复制大文件等时,可能会出现传输前后数据不- -致的情况。这种情况在网络这种相对更不稳定的环境中,容易出现。那么校验文件的完整性,也是势在必行的。
md5sum命令用于生成和校验文件的md5值。它会逐位对文件的内容进行校验。是文件的内容,与文件名无关,也就是文件内容相同,其md5值相同
md5值是一个128位的二进制数据,转换成16进制则是32( 128/4 )位的进制值
md5校验,有很小的概率不同的文件生成的md5可能相同。比md5更安全的校验算法还有SHA*系列的
在网络传输时,我们校验源文件获得其md5sum,传输完毕后,校验其目标文件,并对比如果源文件和目标文件md5一致的话,则表示文件传输无异常。否则说明文件在传输过程中未正确传输
md5重要的选项
-b | 以二进制模式读入文件内容 |
---|---|
-t | 以文本模式读入文件内容 |
-C | 根据已生成的md5值,对现存文件进行校验 |
–status | 校验完成后,不生成错误或正确的提示信息,可以通过命令的返回值来判断 |
md5校验
-c选项来对文件md5进行校验。校验时,根据已生成的md5来进行校验。生成当前文件的md5,并和之前已经生成的md5进行对比,如果-致,则返回OK,否则返回错误信息
md5sum -C d.md5
Linux系统产生随机数的方法
1.通过系统环境变量t( $RANDOM)实现
#RANDOM的随机数范围为0 ~ 32767,因此,加密性不是很好,可以通过在输出的随机数后增加加密字符串(就是和密码生成有关的一个字符串)的方法解决,最后再一起执行md5sum操作并截取结果的后n位,这样以来,就无法根据随机数范围0~32767来猜出具体结果了
2.通过openssl产生随机数
令数字与大小写相结合,并且带.上特殊字符,可以达到很长的位数,这样的随机数很安全
[root@localhost md5sum]# openssl rand -base64 10 #10byte
LvI6LxeoYt+MFQ==
3.通过date获取随机数
shell脚本随机数实战案例
使用for循环在/westos目录下批量创建10个html文件,其中每个文件需要包含10个随机小写字母加固定字符串westos。
[root@localhost md5sum]# cat test.sh
#!/bin/bash
Path=westos
[ -d "$Path" ]||[ mkdir -p $Path ]
for n in `seq 10`
do
random=$(openssl rand -base64 40 | sed 's/[^a-z]//g' |cut -c 2-11)
touch $Path/${random}_westos.html
done
[root@localhost md5sum]# sh test.sh
[root@localhost md5sum]# cd westos/
[root@localhost westos]# ls
edrnynoebq_westos.html ioulybqztn_westos.html xgklufzuht_westos.html
fletgjntbc_westos.html jsowfnsxap_westos.html zgilorbpco_westos.html
hgjocwvxdf_westos.html suxctfbhok_westos.html
hqbvjzgnmb_westos.html wsazgzhkol_westos.html
批量创建10个系统帐号(westos01-westos10).并设置密码(密码位随机数,要求时字符和数字混合)
[root@localhost md5sum]# cat test1.sh
#!/bin/bash
. /etc/init.d/functions
user="westos"
passfile="user.log"
for num in `seq -w 10`
do
pass="`echo $RANDOM|md5sum|cut -c 3-11`"
useradd $user$num &>/dev/null && {
echo "$pass"|passwd --stdin $user$num &>/dev/null
echo -e "user:$user$num\tpasswd:$pass">>$passfile
}
if [ $? -eq 0 ];then
action "$user$num is ok" /bin/true
else
action "$user$num is fail" /bin/false
fi
done
echo ----------------------------
cat $passfile && >$passfile # 会清空$passfile文件
[root@localhost md5sum]# sh test1.sh
westos01 is ok [ OK ]
westos02 is ok [ OK ]
westos03 is ok [ OK ]
westos04 is ok [ OK ]
westos05 is ok [ OK ]
westos06 is ok [ OK ]
westos07 is ok [ OK ]
westos08 is ok [ OK ]
westos09 is ok [ OK ]
westos10 is ok [ OK ]
----------------------------
user:westos01 passwd:a27cebe64
user:westos02 passwd:a248a7114
user:westos03 passwd:40fce12bc
user:westos04 passwd:da7940f62
user:westos05 passwd:1e24d1297
user:westos06 passwd:62de26b22
user:westos07 passwd:097739355
user:westos08 passwd:45ab544c9
user:westos09 passwd:2aa2ccf5d
user:westos10 passwd:362eace97
注意:对于给一个数字加0有多种实现方法,这里给出两种方法:seq -w 10;echo {01…10}