出现如上报错,这个问题就比较大了,因为libc涉及到C语音编译。先到正常能用tcpdump命令的服务器上去看,主要是比较当前libc的大小和tcpdump的大小是否相等,正常情况他们的大小是一样的,如下
[root@collector4 lib64]# ll /lib64/libc.so.6
lrwxrwxrwx. 1 root root 12 2月 28 2018 /lib64/libc.so.6 -> libc-2.12.so
[root@collector4 lib64]# cd /lib64/
[root@collector4 lib64]# ll libc-2.12.so
-rwxr-xr-x 1 root root 1926800 11月 6 2013 libc-2.12.so
[root@collector4 lib64]# find / -name tcpdump
/usr/sbin/tcpdump
/usr/local/src/PF_RING-6.6.0/userland/tcpdump
[root@collector4 lib64]# ldd /usr/sbin/tcpdump
linux-vdso.so.1 => (0x00007fff46dff000)
libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x0000003fdda00000)
libpcap.so.1 => /usr/lib64/libpcap.so.1 (0x000000369c200000)
libc.so.6 => /lib64/libc.so.6 (0x000000369be00000)
libdl.so.2 => /lib64/libdl.so.2 (0x000000369ba00000)
libz.so.1 => /lib64/libz.so.1 (0x000000369c600000)
/lib64/ld-linux-x86-64.so.2 (0x000000369b600000)
You have mail in /var/spool/mail/root
[root@collector4 lib64]# rpm -qa glibc
glibc-2.12-1.132.el6.x86_64
其中,ldd是list, dynamic, dependencies的缩写, 意思是,列出动态库依赖关系;
还要比较报错的服务器libc与正常的服务器libc的大小,比较报错的服务器tcpdump与正常的服务器tcpdump的大小。
于是到有问题的服务器,也是用上面的方法去查看比较,发现当前libc的大小和tcpdump的大小与正常的服务器一样,这说明libc库是没有问题的,于是开始查其他原因,因为我这个新安装的tcpdump包是从centos7上面拷贝过来的,但是我这个服务器是centos6.5的,版本上不匹配,于是重新卸载所有刚安装的tcpdump,
[root@localhost lib64]# rpm -e tcpdump-4.9.2-3.el7
[root@localhost lib64]# rpm -qa|grep tcpdump
tcpdump-4.0.0-3.20090921gitdf3cb4.2.el6.x86_64
[root@localhost lib64]# tcpdump
-bash: /usr/sbin/tcpdump: 没有那个文件或目录
卸载完成后,发现还有一个tcpdump,于是继续卸载
[root@localhost lib64]# find / -name tcpdump
[root@localhost lib64]# rpm -e tcpdump-4.0.0-3.20090921gitdf3cb4.2
error: package tcpdump-4.0.0-3.20090921gitdf3cb4.2 is not installed
卸载不了,这里就全部卸载了
[root@localhost lib64]# rpm -e tcpdump
[root@localhost lib64]# find / -name tcpdump
安装完后,tcpdump使用正常了;
其实,我在6.5的环境下安装7的包,按理说应该是安装不上的,我用了—force –nodeps命令,强制安装了,所以才会出现上述的错误。以后,注意安装包的时候要看是否是有依赖,如果是有依赖的安装才用强制的安装,这种安装就报错libc的一定不要强制安装。