来自 No Good Deed Goes Unpunished 部门,这里有一个简单的脚本来完成我的任务。再次感谢 Terry Wang。调用它的脚本进入一个永久的“do”循环,该循环尝试关闭并休眠几分钟。
#!/bin/bash
# Check for open Samba share.
# All shares are named "share" something,
# so grep for "share" is usable
smbstatus | grep -i share > /dev/nul
samba=$?
# Check for open NFS mount.
# Grep for port 2049, then
# grep that for "ESTAB"
netstat -naptule | grep :2049 | grep ESTAB > /dev/nul
nfs=$?
# If either came back zero, something is active.
if [[ $samba != 0 && $nfs != 0 ]]; then
shutdown -h now
fi
没有直接的 NFS 实用程序(由 提供
nfs-utils
)来列出连接到 NFS 服务器的客户端(挂载导出的目录)。但是,如果使用 NFSv4,在 NFS 服务器端客户端可以很容易地被识别,
ss
或者netstat
因为它只为 UDP 和 TCP 使用 1 个端口 2049:例子
netstat -naptule | grep :2049
ss -tuna | grep :2049
我们可以看到 NFS 服务器 192.168.1.123,有 1 个客户端 192.168.1.150 连接到它。
将任一命令与文本处理(grep、cut、awk、sed 等)结合起来,可以组装一个 shell 脚本,轻松实现您想要的。
来自 No Good Deed Goes Unpunished 部门,这里有一个简单的脚本来完成我的任务。再次感谢 Terry Wang。调用它的脚本进入一个永久的“do”循环,该循环尝试关闭并休眠几分钟。