옆에

옆에

확실히파일 이름을 다음으로 바꿀 수 있습니다.....

미친 경우 파일 이름을 ..또는 로 어떻게 바꿀 수 있습니까 .? 그러한 파일 이름이 허용됩니까?

백슬래시는 점의 특별한 의미를 비활성화하지 않는 것 같습니다.

$ mv test \.
mv: `test' and `./test' are the same file

답변1

모든 디렉터리에 이미 두 이름에 대한 항목이 포함되어 있으므로 파일 이름을 .or 로 바꿀 수 없습니다. ..(이 항목은 디렉터리를 가리키며 파일 이름을 디렉터리로 바꿀 수 없습니다.)

mv대상이 기존 디렉터리인 경우를 감지하고 이를 해당 디렉터리(현재 이름을 사용하여)로 파일을 이동하라는 요청으로 해석합니다.

.백슬래시는 쉘 메타 문자가 아니기 때문에 관련이 없습니다 . \..동일합니다 bash.

답변2

..특별한 것이 아니라 이미 존재한다는 것뿐입니다.

Unix, Dos 및 MS-Windows에서 각 디렉토리에는 .자신에게 다시 연결된 디렉토리와 ..상위 디렉토리(루트 디렉토리인 경우 self)에 다시 연결된 디렉토리가 있습니다.

..and가 특별 하다면 .삭제하거나 이름을 바꿀 수 없기 때문입니다(실제로는 삭제할 수 있습니다. 해당 항목이 포함된 디렉터리만 삭제하면 됩니다).

따라서 (다른) 파일 .이나 ...

...그러나 , \, , , .. (그 뒤에 공백이 있지만 ..여기서는 거의 볼 수 없거나 디렉토리 목록에서 쉽게 볼 수 있음) 또는 원하는 다른 이름을 만들 수 있습니다 .오직예약된 문자는 /(경고 - 고급 세부 정보: 및 null, null은 무언가의 끝을 표시하는 것 이외의 목적으로 사용되지 않는 특수 문자이며 때로는 구분 기호로 사용됩니다)입니다. .특별한 의미는 없습니다. 파일 이름, 커널 또는 셸이 아니며 이스케이프가 필요하지 않습니다. 실제로 파일 이름이 a로 시작하면 .특수한 파일이며 일반적으로 파일은 디렉터리 목록 도구(예:)에 의해 숨겨지지만 ls여전히 이스케이프할 필요는 없습니다.

옆에

이 숨겨진 파일 동작은 ls작성자가 숨기려는 초기 구현 에서 나타났으 .므로 ..숨기려는 코드를 작성했습니다 .. 다른 사용자는 이 버그/기능을 발견하고 .숨기려는 파일에서 시작하여 파일을 만들기 시작했습니다.

링크 문제에 대한 설명

질문자에게 링크한 질문에서 파일을 상위 디렉토리로 이동하려고 했지만 ..이름이 바뀌었습니다. ...점으로 시작하는 파일은 기본적으로 숨겨져 있으므로 찾을 수 없습니다.

mv를 폼에 사용하는 경우mv a b

  • 해당 위치 로 이동하면 .실제로는 no 동작이지만 mv오류로 처리됩니다.
  • 이동하면 ..파일이 상위 디렉터리로 이동됩니다.

답변3

문제는 파일을 디렉터리로 이동한다는 것입니다. 이는 실패할 수 있습니다.

예전에는 어땠는지 말씀드리겠습니다.

mkdir은 기본적으로 이것을 읽었습니다. (내가 이것을 sh로 썼을 때 실제로는 C와 setuid-root로 작성되었습니다.)

mknod d $1
ln -d $1 $1/.
ln -d `dirname $1` $1/..

보시다시피 특별한 것은 없습니다. 그리고..mkdir이 당신을 위해 만들어졌고 이미 존재한다는 사실을 제외하면. 이제 삭제할 수 없다는 코드가 있지만 항상 그런 것은 아닙니다.

rmdir은 다음과 같았습니다:

rm -d $1/..
rm -d $1/.
rm -d $1

관련 정보