1. 前言
創(chuàng)新互聯(lián)是一家專注于成都做網(wǎng)站、網(wǎng)站建設(shè)和托管服務(wù)器的網(wǎng)絡(luò)公司,有著豐富的建站經(jīng)驗和案例。
在Linux日常管理中,我們肯定有查看某些服務(wù)的日志需求,或者是系統(tǒng)本身的日志。本文主要介紹如何查看Linux的系統(tǒng)日志,包括文件的路徑、工具的使用等等。會看Linux日志是非常重要的,不僅在日常操作中可以迅速排錯,也可以快速的定位。
2. 如何查看Linux日志
Linux日志文件的路徑一般位于,/var/log/,比如ngix的日志路徑為/var/log/nginx/,如果要查看某服務(wù)的日志,還可以使用systemctl status xxx,比如查看ssh服務(wù)的壯態(tài),systemctl status sshd
查看Linux某服務(wù)的日志
Liunx的配置文件在/etc/rsyslog.d里,可以看到如下信息
在linux系統(tǒng)當(dāng)中,有三個主要的日志子系統(tǒng):
1、連接時間日志:由多個程序執(zhí)行,把記錄寫入到/var/log/wtmp和/var/run/utmp,
login等程序會更新wtmp和utmp文件,使系統(tǒng)管理員能夠跟蹤誰在何時登錄到系統(tǒng)。
2、進程統(tǒng)計:由系統(tǒng)內(nèi)核執(zhí)行,當(dāng)一個進程終止時,為每個進程往進程統(tǒng)計文件中寫一個記錄。進程統(tǒng)計的目的是為系統(tǒng)中的基本服務(wù)提供命令使用統(tǒng)計
3、錯誤日志:由rsyslogd守護程序執(zhí)行,各種系統(tǒng)守護進程、用戶程序和內(nèi)核通過rsyslogd守護程序向文件/var/log/messages報告值得注意的時間。另外有許多l(xiāng)inux程序創(chuàng)建日志,像HTTP和FTP這樣提供的服務(wù)器也保持詳細的日志。
4、其他日志……
查看Linux日志默認(rèn)路徑
可以看到在/var/log目錄下存在很多的日志文件,接下來就對里面的一些常用日志文件進行分析
主要日志文件介紹:
內(nèi)核及公共消息日志:/var/log/messages
計劃任務(wù)日志:/var/log/cron
系統(tǒng)引導(dǎo)日志:/var/log/dmesg
郵件系統(tǒng)日志:/var/log/maillog
用戶登錄日志:/var/log/lastlog
/var/log/boot.log(記錄系統(tǒng)在引導(dǎo)過程中發(fā)生的時間)
/var/log/secure (用戶驗證相關(guān)的安全性事件)
/var/log/wtmp(當(dāng)前登錄用戶詳細信息)
/var/log/btmp(記錄失敗的的記錄)
/var/run/utmp(用戶登錄、注銷及系統(tǒng)開、關(guān)等事件)
日志文件詳細介紹:
/var/log/secure
Linux系統(tǒng)安全日志,記錄用戶和工作組的情況、用戶登陸認(rèn)證情況
例子:我創(chuàng)建了一個zcwyou的用戶,然后改變了該用戶的密碼,于是該信息就被記錄到該日志下
Linux系統(tǒng)安全日志默認(rèn)路徑
該日志就詳細的記錄了我操作的過程。
內(nèi)核及公共信息日志,是許多進程日志文件的匯總,從該文件中可以看出系統(tǒng)任何變化
查看Linux內(nèi)核及公共信息日志
系統(tǒng)引導(dǎo)日志
該日志使用dmesg命令快速查看最后一次系統(tǒng)引導(dǎo)的引導(dǎo)日志
查看Linux系統(tǒng)系統(tǒng)引導(dǎo)日志
最近的用戶登錄事件,一般記錄最后一次的登錄事件
該日志不能用諸如cat、tail等查看,因為該日志里面是二進制文件,可以用lastlog命令查看,它根據(jù)UID排序顯示登錄名、端口號(tty)和上次登錄時間。如果一個用戶從未登錄過,lastlog顯示 Never logged。
該日志文件永久記錄每個用戶登錄、注銷及系統(tǒng)的啟動、停機的事件。該日志為二進制文件,不能用諸如tail/cat/等命令,使用last命令查看。
記錄郵件的收發(fā)
此文件是記錄錯誤登錄的日志,可以記錄有人使用暴力破解ssh服務(wù)的日志。該文件用lastb打開
該日志記錄當(dāng)前用戶登錄的情況,不會永久保存記錄??梢杂脀ho/w命令來查看
3. 常用的日志分析工具與使用方法
3.1 統(tǒng)計一個文本中包含字符個數(shù)
3.2 查看當(dāng)天訪問排行前10的url
3.3 查看apache的進程數(shù)
3.4 訪問量前10的IP
cut部分表示取第1列即IP列,取第4列則為URL的訪問量
3.5 查看最耗時的頁面
按第2列響應(yīng)時間逆序排序
3.6 使用grep查找文件中指定字符出現(xiàn)的次數(shù)
-o 指示grep顯示所有匹配的地方,并且每一個匹配單獨一行輸出。這樣只要統(tǒng)計輸出的行數(shù)就可以知道這個字符出現(xiàn)的次數(shù)了。
4. 總結(jié)
查看Linux日志需求了解和熟悉使用一些常用的工具方能提升我們的查找和定位效率。比如使用 Grep 搜索,使用Tail命令,使用Cut,使用AWK 和 Grok 解析日志和使用 Rsyslog 和 AWK 過濾等等,只要能掌握這些工具。我們才能高效地處理和定位故障點。
tail -f 日志文件路徑主要用于查看實時的日志記錄,屬于動態(tài)記錄查看。
cat日志路徑主要用于查看靜態(tài)的歷史日志記錄,一般跟路徑名稱,常見的這周類型的日志記錄一般用管道符進行過濾篩選自己所需的記錄。
dmesg主要用于調(diào)試腳本或者命令,出現(xiàn)異常中斷來排查錯誤原因顯示的。
tail? -n? 10? test.log,查詢?nèi)罩疚膊孔詈?0行的日志。
tail -n +10 test.log,查詢10行之后的所有日志。
head -n 10? test.log,查詢?nèi)罩疚募械念^10行日志。
head -n -10? test.log,查詢?nèi)罩疚募俗詈?0行的其他所有日志。
操作命令
首先介紹一個名詞“控制臺(console)”,它就是我們通常見到的使用字符操作界面的人機接口,例如dos。我們說控制臺命令,就是指通過字符界面輸入的可以操作系統(tǒng)的命令。
例如dos命令就是控制臺命令。要了解的是基于Linux操作系統(tǒng)的基本控制臺命令。有一點一定要注意,和dos命令不同的是,Linux的命令(也包括文件名等等)對大小寫是敏感的,也就是說,如果你輸入的命令大小寫不對的話,系統(tǒng)是不會做出你期望的響應(yīng)的。
linux系統(tǒng)常用命令很熟悉。日志文件中,定位用戶請求:
1、進入文件后,輸入斜線。
2、直接輸入搜索的內(nèi)容,回車即可,此時可以:G,定位到END。
3、N:向上查找。
4、n:向下查找.
linux查看日志命令:
tail:
-n是顯示行號;相當(dāng)于nl命令;例子如下:
tail -100f test.log實時監(jiān)控100行日志。
tail -n 10 test.log查詢?nèi)罩疚膊孔詈?0行的日志。
tail -n +10 test.log查詢10行之后的所有日志。
head:
跟tail是相反的,tail是看后多少行日志;例子如下:
head -n 10 test.log查詢?nèi)罩疚募械念^10行日志。
head -n -10 test.log查詢?nèi)罩疚募俗詈?0行的其他所有日志。
cat:
tac是倒序查看,是cat單詞反寫;例子如下:
cat -n test.log |grep "debug"查詢關(guān)鍵字的日志。
命令功能:
tail用于顯示指定文件末尾內(nèi)容,不指定文件時,作為輸入信息進行處理。常用于查看日志文件后多少行日志信息。
使用tail -f可以查看動態(tài)日志文件,tail -f filename可以把filename里最尾部的內(nèi)容顯示在屏幕上,并且不斷刷新,使你看到最新的文件內(nèi)容。
tail -n行數(shù)可以顯示指定行數(shù)信息。
1、最強大的搜索命令:find 查找各種文件的命令
2、在文件資料中查找文件:locate
3、搜索命令所在的目錄及別名信息:which
4、搜索命令所在的目錄及幫助文檔路徑:whereis
5、在文件中搜尋字符串匹配的行并輸出:grep
6、分頁顯示一個文件或任何輸出結(jié)果:more
7、分頁顯示一個文件并且可以回頭:less
8、指定顯示前多少行文件內(nèi)容:head
9、指定顯示文件后多少行內(nèi)容:tail
10、查看一個文件:cat
11、查看文件內(nèi)容多少字符多少行多少字節(jié):wc
12、排序文件內(nèi)容:sort
一、根據(jù) 文件或目錄名稱 搜索
find 【搜索目錄】【-name或者-iname】【搜索字符】:-name和-iname的區(qū)別一個區(qū)分大小寫,一個不區(qū)分大小寫
eg:在/etc 目錄下搜索名字為init的文件或目錄
①、find /etc -name init (精準(zhǔn)搜索,名字必須為 init 才能搜索的到)
②、find /etc -iname init (精準(zhǔn)搜索,名字必須為 init或者有字母大寫也能搜索的到)
③、find /etc -name *init (模糊搜索,以 init 結(jié)尾的文件或目錄名)
④、find /etc -name init??? (模糊搜索,? 表示單個字符,即搜索到 init___)
二、根據(jù) 文件大小 搜索
eg:在根目錄下查找大于 100M 的文件
find / -size +204800
這里 +n 表示大于,-n 表示小于,n 表示等于
1 數(shù)據(jù)塊 == 512 字節(jié) 0.5KB,也就是1KB等于2數(shù)據(jù)塊
100MB == 102400KB204800數(shù)據(jù)塊
三、根據(jù) 所有者和所屬組 搜索
①、在home目錄下查詢所屬組為 root 的文件
find /home -group root
②、在home目錄下查詢所有者為 root 的文件
find /home -user root
四、根據(jù) 時間屬性 搜索
find 【路徑】【選項】【時間】
選項有下面三種:-amin 訪問時間
-cmin 文件屬性被更改
-mmin 文件內(nèi)容被修改
時間:+n,-n,n分別表示超過n分鐘,n分鐘以內(nèi)和n分鐘
eg:在 /etc 目錄下查找5 分鐘內(nèi)被修改過屬性的文件和目錄
find /etc -cmin -5
五、根據(jù) 文件類型或i節(jié)點 搜索
-type 根據(jù)文件類型查找:
f表示文件,d表示目錄,l表示軟鏈接
eg:查找 /home 目錄下文件類型是目錄的
find /home -type d
-inum 根據(jù)i節(jié)點查找
eg:查找 /tmp 目錄下i節(jié)點為400342的文件或目錄
find /tmp -inum 400342
六、組合條件 搜索
這里有兩個參數(shù):
①、-a 表示兩個條件同時滿足(and)
②、-o 表示兩個條件滿足任意一個即可(or)
范例:查找/etc目錄下大于80MB同時小于100MB的文件
find /etc -size +163840 -a -size -204800
語法:locate【文件名】 -i 不區(qū)分大小寫
注意:這里和 find 命令是有區(qū)別的,find是全盤檢索,而locate 是在文件資料庫中進行搜索。所以locate命令的執(zhí)行要比find命令執(zhí)行速度快很多。但是這里有個問題,文件資料庫是需要不斷更新的。我們新創(chuàng)建的文件如果不更新 文件資料庫,使用 locate 是查找不到的。
updatedb 手動更新資料庫,但是對于/tmp目錄下的新建文件,是更新不到文件資料庫的,因為/tmp目錄不屬于文件資料庫的收錄范圍。
eg:locate hcf
功能描述:搜索命令所在的目錄及別名信息
語法:which【命令】
eg:which ls
功能描述:搜索命令所在的目錄及幫助文檔路徑
語法:whereis【命令】
eg:whereis ls
功能描述:在文件中搜尋字符串匹配的行并輸出
語法:grep -iv 【指定字符串】【文件】
-i 不區(qū)分大小寫
-v 排除指定字符串
eg:查找 /root/install.log 文件中包含 mysql 字符串的行,并輸出
grep mysql /root/install.log
本搜索工具,根據(jù)用戶指定的模式,對目標(biāo)文件逐行進行匹配檢查,打印匹配到的行
grep是在文件中搜索匹配的字符串,是在文件中進行內(nèi)容搜索,這個命令后面用到的比較多
描述:
分頁顯示一個文件或任何輸出結(jié)果
用于查看純文本文件(較長的)格式
格式:
more[選項] 文件
less 與 more 類似,但使用 less 可以隨意瀏覽文件,而 more 僅能向前移動,卻不能向后移動,而且 less 在查看之前不會加載整個文件。
head[必要參數(shù)][選擇參數(shù)][文件]
用于顯示指定文件開始多少行內(nèi)容
命令參數(shù):
-n 10 顯示前10行
-n -10 正常輸出但不顯示最后的10行
eg:顯示new.txt的前兩行內(nèi)容
head -n 2 new.txt
head -2 new.txt
tail[必要參數(shù)][選擇參數(shù)][文件]
用于顯示指定文件末尾多少行內(nèi)容
命令參數(shù):
-n 10 顯示后面10行
-f 持續(xù)刷新顯示的內(nèi)容
eg:顯示new.txt的末尾兩行內(nèi)容
tail -n 2 new.txt
tail -2 new.txt
eg:指定從第二行開始顯示
tail -n +2 new.txt
描述:一次顯示整個文件內(nèi)容
cat 命令 用于查看純文本文件(較短)
cat [選項] [文件]…
描述:wc 命令默認(rèn)情況下會打印換行符數(shù)、單詞數(shù)和字符數(shù)。
用法:wc [選項] [文件]
用法:sort [選項] [文件]
轉(zhuǎn)自: Linux下文件搜索、查找、查看命令_黃小小的博客-CSDN博客_linux 搜索
last
-a 把從何處登入系統(tǒng)的主機名稱或ip地址,顯示在最后一行。
-d 指定記錄文件。指定記錄文件。將IP地址轉(zhuǎn)換成主機名稱。
-f 記錄文件 指定記錄文件。
-n 顯示列數(shù)或-顯示列數(shù) 設(shè)置列出名單的顯示列數(shù)。
-R 不顯示登入系統(tǒng)的主機名稱或IP地址。
-x 顯示系統(tǒng)關(guān)機,重新開機,以及執(zhí)行等級的改變等信息
以下看所有的重啟、關(guān)機記錄
last | grep reboot
last | grep shutdown
history
列出所有的歷史記錄:
[zzs@Linux] # history
只列出最近10條記錄:
[zzs@linux] # history 10 (注,history和10中間有空格)
使用命令記錄號碼執(zhí)行命令,執(zhí)行歷史清單中的第99條命令
[zzs@linux] #!99 (!和99中間沒有空格)
重復(fù)執(zhí)行上一個命令
[zzs@linux] #!!
執(zhí)行最后一次以rpm開頭的'命令(!? ?代表的是字符串,這個String可以隨便輸,Shell會從最后一條歷史命令向前搜索,最先匹配的一條命令將會得到執(zhí)行。)
[zzs@linux] #!rpm
逐屏列出所有的歷史記錄:
[zzs@linux]# history | more
立即清空history當(dāng)前所有歷史命令的記錄
[zzs@linux] #history -c
cat, tail 和 watch
系統(tǒng)所有的日志都在 /var/log 下面自己看(具體用途可以自己查,附錄列出一些常用的日志)
cat /var/log/syslog 等
cat /var/log/*.log
tail -f
如果日志在更新,如何實時查看 tail -f /var/log/messages
還可以使用 watch -d -n 1 cat /var/log/messages
-d表示高亮不同的地方,-n表示多少秒刷新一次。
該指令,不會直接返回命令行,而是實時打印日志文件中新增加的內(nèi)容,
這一特性,對于查看日志是非常有效的。如果想終止輸出,按 Ctrl+C 即可。
除此之外還有more, less ,dmesg|more,這里就不作一一列舉了,因為命令太多了,關(guān)鍵看個人喜好和業(yè)務(wù)需求.個人常用的就是以上那些
linux日志文件說明
/var/log/message 系統(tǒng)啟動后的信息和錯誤日志,是Red Hat Linux中最常用的日志之一
/var/log/secure 與安全相關(guān)的日志信息
/var/log/maillog 與郵件相關(guān)的日志信息
/var/log/cron 與定時任務(wù)相關(guān)的日志信息
/var/log/spooler 與UUCP和news設(shè)備相關(guān)的日志信息
/var/log/boot.log 守護進程啟動和停止相關(guān)的日志消息
/var/log/wtmp 該日志文件永久記錄每個用戶登錄、注銷及系統(tǒng)的啟動、停機的事件