Как сказать vim НЕ ПЕРЕЗАГРУЗИТЬ ФАЙЛ, когда я снова переключаюсь на него

Если / bin / bash является двоичным файлом с зависимостями разделяемых библиотек, эти зависимости должны быть разрешены внутри chroot.

В моей системе:

$ ldd $( command -v bash )
/usr/local/bin/bash:
        Start            End              Type Open Ref GrpRef Name
        0000115f08700000 0000115f08a0c000 exe  1    0   0      /usr/local/bin/bash
        00001161f6a2e000 00001161f6c88000 rlib 0    1   0      /usr/lib/libtermcap.so.14.0
        00001161bc41e000 00001161bc629000 rlib 0    1   0      /usr/local/lib/libintl.so.6.0
        000011614b1de000 000011614b4dd000 rlib 0    2   0      /usr/local/lib/libiconv.so.6.0
        00001161bd091000 00001161bd35b000 rlib 0    1   0      /usr/lib/libc.so.89.2
        000011612ef00000 000011612ef00000 rtld 0    1   0      /usr/libexec/ld.so

В отличие от:

$ ldd $( command -v sh )
/bin/sh:
        Start            End              Type Open Ref GrpRef Name
        000007ca3c446000 000007ca3c6c6000 dlib 1    0   0      /bin/sh

Я использую OpenBSD. Формат вывода ldd будет отличаться в системе Linux, но та же самая важная информация (какие библиотеки используются совместно и где они) также должна отображаться в Linux.

Когда я пытаюсь использовать очень упрощенный chroot, который содержит только / bin / sh и / bin / bash ( doas - это OpenBSD " sudo replace"):

$ doas chroot -u kk t /bin/sh
/bin/sh: No controlling tty (open /dev/tty: No such file or directory)
/bin/sh: warning: won't have full job control
$ /bin/bash
Abort trap

Обратите внимание, что я получил оболочку ( / bin / sh ), но / bin / bash не работает. Ошибка отличается от вашей, но, как я полагаю, имеет ту же причину. Выполнение / bin / bash напрямую с помощью команды chroot просто дает однословное сообщение «Прервать», опять же, предположительно из-за той же проблемы с библиотеками.

Заключение: chroot должен содержать хотя бы минимальную установку системы, включая файлы устройств и библиотеки, необходимые для запуска исполняемых файлов в ней.

Объяснение ошибки «Нет такого файла или каталога» в Linux:

Я был немного сбит с толку, почему в Linux возникла ошибка «Нет такого файла или каталога», поэтому я провел тест через strace .

Вызов execve () , который должен был запустить оболочку, возвращает ENOENT:

execve("/bin/bash", ["/bin/bash"], [/* 13 vars */]) = -1 ENOENT (No such file or directory)

... так что я подумал, что что-то не так с нахождением / bin / bash . Однако, прочитав руководство execve (2) , я увидел:

ENOENT Имя файла файла или скрипт или интерпретатор ELF не существует, или общая библиотека, необходимая для файла или переводчик не найден .

Итак, поехали.

1
15.07.2016, 19:05
0 ответов

Теги

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