2008年10月2日 星期四

GNU command無捷徑

就像嬰兒學說話,開始時只是單字(ls ps cd),久了就會用介係詞(pipe >)變成句子,等年紀稍長就會組成文章(shellscript)。
本來剛要把特定程式的連結程式庫移動到chroot環境裡。以前是笨笨的用ldd配合剪貼簿組成搬移的命令,但是年紀長大後,就會開始了解其他的說法
ldd $command | sed '替換命令組'| awk '{print $NF}' |sort 檔案列表 | uniq | 檔案列表

sed 修改出目的檔案列表

paste 檔案列表 目的列表 | sed 's/^/cp /g'> 執行檔
不過不小心按錯,把cp打成mv,頓時系統理很多基礎函式庫就亂了,ls cd 都當場陣亡。

這就是*nix的好處,他絕對不會阻止你作任何蠢事,但是最後你要把核爆的輻射塵統統舔乾淨。

因為只是函式庫移位,導致cp mv也不能呼叫libc6.so,解決辦法很多,一種是另一個系統開機,掛入檔案系統後搬回原位。不過這裡我沒有辦法碰到機器,近期不會,至少幾個月內。於是我想想ldconfig,使用ldconfig把剛剛搬走的重新動態連結回來快取。這時候系統就恢復成為可用的狀態。當然是趁這時把剛剛mv的執行檔對調跑一遍。差一點莫名其妙搞掉遠端機器....

還好還有ldconfig.....

沒有留言: