我正在尝试评估多个 Unix 用户帐户的磁盘使用情况。 简而言之,我使用以下命令:
du -cBM --max-depth=1 | sort -n
但是我看到了很多像下面这样的错误消息。如何从显示中排除所有此类“权限被拒绝”消息?
du: `./james/.gnome2': Permission denied
我的请求可能与以下列表非常相似,只需将“find”替换为“du”。
以下线程不起作用。我想我正在使用 bash。
du -cBM --max-depth=1 2>/dev/null | sort -n
或者在 bash 中更好(只需过滤掉这个特定的错误,而不是像最后一个片段一样)
du -cBM --max-depth=1 2> >(grep -v 'Permission denied') | sort -n
要删除来自 du 命令的所有错误,我使用了以下命令:
du -sh 2>&1 | grep -v '^du:'
2> /dev/null 仅隐藏错误消息。
命令 du 总是尝试在目录上运行。想象一下您有数千个目录?
du 需要评估,如果您有权限运行,如果没有,请按照下一个目录...
我会使用简洁的内容,仅排除您不想看到的行。将 stderr 重定向到 stdout,然后 grep 排除所有“拒绝”:
du -cBM --max-depth=1 2>&1 | grep -v 'denied' | sort -n
如果
2>/dev/null
不起作用,可能您使用的 shell 不是 bash
。
要检查您使用的 shell,您可以尝试
ps -p $$
(请参阅 https://askubuntu.com/a/590903/130162)
您可以将其通过管道传输到临时文件,例如 -
du ... > temp_file
错误会打印在终端上,并且只有磁盘使用信息会打印到 temp_file 中。
另一种选择:
sudo du / 2> >(grep -v 'Permission denied') 2> >(grep -v 'cannot access') | sort -n
我更喜欢并使用另一种选择,只显示顶级目录和人类二进制前缀(尽管不是真正的顺序):
sudo du -h -d 1 / 2> >(grep -v 'Permission denied') 2> >(grep -v 'cannot access') | sort -n
输出示例:
0 /dev
0 /proc
0 /sys
2.2G /opt
2.6M /run
4.0K /cdrom
4.0K /srv
7.4G /snap
8.7G /usr
12K /media
16K /lost+found
19M /etc
24G /var
48K /mnt
67M /volumes
86M /root
240K /tmp
295G /home
305M /boot
338G /
相反,如果您想要真正的排序(但不太可读),请尝试:
sudo du -d 1 / 2> >(grep -v 'Permission denied') 2> >(grep -v 'cannot access') | sort -n
输出示例:
0 /dev
0 /proc
0 /sys
4 /cdrom
4 /srv
12 /media
16 /lost+found
48 /mnt
240 /tmp
2632 /run
19216 /etc
68260 /volumes
87512 /root
311420 /boot
2237740 /opt
7755733 /snap
9018580 /usr
25068772 /var
308849688 /home
353419881 /