본문 바로가기
OS 운영체제/LINUX

readlink (심볼릭 파일 경로 읽는 명령어)

by yororing 2024. 6. 5.

00 개요

  • 회사 내에서 작성한 코드에 이 명령어가 나와서 찾아봄!

01 readlink 명령어란

1. readlink 정의

  • 'reads the link'

2. readlink 명령어의 기능

  • 심볼릭 링크 (바로가기 버튼이 실질적으로 참조하는 경로 같은 개념) 또는 캐노니컬 파일 이름을 출력

3. readlink 명령어 문법

readlink [OPTION]... FILE

02 readlink 명령어 옵션

1. 옵션 종류

옵션 설명
--canonicalize,
-f
canonicalize by following every symlink in every component of the given name recursively.
all but the last component must exist.
--canonicalize-existing,
-e
canonicalize by following every symlink in every component of the given name recursively.
all components must exist
--canonicalize-missing,
-m
canonicalize by following every symlink in every component of the given name recursively.
without requirements on components' existence
--no-newline,
-n
do not output the trailing newline
--quiet,
-q
 
--silent,
-s
suppress most error messages
--verbose,
-v
report error messages
--help 이 help 내용 출력 후 exit
--version version 정보 출력 후 exit

03 readlink 설명

  • 리눅스에서 바로가기가 바로가기를 가리키고, 또 바로가기가 또다른 바로가기를 가리키고, 이런식으로 들어가는 경우가 있다.
  • 이 경우에 실제 파일이 어느 경로에 있는지 찾을 때 readlink를 사용할 수 있다.
  • which java 입력 시 

  • /usr/bin에 있는 java 명령어를 쓴다고 한다.
  • 그럼, /usr/bin에 들어가서 이들에 대한 정보를 조회해 보자.

  • 조회를 해 보니, /etc/alternatives에 있는 특정한 명령어를 가리키고 있음을 알 수 있다.
  • 즉, 바로가기 같은 개념이다. 링크로 연결되어 있는 것이다.

  • java가 들어있는 해당 경로에 가서, java에 대한 정보 봐보기

  • 드디어 java가 있음을 알 수 있다. 지금까지의 과정을 통하여 java의 복잡한 링크 구조를 볼 수 있다.
  • 이 때, readlink는 심볼릭 링크가 연결되어 있는 파일의 경로를 가져오는 기능을 한다.
  • 예) 바로가기 A가 실제로는 드라이브 C에 있는 1.txt를 가르켰다면, 바로가기 A를 readlink하면 C 드라이브 안의 1.txt라는 정보를 반환한다.

  • which java를 하면, java 명령어의 위치를 반환하는데 (/usr/bin/java) 실질적으로 기 위치는 바로가기이다.
  • 실제로 수행되는 프로그램은 어딘가에 따로 있을 것이다.
  • 그렇기 때문에, /usr/bin/java의 심볼릭 링크를 읽어서 /etc/alternatives/java가 출력된다.
  • 그러나 이 위치 역시 심볼릭이므로 이 위치의 심볼릭 링크를 또 읽어내서 어느 대상을 가리키는 지 읽어와야 한다.
  • 이런 식으로 계속 읽다 보면, 언젠가는 실제 실행 파일의 경로가 나올 것이다.
  • 그런데, 이 경우는 겨우 3뎁스 밖에 되지 않아서 다행인데 만약에 10뎁스, 20뎁스, 200뎁스라면, 계속해서 심볼릭 링크의 경로를 추적하기에는 난감할 것이기에 recursive하게 (재귀적으로) 들어가는 -f 옵션을 붙이면 한 번에 실제 파일의 경로를 찾는다.

  • -f 옵션 뒤에 오는 $(which java)가 있는데 이것은 which java의 결과 (→ /usr/bin/java )를 대치시키는 것이다.
  • 즉, $(which java) 부분이 /usr/bin/java로 대치될 것이다.
  • 그런데, 이것은 실제로 다음과 같이 연결되어 있다.

  • 노란색 부분은 링크가 아니므로, /usr/lib/jvm/.../java를 반환할 것이다.
  • 해당 경로에 들어가보면,

  • ls -ail를 입력하여 확인해보면 java가 보이고, 어떠한 것과도 연결되어 있지 않음을 확인할 수 있어 java가 실제로 실행되는 파일의 경로임을 알 수 있다.

 

참조

  1. man readlink
  2. https://codingdog.tistory.com/entry/readlink-심볼릭-파일의-경로를-읽는다
  3.