이름이 바뀐 상위 디렉터리를 변경하려고 하면 어떻게 되나요?

이름이 바뀐 상위 디렉터리를 변경하려고 하면 어떻게 되나요?

매우 깊은 하위 디렉터리가 여러 개 있어서 입력했는데 cd ..다음 오류가 발생했습니다.

cd: ..: No such file or directory

혼란스럽습니다. 물론 상위 디렉토리가 있고 그 안에 제가 있습니다! 조금 조사해 보니 내 동료가 내 아래에서 조부모 디렉터리의 이름을 바꿨다는 사실이 드러났고, 내가 부모 디렉터리로 이동하려고 했을 때 위의 오류가 발생했습니다. 나는 이것을 다음과 같이 재현하려고 노력합니다.

server|/n01/data/adf/temp/TEMPTEST/SUB1/SUB2> pwd
/n01/data/adf/temp/TEMPTEST/SUB1/SUB2
server|/n01/data/adf/temp/TEMPTEST/SUB1/SUB2> mv /n01/data/adf/temp/TEMPTEST /n01/data/adf/temp/NEWTEMPTEST
server|/n01/data/adf/temp/TEMPTEST/SUB1/SUB2> pwd
/n01/data/adf/temp/NEWTEMPTEST/SUB1/SUB2

이제 길을 잃었습니다. 상위 디렉터리로 변경하면 이전과 같은 오류가 발생합니다.

server|/n01/data/adf/temp/TEMPTEST/SUB1/SUB2> cd ..
server|/n01/data/adf/temp/NEWTEMPTEST/SUB1>

오류가 없습니다. 디렉토리를 성공적으로 변경했습니다. 무슨 일이에요? 이 오류가 처음처럼 보이지 않는 이유는 무엇입니까?

답변1

상위 디렉터리의 이름을 바꾸면 이러한 오류가 발생하지 않습니다. 그러나 삭제하면 다음과 같은 결과가 발생합니다.

# mkdir -p some/deep/path
# cd some/deep/path
# rm -r some/deep/path
# cd ..
error: No such file or directory

Linux에는 기본 "이름 바꾸기" 명령이 없습니다. 그러나 항목을 "이동"할 수 있습니다. 동일한 파일 시스템 내에서 이동할 때 이는 이름 바꾸기와 동일합니다. 그러나 파일 시스템 간에 이동할 때 이는 실제로 복사/삭제 작업이므로 위에 표시된 것과 유사한 상황이 발생할 수 있습니다. 예를 들면 다음과 같습니다.

# mkdir -p /fs1/a/b
# cd /fs1/a/b
# mv /fs1/a /fs2/a
# cd ..
error: No such file or directory

/fs1와 파일 시스템이 다른 경우 /fs2(이 경우 마운트 지점)

답변2

단순히 디렉토리 이름을 바꾸는 것은 이름이 단지 레이블일 뿐이므로 아무런 효과가 없습니다(이것은 하드 링크를 사용하여 동일한 객체를 가리키는 두 파일을 갖는 방법입니다).

상위 디렉터리의 내용이 새 디렉터리로 이동되었을 수 있으며, 이제는 비어 있는 이전 디렉터리가 삭제되었습니다. 내 생각에 이 작업은 직접 하위 디렉터리에 있을 때 수행되어야 한다고 생각합니다.

이는 (선택적으로) 이름을 바꾸는 동안 마운트된 다른 파일 시스템 간에 디렉토리를 이동하는 경우에도 발생할 수 있습니다. 이는 이름 바꾸기가 아니라 원본 파일을 강제로 삭제하는 파일 시스템의 변경입니다.

관련 정보