여기서 파일 시스템을 전환하는 이유는 무엇입니까?

여기서 파일 시스템을 전환하는 이유는 무엇입니까?

새로운 빈 디렉토리로 이동하면

~$ cd "`mktemp -d`"

거기에 파일 시스템을 마운트합니다.

/tmp/tmp.4MlNzMERSw$ sudo mount /dev/sda5 .

그런 다음 거기에 있는 파일을 나열하려고 하면 해당 파일 시스템에 파일이 표시되지 않습니다.

/tmp/tmp.4MlNzMERSw$ ll
total 8
drwx------  2 christoph christoph 4096 Jun 18 21:06 ./
drwxrwxrwt 18 root      root      4096 Jun 18 21:09 ../

/tmp/tmp.4MlNzMERSw이에 대한 설명은 첫 번째 코드 블록에서 명령을 실행하면 터미널이 파일 설명자를 얻는다는 것입니다. 이는 다음을 실행하여 파일 시스템을 마운트 해제할 수 있다는 사실로 확인되었습니다.

/tmp/tmp.4MlNzMERSw$ sudo umount .

동일한 터미널 창에서 을 눌러 새 터미널을 열면 Ctrl + Shift + N. 두 번째 터미널을 닫거나 그 안에서 탐색할 때까지는 첫 번째 터미널에서 이 작업을 수행할 수 없습니다. 물론 제2터미널에 머무르는 동안에는 제거할 수 없습니다 /tmp/tmp.4MlNzMERSw. 요점은 이전 파일 설명자(이전 파일 설명자 )를 유지하고 새 터미널(파일을 유지하게 될)을 얻지 못하는 /tmp/tmp.4MlNzMERSw것처럼 첫 번째 터미널을 방해가 되지 않는 곳으로 옮겨도 상관이 없다는 것입니다. /tmp/tmp.4MlNzMERSw시스템이 사용 중이므로 지연되지 않은 제거가 방지됩니다).

이제 파일 이름 자동 완성이 첫 번째 터미널 창에서 작동하는 것이 아니라 두 번째 터미널 창에서 작동하기를 원합니다. 이것이 바로 제가 관찰한 것입니다. 그러나 내가 아는 한, 파일 이름의 자동 완성은 어떻게든 프리패칭되어 있습니다. 비록 현재로서는 이에 대한 증거를 찾을 수 없지만(반대하는 증거는 있습니다).

그러나 내가 이해하지 못하는 것은 내가 왜할수있다cd mnt첫 번째 터미널 창에서 상대 위치가 앞으로 변경됩니다(like).아니요먼저 반환합니다(예: cd ..then cd tmp.4MlNzMERSw/mnt또는 cd tmp.4MlNzMERSw+ cd mnt).

첫 번째 터미널 창은 설치 전과 마찬가지로 기존 파일 설명자를 사용하여 디렉터리 내용을 나열할 수 있습니다. 그렇다면 앞으로 탐색하기 위해 동일한 파일 설명자를 사용하지 않는 이유는 무엇입니까? * 불가능한 일인가요?

 * 이렇게 하면 작업이 당연히 실패하게 됩니다.

내 설정

내 컴퓨터는 Linux 4.4.0 및 최신 업데이트가 설치된 Ubuntu 16.04를 실행하고 있습니다. 저는 기본 터미널 에뮬레이터(GNOME 터미널(버전 3.18.3))와 bash 4.3.48을 사용하고 있습니다.

$ /proc/self/exe --version
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

$ gnome-terminal --version
GNOME Terminal 3.18.3

$ uname -r
4.4.0-79-generic

답변1

/tmp/tmp.4MlNzMERSw$ sudo mount /dev/sda5 .

이 작업이 완료되면 /dev/sda5쉘은 에 설치되지만 /tmp/tmp.4MlNzMERSw쉘의 현재 디렉토리는 여전히 이전 디렉토리 /tmp/tmp.4MlNzMERSw, 즉 마운트 지점 뒤에 숨겨진 디렉토리입니다.

이전 파일 설명자(예전의 /tmp/tmp.4MlNzMERSw)를 유지하고 새 파일 설명자를 얻지 못하는 것 같습니다.

프로세스의 현재 디렉터리는 번호가 매겨진 파일 설명자가 아니지만 파일 설명자와 매우 유사하게 동작합니다. 현재 디렉터리는 문자열이 아닌 디렉터리에 대한 핸들입니다. 원래 디렉터리에 도달하는 데 사용된 경로는 더 이상 유효하지 않을 수 있지만 이는 파일 설명자의 유효성에 영향을 미치지 않습니다. 파일 설명자는 해당 파일이 닫힐 때까지 동일한 파일을 계속 참조합니다. 쉘 프로세스의 현재 디렉토리는 /tmp쉘이 chdir시스템 호출을 발행할 때까지의 하위 디렉토리입니다.

디렉터리 이름을 바꾸면 다음과 같은 내용이 표시됩니다.

$ mkdir /tmp/foo
$ cd /tmp/foo
$ pwd
/tmp/foo
$ touch first
$ ls
first
$ mv /tmp/foo /tmp/bar
$ pwd
/tmp/foo
$ pwd -P
/tmp/bar
$ mkdir /tmp/foo
$ echo $PWD
/tmp/foo
$ ls
first
$ ls $PWD
$ cd $PWD
$ ls

쉘의 현재 디렉토리는 이전 디렉토리 /tmp/foo, 즉 명령이 호출될 first때까지 이름이 지정된 파일이 포함된 디렉토리로 유지됩니다.cd

관련 정보