前端之家收集整理的这篇文章主要介绍了
bash – 替换重要的符号链接’安全’,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想从bash脚本中更改符号
链接的目标。问题是,符号
链接是非常重要的(这是/ bin / sh,即),我将以以下方式做到:
>新的目标将在删除旧的后立即可用,即不会有事情会注意到它消失,
>在中间不会有变更失败,即删除符号链接的用户,也不会有新的。
我想到了两种方法。使用普通的ln:
ln -fs /bin/bash /bin/sh
或使用mv:
ln -s /bin/bash /bin/sh.new
mv /bin/sh.new /bin/sh
哪一个更适合我的需要?是否有可能其中一个会尝试替换符号链接目标而不是符号链接本身?
重命名(mv)是一个原子操作;创建新的符号
链接不是(
删除旧的符号
链接;创建新的符号
链接)。所以你应该使用mv:
$ ln -s new current_tmp && mv -Tf current_tmp current
这是一个blog post讨论这个。另外,如果你担心会发生什么,为什么不先尝试一个非关键的符号链接呢?