Почему файлы образов компакт-дисков не отображаются при подключении в текущем каталоге?

3

При монтировании образа диска в текущем каталоге используется:

sudo mount -o loop -t iso9660 wall.iso ./

Список файлов в текущем каталоге возвращает только wall.iso.
Чтобы просмотреть реальные файлы на образе диска, я должен сначала cdвыйти из каталога, а затем вернуться в него.

Примечание: если я уже знал, что wall.iso создал каталог с именем subdir , даже если бы я lsне перечислил каталог, который мог бы уже найти cd subdir.

Почему не lsвозвращает файлы при первом вызове? Читает ли lsиз кеша, который обновляется только при смене каталога?

danjjl
источник

Ответы:

7

Это потому, что вы находитесь в каталоге, в который вы монтируетесь. Таким образом, вы по-прежнему ссылаетесь на содержимое исходного каталога через исходный каталог.

Вы можете увидеть точно такой же эффект, когда cdпопадаете в каталог, который затем удаляется.

$ pwd
/home/saml/dirtodel

$ rmdir ../dirtodel

$ pwd
/home/saml/dirtodel

Как это может быть? Я все еще в каталоге, который был только что удален. В чем дело?

В оболочке , которая все еще cdв /home/saml/dirtodel, запустите эту команду , чтобы узнать PID (идентификатор процесса) для его сессии Баша:

$ echo $$
32619

Теперь, если вы перейдете в каталог / proc этого PID, мы увидим, что происходит:

$ ls -l /proc/32619/ | head -10
total 0
dr-xr-xr-x 2 saml saml 0 May 18 07:40 attr
-r-------- 1 saml saml 0 May 18 07:40 auxv
-r--r--r-- 1 saml saml 0 May 18 07:40 cgroup
--w------- 1 saml saml 0 May 18 07:40 clear_refs
-r--r--r-- 1 saml saml 0 May 18 02:06 cmdline
-rw-r--r-- 1 saml saml 0 May 18 07:40 comm
-rw-r--r-- 1 saml saml 0 May 18 07:40 coredump_filter
-r--r--r-- 1 saml saml 0 May 18 07:40 cpuset
lrwxrwxrwx 1 saml saml 0 May 18 07:31 cwd -> /home/saml/dirtodel (deleted)

В списке первых нескольких файлов мы видим один вызванный cwd, который обозначает текущий рабочий каталог. Обратите внимание, что оно указывает на наше старое имя и что оно «удалено».

Так что это дает нам небольшое представление о том, что происходит, но где мы?

Интересно, если мы cd /proc/32619/cwdсможем изменить каталоги в этом волшебном месте. Если мы запустим df .команду, то увидим, что мы все еще в /homeразделе:

$ pwd
/proc/32619/cwd
[saml@grinchy cwd]$ df -h .
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_grinchy-lv_home
                      245G  125G  108G  54% /home

Итак, что происходит?

Несмотря на то, что наш каталог был удален, инода, который его составляет, не было. Вы можете увидеть это с помощью statкоманды. В оболочке, которая все еще находится в каталоге, который мы удалили:

$ stat .
  File: `.'
  Size: 0           Blocks: 8          IO Block: 4096   directory
Device: fd02h/64770d    Inode: 10486487    Links: 0
Access: (0775/drwxrwxr-x)  Uid: (  500/    saml)   Gid: (  501/    saml)
Access: 2013-05-18 07:48:52.674081972 -0400
Modify: 2013-05-18 07:48:44.378900038 -0400
Change: 2013-05-18 07:50:54.189747426 -0400

Мы можем видеть, что мы все еще используем индекс 10486487, но обратите внимание, что он имеет 0 ссылок. Вот что происходит, когда что-то удаляется. Все ссылки на него удаляются, и поэтому ОС может удалить этот особенный индекс.

SLM
источник