我的 debian 操作系统:
cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
Debian woody中有perl编写的计算代码的代码, 计算操作系统中的代码
例如,在 Debian woody 中,它约为 400-500 Mbs,请尝试以下操作:
size=0
for i in `grep -A 1 -B 1 "^Section: base" /var/lib/dpkg/available | grep -A 2 "^Priority: required" |grep "^Installed-Size" |cut -d : -f 2
`; do size=$(($size+$i)); done
echo $size
47762
我复制所有代码并在我的操作系统中执行:
debian@debian:~$ size=0
debian@debian:~$ for i in `grep -A 1 -B 1 "^Section: base" /var/lib/dpkg/available |
grep -A 2 "^Priority: required" |grep "^Installed-Size" |cut -d : -f 2
`; do size=$(($size+$i)); done
debian@debian:~$ echo $size
0
为什么大小为零?
答案1
错误代码
如果我点击你的链接,代码是:
for i in /bin/* /sbin/* /usr/bin/* /usr/sbin/*; do
[ -f $i ] && {
type=`file $i | grep -il perl`
[ -n "$type" ] && echo $i;
}
done
此外,在您的尝试中(见上图),您正在尝试文件中的grep
部分base
,并且像在我的 debian 上一样,该部分不存在,因此零结果是正常的。
解决方案
#!/bin/bash
size=0
for i in /bin/* /sbin/* /usr/bin/* /usr/sbin/*; do
[[ -x $i ]] &&
file -i $i |
grep -q perl &&
ds=$(du $i | awk '{print $1}')
((size+=ds))
done
echo "$((size/1024)) MiB"