Как удар продолжает работать правильно при перемещении его рабочего каталога?

На Mac OS X можно попытаться использовать purge команда (предоставленный XCode) к свободному некоторая (неактивная) RAM.

vm_stat
purge
vm_stat

5
04.07.2011, 20:21
2 ответа

Перемещение файла или каталога изменяет свойство метаданных, которое определяет его родителя в дереве файла, но это не изменяет свой фактический идентификатор узла. На физическом диске это находится все еще в том же месте, и файловая система все еще знает это как тот же объект. Где угодно указатель файла или каталога открыт, он уже подключен к тому объекту, и изменение в метаданных объектов не будет влиять на открытые процессы. Вещи только повредятся, когда Вы попытаетесь для открытия нового указателя на основе пути файловой системы.

К тому же можно переместить файл, который пишется в, и записи будут продолжать идти в новое местоположение; потому что это - на самом деле тот же узел файла, просто повторно прикрепленный к другому месту в файловой структуре. Ни физическое местоположение на диске, ни идентификационные изменения узла, файловая система просто обновляет свою внутреннюю карту узлов на диске к путям в файловой системе.

Также знаменитый, это поведение только применяется, когда перемещенный объект остается в той же файловой системе. Если Вы перемещаете его от, каждый монтируется другому, физическое местоположение узла должно измениться, и объект будет удален из исходной файловой системы, оставляя мертвые указатели!

11
27.01.2020, 20:33
  • 1
    ... и также при перемещении направления в сервер NFS клиенты NFS могут потерять его. В зависимости от настроек сервера NFS (в частности, subtree_check, см. документы для деталей) –  derobert 29.06.2013, 00:57

Ядра Unix отслеживают, какого каталога каждый процесс имеет для рабочего каталога. Можно доказать это cd'ing в смонтированный объем, и затем, как корень, делая a umount на точке монтирования. Вы получите некоторое сообщение о том, как устройство занято.

И ясно, современные оболочки имеют рабочий каталог, они говорят, что имеют, иначе программы, которые являются детьми оболочки (C, Python или иначе) не открыли бы корректный файл при предоставлении относительного пути на командной строке.

Но современные оболочки (ksh, удар, zsh, возможно, другие) играют в игры с рабочим каталогом. Можно доказать это путем создания дерева каталогов, которое имеет символьную ссылку где-нибудь в середине уровней:

% mkdir a
% cd a
% mkdir b.orig
% ln -s b.orig b
% mkdir b.orig/c
% cd .. 
% cd a/b/c
% pwd
/home/bediger/a/b/c

Это - все с zsh. Это следует, символьная ссылка создают резервную копию дерева, где, если это просто работало, это - путь с помощью ".." каталоги, это нашло бы a/b.orig/c

2
27.01.2020, 20:33
  • 1
    "И ясно, современные оболочки имеют рабочий каталог, они говорят, что имеют" - но это не то, что я наблюдал в этом случае! –  Robin Green 05.07.2011, 10:24
  • 2
    я попробовал то, что Вы описываете с простой программой C, которая делает chdir (2) и пауза (3). Можно все еще сделать вещи как rmdir рабочий каталог. Таким образом, просто наличие рабочего каталога не предотвращает смены имени или даже удаление рабочего каталога. Я делаю много "команд" $PWD CD для согласования, какой zsh думает по сравнению с тем, где это из-за этого. –  Bruce Ediger 05.07.2011, 16:01

Теги

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