Почему монтирования с активным рабочим каталогом «заняты»?

Я использую его нечасто, но иногда он полезен в сочетании с :для извлечения n --го слова команды. Например:

$ touch FILE.a
$ echo file created
$ mv FILE.a !#:1.bak
mv FILE.a FILE.a.bak

Другим примером, хотя и совершенно бесполезным на практике, может быть использование вместе с cut, чтобы получить содержимое переменной, определенной в та же строка в простой команде, например:

$ LETTER=a echo letter: $(cut -d '=' -f2 <<< "!#:0")
letter: a

Обратите внимание, что это не сработает, так как $LETTERраскрывается перед запуском. команда:

$ LETTER=a echo letter: $LETTER
letter:
2
25.11.2020, 13:23
1 ответ

Здесь есть явное различие. :В файловой системе ext2/3/4 "удаление" файла по его имени означает, что ссылка на индексный дескриптор, т. е. структуру данных, к которой присоединены данные файла, удалено (имя файла, которое вы видите в ls, является просто ссылкой на этот inode ). Файл считается «удаленным» только тогда, когда последняя такая ссылка исчезла (. Если вам интересно, вы можете изучить концепцию «жестких ссылок» ). Однако, если вы открываете файл, это действие также создает ссылку на этот индексный дескриптор, поэтому, пока файл открыт, он фактически не «удаляется», и процесс, в котором файл открыт, все еще может работать с ним.

То же верно и для открытого каталога. Пока вы все еще cdнаходитесь в каталоге, каталог все еще там, даже если вы удалили его из другого экземпляра оболочки. Однако он уже находится в «деградированном» состоянии и больше не доступен из других процессов, и вы не можете создавать новые файлы в этом каталоге даже из экземпляра оболочки, который все еще существует. (Кстати, обратите внимание, что я не могу воспроизвести поведение, которое вы показали во втором примере. :Когда я запускаю тот же код в bash4.3, pwdправильно печатает имя каталога даже после его удаления из основного экземпляр оболочки ).

С другой стороны, размонтирование устройства используется для разрыва всех подключений к содержащимся файлам и сброса всех сделанных изменений, поэтому операционная система откажется делать это, когда кто-то все еще находится «там».

2
18.03.2021, 22:47

Теги

Похожие вопросы