因此,我没有考虑太多,就运行了这个脚本:
#!/bin/bash
SWAP="${1:-512}"
NEW="$[SWAP*1024]"; TEMP="${NEW//?/ }"; OLD="${TEMP:1}0"
sed "/^Swap\(Total\|Free\):/s,$OLD,$NEW," /proc/meminfo > /etc/fake_meminfo
mount --bind /etc/fake_meminfo /proc/meminfo
它对于撒谎我的交换空间非常有效,但现在我想要像这样的好旧命令
free -m
再次工作,但 /proc/meminfo 完全是空的,服务器似乎不再知道有关它的 RAM 的任何信息,即使有 atop 或类似的东西。
谢谢阅读。
答案1
只需卸载它:umount /proc/meminfo
所有这些程序(free
、top
、atop
等)都必须从某个地方获取它们的信息。那是某处/proc/meminfo
。
如果您想为一个程序提供虚假信息,请在挂载命名空间:
$ unshare -m bash
$$ mount --bind … /proc/meminfo
$$ myprogram
如果您只想对交换空间撒谎,请将伪造meminfo
文件设为通过 FUSE 文件系统的动态文件。 (注意:命名管道也可以工作,但前提是一次只能由一个程序访问。)