심볼릭 링크로 실행된 명령을 찾는 방법은 무엇입니까? [폐쇄]

심볼릭 링크로 실행된 명령을 찾는 방법은 무엇입니까? [폐쇄]

내 시스템 어딘가(문제는 어디에 있는지 모른다는 것)에 우선순위가 있는 심볼릭 링크가 있는데 bash링크가 깨져서 작동하지 않습니다.

뿐만 아니라:

  • 현재 디렉터리:mysymlink
  • 경로 어딘가(패키지에 의해 설치됨):mysymlink

현재 디렉토리에서 실행하면 파일 시스템 어딘가에 있는 mysymlink(깨진) 심볼릭 링크가 호출됩니다.mysymlink

현재 디렉토리에서 심볼릭 링크를 사용할 수 있도록 심볼릭 링크를 찾으려고 삭제합니다.

어떻게 찾을 수 있나요?

(편집) 구체적인 예:

명령 -v testcafe

/usr/local/bin/testcafe

ls -l /usr/local/bin/testcafe

ls: /usr/local/bin/testcafe에 액세스할 수 없습니다: 해당 파일이나 디렉터리가 없습니다

(노트:대상 경로를 삭제했습니다.실수로 인해)

이 심볼릭 링크(내 시스템 어딘가에서)를 어떻게 삭제할 수 있습니까?

답변1

command -v UTILITY명령을 실행하면 쉘이 무엇을 실행하려고 하는지 보여줍니다 UTILITY.

보도된 이후

/usr/local/bin/testcafe

그러나 이후에

ls: cannot access /usr/local/bin/testcafe: No such file or directory

이 작업을 시도하면 유틸리티의 보고된 위치가 셸에 의해 캐시되어 삭제되었다고 ls -l믿게 됩니다 .testcafe

쉘의 캐시를 플러시하려면 다음을 사용하십시오 hash -r(이 명령은 아무것도 인쇄하지 않음). 이렇게 하면 캐시가 플러시되고 쉘은 다음에 실행할 때 전체 경로 조회를 수행합니다 testcafe.

답변2

어쩌면 당신은 시도해야 할 것입니다 (그렇다고 가정 ls)아니요별칭; 그렇다면 다음으로 바꾸세요 /bin/ls.)

ls -l $(which mysymlink)

which mysymlink명령의 전체 경로가 제공되기 때문에 mysymlink(예: 확장명 사용)$PATH바꾸다)

이 명령을 시도해야 합니다외부포함하다 mysymlink.

그런데 을 .사용 $PATH하여 확인할 수 있습니다 echo $PATH. 그리고 현재 디렉터리를 디렉터리 안에 넣으면 $PATH보안 위험이 발생할 수 있습니다.

ls: 접근할 수 없습니다 /usr/local/bin/testcafe: 해당 파일이나 디렉터리가 없습니다

ls -dl /usr/ /usr/local/ /usr/local/bin/그런 다음 해당 디렉토리 중 존재하지 않는 디렉토리를 확인하십시오 . (어쩌면 잊으셨을 수도 있습니다.)일부 파일 시스템이 있거나 실수로 루트로 해당 디렉터리 중 일부를 삭제했습니다.)

물론 하나도 만들어 보세요ls -l /usr/local/bin/testcafe

(앨리어싱이나 재정의를 하고 있는 것 같으니 /bin/ls대신 사용해 보세요 )lsls

이 심볼릭 링크(내 시스템 어딘가에서)를 어떻게 삭제할 수 있습니까?

먼저 그것을 찾아야합니다. 사용찾기(1)적절하게 (아마도와 함께 -lname)

답변3

의 모든 디렉토리에서 끊어진 기호 링크를 찾으려면 PATH다음을 사용하십시오 bash.

IFS=: read -ra dirs <<<"$PATH"
find -L "${dirs[@]}" -type l -maxdepth 1

제거하려면 -delete에 추가하세요 .find

관련 정보