我刚刚遇到这样的建议:如果您想删除一个大文件并且进程打开了文件句柄,您应该将其复制到 /dev/null ,并且其大小将减少到零。
这是如何运作的?或者这真的有效吗?
经过快速搜索后,我发现了相互矛盾的答案,从“是的,这完全有效”到“你的整台机器都会爆炸”。有人可以启发我吗?
我在这里找到了这个问题: https://syedali.net/engineer-interview-questions/
答案1
您误读了建议,其想法是不要将大文件复制到/dev/null
,这不会以任何方式影响它,如果空间可用,则将其放入缓存中。
cp bigfile /dev/null # useless
建议不要删除该文件然后复制/dev/null
到该文件,因为它会保持原始 inode 不变,并且只要进程打开该文件就不会释放任何磁盘空间。
建议将文件内容替换为/dev/null
1,考虑到/dev/null
设计时大小为零,这实际上将文件截断为零字节:
cp /dev/null bigfile # works
cat /dev/null > bigfile # works
可能会注意到,如果您使用 shell 来运行这些命令,则无需使用/dev/null
,简单的空重定向将具有相同的效果,并且会更高效,cat /dev/null
无论如何都是无操作。
: > bigfile # better
> bigfile # even better if the shell used supports it
答案2
简短的回答是否定的,它不起作用。
国外的unix有很多风味,可能是为了一些这可能有用,你能提供一个链接吗?
现在,您可以测试它:
- 在系统中打开两个终端。
- 将大文件复制给非root用户(例如
/var/log/messages
) vi messages
在第一个终端中vi it ( ) 。cp messages /dev/null
在其他方面。- 首先退出 vi。
messages
应该还在那里。
(vi 不是一个好的候选者,如果删除文件,(rm messages
)文件将被删除(至少在 ubuntu 16.04 上),您可以从 vi 重写它(使用但文件将从当前目录w读取).messages.swp