排除来自“du”的所有权限被拒绝消息

Posted

技术标签:

【中文标题】排除来自“du”的所有权限被拒绝消息【英文标题】:Exclude all permission denied messages from "du" 【发布时间】:2013-02-15 00:01:47 【问题描述】:

我正在尝试评估一些 Unix 用户帐户的磁盘使用情况。 简单地说,我正在使用以下命令:

du -cBM --max-depth=1 | sort -n

但是我看到了很多类似下面的错误信息。如何从显示中排除所有此类“权限被拒绝”消息?

du: `./james/.gnome2': Permission denied

我的请求可能与以下列表非常相似,将“find”替换为“du”。

How can I exclude all "permission denied" messages from "find"?

以下线程不起作用。我想我正在使用 bash。

Excluding hidden files from du command output with --exclude, grep -v or sed

【问题讨论】:

【参考方案1】:

为了消除来自 du 命令的所有错误,我使用了这个:

du -sh 2>&1 | grep -v  '^du:'

【讨论】:

【参考方案2】:

您可以将它通过管道传输到一个临时文件,例如 -

du ... > temp_file

错误会打印在终端上,只有磁盘使用信息会打印到 temp_file 中。

【讨论】:

很好,但是您需要为临时文件提供磁盘空间,这不是给定的。【参考方案3】:

如果2>/dev/null 不起作用,可能您使用的shell 不是bash

要检查您使用的外壳,您可以尝试ps -p $$(参见https://askubuntu.com/a/590903/130162)

【讨论】:

【参考方案4】:

我会使用简洁的东西,只排除你不想看到的行。将 stderr 重定向到 stdout,并用 grep 排除所有“拒绝”:

du -cBM --max-depth=1 2>&1 | grep -v 'denied' | sort -n 

【讨论】:

【参考方案5】:
du -cBM --max-depth=1 2>/dev/null | sort -n 

在 bash 中或更好(只是过滤掉这个特定的错误,而不是像最后一个 sn-p)

du -cBM --max-depth=1 2> >(grep -v 'Permission denied') | sort -n 

【讨论】:

@MevatlaveKraspek - 谢谢!如果你有时间,你能解释一下“2>>(grep -v 'Permission denied')”是做什么的吗? -v 是反向匹配。所以看起来它只是过滤 stderr (2>) 并且只隐藏 Permission denied 错误,而不是像第一个命令那样隐藏所有错误。【参考方案6】:

2> /dev/nul 仅隐藏错误消息。

命令 du 总是尝试遍历目录。想象一下,您有数千个目录?

du 需要 eval,如果您有权限运行,如果没有,请按照下一个目录...

【讨论】:

以上是关于排除来自“du”的所有权限被拒绝消息的主要内容,如果未能解决你的问题,请参考以下文章

WinSCP:权限被拒绝。错误代码:3来自服务器的错误消息:权限被拒绝[关闭]

Postgres:除 phpPgAdmin 之外的所有权限都被拒绝

访问被拒绝:获取云端硬盘凭据时权限被拒绝

尝试从 PHP 脚本连接到 Redis 时对“权限被拒绝”进行故障排除

权限被拒绝-即使在拥有所有权的组中[关闭]

OpenSSH WIndows 10 - key_load_private:权限被拒绝