du 命令同时给出错误和结果

rob*_*895 10 disk-usage

我想知道我的 VPS 的磁盘空间,虽然文件夹du工作正常

$ du -sh /home/
325M    /var/
Run Code Online (Sandbox Code Playgroud)

但是试图获得整个 vps 给了我这个结果。

[root@user/]# du -sh
du: cannot access `./proc/18097/task/18097/fd/4': No such file or directory
du: cannot access `./proc/18097/task/18097/fdinfo/4': No such file or directory
du: cannot access `./proc/18097/fd/4': No such file or directory
du: cannot access `./proc/18097/fdinfo/4': No such file or directory
1.3G    .
Run Code Online (Sandbox Code Playgroud)

我假设1.3G是空间,但为什么会发生错误?我如何解决它?

mik*_*erv 8

你不需要修复它 - 它没有坏。这些是对内核文件对象不可用的引用du- 这是涉及文件描述符的常见竞争条件。那些无论如何都不会/proc消耗空间就此而言也不会),因为它们不在磁盘上——它们只是对内核文件描述符的临时引用。他们要么引用匿名管道/套接字——因此不能,stat因为它们没有文件名——或者在du注意到它们的时间和它尝试stat它们的时间之间,它们要么已经不复存在,要么du从未有过这样做的权限。地方。它们很可能du是自己的文件描述符。

但是,您的命令可能存在问题,因为它解决了多个文件系统挂载问题。这可能不是您的意图,因此您可以使用:

du -shx
Run Code Online (Sandbox Code Playgroud)

...仅处理当前工作目录的根安装上存在的文件。因为它/proc是一个完全属于它自己的文件系统,并且单独安装以/运行该文件系统/将排除/proc和所有其他不属于的文件系统。

否则,如果你确实想要多个文件系统挂载的列表,你可以这样做:

du -sh 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

  • @crisron - 它们存在于系统内存中(如果有的话) (2认同)