시스템의 일부 파일이나 폴더가 파일 관리자에는 여전히 나타나지만 열리지 않는 경우가 있습니다. 이는 원래 목적지를 잃은 심볼릭 링크, 즉 손상되었거나 깨진 링크가 존재하기 때문입니다. 이러한 링크는 다른 곳으로 연결되지는 않지만 시스템에 계속 연결되어 공간을 차지하고 복사 또는 동기화 중에 혼란을 야기합니다.

다행히도 손상된 심볼릭 링크는 Linux, macOS, 심지어 Windows에서도 기본 제공 명령을 사용하여 몇 가지 간단한 단계만으로 감지하고 정리할 수 있습니다. 이 과정은 오래 걸리지 않지만, 깨끗하고 안정적인 시스템을 유지하고 운영 또는 백업 중 예기치 않은 오류를 방지하는 데 도움이 됩니다.
심볼릭 링크는 파일을 정리하는 좋은 방법이지만 완벽하지는 않습니다. 매우 취약하고, 존재하지 않는 파일을 가리키는 링크가 생기기 쉽습니다. Find를 사용하면 도움이 될 수 있지만, 더 나은 기능을 제공하는 타사 도구도 있습니다.
끊어진 심볼릭 링크란 무엇이고, 왜 중요한가요?
끊어진 심볼릭 링크는 파일이 존재하지 않음을 나타냅니다. 이는 두 가지 방법으로 발생할 수 있습니다.
존재하지 않는 파일에 링크합니다. `ln`에 존재하지 않는 파일 이름을 전달하여 직접 시도해 볼 수 있습니다. 예: `ln -s file-does-not-exist`.
- 기존 파일에 링크한 다음 삭제합니다. 예: ln -s file link-to-file; rm file.
이러한 끊어진 심볼릭 링크는 "댕글링 링크"라고도 하며, 원래 목적이 무엇이든 다른 것을 손상시킬 수 있기 때문에 문제를 일으킬 수 있습니다. 프로그램이 끊어진 링크를 항상 일관되게 처리하는 것은 아닙니다.

주의
ls 프로그램은 깨진 링크와 정상적인 링크를 구분하지 못하기 때문에 사용 중에 이를 감지하기 어렵습니다.
많은 GNU 도구가 "심볼릭 링크 수준이 너무 많습니다."라는 다소 혼란스러운 오류 메시지를 생성합니다. 이는 ELOOP 오류를 설명하는 핵심 Open Library 함수에 대한 설명서에 설명되어 있습니다.
[엘루프]
경로 이름을 변환하는 동안 매우 많은 수의 심볼릭 링크가 발견되었습니다. 이는 반복되는 심볼릭 링크로 간주됩니다.
다행히도 file 명령은 더 유용한 오류를 발생시킵니다.

이는 "file" 명령의 주요 목적이 파일 유형에 대한 정보를 제공하는 반면, wc와 대부분의 다른 프로그램은 해당 파일의 내용에 대해 다른 작업을 수행하려고 시도하기 때문에 의미가 있습니다.
끊어진 링크는 파일 시스템에 큰 피해를 입혀 불필요한 공간을 차지할 수 있습니다. 또한 여러 파일을 다루는 프로그램에서 끊어진 링크가 발견되면 혼란스러운 결과나 원치 않는 오류를 유발할 수 있습니다. 폴더 깊숙한 곳에서 끊어진 링크를 잃어버리면 해당 링크를 찾거나 반복적으로 검색하는 데 어려움을 겪을 수 있습니다.
조언
일부 프로그램은 끊어진 링크를 나타냅니다. 예를 들어 eza는 끊어진 링크를 빨간색으로 표시합니다.

find 명령을 사용하여 드롭 링크를 찾는 방법
`find` 명령어는 모든 유형의 파일 검색에 필요한 안정적이고 필수적인 도구입니다. 최근에 수정된 파일, 특정 사용자의 파일, 빈 폴더 등 어떤 파일이든 사용할 수 있습니다. 여기에는 심볼릭 링크 검색도 포함됩니다.
find . -type l
`-type l` 옵션은 검색을 심볼릭 링크로만 제한하여 검색 범위를 좁히는 데 도움이 되지만, 다음 과제는 끊어진 링크를 식별하는 것입니다. 해결책은 사용 중인 `find` 버전에 따라 다릅니다.
최신 GNU find는 -xtype: 옵션을 지원하기 때문에 가장 유용합니다.
find . -xtype l
-xtype 옵션은 사실상 "이 유형을 테스트하기 전에 심볼릭 링크 문자열을 확인한다"는 의미입니다. 이 확인에 실패해야만 파일이 링크로 유지될 수 있으므로, 생성된 파일은 끊어진 링크가 됩니다.
macOS Tahoe에 설치된 것을 포함하여 이전 버전의 find는 이 인수를 지원하지 않을 수 있으므로 다른 옵션이 필요합니다. 다행히 -L 옵션이 있습니다. 이 옵션은 -xtype과 비슷하게 작동하지만 파일 형식을 확인하지 않고, 단순히 링크만 확인합니다. 이 경우에도 -type 유형 확인을 함께 사용해야 합니다.
find -L . -type l
또 다른 주요 차이점은 -L 명령이 반복적인 폴더 검색 중에 심볼릭 링크를 따른다는 것입니다. 깊은 폴더에 /(즉, 루트)를 가리키는 이상한 링크가 있는 경우, 전체 파일 시스템을 검색해야 합니다. 이런 작업은 원하지 않을 수 있으므로 -L이 기본 명령이 아닌 것입니다.
이 문제는 find 명령을 사용하여 모든 심볼릭 링크를 찾은 다음 -exec 옵션을 사용하여 각 파일이 있는지 확인하면 해결할 수 있습니다.
find . -type l -exec test ! -e {} \; -print
약간 복잡하지만 작동합니다. "-type l" 옵션은 이전과 마찬가지로 링크를 검색하고, "-exec"는 "-e" 옵션을 사용하여 누락된 파일을 찾는 test 명령을 호출합니다. 마지막으로 "print" 명령은 파일 이름을 출력합니다.
최신 Linux 시스템에서 끊어진 심볼릭 링크를 찾으려면 `find -xtype l` 명령이면 충분합니다. 실제로 `find` 명령에 `-exec:` 옵션을 사용하면 끊어진 심볼릭 링크를 삭제할 수 있습니다.
find . -xtype l -exec rm {} \;
하지만 먼저 이 링크들을 확인해야 합니다. 다시 한번, 동일한 macOS 명령어는 더 어려워집니다. 기억하지 않으려면 별칭이나 셸 함수를 만드는 것이 좋습니다. 아니면 더 나은 대안을 사용할 수도 있습니다…
심볼릭 링크 프로그램을 사용하여 깨진 링크를 찾아 수정합니다.
위에 언급된 방법이 비실용적이라고 생각되거나 심볼릭 링크에 문제가 지속적으로 발생하는 경우 다음을 사용하는 것이 좋습니다. 심볼릭 링크 도구. C로 작성된 이 작은 프로그램은 깨진 링크를 포함하여 다양한 유형의 문제가 있는 링크를 식별할 수 있습니다.
간단하기 때문에 복잡한 설치 과정이 없으므로 소스 코드에서 직접 만들어야 합니다. 다행히 간단하기 때문에 아무런 문제도 발생하지 않습니다.
프로그램의 GitHub 저장소를 다운로드하세요 그는 고전적인 3단계 건설 과정을 따랐습니다.
./configure
make
make install
조언
macOS 사용자는 기본적으로 C 컴파일러를 사용할 수 없습니다. 심볼릭 링크를 생성하려면 Apple의 명령줄 도구를 설치해야 합니다. 먼저 xcode-select-install 명령을 실행하세요.
프로그램을 설치한 후 검색할 폴더 경로를 전달하여 실행할 수 있습니다. 예:
symlinks ~/
이 명령으로 아무런 결과도 얻지 못할 수도 있습니다. 기본적으로 하위 디렉터리에는 중복이 발생하지 않습니다. -r 옵션은 중복을 발생시키며, 파일 시스템에 문제가 있는 심볼 링크가 많이 나타날 가능성이 높습니다. 실제로 "symlinks -r ~/ | wc -l" 명령을 처음 실행했을 때 제 시스템은 무려 16,617개의 심볼 링크를 보고했습니다! 심볼 링크가 제대로 정리되지 않은 것이 분명합니다.
하지만 이러한 링크가 모두 끊어진 것은 아닙니다. `symlinks` 명령은 네 가지 유형의 불완전한 링크를 보고합니다.
- 장애(매달림).
- 절대: 이러한 링크는 부착 지점에서 문제를 일으킬 수 있습니다.
- 지저분함: 경로에 불필요한 . 또는 /가 포함된 링크입니다.
- 긴 링크: 경로에 불필요한 확장자가 포함된 링크입니다. -s 옵션을 사용할 때만 보고됩니다.
이러한 문제는 링크를 생성하는 데 사용하는 프로그램인 `ln`이 전달한 경로를 확인하거나 적용하지 않기 때문에 발생합니다. 가장 좋은 옵션은 `-w` 옵션인데, 보류 중인 링크를 생성할 경우 경고를 표시하지만 링크를 생성합니다. `ln` 명령은 이러한 다른 유형의 문제가 있는 링크에 대해서는 아무런 보호 기능을 제공하지 않습니다.
심볼릭 링크는 두 가지 유형의 복구를 통해 이러한 링크를 정리하는 데 도움이 될 수 있습니다.
먼저, 보류 중인 링크를 제거하는 -d 옵션이 있습니다. 더 간단한 방법을 원한다면 이 옵션이 쓸모없는 파일을 제거하는 가장 빠른 방법입니다. 보류 중인 링크 목록은 수동으로 수정할 수 있으므로 먼저 확인해 보는 것이 좋습니다. 예를 들어, 디렉터리 이름을 변경하면서 링크 세트가 손상된 경우, 각 링크를 수동으로 다시 빌드할 수 있습니다.
두 번째 옵션은 -c로, -s 옵션을 사용하여 절대 링크, 비정형 링크, 그리고 긴 링크를 수정합니다. 제 생각에는 이 옵션은 논란의 여지가 있습니다. 이러한 유형의 심볼릭 링크는 완전히 손상된 링크보다 문제가 덜합니다. 절대 링크 문제를 피하기 위해 다른 파일 시스템 마운트 지점을 정기적으로 사용하는 경우에만 이 옵션을 사용할 것입니다.
심볼릭 링크는 파일 정리에 유용한 도구이지만, 원래 위치를 잃어버리면 번거로울 수 있습니다. 손상된 링크를 정기적으로 정리하면 시스템을 가볍고 관리하기 쉬운 상태로 유지하고, 시스템 속도를 저하시키거나 백업에 영향을 줄 수 있는 오류를 방지할 수 있습니다. 몇 가지 간단한 명령만으로 시스템을 최적의 상태로 복원하여 손상된 경로 없이 원활하게 실행할 수 있습니다.


