在每个链接库上获取md5sum

时间:2015-03-06 06:15:41

标签: bash md5sum ldd

我有一个问题,一个程序突然不想启动,没有错误,没有任何东西。为了确保代码及其链接库的完整性,我想比较每个(动态)链接库的md5sum。从这个论坛的其他帖子我发现很容易列出所有链接库很好地展示它们:

ldd myProgram | grep so | sed -e '/^[^\t]/ d' \
| sed -e 's/\t//' | sed -e 's/.*=..//' \
| sed -e 's/ (0.*)//'

如何添加md5sum或sha1sum,以便在文件名旁边添加一个带校验和的列?简单地添加md5sum只会产生一条线,并且似乎无法完成这项工作:

ldd myProgram | grep so | sed -e '/^[^\t]/ d' \
| sed -e 's/\t//' | sed -e 's/.*=..//' \
| sed -e 's/ (0.*)//' | md5sum

产量

3baf2fafbce4dc8a313ded067c0fccab  -

离开md5sum会产生很好的链接库列表:

/lib/i386-linux-gnu/i686/cmov/libpthread.so.0
/lib/i386-linux-gnu/i686/cmov/librt.so.1
/lib/i386-linux-gnu/i686/cmov/libdl.so.2
/lib/i386-linux-gnu/libz.so.1
/usr/lib/i386-linux-gnu/libodbc.so.1
/usr/lib/libcrypto++.so.9
/lib/i386-linux-gnu/libpng12.so.0
/usr/lib/i386-linux-gnu/libstdc++.so.6
/lib/i386-linux-gnu/i686/cmov/libm.so.6
/lib/i386-linux-gnu/libgcc_s.so.1
/lib/i386-linux-gnu/i686/cmov/libc.so.6
/lib/ld-linux.so.2
/usr/lib/i386-linux-gnu/libltdl.so.7

非常感谢任何提示!

2 个答案:

答案 0 :(得分:1)

你的脚本正在处理文字文本“/lib/i386-linux-gnu/i686/cmov/libpthread.so.0 ...”等并计算md5sum ...

您可以使用xargs在每一行输入上重复任何命令。 -I {}并非绝对必要,但我建议您使脚本更易读,更容易理解

例如

adam@brimstone:~$ ldd $(which bash) 
    | grep so | sed -e '/^[^\t]/ d' 
    | sed -e 's/\t//' | sed -e 's/.*=..//' 
    | sed -e 's/ (0.*)//' 
    | xargs -I{} md5sum {}

6a0cb513f136f5c40332e3882e603a02  /lib/x86_64-linux-gnu/libtinfo.so.5
c60bb4f3ae0157644b993cc3c0d2d11e  /lib/x86_64-linux-gnu/libdl.so.2
365459887779aa8a0d3148714d464cc4  /lib/x86_64-linux-gnu/libc.so.6
578a20e00cb67c5041a78a5e9281b70c  /lib64/ld-linux-x86-64.so.2

答案 1 :(得分:0)

也可以使用For循环:

for FILE in `<your command>`;do md5sum $FILE;done

For eg:
for FILE in `ldd /usr/bin/gcc | grep so | sed -e '/^[^\t]/ d' | sed -e 's/\t//' | sed -e 's/.*=..//' | sed -e 's/ (0.*)//'`;do md5sum $FILE;done