Когда вы обновляете ядро, вы фактически обновляете пакет ядра . В большинстве дистрибутивов Linux это просто регистрирует пакет в менеджере пакетов, добавляет новые модули в /lib/modules
,добавьте initramfs и ядро под /boot
и, возможно, обновите записи загрузчика и некоторые другие действия. Обычно это не заменяет загруженное ядро в памяти.
При загрузке само ядро загружается в память. То есть, даже если файл был загружен из (, например./boot/vmlinuz
)исчезает, он не нужен после первоначальной загрузки ядра.
Даже если он был необходим для чего-то, (скажем, для отладочной информации )и был заменен, любой, у кого уже есть открытый дескриптор файла, все равно сможет использовать этот файл, поскольку резервные данные не будут удалены до тех пор, пока счетчик ссылок рассматриваемого inode не станет равным 0 (само ядро не нуждается в такой ссылке, поскольку оно уже загружено в память, в отличие от запуска процессов из исполняемых файлов пользовательского пространства ). Эти блоки обычно могут быть полностью освобождены с диска, если только вы не выполняете какую-либо пользовательскую -космическую программу для этого файла. Ядро Linux не выгружает свою собственную память и даже распаковывает себя на лету при запуске. Не существует способов /proc/.../exe
или /proc/.../fd
для доступа к загруженному /boot/vmlinuz — ядро может даже не смонтировать устройство, с которого оно было загружено, в ситуации сетевой загрузки или загрузки с USB -.
Обычно ядро не обновляется. Обычно это делается при перезагрузке или во время kexec
. То, что вы описываете , существует для ограниченных случаев использования, таких как kpatch , kgraft и ksplice , но в целом они могут использоваться только для небольших и целевых исправлений, а не для новых выпусков ядра основной ветки разработки.
Вы можете счесть это читерством, но вы можете установить либо:
LSD (LSDeluxe ), который является очень мощным обновлением/вариантом.
GNU Coreutils , инструменты, к которым вы привыкли. Или просто GNU ls .
Установить:
pkg install lsd
pkg install coreutils