我编写了这个脚本来获取我的 Ubuntu 系统上所有 libpcap 库的版本号。
#!/bin/bash
allLIBs=$(ldconfig -p | grep libpcap)
echo "$allLIBs" | while IFS= read -r a; do
loc=$(echo $a | awk '{print $4}')
# resolve if a sym link
if [[ -h $loc ]]; then
loc_res=$(readlink -f $loc)
fi
# get lib name
libName=$(basename $loc_res)
echo "$loc"
echo " resolved to: $loc_res"
echo " lib name: $libName"
done
该脚本在我的计算机上的输出是
/usr/local/lib/libpcap.so.1
resolved to: /usr/local/lib/libpcap.so.1.8.0-PRE-GIT
lib name: libpcap.so.1.8.0-PRE-GIT
/usr/lib/x86_64-linux-gnu/libpcap.so.0.8
resolved to: /usr/lib/x86_64-linux-gnu/libpcap.so.1.5.3
lib name: libpcap.so.1.5.3
/usr/local/lib/libpcap.so
resolved to: /usr/local/lib/libpcap.so.1.8.0-PRE-GIT
lib name: libpcap.so.1.8.0-PRE-GIT
/usr/lib/x86_64-linux-gnu/libpcap.so
resolved to: /usr/lib/x86_64-linux-gnu/libpcap.so.1.5.3
lib name: libpcap.so.1.5.3
- 我怎样才能得到so后面的数字?
- 这是获取我的机器上安装的所有 libpcap 库的版本号的正确方法吗?
答案1
如果您不确定安装的库的版本数量:
echo "$(ldconfig -p | grep -Eo '/[^ ]+libpcap[^ ]+$')" | \
while IFS= read -r lib; do readlink "$lib"; done
如果文件路径中没有任何空格,则使用以下内容就xargs
足够了:
echo "$(ldconfig -p | grep -Eo '/[^ ]+libpcap[^ ]+$')" | xargs -L 1 readlink
如果只有一个版本:
readlink "$(ldconfig -p | grep -Eo '/[^ ]+libpcap[^ ]+$')"
要获取之后的版本号so.
,请使用grep
:
% grep -Eo '[0-9][^[:alpha:]]+$' <<<'libpcap.so.1.5.3'
1.5.3
在这里我们得到版本的起始数字,然后继续直到最后,确保中间没有中间字母。