日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
如何使用Linux獲取控制臺(tái)輸出(linux獲取控制臺(tái)輸出)

Linux是一種開(kāi)源操作系統(tǒng),它被廣泛用于服務(wù)器,工作站和個(gè)人計(jì)算機(jī)。Linux的控制臺(tái)輸出是在終端窗口中打印的文本信息,它提供了有關(guān)系統(tǒng)狀態(tài),程序執(zhí)行和錯(cuò)誤信息的有用信息。

10年的涼州網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。網(wǎng)絡(luò)營(yíng)銷(xiāo)推廣的優(yōu)勢(shì)是能夠根據(jù)用戶(hù)設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整涼州建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)公司從事“涼州網(wǎng)站設(shè)計(jì)”,“涼州網(wǎng)站推廣”以來(lái),每個(gè)客戶(hù)項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

本文將討論如何在Linux中獲取控制臺(tái)輸出。

1. 查看系統(tǒng)日志

Linux的系統(tǒng)日志是一個(gè)重要的工具,可以幫助您診斷和解決系統(tǒng)問(wèn)題。您可以通過(guò)以下命令查看系統(tǒng)日志:

“`

sudo cat /var/log/syslog

“`

這將打印出系統(tǒng)的所有日志消息。您可以使用grep命令過(guò)濾或搜索特定的日志消息:

“`

sudo cat /var/log/syslog | grep

“`

2. 監(jiān)視日志

如果您需要監(jiān)視系統(tǒng)日志的特定部分,可以使用tl命令。該命令將輸出文件的最后幾行,因此它對(duì)于實(shí)時(shí)監(jiān)視日志非常有用。以下是使用tl命令監(jiān)視系統(tǒng)日志的示例:

“`

sudo tl -f /var/log/syslog

“`

3. 查找文件日志

除了系統(tǒng)日志外,應(yīng)用程序也會(huì)生成日志文件。如果您需要查看應(yīng)用程序的日志,可以查找它們并打印它們的內(nèi)容。以下是查找和打印文件日志的示例:

“`

sudo find /var/log -name “” -print0 | xargs -0 cat

“`

將“替換為要查找和打印的日志文件的名稱(chēng)。

4. 查看正在運(yùn)行的進(jìn)程

在Linux中查看正在運(yùn)行的進(jìn)程是一個(gè)常見(jiàn)的任務(wù)。您可以使用以下命令列出所有正在運(yùn)行的進(jìn)程:

“`

ps -ef

“`

這將打印所有正在運(yùn)行的進(jìn)程的詳細(xì)信息,包括PID(進(jìn)程ID),PPID(父進(jìn)程ID)和CPU利用率等。

5. 查看進(jìn)程的輸出

在Linux中,某些進(jìn)程可在控制臺(tái)上輸出診斷信息和錯(cuò)誤消息。您可以使用以下命令捕獲正在運(yùn)行的進(jìn)程的輸出:

“`

sudo strace -p

“`

將“替換為要捕獲輸出的進(jìn)程的PID。

6. 捕獲Shell輸出

如果您在Linux中使用的是Bash或其他Shell,可以使用以下命令捕獲Shell的所有輸出:

“`

script -a

“`

將“替換為要保存輸出的文件名稱(chēng)。執(zhí)行此命令后,Shell的所有輸出都將被寫(xiě)入指定的文件中。

7. 檢查內(nèi)核日志

內(nèi)核日志包含有關(guān)系統(tǒng)硬件和驅(qū)動(dòng)程序的重要信息。您可以使用以下命令查看內(nèi)核日志:

“`

sudo dmesg

“`

這將打印內(nèi)核日志的所有消息。您可以使用grep命令過(guò)濾或搜索特定的日志消息:

“`

sudo dmesg | grep

“`

相關(guān)問(wèn)題拓展閱讀:

  • linux kernel 沒(méi)有輸出信息 怎么調(diào)試

linux kernel 沒(méi)有輸出信息 怎么調(diào)試

內(nèi)核中的bug也是多種多樣的。它們的產(chǎn)生有無(wú)數(shù)的原因,同時(shí)表象也變化多端。從隱藏在源代碼中的錯(cuò)誤到展現(xiàn)在目擊者面前的bug,其發(fā)作往往是一系列連鎖反應(yīng)的事件才可能出發(fā)的。雖然內(nèi)核調(diào)試有一定的困難,但是通過(guò)你的努力和理解,說(shuō)不定你會(huì)喜歡上這樣的挑戰(zhàn)。

最近工作在調(diào)試u虛擬串口,讓其作為kernel啟動(dòng)的調(diào)試串口,以及user空間的輸入輸出控制臺(tái)。

利用這個(gè)機(jī)會(huì),學(xué)習(xí)下printk如何選擇往哪個(gè)console輸出以及user空間下控制臺(tái)如何選擇,記錄與此,與大家共享,也方便自己以后翻閱。

Kernel版本號(hào):3.4.55

依照我的思路(還是時(shí)間順序)分了4部分,指定kernel調(diào)試console , kernel下printk console的選擇 ,kernel下console的注冊(cè),user空間console的選擇。

一 指定kernel調(diào)試console

首先看kernel啟動(dòng)時(shí)如何獲取和處理指定的console參數(shù)。

kernel的啟動(dòng)參數(shù)cmdline可以指定調(diào)試console,如指定‘console=ttyS0,115200’,

kernel如何解析cmdline,我之前寫(xiě)了一篇博文如下:

根據(jù)之前的分析,cmdline中有console=xxx,start_kernel中parse_args遍歷.init.setup段所有obs_kernel_param。

kernel/printk.c中注冊(cè)了‘console=’的解析函數(shù)console_setup(注冊(cè)了obs_kernel_param),所以匹配成功,會(huì)調(diào)用console_setup來(lái)解析,如下:

view plain copy

static int __init console_setup(char *str)

{

char buf.name) + 4>; /* 4 for index */

char *s, *options, *brl_options = NULL;

int idx;

#ifdef CONFIG_A11Y_BRAILLE_CONSOLE

if (!memcmp(str, “brl,”, 4)) {

brl_options = “”;

str += 4;

} else if (!memcmp(str, “brl=”, 4)) {

brl_options = str + 4;

str = strchr(brl_options, ‘,’);

if (!str) {

printk(KERN_ERR “need port name after brl=\n”);

return 1;

}

*(str++) = 0;

}

#endif

/*

* Decode str into name, index, options.

*/

if (str >= ‘0’ && str = ‘0’ && *s name, name, sizeof(c->name));

c->options = options;

#ifdef CONFIG_A11Y_BRAILLE_CONSOLE

c->brl_options = brl_options;

#endif

c->index = idx;

return 0;

}

kernel利用結(jié)構(gòu)體數(shù)組console_cmdline,最多可支持8個(gè)cmdline傳入的console參數(shù)。

__add_preferred_console將name idx options保存到數(shù)組下一個(gè)成員console_cmdline結(jié)構(gòu)體中,如果數(shù)組中已有重名,則不添加,并置selected_console為最新添加的console_cmdline的下標(biāo)號(hào)。

比如cmdline中有“console=ttyS0,console=ttyS1,9600”

則在console_cmdline數(shù)組中console_cmdline代表ttyS0,console_cmdline代表ttyS1,而selected_console=1.

二 kernel下printk console的選擇

kernel下調(diào)試信息是通過(guò)printk輸出,如果要kernel正常打印,則需要搞明白printk怎么選擇輸出的設(shè)備。

關(guān)于printk的實(shí)現(xiàn)原理,我在剛工作的時(shí)候?qū)戇^(guò)一篇博文,kernel版本是2.6.21的,但是原理還是一致的,可供參考:

printk首先將輸出內(nèi)容添加到一個(gè)kernel緩沖區(qū)中,叫l(wèi)og_buf,log_buf相關(guān)代碼如下:

view plain copy

#define MAX_CMDLINECONSOLES 8

static struct console_cmdline console_cmdline;

static int selected_console = -1;

static int preferred_console = -1;

int console_set_on_cmdline;

EXPORT_SYMBOL(console_set_on_cmdline);

/* Flag: console code may call schedule() */

static int console_may_schedule;

#ifdef CONFIG_PRINTK

static char __log_buf;

static char *log_buf = __log_buf;

static int log_buf_len = __LOG_BUF_LEN;

static unsigned logged_chars; /* Number of chars produced since last read+clear operation */

static int saved_console_loglevel = -1;

log_buf的大小由kernel menuconfig配置,我配置的CONFIG_LOG_BUF_SHIFT為17,則log_buf為128k。

printk內(nèi)容會(huì)一直存在log_buf中,log_buf滿(mǎn)了之后則會(huì)從頭在開(kāi)始存,覆蓋掉原來(lái)的數(shù)據(jù)。

根據(jù)printk的實(shí)現(xiàn)原理,printk最后調(diào)用console_unlock實(shí)現(xiàn)log_buf數(shù)據(jù)刷出到指定設(shè)備。

這里先不關(guān)心printk如何處理log buf數(shù)據(jù)(比如添加內(nèi)容級(jí)別),只關(guān)心printk如何一步步找到指定的輸出設(shè)備,根據(jù)printk.c代碼,可以找到如下線(xiàn)索。

printk->vprintk->console_unlock->call_console_drivers->_call_console_drivers->_call_console_drivers->__call_console_drivers

看線(xiàn)索更底層__call_console_drivers代碼。如下:

view plain copy

/*

* Call the console drivers on a range of log_buf

*/

static void __call_console_drivers(unsigned start, unsigned end)

{

struct console *con;

for_each_console(con) {

if (exclusive_console && con != exclusive_console)

continue;

if ((con->flags & CON_ENABLED) && con->write &&

(cpu_online(p_processor_id()) ||

(con->flags & CON_ANYTIME)))

con->write(con, &LOG_BUF(start), end – start);

}

}

for_each_console定義如下:

view plain copy

/*

* for_each_console() allows you to iterate on each console

*/

#define for_each_console(con) \

for (con = console_drivers; con != NULL; con = con->next)

遍歷console_drivers鏈表所有console struct,如果有exclusive_console,則調(diào)用與exclusive_console一致console的write,

如果exclusive_console為NULL,則調(diào)用所有ENABLE的console的write方法將log buf中start到end的內(nèi)容發(fā)出。

可以看出,execlusive_console來(lái)指定printk輸出唯一console,如果未指定,則向所有enable的console寫(xiě)。

默認(rèn)情況下execlusive_console=NULL,所以printk默認(rèn)是向所有enable的console寫(xiě)!

只有一種情況是指定execlusive_console,就是在console注冊(cè)時(shí),下面會(huì)講到。

到這里就很明了了,kernel下每次printk打印,首先存log_buf,然后遍歷console_drivers,找到合適console(execlusive_console或所有enable的),刷出log。

關(guān)于linux獲取控制臺(tái)輸出的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開(kāi)通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)。專(zhuān)業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。


當(dāng)前題目:如何使用Linux獲取控制臺(tái)輸出(linux獲取控制臺(tái)輸出)
本文URL:http://www.5511xx.com/article/cooepdp.html