我创建了一个派生并将其添加到 nix 商店,现在我该如何删除它?

I created a derivation and added it to the nix store, now how do I remove it?

我遵循 7th Nix pill tutorial,并创建了一个将可执行文件放置在 nix 存储中的派生,即 /nix/store/gh66mkic4c1dys8ag8yqnv10x59b7vmh-simple/simple

我可以 运行 该可执行文件,直接或通过指向它的符号链接。但是,如何删除它?我尝试使用 $ nix-env --delete-generations old 删除老年代,还尝试使用 nix-store --gc 进行垃圾收集,但我的推导输出仍然出现在该路径中,并且可以是 运行。

现在我已经完成了本教程,如何删除我在 nix 商店中创建的内容? nixos 是否曾经清理过这样的旧推导?在 运行 执行删除老年代或垃圾收集命令之前,是否需要以某种方式将其标记为不相关?

垃圾收集会删除任何 GC 根无法访问的所有内容。这意味着,如果有什么东西仍然存在,那么你在某个地方有一个你没有想到的 GC 根。您可以使用 nix-store -q --roots 命令找到它们:

例如,这就是为什么我的 emacs 是“活着的”:

$ nix-store -q --roots /nix/store/hwial1dr7sd6ydf81d465jrllxn4gpdm-emacs-with-packages-27.2/bin/emacs
/nix/var/nix/gcroots/per-user/user/current-home -> /nix/store/kl2l02697jxy9mzf5yz72ph18hh0vgsd-home-manager-generation
/nix/var/nix/profiles/per-user/user/home-manager-3-link -> /nix/store/kl2l02697jxy9mzf5yz72ph18hh0vgsd-home-manager-generation
/nix/var/nix/profiles/per-user/user/profile-25-link -> /nix/store/fds0f002lq8sxj0kqj9zq6d7vdakbakf-user-environment
/proc/6695/maps -> /nix/store/z7hr6k4apccj824pvymlyma8dppz7f16-home-manager-path
/proc/3589/maps -> /nix/store/z7hr6k4apccj824pvymlyma8dppz7f16-home-manager-path

前两个根由 home-manager 创建,第三个由 home-manager 使用的 nix-env -i 命令创建。 /proc 中的那些是活动进程中的内存映射文件。