심볼릭 링크 대상 찾는 방법

LinuxBeginner
지금 연습하기

소개

이 튜토리얼은 Linux 시스템에서 심볼릭 링크 (symbolic link) 의 대상을 찾는 과정을 안내합니다. 심볼릭 링크는 심링크 (symlink) 라고도 하며, 다른 파일이나 디렉토리를 가리키는 포인터 역할을 하는 특수한 유형의 파일입니다. Linux 시스템에서 바로가기를 만들고, 파일을 정리하며, 소프트웨어 버전을 관리하는 데 일반적으로 사용됩니다.

이 튜토리얼을 마치면, 다양한 Linux 명령어를 사용하여 심볼릭 링크를 식별하고, 심볼릭 링크가 가리키는 파일 또는 디렉토리를 확인할 수 있게 됩니다. 이 지식은 Linux 환경에서 효과적인 파일 시스템 탐색 및 관리에 필수적입니다.

심볼릭 링크 이해하기

심볼릭 링크 (symbolic link, symlink) 는 Linux 에서 다른 파일이나 디렉토리를 가리키는 특수한 파일입니다. 다른 운영 체제의 바로가기와 유사하게 작동하지만, 파일 시스템에 더 강력하게 통합되어 있습니다.

이 튜토리얼을 위해 설정된 심볼릭 링크를 살펴보겠습니다. 먼저, 프로젝트 디렉토리로 이동합니다.

cd ~/project/symlink-tutorial

이제 이 디렉토리의 파일을 나열하여 무엇이 있는지 확인해 보겠습니다.

ls -la

다음과 유사한 출력을 볼 수 있습니다.

total 20
drwxr-xr-x 3 labex labex 4096 Jul 15 10:00 .
drwxr-xr-x 3 labex labex 4096 Jul 15 10:00 ..
lrwxrwxrwx 1 labex labex   12 Jul 15 10:00 broken-link.txt -> ../nonexistent-file.txt
lrwxrwxrwx 1 labex labex   13 Jul 15 10:00 dir-link -> test-directory
lrwxrwxrwx 1 labex labex   13 Jul 15 10:00 nested-link.txt -> simple-link.txt
-rw-r--r-- 1 labex labex   35 Jul 15 10:00 original.txt
lrwxrwxrwx 1 labex labex   10 Jul 15 10:00 passwd-link -> /etc/passwd
lrwxrwxrwx 1 labex labex   12 Jul 15 10:00 simple-link.txt -> original.txt
drwxr-xr-x 2 labex labex 4096 Jul 15 10:00 test-directory

심볼릭 링크는 목록에서 다른 모양을 보입니다.

  • 파일 권한 (첫 번째 열) 에서 l로 시작합니다.
  • 이름 뒤에는 대상 (target) 을 가리키는 화살표 (->) 가 있습니다.
  • 일반적으로 lrwxrwxrwx 권한을 갖습니다.

simple-link.txt 파일을 살펴보겠습니다. 이 파일은 original.txt에 대한 심볼릭 링크입니다. cat 명령을 사용하여 이 링크의 내용을 볼 수 있습니다.

cat simple-link.txt

출력:

This is the original file content.

simple-link.txt에 접근하고 있지만, 실제로는 original.txt의 내용을 보고 있습니다. 이것이 심볼릭 링크가 작동하는 방식입니다. 즉, 대상에 대한 접근을 투명하게 리디렉션합니다.

이제 디렉토리 심볼릭 링크도 시도해 보겠습니다.

ls -la dir-link

출력:

total 12
drwxr-xr-x 2 labex labex 4096 Jul 15 10:00 .
drwxr-xr-x 3 labex labex 4096 Jul 15 10:00 ..
-rw-r--r-- 1 labex labex   42 Jul 15 10:00 test-file.txt
lrwxrwxrwx 1 labex labex   16 Jul 15 10:00 relative-link.txt -> ../original.txt

보시다시피, dir-link의 내용을 나열하면 실제로 가리키는 test-directory의 내용을 보게 됩니다.

ls 명령어를 사용하여 심볼릭 링크 식별하기

특정 옵션을 가진 ls 명령어는 심볼릭 링크를 식별하고, 심볼릭 링크가 가리키는 대상을 확인하는 가장 간단한 방법 중 하나입니다. 이 목적을 위해 ls를 사용하는 다양한 방법을 살펴보겠습니다.

-l 옵션으로 나열하기

-l 옵션은 자세한 목록을 제공하며, 링크와 해당 대상을 표시합니다.

ls -l simple-link.txt

출력:

lrwxrwxrwx 1 labex labex 12 Jul 15 10:00 simple-link.txt -> original.txt

화살표 (->) 는 simple-link.txtoriginal.txt를 가리킨다는 것을 보여줍니다.

-la 옵션으로 모든 파일 나열하기

-la 옵션을 함께 사용하면 숨겨진 파일을 포함한 모든 파일을 자세한 정보와 함께 나열합니다.

ls -la

이렇게 하면 현재 디렉토리의 모든 파일 (심볼릭 링크 및 해당 대상 포함) 이 표시됩니다.

색상으로 구분된 목록

대부분의 최신 Linux 배포판은 ls가 서로 다른 파일 유형을 서로 다른 색상으로 표시하도록 구성되어 있습니다. 심볼릭 링크는 일반적으로 밝은 파란색 또는 청록색으로 표시됩니다. 다음을 사용할 수 있습니다.

ls --color=always

출력은 심볼릭 링크를 뚜렷한 색상으로 표시합니다.

심볼릭 링크만 나열하기

find 명령어를 사용하여 현재 디렉토리의 심볼릭 링크만 나열할 수 있습니다.

find . -maxdepth 1 -type l

출력:

./broken-link.txt
./dir-link
./nested-link.txt
./passwd-link
./simple-link.txt

이 명령어는 현재 디렉토리 (.) 의 모든 심볼릭 링크를 하위 디렉토리로 들어가지 않고 (-maxdepth 1) 나열합니다.

중첩된 심볼릭 링크 검사하기

다른 심볼릭 링크를 가리키는 nested-link.txt를 살펴보겠습니다.

ls -l nested-link.txt

출력:

lrwxrwxrwx 1 labex labex 13 Jul 15 10:00 nested-link.txt -> simple-link.txt

그리고 simple-link.txt는 다음을 가리킵니다.

ls -l simple-link.txt

출력:

lrwxrwxrwx 1 labex labex 12 Jul 15 10:00 simple-link.txt -> original.txt

따라서 nested-link.txtsimple-link.txt를 가리키고, simple-link.txt는 다시 original.txt를 가리킵니다. 이것은 심볼릭 링크 체인의 예입니다.

ls 명령어를 사용하면 심볼릭 링크가 가리키는 대상을 확인할 수 있지만, readlink 명령어는 이 목적을 위해 특별히 설계되었습니다. 심볼릭 링크 또는 정규화된 파일 이름의 값을 출력합니다.

readlink의 가장 기본적인 사용법은 심볼릭 링크의 이름을 제공하는 것입니다.

readlink simple-link.txt

출력:

original.txt

이것은 simple-link.txtoriginal.txt를 가리킨다는 것을 보여줍니다.

중첩된 심볼릭 링크 읽기

중첩된 심볼릭 링크의 경우, 기본 readlink 명령어는 즉시 대상을 제공합니다.

readlink nested-link.txt

출력:

simple-link.txt

전체 링크 체인을 따라 최종 대상까지 가려면 -f (follow) 옵션을 사용하십시오.

readlink -f nested-link.txt

출력:

/home/labex/project/symlink-tutorial/original.txt

이것은 최종 대상 파일의 전체 경로를 보여줍니다.

상대 경로 처리

상대 경로가 있는 심볼릭 링크를 살펴보겠습니다.

ls -l test-directory/relative-link.txt

출력:

lrwxrwxrwx 1 labex labex 16 Jul 15 10:00 test-directory/relative-link.txt -> ../original.txt

-f 옵션과 함께 readlink를 사용하면 상대 경로가 해결됩니다.

readlink -f test-directory/relative-link.txt

출력:

/home/labex/project/symlink-tutorial/original.txt

깨진 링크 작업

때로는 심볼릭 링크가 존재하지 않는 파일을 가리킵니다. 깨진 링크를 확인해 보겠습니다.

readlink broken-link.txt

출력:

../nonexistent-file.txt

readlink 명령어는 대상이 존재하지 않더라도 깨진 링크가 가리키는 대상을 계속 표시합니다.

깨진 링크와 함께 readlink -f를 사용하면 경로를 해결하려고 시도하지만 여전히 깨졌음을 나타냅니다.

readlink -f broken-link.txt

출력:

/home/labex/project/nonexistent-file.txt

readlink 명령어는 몇 가지 유용한 옵션을 제공합니다.

  • -e: 정규화된 경로가 존재하는 경우에만 반환합니다.
  • -m: 심볼릭 링크를 역참조하지 않고, 존재하지 않는 파일을 가리키는 경우에도 심볼릭 링크 경로를 표시합니다.
  • -n: 후행 줄 바꿈을 출력하지 않습니다.
  • -v: 자세한 출력

-e 옵션을 사용하는 예:

readlink -e broken-link.txt

대상 파일이 존재하지 않으므로 이 명령은 출력을 제공하지 않습니다.

심볼릭 링크 대상 찾기 위한 대체 방법

lsreadlink 외에도 심볼릭 링크의 대상을 결정하는 데 사용할 수 있는 다른 여러 명령어가 있습니다. 이러한 대안을 살펴보겠습니다.

file 명령어 사용하기

file 명령어는 심볼릭 링크를 포함하여 파일의 유형을 식별합니다.

file simple-link.txt

출력:

simple-link.txt: symbolic link to original.txt

이것은 simple-link.txtoriginal.txt를 가리키는 심볼릭 링크임을 명확하게 나타냅니다.

디렉토리 링크로 시도해 보겠습니다.

file dir-link

출력:

dir-link: symbolic link to test-directory

file 명령어는 파일 및 디렉토리 링크 모두에서 작동합니다.

realpath 명령어 사용하기

realpath 명령어는 파일의 해결된 경로를 표시하며, 심볼릭 링크의 최종 대상을 찾는 데 유용합니다.

realpath simple-link.txt

출력:

/home/labex/project/symlink-tutorial/original.txt

이것은 대상 파일의 절대 경로를 보여줍니다.

중첩된 링크의 경우, realpath는 자동으로 전체 체인을 따릅니다.

realpath nested-link.txt

출력:

/home/labex/project/symlink-tutorial/original.txt

stat 명령어 사용하기

stat 명령어는 심볼릭 링크인지 여부를 포함하여 파일에 대한 자세한 정보를 제공합니다.

stat simple-link.txt

출력 (부분):

  File: simple-link.txt -> original.txt
  Size: 12        	Blocks: 0          IO Block: 4096   symbolic link
...

이 출력은 simple-link.txtoriginal.txt를 가리키는 심볼릭 링크임을 보여줍니다.

테스트 심볼릭 링크 만들기

연습을 위해 새 심볼릭 링크를 만들어 보겠습니다.

ln -s /etc/hostname my-hostname

이렇게 하면 /etc/hostname 파일을 가리키는 my-hostname이라는 심볼릭 링크가 생성됩니다.

이제 배운 명령어를 사용하여 이 새 링크를 검사해 보겠습니다.

ls -l my-hostname

출력:

lrwxrwxrwx 1 labex labex 12 Jul 15 11:00 my-hostname -> /etc/hostname
readlink my-hostname

출력:

/etc/hostname
file my-hostname

출력:

my-hostname: symbolic link to /etc/hostname
cat my-hostname

출력 (예시, 호스트 이름은 다를 수 있습니다):

labex-ubuntu

이러한 다양한 방법을 사용하면 Linux 시스템에서 모든 심볼릭 링크의 대상을 쉽게 찾을 수 있습니다.

실용적인 응용 및 고급 사용법

이제 심볼릭 링크의 대상을 찾는 방법을 이해했으므로 몇 가지 실용적인 응용 프로그램과 고급 사용 시나리오를 살펴보겠습니다.

깊이 중첩된 심볼릭 링크 처리

깊이 중첩된 링크 (다른 링크를 가리키는 링크, 다시 다른 링크를 가리키는 링크 등) 의 경우 readlink-f 옵션이 필수적입니다.

## Create a chain of links
ln -s original.txt link1.txt
ln -s link1.txt link2.txt
ln -s link2.txt link3.txt

## Check the chain
readlink -f link3.txt

출력:

/home/labex/project/symlink-tutorial/original.txt

디렉토리에서 모든 심볼릭 링크 찾기

디렉토리 및 하위 디렉토리에서 모든 심볼릭 링크를 찾으려면 다음을 수행합니다.

find /home/labex/project/symlink-tutorial -type l

이 명령어는 지정된 디렉토리 및 하위 디렉토리에서 유형 l(심볼릭 링크) 의 모든 항목을 검색합니다.

심볼릭 링크 찾기 및 따라가기

모든 심볼릭 링크를 찾고 무엇을 가리키는지 확인하려면 다음을 수행합니다.

find /home/labex/project/symlink-tutorial -type l -ls

이 명령어는 find-ls 옵션과 결합하여 각 심볼릭 링크에 대한 자세한 목록을 제공합니다.

심볼릭 링크를 통해 파일 수정

심볼릭 링크를 통해 파일을 수정하면 실제로 대상 파일을 수정하는 것입니다. 이를 시연해 보겠습니다.

## Display the original content
cat original.txt

출력:

This is the original file content.
## Append to the file through the symbolic link
echo "Line added through symlink." >> simple-link.txt

## Check the original file
cat original.txt

출력:

This is the original file content.
Line added through symlink.

심볼릭 링크를 통해 변경된 사항이 원본 파일에 나타납니다.

심볼릭 링크 교체

심볼릭 링크를 업데이트하여 다른 대상을 가리키도록 해야 하는 경우 ln -s와 함께 -f 옵션을 사용할 수 있습니다.

## Create a new file
echo "This is a new target file." > new-target.txt

## Update the symlink
ln -sf new-target.txt simple-link.txt

## Check what the link points to now
readlink simple-link.txt

출력:

new-target.txt

정리

이 단계에서 만든 파일을 정리해 보겠습니다.

rm link1.txt link2.txt link3.txt new-target.txt

심볼릭 링크를 사용해야 하는 경우

심볼릭 링크는 다음과 같은 많은 상황에서 유용합니다.

  • 자주 액세스하는 파일 또는 디렉토리에 대한 바로 가기 만들기
  • 여러 버전의 파일 또는 소프트웨어 유지 관리
  • 보다 직관적인 파일 경로 만들기
  • 구성 파일에 연결
  • 다른 파일 시스템 간에 파일 구성

심볼릭 링크 대상을 찾는 기술을 익히면 Linux 파일 시스템을 효과적으로 관리하고 탐색하는 데 더 적합해집니다.

요약

이 튜토리얼에서는 다양한 방법을 사용하여 Linux 에서 심볼릭 링크의 대상을 찾는 방법을 배웠습니다.

  1. ls -l 명령어를 사용하여 심볼릭 링크를 식별하고 대상 확인
  2. readlink 명령어를 사용하여 심볼릭 링크의 값을 출력
  3. readlink -f를 사용하여 심볼릭 링크의 전체 체인을 따라 최종 대상 확인
  4. file, realpath, stat과 같은 대체 방법 탐색
  5. 실용적인 응용 프로그램 및 고급 사용 시나리오 작업

이러한 기술은 Linux 에서 효과적인 파일 시스템 관리에 필수적입니다. 심볼릭 링크는 파일 및 디렉토리를 구성하는 데 유연성과 편의성을 제공하며, 이를 사용하는 방법을 이해하는 것은 Linux 시스템 관리 및 일상적인 사용의 중요한 부분입니다.

이제 Linux 환경에서 심볼릭 링크를 자신 있게 식별, 생성 및 관리할 수 있는 지식을 갖추게 되었습니다.