Linux에서 깨진 심볼릭 링크를 찾고 삭제하는 방법

Linux의 심볼릭 링크는 환상적인 기능이지만 끊어져 아무 것도 가리키지 않을 수 있습니다. 깨진 심볼릭 링크를 찾아 검토하고 필요한 경우 시스템에서 제거하는 방법은 다음과 같습니다.

심볼릭 링크 101

“소프트 링크” 및 “심볼릭 링크”라고도 하는 심볼릭 링크는 파일과 디렉터리를 가리킬 수 있는 바로 가기 형식입니다. 심볼릭 링크는 파일 관리자 창에서 일반 파일이나 디렉토리처럼 보입니다. 또한 터미널 창의 파일 목록에 항목으로 표시됩니다. 심볼릭 링크가 가리키는 파일 또는 디렉토리는 파일 시스템 트리의 아무 곳에나 있을 수 있습니다.

예를 들어, “dave-link”라는 홈 디렉토리에 파일 시스템 트리의 다른 위치에 있는 “text-file.txt”라는 파일을 가리키는 심볼릭 링크가 있다고 가정해 보겠습니다. 심볼릭 링크에서 사용하는 명령은 심볼릭 링크가 가리키는 파일에 자동으로 적용됩니다. symlink에서 cat 이하를 사용하려고 하면 실제로 “text-file.txt” 파일의 내용을 볼 수 있습니다.

표준 Linux 설치에는 많은 심볼릭 링크가 포함되어 있습니다. 직접 만들지 않더라도 운영 체제에서 사용합니다. 응용 프로그램 설치 루틴은 종종 심볼릭 링크를 사용하여 실행 파일을 가리킵니다. 소프트웨어가 업데이트되면 이진 파일이 새 버전으로 교체되고 새 파일의 이름이 이전 이름과 동일한 한 모든 심볼릭 링크는 이전과 같이 계속 작동합니다.

루트 디렉토리에서 ls를 사용하여 일부 심볼릭 링크를 쉽게 볼 수 있습니다. 일부 항목은 다른 색상으로 표시됩니다. Ubuntu 20.10 테스트 시스템에서는 밝은 파란색으로 표시됩니다.

다음을 입력합니다.

ls /

-l(긴 목록) 옵션을 사용하여 더 자세히 살펴볼 수 있습니다. 모든 “lib” 항목과 단일 “bin” 항목을 보기 위해 다음 명령을 입력합니다.

ls -l /lib* /bin

각 줄의 시작 부분에는 항목이 심볼릭 링크임을 나타내는 “l”이 있습니다. “->” 뒤의 텍스트는 심볼릭 링크가 가리키는 위치를 보여줍니다. 이 예에서 대상은 모든 디렉토리입니다.

권한은 소유자, 그룹 및 기타 사용자에 대해 읽기, 쓰기 및 실행으로 나열됩니다. 이들은 기본 가짜 항목입니다. 심볼릭 링크가 가리키는 개체에 대한 실제 권한을 반영하지 않습니다. 파일 시스템에서 우선적으로 적용되는 대상 파일 또는 디렉터리에 대한 권한입니다.

깨진 심볼릭 링크

심볼릭 링크가 가리키는 파일이 삭제되거나 다른 위치로 이동하면 심볼릭 링크가 끊어집니다(또는 매달린 상태로 남음). 응용 프로그램의 제거 루틴이 제대로 작동하지 않거나 완료되기 전에 중단되면 깨진 심볼릭 링크가 남을 수 있습니다.

누군가가 파일을 가리키는 심볼릭 링크를 모른 채 수동으로 파일을 삭제하면 해당 심볼릭 링크는 더 이상 작동하지 않습니다. 그것들은 불도저가 된 도시를 가리키는 도로 표지판과 같을 것입니다.

현재 디렉토리에서 “hello”라는 심볼릭 링크를 사용하여 이 동작을 쉽게 볼 수 있습니다. ls를 사용하여 다음을 입력합니다.

ls -l

“bin”이라는 디렉토리에 있는 “htg”라는 프로그램을 가리킵니다. 심볼릭 링크를 “실행”하면 프로그램이 실행됩니다.

./hello

이제 프로그램을 직접 실행하여 이것이 발생하는지 확인할 수 있습니다.

../bin/htg

예상대로 동일한 응답을 받습니다. 프로그램 파일을 삭제합시다.

rm ../bin/htg

이제 심볼릭 링크를 볼 때 Linux가 손상되었음을 알고 있기 때문에 빨간색으로 나열되어 있습니다. 그것은 또한 그것이 무엇을 가리켰는지 알려 주므로 파일을 교체하거나 프로그램을 다시 컴파일하거나 심볼릭 링크를 복구하는 데 필요한 모든 작업을 수행할 수 있습니다.

심볼릭 링크를 실행하려고 하면 심볼릭 링크가 가리키는 프로그램 이름이 아니라 심볼릭 링크 이름을 참조하는 오류가 발생합니다.

다음을 입력합니다.

./hello

깨진 심볼릭 링크 찾기

대부분의 최신 버전의 find에는 xtype(확장 유형) 옵션이 있습니다. 깨진 심볼릭 링크 찾기를 단순화합니다.. 링크를 검색하도록 지시하기 위해 xtype과 함께 l 플래그를 사용합니다. 다른 유형 플래그 없이 find 및 xtype을 다음과 같이 사용하면 xtype이 깨진 링크를 반환하도록 강제합니다.

find . -xtype l

테스트 홈 디렉토리에서 명령을 실행하면 깨진 심볼릭 링크가 꽤 많이 발견됩니다. 검색은 기본적으로 재귀적이므로 모든 하위 디렉터리를 자동으로 검색합니다.

우리가 의도적으로 깨뜨린 “hello” 심볼릭 링크가 예상대로 나열됩니다. 다른 심볼릭 링크 중 하나는 Firefox 브라우저와 관련되고 나머지는 스냅과 관련됩니다.

-l (lines) 옵션을 사용하여 wc를 통해 출력을 파이프하면 깨진 심볼릭 링크를 계산하는 것과 동일한 줄을 계산할 수 있습니다.

다음을 입력합니다.

find . -xtype l | wc -l

아무 것도 가리키지 않는 24개의 깨진 심볼릭 링크가 있다는 정보를 받았습니다.

찾기, 검토 및 제거

깨진 심볼릭 링크를 모두 삭제하기 전에 find 명령의 결과를 살펴보십시오. 깨진 심볼릭 링크에 유효한 이유가 있는지 확인하십시오.

때로는 대상 파일이 아니라 심볼릭 링크가 문제일 수 있습니다. 심볼릭 링크가 잘못 생성된 경우 아무 것도 가리키지 않을 수 있지만 실제 대상은 있습니다. 이 경우 심볼릭 링크를 다시 만드는 것이 해결 방법입니다.

파일 잠금 표시기 또는 기타 go/no go 표시기와 같이 명백히 깨진 심볼릭 링크가 다른 것으로 사용될 수도 있습니다. Firefox는 이를 수행합니다. 이것이 우리 목록의 첫 번째 심볼릭 링크입니다. 하지만 Firefox는 테스트 시스템에서 사용되지 않으므로 삭제하는 것이 안전합니다.

대상이 주기적으로만 존재할 수도 있으며 이는 해당 특정 소프트웨어의 예상되는(원하는) 동작입니다. 대상 파일이 다른 시스템이나 클라우드에서 복사되어 기능을 수행한 다음 다시 삭제되어 다음 주기에서 다른 프로그램으로 대체될 수 있습니다.

깨진 심볼릭 링크는 실패한 소프트웨어 설치의 증상일 수도 있습니다. 이 경우 심볼릭 링크를 삭제하는 대신 수동으로 수정하거나 설치를 반복해야 합니다.

유지해야 하는 끊어진 링크를 수정했으면 명령을 반복하여 검색을 수행합니다. 그러면 고정된 심볼릭 링크가 검색 결과에 없어야 합니다.

안전을 위해 심볼릭 링크 제거를 자신의 디렉토리로 제한하는 것이 가장 좋습니다. 이러한 명령을 루트로 실행하거나 시스템 디렉터리에서 실행하는 것은 매우 조심해야 합니다.

깨진 심볼릭 링크 제거

-exec(실행) 옵션은 찾기 검색 결과에서 명령을 실행합니다. rm을 사용하여 깨진 각 심볼릭 링크를 삭제할 것입니다. {} 문자열은 find에 의해 발견된 각각의 깨진 심볼릭 링크의 이름으로 대체됩니다.

-exec가 실행할 명령 목록을 종료하려면 세미콜론(;)을 사용해야 합니다. 백슬래시()를 사용하여 세미콜론을 “이스케이프”하므로 Bash가 수행해야 하는 작업이 아니라 찾기 명령의 일부로 처리됩니다.

다음을 입력합니다.

find . -xtype l -exec rm {} ;

아무 일도 일어나지 않았다는 표시 없이 명령 프롬프트로 돌아갑니다. 끊어진 링크가 제거되었는지 확인하기 위해 다음과 같이 해당 링크를 찾는 명령을 반복합니다.

find . -xtype l

일치하는 결과가 없습니다. 깨진 심볼릭 링크가 제거되었음을 의미합니다.

먼저 검토하는 것을 잊지 마십시오

다시 말하지만, 삭제 명령을 실행하기 전에 항상 시간을 내어 심볼릭 링크 목록을 검토하십시오. 적절한 디렉토리에서 삭제하는 명령을 실행하여 확실하지 않은 항목을 삭제하지 않도록 할 수 있습니다.

예를 들어, 위의 경우 “.snap” 디렉토리에서 명령을 실행한 다음 단독 “hello” 심볼릭 링크를 수동으로 제거할 수 있습니다. 이렇게 하면 Firefox 잠금 심볼릭 링크가 그대로 유지됩니다.