加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何在bash中找到指向符号链接的符号链接

发布时间:2020-12-16 01:58:40 所属栏目:安全 来源:网络整理
导读:我正在准备一个bash脚本来验证符号链接的正确性.我想诊断时间: @symlink坏了 @symlink指向另一个@symlink – (用symlinks链的最终目标修复它) @symlink指向另一个@symlink,它被破坏了 @symlinks链是一个循环 在诊断symlink指向符号链接的时候,我遇到了第2点
我正在准备一个bash脚本来验证符号链接的正确性.我想诊断时间:

> @symlink坏了
> @symlink指向另一个@symlink – (用symlinks链的最终目标修复它)
> @symlink指向另一个@symlink,它被破坏了
> @symlinks链是一个循环

在诊断symlink指向符号链接的时候,我遇到了第2点的大问题.

我试图使用readlink,但它返回符号链接的最终目标而不是指向符号链接名称.我尝试在没有-f参数的情况下运行它,但它没有帮助.然后与find的组合给了我糟糕的结果……
任何人都可以帮我解决这个问题吗?

下面我将我的代码粘贴到当前版本中.

failed=0

for file in path/*
do
    if [[ -L "$file" ]]
    then
        if [[ ! -a "$file" ]]
        then
            echo "Symlink '$file' is broken -- target object doesn't exists."
            failed=1
        elif [[ -L "$(readlink -f $file)" ]]
        then
            echo "Symlink '$file' points to another symlink: '$(readlink $file)'"
            failed=1
        fi
    fi
done
exit $failed

UPDATE

测试文件结构(其中讨论了bml脚本的symlinks.sh):

**hook-tests**

解决方法

从您的问题描述中不清楚如何处理传递链末端的断开链接.我将简单地报告错误并继续前进.

#!/bin/sh
rc=0
for file in path/*; do
    if [ -L "$file" ]; then
        nfile=$file
        while [ -L "$nfile" ]; do
            nfile=$(cd $(dirname "$nfile"); abspath $(readlink "$nfile"))
        done
        if ! [ -r "$nfile" ]; then
            echo "$0: $file eventually resolves to nonexistent target $nfile" >&2
            rc=1
        else
            # FIXME: maybe avoid doing this needlessly?
            rm "$file"
            ln -s "$nfile" "$file"
        fi
    fi
done
exit "$rc"

我是否正确理解您希望将符号链接符号链接(递归等)用符号链接替换为最终目标?这个脚本可以做到这一点,虽然有些过分,但它会重写所有解析的符号链接;优化这一点,以避免不必要地做它是一个练习.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读