Более простая серия операторов оболочки для разделения связанного DjVU:
mkdir -- 'mydoc/' &&
djvmcvt -i 'mydoc.djvu' 'mydoc/' 'new-mydoc-index.djvu'
chroot: failed to run command ‘ls’: No such file or directory
Чтобы выполнить любую команду внутри chroot, вам нужно, чтобы эта программа была доступна в chroot (поскольку она не может использовать программу, установленную в /
файловой системы.
Самый простой способ — скопируйте /usr/bin/ls
из в /home/kuba/projects/jcubic/leash/usr/bin/
(вам также понадобятся зависимые общие библиотеки: ldd /usr/bin/ls
).
Можно запустить ls
в другом корне, но команда ls
и все файлы, от которых она зависит, должны находиться внутри этого корня. Невозможно запустить команду ls
, а затем внутри этого процесса изменить корень :ls
, не имеющий этой функции.
Весь смысл chroot заключается в том, чтобы ограничить видимость файлов теми файлами, которые находятся в определенном каталоге. Когда вы запускаете chroot ~/projects/jcubic/leash ls
, команда chroot
изменяет корень своего собственного процесса (изменение корневого каталога влияет только на процесс, который это делает, и любой процесс, который он впоследствии запускает ), затем пытается запустить исполняемый файл файл с именем ls
в каталоге на пути поиска. Поскольку корень теперь ~/projects/jcubic/leash
, исполняемый файл должен находиться в каталоге, таком как ~/projects/jcubic/leash/bin
.
Если вы хотите иметь обычную систему с обычными командами в chroot, вам необходимо ее установить. Могут помочь такие инструменты, как debootstrap(для установки системы Debian )или инструменты подготовки, такие как Docker (, который настраивает среду с chroot и другими способами ).
Если вам нужна только команда ls
, вам все равно потребуется скопировать больше, чем ls
. Чтобы запустить ls
, вам нужно скопировать команду ls
, а также все файлы, от которых она зависит. Поскольку ls
является динамически компонуемой программой, вам потребуется ее динамический загрузчик, а также все динамические библиотеки, от которых она зависит. Запустите ldd /bin/ls
, чтобы получить список необходимых динамических библиотек. Например:
mkdir -p bin lib/x86_64-linux-gnu
rsync -a /bin/ls bin/
rsync -a /lib/x86_64-linux-gnu/ lib/x86_64-linux-gnu/
chroot. ls
В качестве альтернативы, более простой способ изучения состоит в том, чтобы получить статически -связанный двоичный файл, например BusyBox (, доступный в Debian и его производных в виде busybox-static
пакета ).
cp /bin/busybox.
chroot../busybox ls