Почему 'CP' и 'комната' рассматривают каталоги отдельно?

Если /var и /srv находятся в той же файловой системе, затем можно атомарно переместиться www каталог от одного до другого:

mv /var/www /srv/

Когда Вы делаете это, любой процесс, который имеет файл, открытый под www сохранит тот файл открытым.

Если /var и /srv находятся в различных файловых системах, необходимо остановить сервисы, которые используют файлы под www прежде, чем сделать перемещение, потому что будет переходный период, во время которого файлы копируются затем удаленные.

В этом случае, если Вы хотите минимизировать время простоя:

  1. Скопируйте файлы, уважая полномочия:

    cp -a /var/www /srv/
    
  2. Отредактируйте конфигурационные файлы для указания на /srv/www вместо /var/www.
  3. Удалите файлы из-под /var/www.

Если Вы копируете, затем удаляют, будет переходный период, во время которого существуют две копии файлов. Таким образом, необходимо удостовериться, что ничто не записано под www каталог во время переходного периода; иначе две копии выйдут из синхронизации, и некоторые данные могут быть потеряны.

Видеть что потребности быть измененным:

  • Поисковые файлы под /etc, и возможно под /var/www самостоятельно, для нахождения ссылок на /var/www:

    grep -r '/var/www' /etc /var/www
    
  • Ищите любую абсолютную символьную ссылку, на которую это ссылается /var/www.

    find /etc /var/www -lname '/var/www*'
    
10
01.03.2013, 22:01
2 ответа

Derobert, Почему Unix mv программа не нужен-R (рекурсивная) опция для каталогов, но CP, действительно нужен он? в основном отвечает на Ваш вопрос: копирование или удаление регулярного файла отличаются от выполнения той же операции с каталогом, потому что для каталога необходимо обработать все файлы, содержавшие там. Следовательно операция существенно отличается.

Также стоящий замечания то, что существует специальная утилита rmdir который может только действовать на пустые каталоги. Не проверяя факты это приводит завершать это, возможно, первоначально rm только смог удалить некаталоги и глубоко удалить, должен был быть достигнут путем рекурсивного использования rm к пустым каталогам и затем rmdir удалить их.

11
27.01.2020, 20:02
  • 1
    rmdir также название системного вызова, который раньше удалял каталог. Каталог должен быть пустым для системного вызова, и утилита того же имени является просто "фронтендом", подобным unlink команда и утилита. –  jordanm 02.03.2013, 00:05
  • 2
    Точно - это - то, что приводит меня верить этому первоначально rm возможно, не могло удалить каталоги вообще (потому что утилиты командной строки являются часто просто относительно простыми обертками вокруг syscalls). –  peterph 02.03.2013, 22:28
  • 3
    Заголовок моего вопроса мог бы ввести в заблуждение, чтобы думать, что я спрашиваю о технических деталях. Я спрашивал, является ли это преднамеренный выбор. Интересно - ли я единственный, чтобы думать, что с точки зрения конечного пользователя это поведение непоследовательно. Я принимаю Ваш ответ, потому что это, косвенно отвечает на мой вопрос: технические ограничения во внутренностях Unix (на syscall уровне), кажется, источник этого поведения, и наследие, вероятно, препятствует тому, чтобы мы делали его любой другой путь сегодня. Не "простые обертки вокруг syscalls, который, как " предполагают, дал нам более интеллектуальные поведения? –  rahmu 05.03.2013, 02:33
  • 4
    От конечного пользователя POV это кажется странным действительно, но Вы на самом деле спрашивали о причинах.:) Что касается оберток - все это зависит от того, насколько "простой" они (и что Вы все еще хотите назвать "простым"). Современный rm определенно не просто простая обертка (она может удалить mroe файлы сразу и каталоги также). Если Вам не нравится давать его -r опция, используйте функциональность искажения своей оболочки или создайте Вашу собственную обертку, которая поместит ее на месте (который был бы медленнее, но независимым от оболочки, которую Вы используете). –  peterph 05.03.2013, 13:11

В некоторых разновидностях UNIX страница справочника комнаты указывает его как команду для удаления связи с файлом.
В UNIX файлы являются объектами в файловой системе под названием Inodes без имен или местоположения кроме идентификатора в файловой системе. Их имена являются ссылками на них в различных каталогах, которые являются типом файла, который индексирует файлы (или каталоги, так как они - файлы), которые перечислены в нем.
При удалении связи с файлом, подсчетом ссылок уменьшений файла, и когда это достигает 0, он на самом деле удален, так как он отмечен как свободный файловой системой и это - блоки/степени, отмечены свободные также.

Если у Вас была способность к комнате каталог, не удаляя связь с файлами в нем сначала, Вы достигнете точки, где Вы имеете inodes, на который ссылаются в Вашей файловой системе, но не можете быть получены доступ никакими нормальными средствами.
С тех пор существует ссылка на них согласно их подсчету ссылок, они не отмечены как удаленный и становятся потерянными файлами.
Это становится еще более сложным, когда потерянные "файлы" являются каталогами и увеличениями как таковыми потенциальная сумма потерянного устройства хранения данных в файловой системе.

Так комната-r был добавлен, как функция для упрощения жизни пользователей UNIX, в расходе стандарта "дух UNIX", поскольку это более сложно, чем классические утилиты UNIX, поскольку это убывает к каталогам и удаляет файлы в,

Кроме того, в раннее время UNIX, системы не имели большой памяти, и отображение рекурсивной структуры каталога действительно имело потерю производительности, и иногда было невозможно обойтись без разделения работы.

CP, читает файл и копирует его, блок блоком. Если бы это должно было скопировать каталог то же, поскольку это делает файл, это добавило бы ссылки на файлы в, не увеличивая их подсчет ссылок, который мог привести к непоследовательным данным (при чтении/записи в inode, кто блоки, отмеченные как свободные, так как их исходный inode был удален), потерянные данные - начиная с удаления последней (известной) ссылки на файл могли вызвать, это - inode число, которое будет переработано.

Для tl; толпа доктора:
Каталоги в UNIX являются типом файла, это правда, но так как информацию в них рассматривает по-другому система, поскольку это - метаданные файловой системы, команды, управляющие файлами, не могут работать над каталогами без изменения в их поведении для управления зависимыми метаданными также.

2
27.01.2020, 20:02

Теги

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