Unix 파일 이름 및 경로 [닫기]

Unix 파일 이름 및 경로 [닫기]
  1. 디렉토리의 전체 파일 이름을 얻는 방법은 무엇입니까?
  2. 파일 경로에도 루트 디렉터리가 없어야 합니까?

답변1

POSIXly, 경로(현재 디렉토리에 대한 상대 경로, 심볼릭 링크 포함 가능)가 저장된 디렉토리의 심볼릭 링크되지 않은 절대 경로를 얻으려면 다음 $dir이 제공됩니다.찾다디렉토리에 대한 권한을 얻으려면 다음을 수행하십시오.

(
  case $dir in
    (/*) CDPATH= cd -P "$dir";;
    ("") CDPATH= cd -P "";;
    (*) CDPATH= cd -P "./$dir";;
  esac && pwd -P
)

다음은 다음에서 그대로 복사되었습니다.이 텍스트는 POSIX 사양의 다음 버전에 포함될 예정입니다..

여기에 언급된 대로, 이 경우 현재 지정되지 않은 동작에 의존하거나 작성하는 ""대신 오류를 인쇄할 수 있습니다 .cd

(
  case "${dir:?directory cannot be empty}" in
    (/*) CDPATH= cd -P "$dir";;
    (*) CDPATH= cd -P "./$dir";;
  esac && pwd -P
)

절대적이지 않은 경우 접두사 $dirwith는 시작 시 옵션으로 간주되지 않고 ./( 충분 함 ) 의미로 해석되지 않는 특수 값에 사용됩니다 .$dir-CDPATH= cd -P -- "${dir:?cannot be empty}"-cd$OLDPWD이전 작업 디렉토리(그리고 CDPATH= OLDPWD=- cd -P -- "${dir:?cannot be empty}"이 문제를 해결하기 위해 휴대용으로 사용할 수 없습니다).

한 가지 상황은목차현재 디렉터리이고 상위 디렉터리에서 연결이 해제된 경우 절대 경로가 있을 수 없습니다.

$ mkdir 1
$ cd 1
$ rmdir ../1
$ cd -P .
$ ls -ld .
drwxr-xr-x 0 chazelas chazelas 0 Mar 27 06:53 ./
$ [ -d . ] && echo yes
yes

그러나 여전히 존재합니다.

$ pwd -P
.
$ realpath .
realpath: .: No such file or directory
$ readlink -ve .
readlink: .: No such file or directory

파일 시스템에 경로가 없습니다.

이것해당 파일이나 디렉터리가 없습니다.error는 디렉토리가 존재하기 때문에 약간 오해의 소지가 .있지만(비록 그것으로 많은 일을 할 수는 없지만) 적어도 Linux에서는 errno getcwd()를 반환하면 ENOENT현재 디렉토리가 연결 해제되었음을 나타냅니다.

답변2

상대 경로는 현재 디렉터리에 상대적이므로 루트 디렉터리를 포함하지 않습니다.

예:

development/project/src

src현재 디렉터리 아래의 2단계 디렉터리라는 상대 경로입니다. 경로는 src디렉터리 이름인지, 파일 이름인지, 아니면 다른 이름인지를 나타내지 않습니다 .

Linux 시스템에서는 이 realpath유틸리티를 사용하여 이름의 전체(절대) 경로를 얻을 수 있습니다.

$ realpath development/project/src
/home/myuser/work/development/project/src

절대 경로는 항상 루트 디렉터리로 시작됩니다. 보다 정확하게는 현재 프로세스의 루트 디렉터리에서 시작하며, 명령을 사용하여 변경할 수 있습니다 chroot.

대부분의 Unix 시스템에서는 현재 디렉터리에서 시작하는 상대 경로 앞에 접두사를 붙여 절대 경로를 얻을 수 있습니다 $PWD.

$ printf '%s\n' "$PWD/development/project/src"
/home/myuser/work/development/project/src

그러나 이는 단지 문자열 연결일 뿐이며 정확히 같은 방식으로 경로를 확인하지는 않습니다 realpath. 주어진 상대 경로가 정확하면 기능적 절대 경로가 제공됩니다.

관련 정보