Создайте цикл в файловой системе Linux

Здесь вам нужно вернуть son ()

def parent(x="Hello"):
    text = x

    def son():
        print(text)

    return son # return son()

print(parent())

Здесь вы получите результат разницы, потому что ссылаетесь на akin ()

def parent(x="Hello"):
    text = x

    def son():
        print(text)

    return son

akin = parent()
akin() # print(akin) will get the same output of first program

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

8
задан Tripp Kinetics 29 October 2015 в 20:10
поделиться

4 ответа

Некоторые другие респонденты уже ответили, как настроить монтирование с помощью устройства обратной связи, но вы специально спросили о bind крепления, которые немного отличаются. Если вы хотите использовать bind mount, вы просто указываете - bind в команде mount. Например:

mount --bind /original/path /new/path

Это сделает расположение файловой системы доступным в / original / path , а также , доступном через / new / path . Обратите внимание, что это не будет после точек монтирования! Например, предположим, что у меня есть следующие точки монтирования:

/something
/something/underneath/that

Теперь предположим, что я сделал монтирование bind для / что-то :

mount --bind /something /new_something

Я буду иметь доступ к файлам, подобным / что-то / myfile по пути / new_something / myfile . Но я не смогу получить доступ к файлам, таким как / что-то / под / этим / другим файлом , по пути / new_something / под / этим / другим файлом . Вы должны установить отдельное монтирование bind для каждой файловой системы; или если у вас относительно новое ядро, вы можете использовать rbind монтирования, которые делают следуют точкам монтирования:

mount --rbind /something /new_something

Одно предупреждение о rbind монтирует: они не делают обрабатывать случай, когда файловая система монтируется после установки rbind . То есть, предположим, у меня есть монтирование, подобное этому:

/something

Затем я настраиваю свой rbind , как указано выше, и , затем я монтирую / что-то / под /, что : rbind волшебным образом не сделает новое крепление видимым через местоположение rbind . Также имейте в виду, что, по-видимому, из-за ошибки в ядре вы не можете размонтировать монтирование rbind .

Кроме того, на случай, если вы имели в виду «Как настроить монтирование bind с помощью mount (2) системный вызов? ": вы должны указать флаг MS_BIND (определенный в mount.h ) при вызове mount (2) для обычного связывания крепление. Для монтирования rbind необходимо указать MS_BIND и флаг недокументирования MS_REC (определенный в linux / fs.h ). [129 Надеюсь, что это помогает,

Эрик Мелски

h ) при вызове mount (2) для обычного bind mount. Для монтирования rbind необходимо указать MS_BIND и флаг недокументирования MS_REC (определенный в linux / fs.h ). [129 Надеюсь, что это помогает,

Эрик Мелски

h ) при вызове mount (2) для обычного bind mount. Для монтирования rbind необходимо указать MS_BIND и флаг недокументирования MS_REC (определенный в linux / fs.h ). [129 Надеюсь, что это помогает,

Эрик Мелски

6
ответ дан 5 December 2019 в 23:17
поделиться

Похоже, что все ответы до сих пор касаются монтажа на петлевых устройствах, а не создания петли с использованием bind mounts .

Как вы, вероятно, обнаружили,

$ mkdir -p test/test
$ mount --bind test test/test

позволяет получить доступ только к test / test / test , и больше ничего. Даже

$ mount --rbind test test/test

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

То, что вы просили, невозможно, поскольку монтирование связывания не пересекается точки крепления Если вы действительно хотите смоделировать цикл файловой системы, попробуйте использовать монтирование с псевдосвязыванием, например localfs . Я не пробовал себя, он может заблокироваться при попытке прочитать файловую систему, предоставленную им самим. Только что я попытался экспортировать дерево NFS с crossmnt и смонтировать его под себя,

1
ответ дан 5 December 2019 в 23:17
поделиться
mount /path/to/device /path/to/mount/location -o loop

где / path / to / device - это путь к разделу, который вы хотите смонтировать, или путь к образ диска, а / path / to / mount / location - это путь к папке, в которую вы хотите смонтировать устройство / образ в

, вам также может потребоваться указать тип файловой системы, например, такой (в которой используется fat16 / fat32). ):

mount /path/to/device /path/to/mount/location -o loop -t vfat
-1
ответ дан 5 December 2019 в 23:17
поделиться

Вы также можете создать его с нуля:

Сначала создайте файл изображения и инициализируйте его

dd if=/dev/zero of=/tmp/loop.img bs=1024k count=$IMG_SIZE

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

mkfs.ext3 -F /tmp/loop.img

Смонтируйте новый образ

mkdir -p /mnt/image
mount /tmp/loop.img /mnt/image -o loop

Теперь вы можете создавать / копировать файлы и каталоги в новом образе.

Веселитесь,

Jeach!

-1
ответ дан 5 December 2019 в 23:17
поделиться
Другие вопросы по тегам:

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