Як Linux обробляє команду переміщення


12

Як Linux обробляє команду переміщення під кришкою?

Скажімо, я переїжджаю додому

/home/me

і я переміщу це в інший каталог

/home/foo/me

Як змінюються всі шляхи до файлів і каталогів me? Я знаю, що мій Desktopdir meє зараз /home/foo/me/Desktop, а також, Documents /home/foo/me/Documentsале чи файлова система явно оновлює кожен шлях, meщоб відобразити зміни? Це не дуже ефективно, і, мабуть, це не так.

Де я можу отримати більше інформації про це?


5
Щодо ефективності: ні, це не було б ефективно. Коли ви переміщуєте дані до іншого каталогу, дані насправді не читаються в одному місці та записуються в іншому. Файлова система містить набір покажчиків на блоки даних. У разі переміщення просто вказівники оновлюються.
Джос

Ах, це, мабуть, означало Джефф ...
Яків Влійм

@Jos Звідки відбувається фрагментація справа?
нуль298

3
@ zero298 Ні, фрагментація, як правило, зовсім інша і не пов'язана між собою фрагментація - це не про вміст структури папки, а про те, щоб вміст одного файлу розкидався по пластинах фізичних дисків (замість того, щоб бути єдиним безперервним рядком), зменшуючи зчитування / записувати виконання таких файлів. Зазвичай не очікується, що зміст великих / глибоких / розгалужених дерев папок буде безперервним і переміщуватися таким чином.
Петріс

Відповіді:


21

Щоб зрозуміти, як він переміщує папки, можливо, вам доведеться трохи зрозуміти файлову систему під Linux. Усі файли та папки зберігаються як частина структури даних, яка називається " inode ". Кожен файл має номер inode, а також папки.

Щоб переглянути вкладку вашої папки, скористайтеся командою ls -ial foldername. У першому стовпці відображається номер inode файла. Для кожної папки є дві унікальні імена .і .., що представляють каталог своєї власної, і батьківський каталог відповідно.

Ви можете спробувати зробити експеримент, щоб перемістити каталог (скажімо, / home / me / source) з підкаталогами та файлами в інший каталог (наприклад, / home / me / where / else). Число inode / home / me / source та весь його вміст залишається однаковим до та після переміщення. Єдина відмінність - це число inode .., яке спочатку поділяє число inode / home / me, а тепер стає числом inode / home / me / where / else. У простому формулюванні, Linux оновлює посилання на джерело каталогу, і тоді це робиться.

Вміст на жорсткому диску жодним чином не змінюється, лише індекс inode оновлюється при переміщенні папки. Це, звичайно, не так, якщо ви переміщуєте папку в інше фізичне місце.


3
Правильно, поки рух не перетинає межі файлової системи.
kojiro

3

Якщо ви зацікавлені в тому , як програмою , такі , як mvі cpробота, пам'ятайте , що вони з відкритим вихідним кодом , і ви можете отримати найбільш точне пояснення, прочитавши код. Тут є посилання на всі основні утиліти. Зокрема, ви можете знайти телевізор тут


6
you can get the most accurate explanation by reading through the code.Дозволю собі не погодитися; Тривалий час у мене абсолютно не було досвіду роботи з C, і навіть зараз я не віддаю перевагу цьому. Також вихідний код часто оптимізується та містить більше кращих справ, ніж потрібно. Символічне пояснення часто допомагає більше.
Шельваку

1
@shelvacu "містить більше крайових справ, ніж потрібно". Міцний код обробляє всі крайні корпуси, які можуть бути присутніми. Однак це правда, що представляти всі кращі випадки в першому поясненні поняття може не потрібно.
Орегон Трейл

@OregonTrail Вибачте, що я мав на увазі, у коді є більше
кращих

Я радий, що це було у вас оригінальним настроєм, але ви все одно, здається, пропустили мій акцент на « ручках ». Добре написаний код не має крайні випадки, вона обробляє крайні випадки. ;) Я знаю, що ви родом звідси, але вам слід бути обережними зі своїми дієсловами.
OregonTrail
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.