软件运行和编译过程及库调用机制(以及删除库的恢复方法)
1.ldd是个外部命令
[root@centos7 ~]# type ldd
ldd is /usr/bin/ldd
2.ldd:是用来打印共享对象(库)依赖关系
3.1)来查查ls调用的二进制库有哪些
[root@centos7 ~]# which ls alias ls='ls --color=auto' /usr/bin/ls [root@centos7 ~]# ldd /usr/bin/ls linux-vdso.so.1 => (0x00007ffffa79e000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fb9680ab000) libcap.so.2 => /lib64/libcap.so.2 (0x00007fb967ea6000) libacl.so.1 => /lib64/libacl.so.1 (0x00007fb967c9d000) libc.so.6 => /lib64/libc.so.6 (0x00007fb9678cf000) libpcre.so.1 => /lib64/libpcre.so.1 (0x00007fb96766d000) libdl.so.2 => /lib64/libdl.so.2 (0x00007fb967469000) /lib64/ld-linux-x86-64.so.2 (0x00007fb9682d2000) libattr.so.1 => /lib64/libattr.so.1 (0x00007fb967264000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fb967048000)
2)再查查hostname
[root@centos7 ~]# type hostname hostname is /usr/bin/hostname [root@centos7 ~]# ldd /usr/bin/hostname linux-vdso.so.1 => (0x00007ffc605fd000) libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f9bd182a000) libc.so.6 => /lib64/libc.so.6 (0x00007f9bd145c000) /lib64/ld-linux-x86-64.so.2 (0x00007f9bd1a44000)
4.我们假如把ls或者hostname的某一个库移走:
[root@centos7 ~]# mv /lib64/ld-linux-x86-64.so.2 /opt
再来运行ls和hostname等
[root@centos7 ~]# ls -bash: /usr/bin/ls: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory [root@centos7 ~]# hostname -bash: /usr/bin/hostname: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory
发现ls和hostname均不能运行,你破坏影响的范围是:谁依赖调用这个库全部影响。所以库的重要性,甚至会比这个程序还重要.
5.那我们尝试把这个库再移回去:
[root@centos7 ~]# mv /opt/ld-linux-x86-64.so.2 /lib64 -bash: /usr/bin/mv: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory
发现,也移不回去了,因为mv也依赖他
6.除了重启和快照恢复,我们还可以这样
1)第一步在开机的时候,按ctrl+alt+insert,进度条出现的时候再按esc进入:
2)选3,进入到这个界面选第三个:
3)然后进入下图界面选第二个:
4)选择第一个继续输入1:
5)按c继续
6)这里的return键就是enter,敲enter继续
7)然后我们就进入到了这个界面这个就是救援版的或者光盘版的小linux:
8)注意你现在看到的根不是你原来目录的根,原来的硬盘的根已经放在/mnt/sysroot下去了,这个根是救援光盘加载的虚拟根,但是我这个却是在/mnt/sysimage中,可能版本不一样,但是不影响
9)你在救援光盘的Linux中你用ls可以查看你移动在/opt下的库文件
10)现在就很明朗了,用mv再将其移动过去就可以了,有人会问刚才为什么不能移动回去,因为你现在用的是救援光盘版的小Linux,不是硬盘的Linux,救援光盘的Linux当然没问题了,所以我们可以正常敲命令。这里因为我考虑到万一库被删的情况,就没用mv,懒得再弄一遍了哈哈,不过弄好效果如下图.
7.万一我们将上述库给删了怎么办
1)按照6的步骤最后一步不用mv,用cp将救援光盘的/lib64/ld-linux-x86-64.so.2复制到你的硬盘Linux中:
2)在其页面按ctrl+alt+insert重启,效果如下图:
可以发现已经正常了.
2022-2-4 21:37