Если вы не возражаете против некоторых пользовательских сценариев, вы можете использовать OverlayFS (, включенную в ядро Linux с 2014 года ).
OverlayFS накладывает два местоположения файловой системы друг на друга :точка монтирования наложения показывает все из lower
, если только она не была изменена или затенена чем-либо в upper
. Все изменения точки монтирования оверлея записываются в upper
; lower
никогда не трогали.
Кроме того, для OverlayFS требуется каталог work
, который четко не задокументирован, но, по-видимому, служит временной областью перед переносом изменений в upper
.
Используя это, вы можете создать тип контейнера, который вы ищете (см. ниже возможные крайние случаи):
mkdir -p /var/tmp/myoverlay/{upper,work,mount}
mount -t overlay -o lowerdir=/,upperdir=/var/tmp/myoverlay/upper,workdir=/var/tmp/myoverlay/work overlayfs /var/tmp/myoverlay/mount
Чтобы «войти» в контейнер, вы можете использовать командуchroot
(«изменить корневой каталог» )для запуска командной (оболочки или другой )внутри вновь созданной/var/tmp/myoverlay/mount
:
chroot /var/tmp/myoverlay/mount
# or
chroot /var/tmp/myoverlay/mount /usr/bin/apt moo # paths are relative to the new root directory
Обратите внимание, что этого может быть недостаточно для программ, которые пытаются получить доступ к аппаратным устройствам, псевдо--терминалам, процессам или системным функциям, :которые предоставляются ядром как специальные монтируемые файловые системы — см. вывод из mount
ниже:
proc on /proc type proc
sysfs on /sys type sysfs
udev on /dev type devtmpfs
devpts on /dev/pts type devpts
Вы можете смонтировать их в точку монтирования наложения (перед входом в нее):
mount -t proc proc /var/tmp/myoverlay/mount/proc
mount -t sysfs sys /var/tmp/myoverlay/mount/sys
mount -t devtmpfs dev /var/tmp/myoverlay/mount/dev
mount -t devpts devpts /var/tmp/myoverlay/mount/dev/pts
Обратите внимание, что это даст вашему контейнеру больше доступа к системе, чем вам хотелось бы. В конечном счете, вам нужно точно знать свой вариант использования, чтобы решить, достаточно ли отделена оверлейная файловая система от вашей обычной системы для этого конкретного варианта использования.
Могут возникнуть дополнительные трудности, в зависимости от схемы вашей файловой системы :каталог lower
берется как есть, без каких-либо дополнительных файловых систем, смонтированных под ним. Если, например, ваша /home
является отдельной файловой системой, OverlayFS покажет вам только пустую точку монтирования в /home
.
В этих случаяхвам нужно будет создать отдельные оверлеи для каждой из этих точек монтирования, а затем смонтировать дополнительные оверлеи в корневой оверлей.
В этот момент вы приближаетесь к сценарию, в котором надлежащая виртуализация обычно является более разумным выбором.
У Fish нет возможности отключить это. Причина, по которой в настоящее время существует возможность отключить ?
, заключается в том, что глобус ?
устарел и будет полностью удален в будущем. Для &
такого плана нет.
Что вы можете сделать, так это добавить привязку, которая вставляет \&
при нажатии &
. Что-то вроде
bind \& 'commandline -i "\&"'
Конечно, это означает, что вам придется выяснить, как вставить фактическое &
, если вы действительно хотите его использовать.