排除来自“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 之外的所有权限都被拒绝