Создаем каталог UNIX, который, по-видимому, содержит содержимое других каталогов

Создаем каталог UNIX, который, по-видимому, содержит содержимое других каталогов

Если у меня есть 2 каталога, a и b, может ли кто-нибудь предложить удобный метод создания каталога, который, по-видимому, имеет содержимое как a, так и b, без копирования файлов? В данный момент я использую ln -s * для создания загрузки сим-ссылок, а затем удаляю сим-ссылки, когда закончу. Я бы предпочел, чтобы содержимое подкаталогов казалось объединенным, и управление этим с помощью метода сим-ссылок может потребовать некоторой возни.

Ничего страшного, если полученный каталог будет доступен только для чтения данным приложением.

решение1

Вы можете эффективно объединять каталоги с помощьюСоюзФСпутем наложения двух каталогов (в данном контексте называемых ветвями) на одну единую точку монтирования.

Существует несколько реализаций UnionFS;UnionFsFuseявляется одним из самых простых, поскольку представляет собой приложение (а не патч ядра).

На сайте есть ссылка на их архив. Компиляция исходного кода должна быть простой на большинстве дистрибутивов.

В Ubuntu, например, достаточно установить пакетunionfs-предохранительвыполнив следующую команду:

sudo apt-get install unionfs-fuse

После установки вы можете приступить к наложению каталогов. Существует множество вариантов. Я кратко объясню самые основные из них:

  • Команда

      unionfs-fuse foo:bar baz
    

    накладывает содержимое каталоговфуибарв каталогебаз. 1

    Этот оверлей будет доступен только для чтения; любая попытка создать или изменить файл вбазприведет кДоступ запрещен.ошибка. Однако вы все равно сможете создавать и изменять файлы внутрифуибарсами себя.

    Коллизии обрабатываются фиксированным образом: если файл существует в более высокой ветке (фу), он будет иметь приоритет перед файлом с тем же именем в более низкой ветке (бар).

  • Команда

      union-fuse foo=RW:bar=RO baz
    

    делаетфузаписываемый ибар(только для чтения). Изменение файловфубудет возможно, но изменение файловбарне будет. Все вновь созданные файлы вбазпоявится вфу.

  • Команда

      union-fuse -ocow foo=RW:bar=RO baz
    

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

  • С командой

      union-fuse foo=RW:bar=RW baz
    

    все можно изменить. Новые файлы будут созданы в верхней ветке (фу).

  • Команда

      union-fuse foo=RO:bar=RW baz
    

    позволяет изменять файлыбарвнутрибаз, но новые файлы не могут быть созданы.

  • Команда

      sudo umount baz
    

    отменяет крепление соединения.

Смотрите также:человек unionfs-fuse


1 баздолжен существовать до выполнения этой команды. Это относится и ко всем последующим командам.

Связанный контент