我正在寻找一个脚本来测试交换,如果发现交换是该脚本的一部分,则可以正常退出:
#!/bin/bash
# This script formats and mounts /dev/sdc
{
if [ ! -f /scripts/alert ]; then
echo "File not found!"
exit 0
fi
}
mkswap /dev/sdc && swapon /dev/sdc
#END
答案1
缺少swapinfo
(*BSD),swapon -s
(交换使用)是第二好的选择。
以下任何一种方法都可以解决问题,$?
如果设置了一个或多个交换,则设置为 0:
/sbin/swapon -s | grep -q /dev
grep -q /dev /proc/swaps
free | awk '/Swap/{ exit(!$2)}'
awk '/SwapTotal/ {exit (!$2)}' /proc/meminfo
最后两个命令可能是最强大的,前两个命令不会(按原样)确认交换的存在,当仅有的使用交换文件(有点不寻常,但可能在操作系统安装过程中或在无盘系统上发现通过 NFS 交换)。
您可以用它来检测(或计算,-c
代替-q
)交换:
grep -qE "(partition|file)" /proc/swaps
(这也将计算掉期/dev/nbd
网络块设备,交换块设备被视为“分区”交换设备,至少到 linux-3.13.5 为止。)
答案2
我不确定每个系统上的每个交换是否总是包含“/dev”...并且/或者如果您想知道有多少个交换正在使用中...
我认为 /proc/swaps 应该为每个正在使用的交换添加一行,如果没有交换,则只有一行(标题)。因此wc -l
应该说明行数,因此交换数 - 1。
因此这应该给出正在使用的交换次数:
swapnum=$(( $(cat /proc/swaps|wc -l) - 1 ))
(或者如果你因为某种原因真的很讨厌猫,)
swapnum=$(( $(wc -l < /proc/swaps) - 1 ))
并且可以测试是否= 0 或其他