如果应用程序正在运行其使用的其中一个共享库被写入或截断,则应用程序将崩溃。移动文件或使用'rm'批量删除文件不会导致崩溃,因为操作系统(Solaris在这种情况下,但我认为这在Linux和其他* nix上也是如此)足够聪明,不会删除与该文件在任何进程打开的时候。运行shell脚本时,如何防止覆盖或截断文件?
我有一个执行共享库安装的shell脚本。有时,它可能用于重新安装已安装的共享库的版本,而无需首先卸载。由于应用程序可能正在使用已经安装的共享库,因此脚本非常聪明,可以将文件打包或移走(例如,当我们知道没有应用程序时,cron可以清空的“已删除”文件夹将运行),然后再安装新的程序,以免它们被覆盖或截断。
不幸的是,最近一个应用程序在安装后崩溃。巧合?很难说。这里真正的解决方案是切换到一个比旧的巨型shell脚本更强大的安装方法,但在交换机制作之前有一些额外的保护会很好。有没有什么方法可以包装一个shell脚本以防止覆盖或截断文件(并且理想情况下会大声地失败),但仍然允许它们被移动或rm'd?
标准的UNIX文件权限不会做到这一点,因为您无法区分移动/从覆盖/截断中删除。别名可以工作,但我不确定整个命令是否需要别名。我想像truss/strace之类的东西,除非在每个动作之前检查过滤器是否真的这样做。我不需要一个完美的解决方案,甚至可以对付故意恶意的脚本。
不提示这个问题不属于堆栈溢出,但我想你可能会在Serverfault上得到一些有趣的和有用的输入。 – Emily 2010-03-06 21:43:37
是的,我在哪个网站发帖时发生冲突,shell脚本是重叠的网站。我会尝试在那里发帖,谢谢。 – 2010-03-07 01:44:59