Перемещение файла или каталога изменяет свойство метаданных, которое определяет его родителя в дереве файла, но это не изменяет свой фактический идентификатор узла. На физическом диске это находится все еще в том же месте, и файловая система все еще знает это как тот же объект. Где угодно указатель файла или каталога открыт, он уже подключен к тому объекту, и изменение в метаданных объектов не будет влиять на открытые процессы. Вещи только повредятся, когда Вы попытаетесь для открытия нового указателя на основе пути файловой системы.
К тому же можно переместить файл, который пишется в, и записи будут продолжать идти в новое местоположение; потому что это - на самом деле тот же узел файла, просто повторно прикрепленный к другому месту в файловой структуре. Ни физическое местоположение на диске, ни идентификационные изменения узла, файловая система просто обновляет свою внутреннюю карту узлов на диске к путям в файловой системе.
Также знаменитый, это поведение только применяется, когда перемещенный объект остается в той же файловой системе. Если Вы перемещаете его от, каждый монтируется другому, физическое местоположение узла должно измениться, и объект будет удален из исходной файловой системы, оставляя мертвые указатели!
Ядра 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