如何列出与 NFS 挂载链接的服务器中的可用软链接目录

如何列出与 NFS 挂载链接的服务器中的可用软链接目录

我们的服务器上有很多目录。这些目录被创建为软链接,并将其与某些 NFS 共享链接。我想列出与 NFS 共享链接的软链接目录。

我们使用下面的命令创建软链接目录并与 NFS 链接。

client 1 # ln -s /net/rchserver01/data/share2/ /tmp/
client 1 # ln -s /net/rchserver01/data/share1/ /var/
client 1 # ll /tmp/
lrwxrwxrwx 1 root     root  27 Sep 13 11:38 share2 -> /net/rchserver01/data/share2/
client 1 # ll /var/
lrwxrwxrwx 1 root     root  27 Sep 13 11:38 share2 -> /net/rchserver01/data/share1/

答案1

给定示例输入:

find /tmp -lname '/net/*'

更一般地说,告诉find探索每个本地文件系统,但停留在每个文件系统上:

find $(lsblk --list --noheadings --output MOUNTPOINT | grep /) -xdev -lname '/net/*'

更一般地说,要求find搜索本地文件系统,如上所述,但建立可能的 NFS 目标列表:

readarray -t nfsmounts < <(awk '$3 ~ /^nfs/ { print $2 }' < /proc/mounts)
excludes=()
excludes+=("(")
excludes+=(" -lname ${nfsmounts[0]}")
for((i=1;i < ${#nfsmounts[@]}; i++))
do
  excludes+=( " -o -lname '${nfsmounts[i]}/*'")
done
excludes+=(")")
find $(lsblk --list --noheadings --output MOUNTPOINT | grep /) -xdev ${excludes[@]}

文件系统起始列表的另一种选择:解析 /proc/filesystems 来查找文件系统类型不是 nodev:

find $( for type in $(awk '$1 != "nodev"' /proc/filesystems); do mount -l -t "$type" | awk '{print $3}'; done ) \
  -xdev -lname '/net/*'

相关内容