构建新的 OpenBSD 内核后,install
内核的目标Makefile
会执行以下操作:
rm -f /obsd
ln /bsd /obsd
cp bsd /nbsd
mv /nbsd /bsd
我知道前两行删除了旧的备份内核/obsd
并创建了一个/obsd
指向当前运行的内核的硬链接/bsd
。特别是,正在运行的内核根本没有移动。这对我来说很有意义。
./bsd
但是,将新构建的内核先移动到/nbsd
然后重命名为的目的是什么/bsd
?为什么不将第三行和第四行替换为明显更简单的行cp bsd /bsd
呢?
如果这很重要:OpenBSD 的默认分区方案将内核构建树放置在与根文件系统不同的文件系统(磁盘标签)中。
答案1
如果 makefile 配方中的任何命令返回失败状态(除非该命令前面有-
),则该配方将停止执行。您引用的配方将确保/bsd
只有在命令成功时才会被替换cp bsd /nbsd
。如果分区已满或 inode 不足,cp 可能会失败。