Странное поведение pivot_root(".", ".") в пространстве имён mount

Функция перегрузки exit()не подходит для сценария ^D. Итак, давайте поговорим о trap.

В вашем предложении elseдолжны быть некоторые вещи, которые могут либо удерживать bash, либо игнорировать сигнал выхода. Я тоже не знаю, как это сделать.

Но сейчас, как вариант, я думаю, вы можете повторно -открыть bash.

Если вы замените пункт elseэтим:

echo
history -a
bash

И затем, если вы отмените выход в командной строке, будет повторно -открыт новый bash, и он будет выглядеть так, как будто ничего не произошло, как и в старом.

У этого подхода есть недостаток: вы потеряете присвоения переменных, которые вводили ранее, возможно, мы сможем над этим поработать. Но если вас это устраивает, то это оно.

В любом случае вы можете изменить этот код в соответствии с вашими потребностями.

2
08.03.2020, 18:40
2 ответа

Похоже на добросовестную -ошибку...

Проверьте с последним ядром из вашего дистрибутива и сообщите об этом со всеми подробностями (прикрепите тестовую программу! ).

-3
28.04.2021, 23:21

pivot_root(new_root, put_old)перемещает старый корневой каталог вызывающего процесса (, который должен быть корнем монтирования ), в put_oldи помещает new_rootна его место. Затем он устанавливает текущий каталог и корень каждого процесса, который был установлен в старом корневом каталоге, равным new_root.

Итак, после pivot_root(".", ".")новый корневой каталог смонтирован поверх старого корневого каталога.

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

Это не экранирование пространства имен монтирования.

3
28.04.2021, 23:21

Теги

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