반응형
또.... 끄적 거려 봅니다.
리눅스를 사용하다보면 필요 또는 의도치 않게 링크걸린 파일을 사용하거나 설정을 해야 할때가 있습니다.
링크가 정상적으로 설정되어 있고 사용할때는 크게 불편하거나 문제가 되는 부분은 없습니다.
다만, 링크 설정된 파일의 원본 파일을 찾고자 할때가 종종 있습니다.
링크된 파일이 어느 파일인지 알아야 할때가 있습니다.
필자의 경우 아래와 같이 종종 확인 하였습니다.
$ ls -al /etc/localtime
lrwxrwxrwx 1 root root 30 Nov 6 08:31 /etc/localtime -> /usr/share/zoneinfo/Asia/Seoul
간단하게 확인 할 때는 주로 ls 명령어를 통해 확인 하였습니다. (다른 더 좋은 방법이 있다면..... 댓글 부탁드립니다.)
하지만 script 등으로 확인 또는 원본 파일을 알아야 할때는 아래와 같이 하였습니다.
$ ls -al /etc/localtime | awk '{print $(NF)}'
/usr/share/zoneinfo/Asia/Seoul
## sciprt상의 변수로 사용시
ORIGINAL_LINK_FILE=$(ls -al /etc/localtime | awk '{print $(NF)}')
위의 방법이 틀린것은 아니지만 뭔가 불편아닌 불편하다는 걸 알게 되었습니다.
복잡하게 ls 와 awk를 사용할것이 아니라 readlink라는 명령어를 사용하면 되는 것이였습니다.
usage) readlink [file]
$ readlink /etc/localtime
/usr/share/zoneinfo/Asia/Seoul
즉, 링크 설정된 파일을 확인하면 원본파일의 정보를 출력하는 것이였습니다.
readlink 명령어가 꼭 정답은 아니지만 그래도 편리하게 사용할 수 있는 것이라면 좋을것 같아보입니다.
많지는 않지만 그래도 아래와 같이 몇가지 옵션이 있습니다.
$ readlink --help
Usage: readlink [OPTION]... FILE...
Print value of a symbolic link or canonical file name
-f, --canonicalize canonicalize by following every symlink in
every component of the given name recursively;
all but the last component must exist
-e, --canonicalize-existing canonicalize by following every symlink in
every component of the given name recursively,
all components must exist
-m, --canonicalize-missing canonicalize by following every symlink in
every component of the given name recursively,
without requirements on components existence
-n, --no-newline do not output the trailing delimiter
-q, --quiet
-s, --silent suppress most error messages (on by default)
-v, --verbose report error messages
-z, --zero end each output line with NUL, not newline
--help 이 도움말을 표시하고 끝냅니다
--version 버전 정보를 출력하고 끝냅니다
옵션을 적절히 사용하면 편리할듯 보입니다.
옵션 중 필자가 확인해보니 아래 옵션이 사용하기 편해 보였습니다.
usage) readlink -e [file]
#결과
# 링크가 걸려 있을땐 링크원본 파일을 출력
# 링크가 걸린 파일이 아닐 경우 파일의 절대 경로 출력
# 없는 파일일 경우 아무 출력 없고 return code가 1로 출력
테스트
# 링크된 파일일 경우
$ readlink -e /etc/localtime
결과 => /usr/share/zoneinfo/Asia/Seoul
#링크된 파일이 아닐 경우
$ readlink -e /etc/crontab
결과 => /etc/crontab
# 해당 파일이 없을 경우
$ readlink -e /etc/crontab-aaaa
결과 => 결과 없음
혹시라도 더 좋은 방법이 있다면 댓글 또는 공유 부탁 드립니다.
반응형
'운영체제 > Linux' 카테고리의 다른 글
[Linux] Tar를 이용한 원격지 or Local 파일 copy (0) | 2024.01.05 |
---|---|
[Linux] tee Command를 이용한 stdout / stderr 처리 관련 (0) | 2023.12.06 |
[Linux] Hex <-> Dec 변환 (0) | 2022.11.22 |
[Linux] unix Timestamp 를 date로 변환 (1) | 2022.11.22 |
[Linux] 파일 인코딩 확인 및 변환(iconv) euc-kr <=> utf-8 (0) | 2022.01.06 |