문서 보기이전 판역링크맨 위로 이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요. {{tag>[cli realpath coreutils path symbolic-link shell]}} ====== realpath ====== realpath는 path를 정규화하고 symbolic link를 해석해 canonical path를 출력하는 command-line 도구다. ===== Summary ===== * ''.'', ''..'', 중복 slash를 정리하고 기본적으로 symbolic link를 실제 대상 path로 해석한다. * absolute path뿐 아니라 특정 기준 directory에 대한 relative path도 출력할 수 있다. * 존재해야 하는 path component의 범위는 ''-e'', ''-E'', ''-m''으로 선택한다. ===== Installation ===== ==== Debian / Ubuntu ==== ''realpath''는 GNU coreutils package에 포함된다. <code bash> sudo apt update sudo apt install coreutils </code> ==== RHEL / Fedora ==== <code bash> sudo dnf install coreutils </code> ==== macOS ==== GNU 구현이 필요하면 Homebrew의 coreutils formula를 설치한다. GNU command를 일반 이름으로 실행하려면 formula의 ''gnubin'' directory를 ''PATH'' 앞에 둔다. <code bash> brew install coreutils export PATH="$(brew --prefix)/opt/coreutils/libexec/gnubin:$PATH" realpath --version </code> ==== Windows ==== GNU Coreutils가 공식 제공하는 native WinGet package는 없다. WSL을 사용하는 경우 해당 Linux distribution의 package manager로 ''coreutils''를 설치한다. PowerShell에서는 목적에 따라 ''Resolve-Path''를 사용할 수 있지만, 존재하지 않는 path와 symbolic link 처리 semantics가 GNU ''realpath''와 같다고 가정하지 않는다. ==== 설치 확인 ==== <code bash> realpath --version </code> ===== Usage ===== <code bash> realpath [OPTION]... FILE... </code> * ''<color #c3c3c3>**realpath**</color> <color #22b14c>[OPTION]...</color> <color #7092be>FILE...</color>'' * 기본 GNU 동작에서는 마지막 component를 제외한 path가 존재해야 한다. * 여러 ''FILE''을 주면 입력 순서대로 각 결과를 출력한다. ===== Options ===== ==== 존재 조건 ==== * ''<color #22b14c>**-E, --canonicalize**</color>'': 마지막 component가 없어도 실패하지 않는다. 최신 POSIX와의 명시적 동작 선택에 유용하며 오래된 GNU coreutils에는 없을 수 있다. * ''<color #22b14c>**-e, --canonicalize-existing**</color>'': 모든 path component가 실제로 존재해야 한다. * ''<color #22b14c>**-m, --canonicalize-missing**</color>'': 존재하지 않거나 접근할 수 없는 component도 directory처럼 취급해 문자열 path를 정규화한다. ==== symbolic link 해석 ==== * ''<color #22b14c>**-P, --physical**</color>'': symbolic link를 만나는 즉시 해석한 뒤 이후 ''..''을 처리한다. GNU 기본값이다. * ''<color #22b14c>**-L, --logical**</color>'': ''..'' component를 먼저 처리한 뒤 symbolic link를 해석한다. * ''<color #22b14c>**-s, --strip, --no-symlinks**</color>'': symbolic link를 해석하지 않고 ''.'', ''..'', 중복 slash만 정리한다. ==== 출력 형식 ==== * ''<color #22b14c>**--relative-to=**</color><color #7092be>DIR</color>'': 결과를 ''DIR'' 기준 relative path로 출력한다. * ''<color #22b14c>**--relative-base=**</color><color #7092be>DIR</color>'': 결과가 ''DIR'' 아래에 있을 때만 relative path로 출력하고 나머지는 absolute path로 출력한다. * ''<color #22b14c>**-z, --zero**</color>'': 각 결과를 newline 대신 NUL byte로 끝낸다. * ''<color #22b14c>**-q, --quiet**</color>'': 지정한 file에 관한 진단 메시지를 숨긴다. exit status는 그대로 확인한다. ===== Examples ===== ==== 현재 위치 기준 absolute path ==== <code bash> realpath -- ./docs/../README.md </code> ''--''는 뒤의 값이 hyphen으로 시작해도 option으로 해석되지 않게 한다. ==== 존재하는 path만 허용 ==== <code bash> realpath -e -- /etc/hosts </code> 입력 또는 중간 component가 없으면 non-zero exit status로 실패한다. ==== 아직 없는 path 정규화 ==== <code bash> realpath -m -- ./build/missing/../result.txt </code> ''-m''은 path 존재 여부 검증이 아니라 정규화가 목적일 때 사용한다. 출력되었다고 file이 존재하거나 안전한 대상이라는 뜻은 아니다. ==== 기준 directory에 대한 relative path ==== <code bash> realpath --relative-to=/usr -- /usr/bin </code> 위 명령은 ''bin''을 출력한다. ==== filename 목록을 NUL로 구분 ==== <code bash> realpath -z -- ./one './two with spaces' | xargs -0 -n1 printf 'resolved: %s\n' </code> ===== Troubleshooting ===== ==== No such file or directory ==== 기본 동작이나 ''-e''에서 필요한 component가 없을 수 있다. 모든 component가 반드시 존재해야 하는지 확인하고, 단순히 future path를 정규화하려는 경우에만 ''-m''을 사용한다. ==== Permission denied ==== 상위 directory를 탐색할 execute permission이 없으면 canonicalization이 실패할 수 있다. ''-q''로 message를 숨기더라도 exit status는 검사한다. <code bash> if resolved=$(realpath -e -- "$target"); then printf '%s\n' "$resolved" else printf 'cannot resolve target\n' >&2 fi </code> ==== -L과 -P 결과가 다름 ==== symbolic link와 ''..''이 같은 path에 있으면 처리 순서 때문에 결과가 달라질 수 있다. filesystem의 실제 위치가 목적이면 기본 ''-P'', 논리적인 path component 처리가 목적이면 ''-L''을 명시한다. ===== Compatibility ===== * POSIX.1-2024는 ''realpath''와 ''-E'', ''-e''를 정의한다. GNU 구현은 ''-L'', ''-P'', ''-m'', relative 출력, NUL 출력 등 확장 option을 추가로 제공한다. * 오래된 GNU coreutils는 ''-E''를 지원하지 않을 수 있다. 배포 대상의 ''realpath --help''를 확인한다. * GNU, BSD, BusyBox 구현은 option과 기본 존재 조건이 다를 수 있으므로 portable script에서는 필요한 mode를 명시하고 대상 platform에서 검증한다. * canonical path 확인만으로 접근 권한이나 안전성이 보장되지는 않는다. 보안 경계를 검사할 때는 path prefix 문자열 비교만 사용하지 말고 race condition과 mount, link 변경도 고려한다. ===== Help ===== ++++ realpath --help (GNU coreutils 8.30) | <code text> Usage: realpath [OPTION]... FILE... Print the resolved absolute file name; all but the last component must exist -e, --canonicalize-existing all components of the path must exist -m, --canonicalize-missing no path components need exist or be a directory -L, --logical resolve '..' components before symlinks -P, --physical resolve symlinks as encountered (default) -q, --quiet suppress most error messages --relative-to=DIR print the resolved path relative to DIR --relative-base=DIR print absolute paths unless paths below DIR -s, --strip, --no-symlinks don't expand symlinks -z, --zero end each output line with NUL, not newline --help display this help and exit --version output version information and exit GNU coreutils online help: <https://www.gnu.org/software/coreutils/> Report realpath translation bugs to <https://translationproject.org/team/> Full documentation at: <https://www.gnu.org/software/coreutils/realpath> or available locally via: info '(coreutils) realpath invocation' </code> ++++ ===== See Also ===== * [[:linux:cli:dirname:ko]] * [[:linux:cli:basename]] * [[:readlink]] * [[https://www.gnu.org/software/coreutils/manual/html_node/realpath-invocation.html|GNU Coreutils: realpath invocation]] * [[https://pubs.opengroup.org/onlinepubs/9799919799/utilities/realpath.html|POSIX.1-2024: realpath]] * [[https://formulae.brew.sh/formula/coreutils|Homebrew Formulae: coreutils]] ===== History ===== * codex:: 2026-08-17 realpath의 설치, canonicalization mode, symbolic link 처리, relative 출력, 호환성 문서를 추가했다. {{indexmenu>.#1|js}} /home/u613600155/domains/cli.zerotymer.net/public_html/data/pages/linux/cli/realpath/ko.txt 마지막으로 수정됨: 2026/08/17 03:48저자 127.0.0.1