有没有办法在 Linux 中提供安装后和卸载前的脚本?
我试图在安装时和卸载之前在存储介质上执行一些脚本(例如,用于同步)。
任何帮助均感激不尽。
答案1
如果您想为调用/sbin/mount
和/sbin/umount
命令的人们执行此操作,您所要做的就是为两者制作一个包装程序,并将您想要的内容编入这些包装程序中。
包装程序被替换/sbin/mount
为调用真实程序的包装程序/sbin/mount
(重命名为/sbin/mount-real
或/sbin/umount-real
)。要防止任何人调用真实程序,请使用组权限来限制它并在包装程序上设置 SGID 位。
如果您想修复mount(2)
库调用,那么这需要付出努力,而且可能很困难,而且可能不明智,因为这可能会导致内部系统处理出现问题,尤其是在启动和关闭期间。
即使使用包装程序,您也可能需要彻底测试它以避免系统干扰并做出适当的调整。
答案2
您可以使用通知内核钩子,尽管预卸载事件可能真的很难捕获,因为我不确定在目录卸载之前是否有发送的 inotify 事件。
答案3
最简单且可能永远有效的解决方案是轮询/etc/mtab
或/proc/mounts
。一旦对该文件进行了更改,就意味着某个设备已挂载或已卸载。然后您必须在那里检查所需的设备。
Udev 并不是最好的解决方案,因为它只会告诉你设备是否已连接。它不会告诉你设备是否已实际安装。有时这可能会奏效,但这是一个不靠谱的解决方案,在某些时候会失效,让你抓狂不已。
答案4
你可以写一个 udev 规则来做到这一点。我使用过类似这用于自动将内容备份到 USB 驱动器。很有趣的东西。