cp 大文件到 /dev/null 以将大小减小为零

cp 大文件到 /dev/null 以将大小减小为零

我刚刚遇到这样的建议:如果您想删除一个大文件并且进程打开了文件句柄,您应该将其复制到 /dev/null ,并且其大小将减少到零。

这是如何运作的?或者这真的有效吗?

经过快速搜索后,我发现了相互矛盾的答案,从“是的,这完全有效”到“你的整台机器都会爆炸”。有人可以启发我吗?

我在这里找到了这个问题: https://syedali.net/engineer-interview-questions/

答案1

您误读了建议,其想法是不要将大文件复制到/dev/null,这不会以任何方式影响它,如果空间可用,则将其放入缓存中。

cp bigfile /dev/null # useless

建议不要删除该文件然后复制/dev/null到该文件,因为它会保持原始 inode 不变,并且只要进程打开该文件就不会释放任何磁盘空间。

建议将文件内容替换为/dev/null1,考虑到/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有很多风味,可能是为了一些这可能有用,你能提供一个链接吗?

现在,您可以测试它:

  1. 在系统中打开两个终端。
  2. 将大文件复制给非root用户(例如 /var/log/messages
  3. vi messages在第一个终端中vi it ( ) 。
  4. cp messages /dev/null在其他方面。
  5. 首先退出 vi。

messages应该还在那里。

(vi 不是一个好的候选者,如果删除文件,(rm messages)文件将被删除(至少在 ubuntu 16.04 上),您可以从 vi 重写它(使用但文件将从当前目录w读取).messages.swp

相关内容