Linux服务器中文件删除与替换如何实现?

Linux运维中经常遇到要替换Linux服务器系统程序或者业务应用程序文件的情况,很多人都会担心,直接替换会不会导致Linux系统程序崩溃或者应用程序崩溃,而需要关闭服务才敢替换,今天在freebuf网站偶然阅读到一篇文章《 如何进行Linux平台共享库替换》,突然明白了以前没有搞清楚的几个自认为奇怪的现象。

  这些现象包括但不限于:

  1.删除某个应用程序的部分文件,为何不会导致此应用程序崩溃

  2.nginx等服务如何可以做到平滑重启

  3.某些删除的文件为何可以通过lsof根据inode找回

  4.为何某些应用程序的文件替换或变更后需要重启才能生效

 

  问题的答案在 这篇文章中得到了很清楚的解答。原来对未被加载的SO,利用复制命令(cp new.so old.so)即可直接完成静态替换,新SO在下次加载时生效。对于已经加载的原SO,直接用新SO复制替换将会导致相应程序崩溃,此种情况 可以使用删除原SOrm -f old.so)或修改原SO名称(mv old.so oldx.so)后,再复制新SO的方法代替,新SO同样在下次加载时生效。

  程序崩溃的原因是复制替换操作会破坏系统访问原SO的索引节点inode,导致系统找不到原SO。系统为每个加载到内存中的文件创建对应的inode,用来管理该文件,inode包含了文件的元信息,如文件字节数、拥有者ID、读写执行权限等。系统以inode标识程 序加载的SO,不再关心文件名, 修改SO名称并未改变对应inode ,因此程序可以继续正常运行; 删除SO只是无法查看,系统直到程序释放SO后才真正删除SOinode ,因此程序也可以继续正常运行;但是在直接复制替换时,新SO将会继承原SOinode,程序无法继续访问原SO,从而导致程序崩溃。

  因此,按照这个思路,日后在Linux运维工作中,可以按照这个理论去做一些事情,比如无论是在修改还是替换钱都保留源文件,这也是为什么在做修改前要备份的理由之一。

 

 

文章来源:通信,我的最爱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值