syslogd & klogd ---------/etc/syslog.conf
/var/log/secure:登入到系統存取資料的記錄;FTP、SSH、TELNET...
/var/log/wtmp:記錄登入者訊錄,二進制檔案,須用last來讀取内容
/var/log/messages:雜貨鋪
/var/log/boot.log:記錄開機啟動訊息,dmesg | more
一、常識
# ps aux | grep syslog
# chkconfig --list | grep syslog
# cat /var/log/secure
/etc/syslog.conf 哪些服務産生的哪些等級訊息記錄到哪裡
記錄到相同地方的多個訊息源用分号間隔
vi /etc/syslog.conf
二、接收遠端日志
# grep 514 /etc/services
syslog 514/udp
vi /etc/sysconfig/syslog
# 将SYSLOGD_OPTIONS="-m 0"
# 改成
SYSLOGD_OPTIONS="-m 0 -r"
/etc/init.d/syslog restart
[root@linux ~]# netstat -tlunp
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 0.0.0.0:514 0.0.0.0:* 24314/syslogd
對應client
# vi /etc/syslog.conf
*.* @192.168.1.100
三、logrotate
* /etc/logrotate.conf
* /etc/logrotate.d/
logrotate.conf 才是主要配置檔案,而/logrotate.d /這個目錄内的所有檔案都被讀入 /etc/logrotate.conf來執行!
如果在 /etc/logrotate.d/ 目錄檔案中,沒有相應的細節設定則以 /etc/logrotate.conf 設定為預設值!
vi /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler
/var/log/boot.log /var/log/cron {
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
1、用空格作多個檔案分隔
2、所有設定在{}中
3、# prerotate:在啟動logrotate執行的指令
# postrotate:在做完 logrotate後需處理的指令
logrotate [-vf] logfile
參數:
-v :顯示過程
-f :強制執行
而 logrotate 的工作加入到 crontab /etc/cron.daily/logrotate;是以系統每天自動檢視
隻是要注意一下:/var/log/messages 是否有這樣的類似内容
Oct 24 15:15:35 localhost syslogd 1.4.1: restart.
四、執行個體:
要求: 登入檔案每月替換一次
若> 10MB ;強制替換,不不考慮一個月的期限;
儲存五備份文檔;
備份文檔不壓縮。
步驟1:
[root@linux ~]# lsattr /var/log/admin.log
-----a------- /var/log/admin.log
隻能新增不能删節除,除非chattr -a /var/log/admin.log
[root@linux ~]# mv /var/log/admin.log /var/log/admin.log.1
mv: cannot move '/var/log/admin.log' to '/var/log/admin.log.1':permission deny
步驟2:
vi /etc/logrotate.d/admin
# This configuration is from VBird 2005/10/24
/var/log/admin.log {
monthly
size=10M
rotate 5
nocompress
sharedscripts
prerotate
/usr/bin/chattr -a /var/log/admin.log
endscript
postrotate
/usr/bin/killall -HUP syslogd
/usr/bin/chattr +a /var/log/admin.log
步驟3:測試
# logrotate -v /etc/logrotate.conf
.....(前面省略).....
rotating pattern: /var/log/admin.log 10485760 bytes (5 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/admin.log
log does not need rotating
not running shared prerotate script, since no logs will be rotated
............
# logrotate -vf /etc/logrotate.d/admin
reading config file /etc/logrotate.d/admin
reading config info for /var/log/admin.log
也就是說: /etc/syslog.conf 與/etc/logrotate.d/* 對應文檔搭配起來使用;先由syslogd 按照syslog.conf指定的方法處理消息,
然後送給 logrotat來按照/etc/logrotate.d/*文檔要求來輪替日志。
五、常見指令:
# dmesg | more 讀/var/log/boot.log
dmesg | grep 'eth'
# last -n number
[root@linux ~]# last -f filename
-n :number
-f :last 預設值為讀 /var/log/wtmp 文檔,而 -f 讀取不同的文檔
# last -n 5 -f /var/log/wtmp.1
dmtsai2 pts/2 Mon Oct 24 14:18 - 14:18 (00:00)
dmtsai2 work:0 work Mon Oct 24 14:18 gone - no logout
dmtsai2 work:0 work Mon Oct 24 14:18 - 14:18 (00:00)
# lastlog
隻讀取/var/log/lastlog 内容,隻包括目前系統上面所有的帳号最近一次LOGIN的時間。
Part II:
1. 日志簡介
日志對于安全來說,非常重要,他記錄了系統每天發生的各種各樣的事情,你可以通過他來檢查錯誤發生的原因,或者受到攻擊時攻擊者留下的痕迹。日志主要的功能有:審
計和監測。他還可以實時的監測系統狀态,監測和追蹤侵入者等等。
在Linux系統中,有三個主要的日志子系統:
連接配接時間日志--由多個程式執行,把紀錄寫入到/var/log/wtmp和/var/run/utmp,login等程式更新wtmp和utmp檔案,使系統管理者能夠跟蹤誰在何時登入到系統。
程序統計--由系統核心執行。當一個程序終止時,為每個程序往程序統計檔案(pacct或acct)中寫一個紀錄。程序統計的目的是為系統中的基本服務提供指令使用統計。
錯誤日志--由syslogd(8)執行。各種系統守護程序、使用者程式和核心通過syslog(3)向檔案/var/log/messages報告值得注意的事件。另外有許多UNIX程式建立日志。像HTTP和FTP這樣提供網絡服務的伺服器也保持詳細的日志。
2、常用的日志檔案如下:
access-log 紀錄HTTP/web的傳輸
acct/pacct 紀錄使用者指令
aculog 紀錄MODEM的活動
btmp 紀錄失敗的紀錄
lastlog 紀錄最近幾次成功登入的事件和最後一次不成功的登入
messages 從syslog中記錄資訊(有的連結到syslog檔案)
sudolog 紀錄使用sudo發出的指令
sulog 紀錄使用su指令的使用
syslog 從syslog中記錄資訊(通常連結到messages檔案)
utmp 紀錄目前登入的每個使用者 /var/run/utmp
wtmp 一個使用者每次登入進入和退出時間的永久紀錄 /var/log/wtmp 系統重新開機及系統狀态變化情況。
xferlog 紀錄FTP會話
utmp、wtmp和lastlog日志檔案是多數重用UNIX日志子系統的關鍵--保持使用者登入進入和退出的紀錄。
有關目前登入使用者的資訊記錄在檔案utmp中;[針對目前已LOGIN的使用者]
登入進入和退出紀錄在檔案wtmp中;[針對使用者的所有曆史記錄,明細表]
最後一次登入檔案可以用lastlog指令察看。
數 據交換、關機和重起也記錄在wtmp檔案中。所有的紀錄都包含時間戳。這些檔案(lastlog通常不大)在具有大量使用者的系統中增長十分迅速。例如 wtmp檔案可以無限增長,除非定期截取。許多系統以一天或者一周為機關把wtmp配置成循環使用。它通常由cron運作的腳本來修改。這些腳本重新命名 并循環使用wtmp檔案。通常,wtmp在第一天結束後命名為wtmp.1;第二天後wtmp.1變為wtmp.2等等,直到wtmp.7。
每次有一個使用者登入時,login程式在檔案lastlog中察看使用者的UID。如果找到了,則把使用者上次登入、退出時間和主機名寫到标準輸出中,然後login程式在lastlog中紀錄新
的登入時間。在新的lastlog紀錄寫入後,utmp檔案打開并插入使用者的utmp紀錄。該紀錄一直用到使用者登入退出時删除。 下一步,login程式打開檔案wtmp附加使用者的utmp紀錄。當使用者登入退出時,具有更新時間戳的同一utmp紀錄附加到檔案中。
LOGIN----重新整理LAGTLOG----寫入使用者的utmp紀錄-----退出時删除utmp中相應的紀錄------LOGIN根據utmp更新對應wtmp檔案中的記錄。
utmp檔案被各種指令檔案使用,包括who、w、users和finger。均針對系統已login in的使用者
wtmp檔案被程式last和ac使用。這兩個指令所按曆史記錄進行統計
3、. 具體指令
wtmp和utmp檔案都是二進制檔案,他們不能被諸如tail指令剪貼或合并(使用cat指令)。使用者需要使用who、w、users、last和ac來使用這兩個檔案包含的資訊。
who:who指令查詢utmp檔案并報告目前登入的每個使用者。Who的預設輸出包括使用者名、終端類型、登入日期及遠端主機。例如:who(回車)顯示
chyang pts/0 Aug 18 15:06
ynguo pts/2 Aug 18 15:32
如果指明了wtmp檔案名,則who指令查詢所有以前的紀錄。指令who /var/log/wtmp将報告自從wtmp檔案建立或删改以來的每一次登入。
w:w指令查詢utmp檔案并顯示目前系統中每個使用者和它所運作的程序資訊。例如:w(回車)顯示:
3:36pm up 1 day, 22:34, 6 users, load average: 0.23, 0.29, 0.27
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
chyang pts/0 202.38.68.242 3:06pm 2:04 0.08s 0.04s -bash
users:users用單獨的一行列印出目前登入的使用者,每個顯示的使用者名對應一個登入會話。如果一個使用者有不止一個登入會話,那他的使用者名将顯示相同的次數。
例如:users(回車)顯示:
chyang lewis lewis ylou ynguo ynguo
last:last指令往回搜尋wtmp來顯示自從檔案第一次建立以來登入過的使用者。例如:
chyang pts/9 202.38.68.242 Tue Aug 1 08:34 - 11:23 (02:49)
cfan pts/6 202.38.64.224 Tue Aug 1 08:33 - 08:48 (00:14)
如果指明了使用者,那麼last隻報告該使用者的近期活動,例如:last ynguo(回車)顯示:
ynguo pts/4 simba.nic.ustc.e Fri Aug 4 16:50 - 08:20 (15:30)
ynguo pts/4 simba.nic.ustc.e Thu Aug 3 23:55 - 04:40 (04:44)
ynguo pts/11 simba.nic.ustc.e Thu Aug 3 20:45 - 22:02 (01:16)
ac:ac指令根據目前的/var/log/wtmp檔案中的登入進入和退出來報告使用者連結的時間小時),如果不使用标志,則報告總的時間。
例如:ac(回車)顯示:total 5177.47
ac -d(回車)顯示每天的總的連結時間
Aug 12 total 261.87
Aug 13 total 351.39
Aug 14 total 396.09
Aug 15 total 462.63
Aug 16 total 270.45
Aug 17 total 104.29
Today total 179.02
ac -p (回車)顯示每個使用者的總的連接配接時間
ynguo 193.23
yucao 3.35
rong 133.40
hdai 10.52
zjzhu 52.87
zqzhou 13.14
liangliu 24.34
total 5178.24
lastlog:lastlog檔案在每次有使用者登入時被查詢。可以使用lastlog指令來檢查某特定使用者上次登入的時間,并格式化輸出上次登入日志/var/log/lastlog的内容。
它根據UID排序顯示登入名、端口号(tty)和上次登入時間。如果一個使用者從未登入過,lastlog顯示"**Never logged**。
注意需要以root運作該指令,例如:
rong 5 202.38.64.187 Fri Aug 18 15:57:01 +0800 2000
dbb **Never logged in**
xinchen **Never logged in**
pb9511 **Never logged in**
xchen 0 202.38.64.190 Sun Aug 13 10:01:22 +0800 2000
另外,可一加一些參數,例如,last -u 102将報告UID為102的使用者;last -t 7表示限制上一周的報告。
4. 程序統計
UNIX可以跟蹤每個使用者運作的每條指令,如果想知道昨晚弄亂了哪些重要的檔案,程序統計子系統可以告訴你。它對還跟蹤一個侵入者有幫助。
與連接配接時間日志不同,程序統計子系統預設不激活,它必須啟動。
在Linux系統中啟動程序統計使用accton指令,必須用root身份來運作。Accton指令的形式accton file,file必須先存在。
1、先使用touch命 令來建立pacct檔案:touch /var/log/pacct,
2、然後運作accton: accton /var/log/pacct。
3、一旦accton被激活,就可以使用lastcomm指令監測系統中任何時候執行的指令。
4、若要關閉統計,可以使用不帶任何參數的accton指令。
lastcomm指令報告以前執行的檔案。
不帶參數時,lastcomm指令顯示目前統計檔案生命周期内紀錄的所有指令的有關資訊。包括指令名、使用者、tty、指令花費的CPU時間和一個時間戳。如果系統有許多使用者,輸入則可能很長。下面的例子:
crond F root ?? 0.00 secs Sun Aug 20 00:16
promisc_check.s S root ?? 0.04 secs Sun Aug 20 00:16
promisc_check root ?? 0.01 secs Sun Aug 20 00:16
grep root ?? 0.02 secs Sun Aug 20 00:16
tail root ?? 0.01 secs Sun Aug 20 00:16
sh root ?? 0.01 secs Sun Aug 20 00:15
ping S root ?? 0.01 secs Sun Aug 20 00:15
..............
程序統計的一個問題是pacct檔案可能增長的十分迅速!!
這時需要互動式的或經過cron機制運作sa指令來保持日志資料在系統控制内。
sa指令報告、清理并維護程序統計檔案。 它能把/var/log/pacct中的資訊壓縮到摘要檔案/var/log/savacct和/var/log/usracct中。
這些摘要包含按指令名和使用者名分類的系統統計資料。sa預設情況下先讀它們,然後讀pacct檔案,使報告能包含所有的可用資訊。sa的輸出有下面一些标記項:
avio--每次執行的平均I/O操作次數
cp--使用者和系統時間總和,以分鐘計
cpu--和cp一樣
k--核心使用的平均CPU時間,以1k為機關
k*sec--CPU存儲完整性,以1k-core秒
re--實時時間,以分鐘計
s--系統時間,以分鐘計
tio--I/O操作的總數
u--使用者時間,以分鐘計
例如:
842 173.26re 4.30cp 0avio 358k
2 10.98re 4.06cp 0avio 299k find
9 24.80re 0.05cp 0avio 291k ***other
105 30.44re 0.03cp 0avio 302k ping
104 30.55re 0.03cp 0avio 394k sh
使用者還可以根據使用者而不是指令來提供一個摘要報告。例如sa -m顯示如下:
885 173.28re 4.31cp 0avk
root 879 173.23re 4.31cp 0avk
alias 3 0.05re 0.00cp 0avk
qmailp 3 0.01re 0.00cp 0avk
使用logrorate對增長快的日志檔案進行管理
Logrotate讀取/etc/logrotate.d下的檔案。管理者通過此處的腳本檔案來控制Logrotate的運作。如下例:
{
rotate 5
weekly
copytruncate
compress
size 100k
5. Syslog裝置
Syslog已被許多日志函數采納,它用在許多保護措施中--任何程式都可以通過syslog 紀錄事件。Syslog可以紀錄系統事件,可以寫到一個檔案或裝置中,或給使用者發送一個信
息。它能紀錄本地事件或通過網絡紀錄另一個主機上的事件。
Syslog裝置依據兩個重要的檔案:/etc/syslogd(守護程序)和/etc/syslog.conf配置檔案,習慣上,多數syslog資訊被寫到/var/adm或/var/log目錄下的資訊檔案中(mess
ages.*)。一個典型的syslog紀錄包括生成程式的名字和一個文本資訊。它還包括一個裝置和一個優先級範圍(但不在日之中出現)。
每個syslog消息被賦予下面的主要裝置之一:
LOG_AUTH--認證系統:login、su、getty等
LOG_AUTHPRIV--同LOG_AUTH,但隻登入到所選擇的單個使用者可讀的檔案中
LOG_CRON--cron守護程序
LOG_DAEMON--其他系統守護程序,如routed
LOG_FTP--檔案傳輸協定:ftpd、tftpd
LOG_KERN--核心産生的消息
LOG_LPR--系統列印機緩沖池:lpr、lpd
LOG_MAIL--電子郵件系統
LOG_NEWS--網絡新聞系統
LOG_SYSLOG--由syslogd(8)産生的内部消息
LOG_USER--随機使用者程序産生的消息
LOG_UUCP--UUCP子系統
LOG_LOCAL0~LOG_LOCAL7--為本地使用保留
Syslog為每個事件賦予幾個不同的優先級:
LOG_EMERG--緊急情況
LOG_ALERT--應該被立即改正的問題,如系統資料庫破壞
LOG_CRIT--重要情況,如硬碟錯誤
LOG_ERR--錯誤
LOG_WARNING--警告資訊
LOG_NOTICE--不是錯誤情況,但是可能需要處理
LOG_INFO--情報資訊
LOG_DEBUG--包含情報的資訊,通常旨在調試一個程式時使用
syslog.conf檔案指明syslogd程式紀錄日志的行為,該程式在啟動時查詢配置檔案。該檔案由不同程式或消息分類的單個條目組成,每個占一行。對每類消息提供一個選擇域
和一個動作域。這些域由tab隔開:選擇域指明消息的類型和優先級;動作域指明syslogd接收到一個與選擇标準相比對的消息時所執行的動作。每個選項是由裝置和優先級組
成。當指明一個優先級時,syslogd将紀錄一個擁有相同或更高優先級的消息。
是以如果指明"crit",那所有标為crit、alert和emerg的消息将被紀錄。每行的行動域指明當選擇域選擇了一個給定消息後應該把他發送到哪兒。
例如,如果想把所有郵件消息紀錄到一個檔案中,如下:
#Log all the mail messages in one place
mail.* /var/log/maillog
其他裝置也有自己的日志。UUCP和news裝置能産生許多外部消息。它把這些消息存到自己的日志(/var/log/spooler)中并把級别限為"err"或更高。例如:
# Save mail and news errors of level err and higher in aspecial file.
uucp,news.crit /var/log/spooler
當一個緊急消息到來時,可能想讓所有的使用者都得到。也可能想讓自己的日志接收并儲存。
#Everybody gets emergency messages, plus log them on anther machine
*.emerg *
*.emerg @linuxaid.com.cn
alert消息應該寫到root和tiger的個人賬号中:
#Root and Tiger get alert and higher messages
*.alert root,tiger
有時syslogd将産生大量的消息。例如核心("kern"裝置)可能很冗長。使用者可能想把核心消息紀錄到/dev/console中。下面的例子表明核心日志紀錄被注釋掉了:
#Log all kernel messages to the console
#Logging much else clutters up the screen
#kern.* /dev/console
使用者可以在一行中指明所有的裝置。下面的例子把info或更進階别的消息送到/var/log/messages,除了mail以外。級别"none"禁止一個裝置:
#Log anything(except mail)of level info or higher
#Don log private authentication messages!
*.info:mail.none;authpriv.none /var/log/messages
在有些情況下,可以把日志送到列印機,這樣網絡入侵者怎麼修改日志都沒有用了。通常要廣泛紀錄日志。Syslog裝置是一個攻擊者的顯著目标。一個為其他主機維護日志的
系統對于防範伺服器攻擊特别脆弱,是以要特别注意。
有個小指令logger為syslog(3)系統日志檔案提供一個shell指令接口,使使用者能建立日志檔案中的條目。用法:logger 例如:logger This is a test!
它将産生一個如下的syslog紀錄:Aug 19 22:22:34 tiger: This is a test!
注意不要完全相信日志,因為攻擊者很容易修改它的。
5. 程式日志
許多程式通過維護日志來反映系統的安全狀态。su指令允許使用者獲得另一個使用者的權限,是以它的安全很重要,它的檔案為sulog。同樣的還有sudolog。另外,想Apache有兩 個日志:access_log和error_log。
6. 其他日志工具
chklastlog
<a href="ftp://coast.cs.purdue.edu/pub/tools/unix/chklastlog/">ftp://coast.cs.purdue.edu/pub/tools/unix/chklastlog/</a>
chkwtmp
<a href="ftp://coast.cs.purdue.edu/pub/tools/unix/chkwtmp/">ftp://coast.cs.purdue.edu/pub/tools/unix/chkwtmp/</a>
dump_lastlog
<a href="ftp://coast.cs.purdue.edu/pub/tools/unix/dump_lastlog.Z">ftp://coast.cs.purdue.edu/pub/tools/unix/dump_lastlog.Z</a>
spar
<a href="ftp://coast.cs.purdue.edu/pub/tools/unix/TAMU/">ftp://coast.cs.purdue.edu/pub/tools/unix/TAMU/</a>
Swatch
<a href="http://www.lomar.org/komar/alek/pres/swatch/cover.html">http://www.lomar.org/komar/alek/pres/swatch/cover.html</a>
Zap
<a href="ftp://caost.cs.purdue.edu/pub/tools/unix/zap.tar.gz">ftp://caost.cs.purdue.edu/pub/tools/unix/zap.tar.gz</a>
日志分類方法
<a href="http://csrc.nist.gov/nissc/1998/proceedings/paperD1.pdf">http://csrc.nist.gov/nissc/1998/proceedings/paperD1.pdf</a>
Part III. 将Linux設定成Cisco路由器的日志伺服器
首先 設定系統日志配置檔案:
Vi /etc/sysconfig/syslog
把
SYSLOGD_OPTIONS="-m 0"
修改為
SYSLOGD_OPTIONS="-r -m 0" //-r 從遠端主機寫入 -m 0 sables 'MARK' messages
加入下列内容
把裝置号為local4(PIX的預設裝置号)的所有的日志記錄到 /var/log/router.log中
#Save pix messages all to router.log
local4.* /var/log/router.log
把裝置号為local5(在S8016中用info-center loghost host-ip-addr facility local-number指定)的所有的日志記錄到 /var/log/router.log中
#Save S8016 messages all to S8016.log
local5.* /var/log/S8016.log
生成空的日志檔案
touch /var/log/router.log
touch /var/log/S8016.log
然後重新開機syslog,就ok了
/etc/rc.d/init.d/syslog restart
别忘了設定防火牆規則,僅允許你的裝置發送到udp/514(預設的UDP端口為514,預設的tcp端口為146
為了避免日志過大,配置日志輪循(man logrotate 檢視詳細的幫助資訊)
vi /etc/logrotate.conf
增加下列内容
配置crontab進行日志備份,如按照日期進行備份。
如網絡裝置很多,可把同類的裝置配置為相同的裝置号。
例:more switch.log | grep X.X.X.X //檢視某一裝置的日志。
稽核和記錄系統的事件是非常重要的。如果僅僅把系統事件作為日志記錄下來,而不去檢視,還是無濟于事。可用webadmin管理和檢視日志,用 logchek 自動地檢查日志檔案,把正常的日志資訊剔除掉,把一些有問題的日志保留下來,然後把這些資訊 email 給系統管理者。
網絡裝置配置
PIX的配置
logging on //打開日志
logging host [if_name] ip_address [protocol/port] //指定日志主機
例:logging host log 133.3.3.2
logging trap level //指定日志消息的級别 (0:緊急(Emergencies) 1:告警(Alerts) 2:嚴重的(Critical) 3:錯誤(Errors) 4:警告(Warnings) 5:通知(Notifications) 6:資訊(Informational) 7:調試(Debugging))
logging trap 7 //把調試資訊設定為Debug級,記錄FTP指令和WWW的URL
另外可用logging facility指令更改裝置号,PIX預設為local4(20)
Huawei S8016的配置( VRP(R) Software, Version 3.10(NSSA), RELEASE 5331)
Huawei S8016 新指令行設定日志伺服器
info-center enable //打開資訊中心
inf-center loghost host-ip-addr channel 2 facility local-number
設定日志主機的IP位址
info-center logging host host-ip-addr
設定日志主機的資訊通道
info-center host host-ip-addr channel {channel-number|channel-name}
設定日志主機記錄工具
set logging host host-ip-addr facility local-number
取消向日志主機輸出資訊
undo info-center loghost host-ip-addr
huwei S3026配置(VRP (tm) Software, Version 3.10)
logging on
set logging host 133.3.3.2 channel 2 language chinese facility local1
Cisco 7505的配置
每個使用UNIX/LINUX的人都知道日志的用處,那你是否清楚LINUX這些日志資訊處理的來龍去脈呢?
我們可以看到LINUX系統資訊日志的途徑基本有以下2種:
(1)dmesg檢視----這個指令比較常見
(2)/var/log/下的檔案
那下面我們就從這個2個途徑着手,一步步的走下去.
(一)首先,我們來看dmesg這個常見的指令背後隐藏的是什麼!!
(1)先讓我們來MAN一下這個家夥
-------------man dmesg--------------------------
NAME
dmesg - print or control the kernel ring buffer
SYNOPSIS
dmesg [ -c ] [ -n level ] [ -s bufsize ]
DESCRIPTION
dmesg is used to examine or control the kernel ring buffer.
The program helps users to print out their bootup mes- sages. Instead of copying the messages by hand, the user need only:
dmesg > boot.messages
and mail the boot.messages file to whoever can debug their
problem.
OPTIONS
-c Clear the ring buffer contents after printing.
-sbufsize
Use a buffer of size bufsize to query the kernel ring buffer. This is 16392 by default. (The default kernel syslog buffer size was 4096 at first, 8192 since 1.3.54, 16384 since 2.1.113.) If you have set the kernel buffer to be larger than the default then this option can be used to view the entire buffer.
-nlevel
Set the level at which logging of messages is done to the console. For example, -n 1 prevents all messages, expect panic messages, from appearing on the console. All levels of messages are still written to /proc/kmsg, so syslogd(8) can still be used to control exactly where kernel messages appear.
When the -n option is used, dmesg will not print or clear the kernel ring buffer.
When both options are used, only the last option on the command line will have an effect.
從LINUX提供的手冊,我們可以得知一條最重要的資訊dmesg是從kernel 的ring buffer(環緩沖區)中讀取資訊的.
(2)那什麼是ring buffer呢?
在LINUX中,所有的系統資訊(包核心資訊)都會傳送到ring buffer中.而核心産生的資訊由printk()列印出來。系統啟動時所看到的資訊都是由該函數列印到螢幕中。 printk()打出的資訊往往以 <0><2>...這的數字表明消息的重要級别。高于一定的優先級别會列印到螢幕上, 否則隻會保留在系統的緩沖區中(ring buffer)。
至于dmesg具體是如何從ring buffer中讀取的,大家可以看dmesg.c源代碼.很短,比較容易讀懂.
(二)dmesg怎麼搞的大家應該很明白了吧.至于/var/log/下的檔案更是大家熟悉得不能再熟悉了!
(1)/var/log/..下為什麼有這麼多檔案呢?
一句話解釋: 是syslogd這個守護程序根據/etc/syslog.conf,将不同的服務産生的Log記錄到不同的檔案中.
這裡的/etc/syslog.conf我就不細說了,很多這方面的資訊(去查吧).
(2)既然知道了,/var/log/..是由syslogd這個守護程序産生的.那就再順着這條線走下去.
LINUX系統啟動後,由/etc/init.d/sysklogd先後啟動klogd,syslogd兩個守護程序。
其中klogd會通過syslog()系統調用或者讀取proc檔案系統來從系統緩沖區(ring buffer)中得到由核心printk()
發出的資訊.而syslogd是通過klogd來讀取系統核心資訊.
我想至此,大家心理應該對log産生,讀取等一系列的動作有所感覺.
總結:
(1)所有系統資訊是輸出到ring buffer中去的.dmesg所顯示的内容也是從ring buffer中讀取的.
(2)LINUX系統中/etc/init.d/sysklogd會啟動2個守護程序:Klogd&&Syslogd
(3)klogd是負責讀取核心資訊的,有2種方式:
syslog()系統調用(這個函數用法比較全,大家去MAN一下看看)
直接的對/proc/kmsg進行讀取(再這提一下,/proc/kmsg是專門輸出核心資訊的地方)
(4)Klogd的輸出結果會傳送給syslogd進行處理,syslogd會根據/etc/syslog.conf的配置把log
資訊輸出到/var/log/下的不同檔案中。
本文轉自 pangfc 51CTO部落格,原文連結:http://blog.51cto.com/983836259/1296126,如需轉載請自行聯系原作者