मैं रनिंग कर्नेल द्वारा उपयोग किए जाने वाले बूट मापदंडों को कैसे ढूँढ सकता हूँ?


52

क्या कर्नेल बूट क्या मापदंडों के साथ पता लगाने का एक तरीका है?

उदाहरण के लिए अगर मैं ग्रब कमांड लाइन पर noexec = off निर्दिष्ट करता हूं? क्या मैं सिस्टम को बूट करने के बाद इस तरह की जानकारी देख सकता हूँ?


जवाबों:


70

आप दौड़ सकते हैं cat /proc/cmdline

उदाहरण:

[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मापदंडों के बीच लाइनब्रेक प्राप्त करने का प्रयास करें ।
mwfearnley

10

वैकल्पिक तरीका यह है कि dmesg(5 लाइन यहाँ) के आउटपुट की जाँच करें:

$ 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

लेकिन ध्यान दें कि यह काम नहीं कर सकता है अगर कई चीजें लॉग इन की गई हों (जैसे कि मशीन लंबे समय से चल रही है) क्योंकि प्रारंभिक स्टार्टअप लाइनों को रिंगबफ़र से बाहर धकेल दिया गया हो सकता है।


1

दरअसल, पैरामीटर कर्नेल के बीच __setup_startऔर बीच में स्थित होता है __setup_end। निम्नलिखित कोड में, p->strपैरामीटर नाम है

निम्नलिखित कर्नेल कोड 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;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.