工作中應(yīng)用篩選日志信息輸出到某個文件,針對性查看日志文件

創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的紫金網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
語法:
cat 原單詞concatenate(用途是連接文件或標(biāo)準(zhǔn)輸入并打印。)
cat 命令用于將所有文件內(nèi)容打印到屏幕上。
語法:
使用xshell連接linux
進(jìn)入 /root 目錄
新建 catTest目錄
進(jìn)入 catTest 目錄
新建 a.txt 文件
ls -l /root a.txt
cat a.txt
ls /root a.txt
cat a.txt
ls -l /root a.txt
cat a.txt
tee用于把命令結(jié)果打印在屏幕上并同時保存到文件。
tee用法
描述:從標(biāo)準(zhǔn)輸入中讀取并同時寫入到標(biāo)準(zhǔn)輸出和指定的文件上
選項:
-a,--append:不覆蓋,而是追加輸出到指定的文件中
-i,--ignore-interrupts:忽略中斷信息
若指定的輸出文件為'-',則再次輸出到標(biāo)準(zhǔn)輸出上
實例:
tee Example.txt #將標(biāo)準(zhǔn)輸入中輸入的內(nèi)容同時輸出到Example.txt和標(biāo)準(zhǔn)輸出上
實踐:
例如 ifconfig | tee ifconfig.log
查看iconfig.log
注:
標(biāo)準(zhǔn)輸入一般有鍵盤和其它文件,標(biāo)準(zhǔn)輸出有屏幕等。tee只能進(jìn)行標(biāo)準(zhǔn)輸入的輸出,對于錯誤輸入是不能輸出的。
在調(diào)試腳本時,想要每個命令的執(zhí)行過程都輸出到屏幕或者文件中,以便后續(xù)查看,如何操作呢?首先腳本第一行要寫為“#!/bin/bash -x”,這樣會把每個命令的執(zhí)行記錄都輸出到屏幕,若還要輸出到指定文件,要用到tee,但tee只能進(jìn)行標(biāo)準(zhǔn)輸入,對于標(biāo)準(zhǔn)輸入和錯誤輸入要用到下式:
./filename.sh 21 | tee output.log? ?或者直接 bash -x ./filename.sh?21 | tee output.log
今天調(diào)試一個bash,要把屏幕的輸出結(jié)果存到log文件中,開始輸入$bash -x ./test.sh log 結(jié)果發(fā)現(xiàn)log里只存放了程序的執(zhí)行結(jié)果,后來在cu的一篇帖子里?tid=264380highlight=bash得到了啟發(fā),bash -x的調(diào)試信息是輸出到2號流中的,所以解決方案為bash -x ./test.sh 21 | tee log 想起以前要存放執(zhí)行make的結(jié)果時也遇到類似問題,總結(jié)如下:
1、管道符的“I”的作用只是把前一個程序的標(biāo)準(zhǔn)輸出流(stdout)的數(shù)據(jù)作為后一個程序的標(biāo)準(zhǔn)輸入流stdin的數(shù)據(jù),如不進(jìn)行重定向,則其他輸出流的信息是無法傳給后面的程序的
2、屏幕得到的信息不一定是從程序的標(biāo)準(zhǔn)輸出來的,也包括標(biāo)準(zhǔn)錯誤輸出流stderr中的信息
3、有些程序(特別是象bash、make這樣執(zhí)行了其他程序的程序)的設(shè)計者為了省事,把一些正常情況的信息也放在stderr中輸出(即使程序本身并無錯誤),而stdout用來輸出被調(diào)用程序的執(zhí)行時信息,造成了用戶的誤解簡單編寫了一下腳本,通過ssh登陸在命令行下運(yùn)行正常,可是將腳本添加到crontab中就不正常。想記錄一下輸出信息,分析一下錯誤原因。將腳本通過使用info.log 重定向輸出,結(jié)果發(fā)現(xiàn)一些在命令行下可以看到的文本信息沒有記錄到info.log文件中,研究了一下,那些輸出估計是輸出到了標(biāo)準(zhǔn)錯誤上。
研究了一下通常添加命令后面幾個輸出含義
■ /dev/null 輸出到空設(shè)備,表示丟掉輸出信息。
■ 21將輸出到標(biāo)準(zhǔn)錯誤的信息輸出到標(biāo)準(zhǔn)輸出設(shè)備(通常是屏幕)有3個默認(rèn)的i/o,
■ 0是標(biāo)準(zhǔn)輸入,一般是鍵盤
■ 1是標(biāo)準(zhǔn)輸出,一般是屏幕
■ 2是標(biāo)準(zhǔn)錯誤,有時候屏幕上可以看到,但是重定向的文件中看不到的就是它了
具體參數(shù)及講解如下:
print命令的格式是:
print xxx
p xxx
1. print 操作符
@
是一個和數(shù)組有關(guān)的操作符,在后面會有更詳細(xì)的說明。
::
指定一個在文件或是一個函數(shù)中的變量。
{}
表示一個指向內(nèi)存地址的類型為type的一個對象。
2. 察看內(nèi)容
全局變量(所有文件可見的)
靜態(tài)全局變量(當(dāng)前文件可見的)
局部變量(當(dāng)前Scope可見的)
如果你的局部變量和全局變量發(fā)生沖突(也就是重名),一般情況下是局部變量會隱藏全局變量。如果此時你想查看全局變量的值時,你可以使用“::”操作符:
file::variable
function::variable
eg:
查看文件f2.c中的全局變量x的值:
gdb) p 'f2.c'::x
注:如果你的程序編譯時開啟了優(yōu)化選項,那么在用GDB調(diào)試被優(yōu)化過的程序時,可能會發(fā)生某些變量不能訪問,或是取值錯誤碼的情況。對付這種情況時,需要在編譯程序時關(guān)閉編譯優(yōu)化。GCC,你可以使用“-gstabs” 選項來解決這個問題。
3. 察看數(shù)組
(1)動態(tài)數(shù)組:
p *array@len
array:數(shù)組的首地址,len:數(shù)據(jù)的長度
eg:
(gdb) p *array@len
$1 = {2, 4, 6, 8, 10}
(2)靜態(tài)數(shù)組
可以直接用print數(shù)組名,就可以顯示數(shù)組中所有數(shù)據(jù)的內(nèi)容了。
4. 輸出格式
x 按十六進(jìn)制格式顯示變量。
d 按十進(jìn)制格式顯示變量。
u 按十六進(jìn)制格式顯示無符號整型。
o 按八進(jìn)制格式顯示變量。
t 按二進(jìn)制格式顯示變量。
a 按十六進(jìn)制格式顯示變量。
c 按字符格式顯示變量。
f 按浮點數(shù)格式顯示變量。
eg:
(gdb) p i
$21 = 101
(gdb) p/a i
$22 = 0x65
(gdb) p/c i
$23 = 101 'e'
5. 察看內(nèi)存
使用examine(簡寫x)來查看內(nèi)存地址中的值。語法:
x/
n、f、u是可選的參數(shù)。
(1)n 是一個正整數(shù),表示顯示內(nèi)存的長度,也就是說從當(dāng)前地址向后顯示幾個地址的內(nèi)容。
(2)f 表示顯示的格式,參見上面。如果地址所指的是字符串,那么格式可以是s,如果地十是指令地址,那么格式可以是i。
(3)u 表示從當(dāng)前地址往后請求的字節(jié)數(shù),如果不指定的話,GDB默認(rèn)是4個bytes。u參數(shù)可以用下面的字符來代替,b表示單字節(jié),h表示雙字節(jié),w表示四字 節(jié),g表示八字節(jié)。當(dāng)我們指定了字節(jié)長度后,GDB會從指內(nèi)存定的內(nèi)存地址開始,讀寫指定字節(jié),并把其當(dāng)作一個值取出來。
eg:
x/3uh 0x54320 :從內(nèi)存地址0x54320讀取內(nèi)容,h表示以雙字節(jié)為一個單位,3表示三個單位,u表示按十六進(jìn)制顯示。
6. 察看寄存器
(1)要查看寄存器的值,很簡單,可以使用如下命令:
info registers
(2)查看寄存器的情況。(除了浮點寄存器)
info all-registers
(3)查看所有寄存器的情況。(包括浮點寄存器)
info registers
(4)查看所指定的寄存器的情況。
寄存器中放置了程序運(yùn)行時的數(shù)據(jù),比如程序當(dāng)前運(yùn)行的指令地址(ip),程序的當(dāng)前堆棧地址(sp)等等。你同樣可以使用print命令來訪問寄存器的情況,只需要在寄存器名字前加一個$符號就可以了。如:p $eip。
7. display自動顯示的變量
(1)格式:display[/i|s] [expression | addr]
eg:
display/i $pc
$pc是GDB的環(huán)境變量,表示著指令的地址,/i則表示輸出格式為機(jī)器指令碼,也就是匯編。于是當(dāng)程序停下后,就會出現(xiàn)源代碼和機(jī)器指令碼相對應(yīng)的情形,這是一個很有意思的功能。
(2)其他
undisplay
delete display
刪除自動顯示,dnums意為所設(shè)置好了的自動顯式的編號。如果要同時刪除幾個,編號可以用空格分隔,如果要刪除一個范圍內(nèi)的編號,可以用減號表示(如:2-5)
disable display
enable display
disable和enalbe不刪除自動顯示的設(shè)置,而只是讓其失效和恢復(fù)。
info display
查看display設(shè)置的自動顯示的信息。GDB會打出一張表格,向你報告當(dāng)然調(diào)試中設(shè)置了多少個自動顯示設(shè)置,其中包括,設(shè)置的編號,表達(dá)式,是否enable。
8. 設(shè)置
(1)set print address
set print address on
打開地址輸出,當(dāng)程序顯示函數(shù)信息時,GDB會顯出函數(shù)的參數(shù)地址。
(2)set print array
set print array on
打開數(shù)組顯示,打開后當(dāng)數(shù)組顯示時,每個元素占一行,如果不打開的話,每個元素則以逗號分隔。
(3)set print elements
這個選項主要是設(shè)置數(shù)組的,如果你的數(shù)組太大了,那么就可以指定一個來指定數(shù)據(jù)顯示的最大長度,當(dāng)?shù)竭_(dá)這個長度時,GDB就不再往下顯示了。如果設(shè)置為0,則表示不限制。
(4)set print null-stop
如果打開了這個選項,那么當(dāng)顯示字符串時,遇到結(jié)束符則停止顯示。這個選項默認(rèn)為off。
(5)set print pretty on
如果打開printf pretty這個選項,那么當(dāng)GDB顯示結(jié)構(gòu)體時會比較漂亮。如:
$1 = {
next = 0x0,
flags = {
sweet = 1,
sour = 1
},
meat = 0x54 "Pork"
}
(6)set print union
設(shè)置顯示結(jié)構(gòu)體時,是否顯式其內(nèi)的聯(lián)合體數(shù)據(jù)。
(7)set print object
在C++中,如果一個對象指針指向其派生類,如果打開這個選項,GDB會自動按照虛方法調(diào)用的規(guī)則顯示輸出,如果關(guān)閉這個選項的話,GDB就不管虛函數(shù)表了。
printf 是linux 下的格式化輸出命令。
有點兒類似于python 和c 語言的printf 命令,但是應(yīng)該沒有c語言的那么強(qiáng)大.。printf 命令常用于linux 下的awk 編程, 平時使用輸出時用 echo 即可。pintf 命令不能接受管道符參數(shù),也不能之直接跟文件名, 但是可以跟系統(tǒng)命令執(zhí)行的結(jié)果,如`df` 或者 $(cat /etc/passwd)。
一、命令格式: printf ?'輸出類型轉(zhuǎn)義符' 輸出內(nèi)容。
二、常用輸出格式:
1、%ns : ?輸出字符串; 輸出n位的字符串;
2、 %ni: ????輸出整數(shù): 輸出n位的整數(shù);
3、%m.nf: ?輸出浮點數(shù): m位整數(shù) 和 n位小數(shù);
三、常用轉(zhuǎn)義符:
1、\t ?水平tab 鍵;
2、\v ?垂直tab 鍵;
3、\n ?換行;
4、\r ??回車, Enter鍵;
5、\f ??清除屏幕;
6、\b ?輸出退格鍵;
7、\a ?輸出警告聲音。
注意:
1. printf 命令默認(rèn)輸出結(jié)果沒有換行符,需要手工添加\n。
2. printf 命令后面不能接受管道符參數(shù), 如: ?df ?| print ?'%s' 是錯誤的。
3. print ?命令后面也不能直接跟文件名, 如: print '%5s' ?/etc/passwd ?是錯誤的。
4. print ?命令后可以跟系統(tǒng)命令執(zhí)行的結(jié)果, 如: print '%s' ?$(cat /etc/password)'。
分享標(biāo)題:linux打印屏幕命令是,linux 打印機(jī)命令
本文鏈接:http://chinadenli.net/article0/dsgejio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、手機(jī)網(wǎng)站建設(shè)、品牌網(wǎng)站制作、Google、移動網(wǎng)站建設(shè)、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)