Как Linux обрабатывает команду перемещения под капотом?
Допустим, я перенесу мой дом реж
/home/me
и я переместить это в другой каталог
/home/foo/me
Как me
меняются все пути к файлам и каталогам ? Я знаю, что моя Desktop
директория под me
теперь /home/foo/me/Desktop
и так, Documents
/home/foo/me/Documents
но обновляет ли файловая система каждый путь, me
чтобы отразить изменение? Это звучит не очень эффективно, и, вероятно, это не так.
Где я могу получить больше информации об этом?
filesystem
Джефф
источник
источник
Ответы:
Чтобы понять, как он перемещает папки, вам может понадобиться немного разбираться в файловой системе Linux. Все файлы и папки хранятся как часть структуры данных, называемой « inode ». Каждый файл имеет номер индекса, как и папки.
Чтобы просмотреть inode вашей папки, используйте команду
ls -ial foldername
. Первый столбец показывает номер индекса файла. Для каждой папки есть два уникальных имени.
и..
, представляющих собственный каталог и родительский каталог соответственно.Вы можете попробовать провести эксперимент, чтобы переместить каталог (скажем, / home / me / source) с подкаталогами и файлами в другой каталог (например, / home / me / куда-то / еще). Номер инода / home / me / source и все его содержимое остаются неизменными до и после перемещения. Единственным отличием является номер инода
..
, который изначально имеет номер инода / home / me, а теперь становится номером инода / home / me / где-то / еще. В простой формулировке Linux обновляет ссылку на источник каталога, и тогда это делается.Содержимое на жестком диске все равно не изменяется, при перемещении папки обновляется только индекс inode. Это, конечно, не тот случай, когда вы перемещаете папку в другое физическое местоположение.
источник
Если вы заинтересованы в том , как программе , такие , как
mv
иcp
работа, помните , что они с открытым исходным кодом , и вы можете получить наиболее точное объяснение, прочитав код. Здесь есть ссылки на все основные утилиты. В частности, вы можете найти здесьисточник
you can get the most accurate explanation by reading through the code.
Позволю себе не согласиться; Долгое время у меня не было абсолютно никакого опыта работы с Си, и даже сейчас я не предпочитаю его. Кроме того, исходный код часто оптимизируется и содержит больше граничных случаев, чем необходимо. Символическое объяснение часто помогает больше.