C'è un modo per scoprire con quali parametri ha avviato il kernel?
Ad esempio, se specifico noexec = off nella riga di comando di grub? Posso vedere questo tipo di informazioni dopo che il sistema ha terminato l'avvio?
C'è un modo per scoprire con quali parametri ha avviato il kernel?
Ad esempio, se specifico noexec = off nella riga di comando di grub? Posso vedere questo tipo di informazioni dopo che il sistema ha terminato l'avvio?
Risposte:
Puoi correre cat /proc/cmdline
.
Esempio:
[01:31] ~ $ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-2.6.38-7-generic root=UUID=025c4231-b7bb-48bf-93e9-d20c5b5ce123 ro crashkernel=384M-2G:64M,2G-:128M quiet splash bootchart=disable acpi_enforce_resources=lax vga=792 vt.handoff=7
tr ' ' '\n' < /proc/cmdline
a ottenere interruzioni di riga tra i parametri.
Un modo alternativo è controllare l'output di dmesg
(riga 5 qui):
$ dmesg | grep "Command line"
[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-3.19.0-33-generic root=UUID=81dba11f-f76e-4ed4-8120-e6da6328b1ee ro
Tuttavia, ciò potrebbe non funzionare se molte cose sono state registrate (ad esempio se la macchina è in esecuzione da molto tempo) perché le linee di avvio iniziali potrebbero essere state espulse dal ringbuffer.
In realtà, il parametro si trova tra __setup_start
e __setup_end
nel kernel. Nel seguente codice, p->str
è il nome del parametro
Il seguente codice del kernel può essere trovato su linux-3.4.5 / init / main.c: 388
/* Check for early params. */
static int __init do_early_param(char *param, char *val)
{
const struct obs_kernel_param *p;
for (p = __setup_start; p < __setup_end; p++) {
if ((p->early && parameq(param, p->str)) ||
(strcmp(param, "console") == 0 &&
strcmp(p->str, "earlycon") == 0)
) {
if (p->setup_func(val) != 0)
printk(KERN_WARNING
"Malformed early option '%s'\n", param);
}
}
/* We accept everything at this stage. */
return 0;
}