庞大资源库的计算机教程网站!
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
首页 操作系统 程序设计 图形图像 媒体动画 机械电子 WEB开发 数 据 库 办公系列 路由技术 网络原理 网络应用
认证考试 安全技术
首页>操作系统>Solaris>系统管理>正文
资料搜索
Google搜索
Google
返回上级列表

推荐文章

快速保存网页中所有图片的方法
Windows中让光驱巧妙“隐身”技
防范非法用户入侵Win 2000/XP系
两款比较典型的ASP木马防范方法
有关表格边框的css语法整理
Windows XP中可以被禁用的服务
SQL Server导出导入数据方法
Javascript所有对象的属性的获
网页(HTML)中的特殊字符
与篮球共舞,尽显模式本色
QQ病毒的手工清除方法
Photoshop为极品美女打造性感睫
天衣无缝:IIS与PHP水火也相容
SQL Server存储过程编写和优化

实时连接器ld.so.1文件损坏或丢失后,使系统怎样恢复正常

 作者:飞天二狭    日期:2005-4-19
字号选择〖 〗/ 双击滚屏 单击停止   
实时连接器ld.so.1文件损坏或丢失后系统怎样恢复正常?
前言:看到网上好多人遇到ld.so.1文件损坏或丢失,系统瘫痪询问怎样处理,为此我将这一故障现象进行归纳总结,供各位网友参考,希望从中得到帮助。

一、动态连接库的概念
大家都知道,在WINDOWS系统中有很多的动态链接库(以.DLL为后缀的文件,DLL即Dynamic Link Library)。这种动态链接库,和静态函数库不同,它里面的函数并不是执行程序本身的一部分,而是根据执行程序需要按需装入,同时其执行代码可在多个执行程序间共享,节省了空间,提高了效率,具备很高的灵活性,得到越来越多程序员和用户的青睐。
Solaris系统里面有些库文件,当编译的时候,如果把库文件也编译到文件中,那文件本身就可以执行,但这样的缺点是生成的文件十分大。所以很多情况下使用动态连接库,就是编译出的文件不包含库,而只包含到库的指针,这样在运行的时候会到指定的地方调用这个库,这样就减少了文件的大小。Solaris包含的实时连接器ld.so.1,就是动态对象的运行阶段链接程序。

从下面的的命令中,我们可以列出可执行文件或者共享对象的动态从属关系,这玩意没了,你的什么ls,cd什么的命令就都费了,如果ld.so.1文件被破坏了,系统肯定无法正常启动。

/usr/bin/ldd [filename]
/* List the dynamic dependencies of executable files */

# /usr/bin/ldd /usr/bin/cat
libc.so.1 => /usr/lib/libc.so.1
libdl.so.1 => /usr/lib/libdl.so.1
/usr/platform/SUNW,Ultra-1/lib/libc_psr.so.1
# ldd /usr/bin/ls
libc.so.1 => /usr/lib/libc.so.1
libdl.so.1 => /usr/lib/libdl.so.1
/usr/platform/SUNW,Ultra-1/lib/libc_psr.so.1
# ldd /usr/bin/cp
libc.so.1 => /usr/lib/libc.so.1
libdl.so.1 => /usr/lib/libdl.so.1
/usr/platform/SUNW,Ultra-1/lib/libc_psr.so.1

二、ld.so.1文件损坏或丢失解决的办法

1.如果意外的/usr/lib/ld.so.1损坏或丢失,系统没有正常启动的情况下:
执行命令都会出现错误信息:
#reboot
Reboot :can not find /usr/lib/ld.so.1
#find
Find: /usr/lib/ld.so.1
#ls
Ls: can not find can not find

这时,千万不要重启动,立即用/usr/sbin/static/mv、/usr/sbin/static/cp命令恢复 :

#/sbin/static/cp /etc/lib/ld.so.1 /usr/lib/
经过实验,系统恢复正常!这时,你试试如下命令,就能体会到为什么了。
---------------------------------------------------------------------------
# ls /usr/sbin/static
cp* ln* mv* rcp* tar*
SUN的工程师非常聪明,为了防备了这个情况, 做了以上几个不使用动态连接库的命令
#find / -name ld.so.1 -print
/usr/lib/sparcv9/ld.so.1
/usr/lib/ld.so.1
/etc/lib/ld.so.1
blade% ls -ld /usr/lib/sparcv9/ld.so.1
-rwxr-xr-x 1 root bin 191672 Jul 28 2001 /usr/lib/sparcv9/ld.so.1
blade% ls -ld /usr/lib/ld.so.1
-rwxr-xr-x 1 root bin 196852 Jul 28 2001 /usr/lib/ld.so.1
blade% ls -ld /etc/lib/ld.so.1
-rwxr-xr-x 1 root bin 196852 Jul 28 2001 /etc/lib/ld.so.1
---------------------------------------------------------------------------
从上面的,我们又可以看到,这个库文件,不仅仅在/usr/lib有,在/etc/lib、/usr/lib/sparcv9/下也有,所以你就重新在本机上拷贝一份就行了。这些信息在这个连接库不正常的情况下是看不到的。

2.如果意外的/usr/lib/ld.so.1损坏或丢失,系统启动的情况下:
错误信息:
Uname:can not find /usr/lib/ld.so.1
Loadkeys: can not find /usr/lib/ld.so.1
Killed
Cfsfstype: can not find /usr/lib/ld.so.1
Expr: can not find /usr/lib/ld.so.1
Swap: can not find /usr/lib/ld.so.1
Killed
Fsck: can not find /usr/lib/ld.so.1
Killed

这时,用光盘启动到单用户下:
ok boot cdrom -s (放入启动安装光盘)
#mount /dev/dsk/c0t0d0s0 /mnt (这里指定原usr目录对应的原始设备名)
# cp /mnt/etc/lib/ld.so.1 /mnt/lib/(就是将/usr/etc下的这个文件拷贝到/usr/lib下。)
系统重新启动,一切正常!

3.如?usr被改名了情况下,怎么办?
假设/usr改名成了/faint,系统没有启动
马上执行
#/faint/sbin/static/mv /faint /usr

假设/usr改名成了/faint,系统重新启动,这时肯定不能正常启动,同样我们启动到单用户下:
ok boot cdrom -s (放入启动安装光盘)
mount /dev/dsk/c0t0d0s0 /mnt (这里指定原usr目录对应的原始设备名)
mv /mnt/faint /mnt/usr

建议把/usr/sbin/static下的东西拷一份到/sbin下或者其它比较可信的跟/在同一个文件系统下的目录下。以备系统不测.

之后,我又进行了多次实验,各个版本系统下的/usr/lib/ld.so.1文件互相兼容。所以也可以从其他机器拷贝过来。

在解决问题的过程中,得到了一位大师的帮助,希望写出来,供大家参考!
上一篇:Solaris 系统管理命令及相关技术中英文对照参考    下一篇:usr/lib/ld.so.1损坏或丢失  
[发送给好友]  [关闭窗口]  [返回顶部]   转载请注明来源:www.it00.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 原点 投稿作者: 飞天二狭
信息来源: 网络 录入时间: 2005-4-19
关于我们 - 广告服务 - 版权申明 - 网站地图 - 联系方式 - 总编信箱 - 会员投稿