日志一般是記載每天所做的工作。在計(jì)算機(jī)科學(xué)中飒硅,日志是指服務(wù)器等電腦設(shè)備或軟件的運(yùn)作記錄(Server log)运沦。在電腦設(shè)備和軟件出現(xiàn)問題時(shí)击孩,日志是我們在排查問題的一個(gè)重要依據(jù)掘而。查詢?nèi)罩臼怯脩粲涗洀目蛻舳耸盏剿袛?shù)據(jù)庫或操作系統(tǒng)的查詢挟冠,同時(shí)也包括了每一個(gè)客戶端的鏈接和斷開鏈接。
如今各種花式日志系統(tǒng)大行其道镣屹,但在此同時(shí)也不要忘記linux查看日志的基礎(chǔ)功能圃郊,今天就講講linux查看日志的常用基礎(chǔ)功能
? 1 less
1.1 less -N 日志文件名.log
less -N test.log然后輸入"/context"搜索context關(guān)鍵字
點(diǎn)擊鍵盤↑ ↓可以滾動(dòng),點(diǎn)擊 N 可以查看上一個(gè)女蜈,n可以查看下一個(gè)
1.2 less詳解
SUMMARY OF LESS COMMANDS
Commands marked with * may be preceded by a number, N.
Notes in parentheses indicate the behavior if N is given.
A key preceded by a caret indicates the Ctrl key; thus ^K is ctrl-K.
h H Display this help.
q :q Q :Q ZZ Exit.
---------------------------------------------------------------------------
MOVING
e ^E j ^N CR * Forward one line (or N lines).
y ^Y k ^K ^P * Backward one line (or N lines).
f ^F ^V SPACE * Forward one window (or N lines).
b ^B ESC-v * Backward one window (or N lines).
z * Forward one window (and set window to N).
w * Backward one window (and set window to N).
ESC-SPACE * Forward one window, but don't stop at end-of-file.
d ^D * Forward one half-window (and set half-window to N).
u ^U * Backward one half-window (and set half-window to N).
ESC-) RightArrow * Left one half screen width (or N positions).
ESC-( LeftArrow * Right one half screen width (or N positions).
F Forward forever; like "tail -f".
r ^R ^L Repaint screen.
R Repaint screen, discarding buffered input.
---------------------------------------------------
Default "window" is the screen height.
Default "half-window" is half of the screen height.
---------------------------------------------------------------------------
SEARCHING
/pattern * Search forward for (N-th) matching line.
?pattern * Search backward for (N-th) matching line.
n * Repeat previous search (for N-th occurrence).
N * Repeat previous search in reverse direction.
ESC-n * Repeat previous search, spanning files.
ESC-N * Repeat previous search, reverse dir. & spanning files.
ESC-u Undo (toggle) search highlighting.
&pattern * Display only matching lines
---------------------------------------------------
A search pattern may be preceded by one or more of:
^N or ! Search for NON-matching lines.
^E or * Search multiple files (pass thru END OF FILE).
^F or @ Start search at FIRST file (for /) or last file (for ?).
^K Highlight matches, but don't move (KEEP position).
^R Don't use REGULAR EXPRESSIONS.
---------------------------------------------------------------------------
HELP -- Press RETURN for more, or q when done
? 2 grep
2.1 統(tǒng)計(jì)文件或者文本中包含匹配字符串的行數(shù) -c 選項(xiàng)
grep -c "context" daily.log
2.2 使用正則表達(dá)式 -E 選項(xiàng)
grep -E "[1-9]+" daily.log
搜索以數(shù)字2開頭的行:
2.3 使用正則表達(dá)式 -E 選項(xiàng)
grep -l "text" file1 file2 file3...
2.4 grep詳解
用法: grep [選項(xiàng)]... PATTERN [FILE]...
在每個(gè) FILE 或是標(biāo)準(zhǔn)輸入中查找 PATTERN。
默認(rèn)的 PATTERN 是一個(gè)基本正則表達(dá)式(縮寫為 BRE)色瘩。
例如: grep -i 'hello world' menu.h main.c
正則表達(dá)式選擇與解釋:
-E, --extended-regexp PATTERN 是一個(gè)可擴(kuò)展的正則表達(dá)式(縮寫為 ERE)
-F, --fixed-strings PATTERN 是一組由斷行符分隔的定長字符串伪窖。
-G, --basic-regexp PATTERN 是一個(gè)基本正則表達(dá)式(縮寫為 BRE)
-P, --perl-regexp PATTERN 是一個(gè) Perl 正則表達(dá)式
-e, --regexp=PATTERN 用 PATTERN 來進(jìn)行匹配操作
-f, --file=FILE 從 FILE 中取得 PATTERN
-i, --ignore-case 忽略大小寫
-w, --word-regexp 強(qiáng)制 PATTERN 僅完全匹配字詞
-x, --line-regexp 強(qiáng)制 PATTERN 僅完全匹配一行
-z, --null-data 一個(gè) 0 字節(jié)的數(shù)據(jù)行,但不是空行
Miscellaneous:
-s, --no-messages suppress error messages
-v, --invert-match select non-matching lines
-V, --version display version information and exit
--help display this help text and exit
輸出控制:
-m, --max-count=NUM NUM 次匹配后停止
-b, --byte-offset 輸出的同時(shí)打印字節(jié)偏移
-n, --line-number 輸出的同時(shí)打印行號(hào)
--line-buffered 每行輸出清空
-H, --with-filename 為每一匹配項(xiàng)打印文件名
-h, --no-filename 輸出時(shí)不顯示文件名前綴
--label=LABEL 將LABEL 作為標(biāo)準(zhǔn)輸入文件名前綴
-o, --only-matching show only the part of a line matching PATTERN
-q, --quiet, --silent suppress all normal output
--binary-files=TYPE assume that binary files are TYPE;
TYPE is 'binary', 'text', or 'without-match'
-a, --text equivalent to --binary-files=text
-I equivalent to --binary-files=without-match
-d, --directories=ACTION how to handle directories;
ACTION is 'read', 'recurse', or 'skip'
-D, --devices=ACTION how to handle devices, FIFOs and sockets;
ACTION is 'read' or 'skip'
-r, --recursive like --directories=recurse
-R, --dereference-recursive
likewise, but follow all symlinks
--include=FILE_PATTERN
search only files that match FILE_PATTERN
--exclude=FILE_PATTERN
skip files and directories matching FILE_PATTERN
--exclude-from=FILE skip files matching any file pattern from FILE
--exclude-dir=PATTERN directories that match PATTERN will be skipped.
-L, --files-without-match print only names of FILEs containing no match
-l, --files-with-matches print only names of FILEs containing matches
-c, --count print only a count of matching lines per FILE
-T, --initial-tab make tabs line up (if needed)
-Z, --null print 0 byte after FILE name
文件控制:
-B, --before-context=NUM 打印以文本起始的NUM 行
-A, --after-context=NUM 打印以文本結(jié)尾的NUM 行
-C, --context=NUM 打印輸出文本NUM 行
-NUM same as --context=NUM
--group-separator=SEP use SEP as a group separator
--no-group-separator use empty string as a group separator
--color[=WHEN],
--colour[=WHEN] use markers to highlight the matching strings;
WHEN is 'always', 'never', or 'auto'
-U, --binary do not strip CR characters at EOL (MSDOS/Windows)
-u, --unix-byte-offsets report offsets as if CRs were not there
(MSDOS/Windows)
‘egrep’即‘grep -E’居兆「采剑‘fgrep’即‘grep -F’。
直接使用‘egrep’或是‘fgrep’均已不可行了泥栖。
若FILE 為 -簇宽,將讀取標(biāo)準(zhǔn)輸入。不帶FILE吧享,讀取當(dāng)前目錄魏割,除非命令行中指定了-r 選項(xiàng)。
如果少于兩個(gè)FILE 參數(shù)钢颂,就要默認(rèn)使用-h 參數(shù)钞它。
如果有任意行被匹配,那退出狀態(tài)為 0殊鞭,否則為 1遭垛;
如果有錯(cuò)誤產(chǎn)生,且未指定 -q 參數(shù)操灿,那退出狀態(tài)為 2锯仪。
請將錯(cuò)誤報(bào)告給: bug-grep@gnu.org
GNU Grep 主頁: <http://www.gnu.org/software/grep/>
GNU 軟件的通用幫助: <http://www.gnu.org/gethelp/>
根據(jù) 關(guān)鍵詞 查看日志 并返回關(guān)鍵詞所在行:
grep -i "test" ./test.log 返回test.log中包含test的所有行(-i忽略大小寫)
? 3 cat
3.1 查看日志前n行
cat test.log | head -n 5
test.log為文件名,5為行數(shù)趾盐。
3.2 查看日志尾n行
cat test.log | tail -n 5
3.3 根據(jù)關(guān)鍵詞查看日志
cat daily.log | grep "context"
3.4 cat詳解
用法:cat [選項(xiàng)]... [文件]...
將[文件]或標(biāo)準(zhǔn)輸入組合輸出到標(biāo)準(zhǔn)輸出庶喜。
-A, --show-all 等于-vET
-b, --number-nonblank 對非空輸出行編號(hào)
-e 等于-vE
-E, --show-ends 在每行結(jié)束處顯示"$"
-n, --number 對輸出的所有行編號(hào)
-s, --squeeze-blank 不輸出多行空行
-t 與-vT 等價(jià)
-T, --show-tabs 將跳格字符顯示為^I
-u (被忽略)
-v, --show-nonprinting 使用^ 和M- 引用小腊,除了LFD和 TAB 之外
--help 顯示此幫助信息并退出
--version 顯示版本信息并退出
如果沒有指定文件,或者文件為"-"溃卡,則從標(biāo)準(zhǔn)輸入讀取溢豆。
示例:
cat f - g 先輸出f 的內(nèi)容,然后輸出標(biāo)準(zhǔn)輸入的內(nèi)容瘸羡,最后輸出g 的內(nèi)容漩仙。
cat 將標(biāo)準(zhǔn)輸入的內(nèi)容復(fù)制到標(biāo)準(zhǔn)輸出。
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
請向<http://translationproject.org/team/zh_CN.html> 報(bào)告cat 的翻譯錯(cuò)誤
要獲取完整文檔犹赖,請運(yùn)行:info coreutils 'cat invocation'
[toutou@localhost front]$
? 4 tail和head命令
4.1 tail常見用法
tail -f test.log 可以動(dòng)態(tài)的查看服務(wù)器運(yùn)行狀態(tài)的日志
head -n 5 test.log 顯示top 5行
tail -n 5 test.log 顯示last 5行
tail -n +5 test.log 從第5行開始顯示队他,顯示第5行以后的
4.2 tail詳解
用法:tail [選項(xiàng)]... [文件]...
Print the last 10 lines of each FILE to standard output.
With more than one FILE, precede each with a header giving the file name.
With no FILE, or when FILE is -, read standard input.
Mandatory arguments to long options are mandatory for short options too.
-c, --bytes=K output the last K bytes; or use -c +K to output
bytes starting with the Kth of each file
-f, --follow[={name|descriptor}]
output appended data as the file grows;
an absent option argument means 'descriptor'
-F same as --follow=name --retry
-n, --lines=K output the last K lines, instead of the last 10;
or use -n +K to output starting with the Kth
--max-unchanged-stats=N
with --follow=name, reopen a FILE which has not
changed size after N (default 5) iterations
to see if it has been unlinked or renamed
(this is the usual case of rotated log files);
with inotify, this option is rarely useful
--pid=PID with -f, terminate after process ID, PID dies
-q, --quiet, --silent never output headers giving file names
--retry keep trying to open a file if it is inaccessible
-s, --sleep-interval=N with -f, sleep for approximately N seconds
(default 1.0) between iterations;
with inotify and --pid=P, check process P at
least once every N seconds
-v, --verbose always output headers giving file names
--help 顯示此幫助信息并退出
--version 顯示版本信息并退出
If the first character of K (the number of bytes or lines) is a '+',
print beginning with the Kth item from the start of each file, otherwise,
print the last K items in the file. K may have a multiplier suffix:
b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,
GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y.
如果您希望即時(shí)追查一個(gè)文件的有效名稱而非描述內(nèi)容(例如循環(huán)日志),默認(rèn)
的程序動(dòng)作并不如您所愿峻村。在這種場合可以使用--follow=name 選項(xiàng)麸折,它會(huì)使
tail 定期追蹤打開給定名稱的文件,以確認(rèn)它是否被刪除或被其它某些程序重新創(chuàng)建過粘昨。
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
請向<http://translationproject.org/team/zh_CN.html> 報(bào)告tail 的翻譯錯(cuò)誤
要獲取完整文檔垢啼,請運(yùn)行:info coreutils 'tail invocation'
? 5 sed
5.1 查看文件的第5行到第15行
sed -n '5,15p' daily.log
5.2 sed詳解
sed不與初始化文件打交道,它操作的只是一個(gè)拷貝张肾,然后所有的改動(dòng)如果沒有重定向到一個(gè)文件芭析,將輸出到屏幕。
sed是一種很重要的文本過濾工具吞瞪,使用一行命令或者使用管道與grep與awk相結(jié)合馁启。是一種非交互性文本流編輯。
(1)調(diào)用sed的三種方式
使用sed命令行格式為:sed [options] sed命令 輸入文件
使用sed腳本文件格式為:sed[options] -f sed腳本文件 輸入文件
sed腳本文件[options] 輸入文件
--不管是使用shell命令行方式或腳本文件方式芍秆,如果沒有指定輸入文件惯疙,sed從標(biāo)準(zhǔn)輸入中接受輸入,一般是鍵盤或重定向結(jié)果妖啥。
(2)sed 命令的options如下
-n:不打印
-c:下一命令是編輯命令
-f:如果正在調(diào)用sed腳本文件
(3)sed在文件中查詢文本的方式
--使用行號(hào)霉颠,可以是一個(gè)簡單的數(shù)字,或是一個(gè)行號(hào)的范圍
--使用正則表達(dá)式
(4)讀取文本的方式
x x為一行號(hào)
x,y 表示行號(hào)范圍從x到y(tǒng)
/pattern/ 查詢包含模式的行
/pattern/pattern/ 查詢包含兩個(gè)模式的行
pattern/,x 在給定的行號(hào)上查詢包含模式的行
x,/pattern/ 通過行號(hào)和模式查詢匹配行
x,y! 查詢不包含指定行號(hào)x和y的行
(5)基本sed編輯命令
p 打印匹配行
d 刪除匹配行
= 顯示文件行號(hào)
a\ 在定位行號(hào)后附加新文本信息
i\ 在定位行號(hào)后插入新文本信息
c\ 用新文本替換定位文本
s 使用替換模式替換相應(yīng)模式
r 從另一個(gè)文件中讀文件
w 寫文本到一個(gè)文件
q 第一個(gè)模式匹配完成后推出或立即退出
l 顯示與八禁止ASCII代碼等價(jià)的控制字符
{} 在定位行執(zhí)行的命令組
n 從另一個(gè)文件中讀文本下一行迹栓,并附加在下一行
g 將模式2粘貼到/pattern n/
y 傳送字符
(6)舉例說明:
sed -n '2p' test.txt 打印第二行的信息(注意:-n是不打印不匹配的信息掉分,若沒加-n,則打印文件的所有信息而不是匹配信息)
sed -n '1,4p' test.txt 打印第一行到第四行的信息
sed -n '/los/p' test.txt模式匹配los克伊,并打印出來
sed -n '2,/los/p' test.txt 從第二行開始酥郭。。知道匹配第一個(gè)los
sed -n '/^$/p' test.txt 匹配空行
sed -n -e '/^$/p' -e '/^$/=' test.txt 打印空行及行號(hào)
sed -n '/good/a\morning' test.txt 在匹配到的good后面附加morning
sed -n '/good/i\morning' test.txt 在匹配到的good前面插入morning
sed -n '/good/c\morning' test.txt 將匹配到的good替換成morning
sed '1,2d' test.txt 刪除第1和2行
sed 's/good/good morning/g' test.txt 匹配good并替換成goodmorning
send 's/good/& hello /p' test.txt 匹配到good就在其后面加上hello
send 's/good/ hello &/p' test.txt 匹配到good就在其前面加上hello
? 6 find
6.1 查找目錄下的所有文件中是否含有某個(gè)字符串
find .|xargs grep -ri "context"
6.2 find詳解
(1)查找具有某些特征文件的命令愿吹,可遍歷當(dāng)前目錄甚至于整個(gè)文件系統(tǒng)來查看某些文件或目錄不从,其遍歷大的文件系統(tǒng)時(shí)一般放在后臺(tái)執(zhí)行。
(2)find命令的一般形式
find pathname -options [-print -exec -ok]
-pathname :find命令所查找的目錄路徑犁跪。如用"."來表示當(dāng)前的目錄椿息,用/來表示系統(tǒng)根目錄
-print :find命令將匹配的文件輸出到標(biāo)準(zhǔn)輸出
-exec: find命令對匹配的文件執(zhí)行該參數(shù)所給出的shell命令歹袁,相應(yīng)的命令形式為
'command'{} \; (注意{}和\之間的空格)
-ok 和 -exec的作用相同,只不過以一種更為安全的模式來執(zhí)行該參數(shù)所給出的shell命令寝优,在執(zhí)行每一個(gè)命令之前条舔,都會(huì)給出提示,讓用戶來確定是否執(zhí)行乏矾。
options有如下幾種:
-name :按照文件名查找文件
-perm :按照文件權(quán)限來查找文件
-user :按照文件屬主來查找文件
-group :按照文件所屬的組來查找文件
-mtime -n +n 按照文件的更改時(shí)間來查找文件孟抗,-n表示文件更改時(shí)間距現(xiàn)在n天以內(nèi),+n表示文件更改時(shí)間距現(xiàn)在n天以前钻心。find命令還有-atime 和-ctime選項(xiàng)凄硼,但它們都和-mtime選項(xiàng)相似。
-size n[c]查找文件長度為n塊的文件捷沸,帶有c時(shí)表示文件長度以字節(jié)計(jì)摊沉。
-nogroup 查找無有效所屬組的文件,即該文件所屬的組在/etc/groups中不存在
-newer file1 !file2查找更改時(shí)間比文件file1新但比文件file2舊的文件
-depth 先查找指定目錄有無匹配文件痒给,若無則再在子目錄中查找
-type 查找某一類型的文件说墨,如
b :塊設(shè)備文件
d:目錄
e:字符設(shè)備文件
p;管道文件
l:符號(hào)鏈接文件
f:普通文件
(3)find命令舉例
find -name "*.txt" -print 查找txt結(jié)尾的文件并輸出到屏幕上
find /cmd ".sh" -print 查找/cmd目錄下所有sh文件苍柏,并輸出
find . -perm 755 -print 查找當(dāng)前目錄下權(quán)限為755的文件婉刀,并輸出
find `pwd` -user root -print 查找當(dāng)前目錄下屬主為root的文件,并輸出
find ./ -group sunwill -print 查找當(dāng)前目錄下所屬主是sunwill的文件
find /var -mtime -5 -print 查找/var目錄下更改時(shí)間為5天內(nèi)的所有文件
find /var -mtime +5 -print 查找/var目錄下更改時(shí)間為5天以前的所有文件
find /var -newer "myfile1" ! -newer "myfile2" -print 查找/var目錄下比myfile1新序仙,但是比myfile2舊的所有文件。
find /var -type d -print 查找/var目錄下所有目錄
find /var -type l -print 查找/var目錄下所有的符號(hào)鏈接文件鲁豪。
find . -size +1000000c -print 查找當(dāng)前目錄下大于1000000字節(jié)的文件
find / -name "con.file" -depth -print 查找根目錄下有無"con.file",若無則在其子目錄中查找
find . -type f -exec ls -l {} \; 查找當(dāng)前目錄下是否有普通文件潘悼,若有則執(zhí)行l(wèi)s -l
(4)xargs命令
在 使用find命令的-exec選項(xiàng)處理匹配到的文件時(shí),find命令將所有匹配到的文件一起傳遞給exec爬橡。不幸的是治唤,有些系統(tǒng)對能夠傳遞給exec的命 令長度有限制,這樣find命令運(yùn)行幾分鐘之后就算出現(xiàn)溢出錯(cuò)誤糙申。錯(cuò)誤信息通常是“參數(shù)列太長”或“參數(shù)列溢出”宾添。這就是xargs的用處所在,特別是與 find命令一起使用,exec會(huì)發(fā)起多個(gè)進(jìn)程柜裸,而xargs會(huì)多個(gè)缕陕,只有一個(gè)
find ./ -perm -7 -print | xargs chmod o-w 查找權(quán)限為7的文件并傳遞給chmod處理