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가 실제로 실행되는 파일의 경로임을 알 수 있다.
참조
'OS 운영체제 > LINUX' 카테고리의 다른 글
sed (텍스트 편집 명령어) (1) | 2024.06.12 |
---|---|
basename (파일 이름 명령어) (0) | 2024.06.05 |
dirname (파일 이름 제거 명령어) (0) | 2024.06.04 |
netstat (네트워크 명령어) (1) | 2024.06.04 |
dialog (dialog 박스 시각화 패키지) (0) | 2024.05.10 |