매우 깊은 하위 디렉터리가 여러 개 있어서 입력했는데 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
단순히 디렉토리 이름을 바꾸는 것은 이름이 단지 레이블일 뿐이므로 아무런 효과가 없습니다(이것은 하드 링크를 사용하여 동일한 객체를 가리키는 두 파일을 갖는 방법입니다).
상위 디렉터리의 내용이 새 디렉터리로 이동되었을 수 있으며, 이제는 비어 있는 이전 디렉터리가 삭제되었습니다. 내 생각에 이 작업은 직접 하위 디렉터리에 있을 때 수행되어야 한다고 생각합니다.
이는 (선택적으로) 이름을 바꾸는 동안 마운트된 다른 파일 시스템 간에 디렉토리를 이동하는 경우에도 발생할 수 있습니다. 이는 이름 바꾸기가 아니라 원본 파일을 강제로 삭제하는 파일 시스템의 변경입니다.