심볼릭 링크를 통해 파일이 존재하는지 검색하는 방법은 무엇입니까?

심볼릭 링크를 통해 파일이 존재하는지 검색하는 방법은 무엇입니까?

후속 조치로이것/sys/class/net질문, 저는 심볼릭 링크가 존재하는 인터페이스를 (다시) 검색하여 어떤 명령/명령 시퀀스가 ​​아래 나열된 어떤 네트워크 인터페이스가 무선 인터페이스인지 알려줄 수 있는지 확인하려고 합니다 .wireless

  1. 내가 얻을 수 있는 가장 가까운 것은 를 사용하는 것이었습니다 ls -LR | grep wireless. 비록 첫 번째 일치에서 멈추고 싶었지만 사용을 시도하고 -m 1파이핑을 시도 head -1했지만 일치 항목을 찾기 위한 파일 경로를 잃어버렸습니다. 실제로 제가 찾고 있는 것이 바로 일치 항목 자체는 사용되지 않는 것입니다. . 이 문제를 해결하지 못했습니다(추가를 시도했지만 H거래 -m 1는 없었습니다).

  2. 또한, 왜 find /sys/class/net -type l스스로 이 목표를 달성할 수 없나요? (를 사용하면 sudo동일한 결과가 나오므로 이러한 링크가 표시되지 않는 것은 문제가 되지 않습니다.)

답변1

  1. glob을 사용하여 쉘에 대신 찾아달라고 요청할 수 있습니다.예를 들어

    echo /sys/class/net/*/wireless
    

    적절한 행동아니요무선 인터페이스의 존재 여부는 쉘과 해당 와일드카드 구성 옵션에 따라 다릅니다.

  2. find기본적으로 기호 링크는 따르지 않습니다. 추가하면 -L변경되지만 기본적으로 기호 링크를 따르지 않는 이유를 이해하게 됩니다.

    find -L /sys/class/net -name wireless
    

    (심볼릭 링크는 사이클을 소개합니다).

완전한 수표를 다음과 같이 작성할 수 있습니다.

for ifc in /sys/class/net/*; do
    if [ "$(cat ${ifc}/operstate)" = "up" ] && [ -d "${ifc}/wireless" ]; then
        echo "${ifc##*/}"
    fi
done

관련 정보