Techyou labs
真正的爱应该超越生命的长度,心灵的宽度,灵魂的深度
常用标签
您正在查看:2008年9月
September 12, 2008

traceroute,现代 Linux 系统上的 tracepath,还有Windows 系统上的 tracert,均是用于同一目的的网络调试工具。它们用于显示数据包在IP网络中经过的路由器的IP地址。

原理

这些程序是利用IP数据包的存活时间(TTL)值来实现其功能的。当一台计算机发送IP数据包时,会为数据包设置存活时间(TTL)值。每当数据包经过一个路由器,其存活时间值就会减 1。当存活时间减到 0 时,路由器将不再转发数据包,而是发送一个 ICMP TTL 数据包给最初发出数据包的计算机。

Traceroute 程序首先向目标主机发出 TTL 为 1 的数据包,发送数据包的计算机与目标主机之间的路径中的第一个路由器,在转发数据包时将数据包的 TTL 减 1,它发现 TTL 被减为了 0,于是向最初发出数据包的计算机发送一个 ICMP TTL 数据包,Traceroute 程序以此获得了与目标主机之间的路径上的第一个路由器的IP地址。后面 traceroute 程序依次向目标主机发送 TTL 为 2、3、4 . . . 的数据包,逐个探测出来与目标主机之间的路径上每一个路由器的 IP 地址。

描述:执行mv命令的时候没有注意路径,结果把根目录下的大部分目录都挪到了一个新路径中,然后立即
出错命令不能继续,因为 /lib已经被挪走了,/lib下保存有最基本的系统运行库,现代的linux系统大多
数命令已经动态连接了,当/lib路径改变的时候,那你能用来创建目录,或用来copy文件的任何命令,都
不好用了,都会报下面错误:


/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory

这表示已经找不到ld-linux.so.2这个文件了

由于文件都已经被挪走了,我们平时依赖的工具都不好用了。即使你敲入绝对路径,也会提示:


/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory

这个错误
尝试了下面的命令


/www/users/abcdefg.net/{ls,ln,mkdir,mktemp,ftp,rsync,mv,cp,rm,ldconfig,scp,sftp,perl,ash,zsh,csh}

报的都是上面的错误,
常规的创建文件,创建目录和目录文件转移操作,及远程或本地复制文件操作都无法进行了。
再尝试找下好用的命令:
cd export declare echo > 这些内置命令都是好用的。

我们看下现场,由于ls已经不好用了。那只好用bash的自动补齐功能(TAB键)来看看有哪些目录和文件
首先检查哪些目录被挪走了,执行下面命令:
/www/users/abcdefg.net [按TAB]
输出如下:


backup  bin  boot  dev  ecshop etc  home  lib  lost+found  media  misc  mnt  opt  proc www_logs ucenter

可以看出 bin和lib都已经被挪过来了,那我们既不能直接执行bin下的程序,也不能执行任何依赖/lib下的程序,而且etc也被mv到这里来
所以我们连修改ld.so.conf并生成新的ld.so.cache的机会也没有,因为我们无法执行创建/etc目录的命令。

开始恢复吧
过程不复杂,我们还有ld-linux.so.2 可用,虽然它已经变了位置。
ld-linux.so.2是linux系统的动态连接器,我们可以用他来执行命令,我们使用它的--library-path参数来重新指定LD_LIBRARY_PATH的位置

再看看根目录还有啥


/www/users/abcdefg.net/lib/ld-linux.so.2 --library-path /www/users/abcdefg.net/lib /www/users/abcdefg.net/bin/ls / -F

输出正常,

恢复/lib


/www/users/abcdefg.net/lib/ld-linux.so.2 --library-path /www/users/abcdefg.net/lib /www/users/abcdefg.net/bin/cp -rfp /www/users/abcdefg.net/lib /lib

恢复/bin


/www/users/abcdefg.net/lib/ld-linux.so.2 --library-path /www/users/abcdefg.net/lib /www/users/abcdefg.net/bin/cp -rfp /www/users/abcdefg.net/bin /bin

恢复其他目录


cd /www/users/abcdefg.net
for i in bin boot etc lib media misc mnt opt ; do rsync -av --progress ./$i/ /$i/; done

然后我们再还原dev目录


cd dev
cp -dRp * /dev

重新检查ssh登陆,此时已经能登陆系统了,仔细检查/boot /etc ,都已经正确恢复,重起系统,所有恢复完毕