1

我遇到了一个问题,程序突然不想启动,没有错误,没有任何东西。为了确保代码及其链接库的完整性,我想比较每个(动态)链接库的 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

非常感谢任何提示!

4

2 回答 2

2

你的脚本正在做的是管道文字“/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
于 2015-03-06T06:27:24.187 回答
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

于 2015-03-06T06:32:09.767 回答