linux系統日誌使用

FROM:http://blog.csdn.net/zzxian/article/details/7905964html

Part I:

syslogd & klogd   ---------/etc/syslog.conf

/var/log/secure:登陸到系統存取資料的記錄;FTP、SSH、TELNET...
/var/log/wtmp:記錄登陸者訊錄,二進制文件,須用last來讀取內容
/var/log/messages:雜貨鋪
/var/log/boot.log:記錄開機啓動訊息,dmesg | morelinux

1、常識 # ps aux | grep syslog # chkconfig --list | grep syslog # cat /var/log/secureweb

/etc/syslog.conf 哪些服務產生的哪些等級訊息記錄到哪裏 記錄到相同地方的多個訊息源用分號間隔 vi /etc/syslog.confshell

2、接收遠程日誌 # 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/syslogdbash

對應client # vi /etc/syslog.conf *.*       @192.168.1.100服務器

3、logrotate網絡

    *  /etc/logrotate.conf     * /etc/logrotate.d/app

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 } 一、用空格做多個檔案分隔 二、全部設定在{}中 三、# 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.

4、實例: 要求: 登陸檔案每個月替換一次        若> 10MB ;強制替換,不不考慮一個月的期限;        保存五備份文檔;        備份文檔不壓縮。

步驟1: root@linux ~]# chattr +a /var/log/admin.log [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         sharedscripts         postrotate                 /usr/bin/killall -HUP syslogd                 /usr/bin/chattr +a /var/log/admin.log         endscript } 步驟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/*文檔要求來輪替日誌。

5、常見指令:

# 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) dmtsai2  pts/2             Mon Oct 24 14:18 - 14:18  (00:00) 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這樣提供網絡服務的服務器也保持詳細的日誌。

二、經常使用的日誌文件以下:  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使用。這兩個命令所按歷史記錄進行統計
三、. 具體命令
  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必須先存在。 一、先使用touch命 令來建立pacct文件:touch /var/log/pacct, 二、而後運行accton: accton /var/log/pacct。 三、一旦accton被激活,就可使用lastcomm命令監測系統中任什麼時候候執行的命令。 四、若要關閉統計,可使用不帶任何參數的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 errors root@serve1r mail root@server1 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  ftp://coast.cs.purdue.edu/pub/tools/unix/chklastlog/  chkwtmp  ftp://coast.cs.purdue.edu/pub/tools/unix/chkwtmp/  dump_lastlog  ftp://coast.cs.purdue.edu/pub/tools/unix/dump_lastlog.Z  spar

ftp://coast.cs.purdue.edu/pub/tools/unix/TAMU/  Swatch  http://www.lomar.org/komar/alek/pres/swatch/cover.html  Zap  ftp://caost.cs.purdue.edu/pub/tools/unix/zap.tar.gz  日誌分類方法  http://csrc.nist.gov/nissc/1998/proceedings/paperD1.pdf




Part III. 將Linux設置成Cisco路由器的日誌服務器

首先 設置系統日誌配置文件:

Vi /etc/sysconfig/syslog

SYSLOGD_OPTIONS="-m 0"

修改成

SYSLOGD_OPTIONS="-r -m 0" //-r 從遠端主機寫入 -m 0 sables 'MARK' messages

vi /etc/syslog.conf

加入下列內容

把設備號爲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

增長下列內容

# system-specific logs may be also be configured here.
/var/log/router.log (
rotate 2
}
/var/log/S8016.log {
weekly //每週輪循
rotate 4 //輪循4次
}

配置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的配置

logging 133.3.3.2 
logging on 
logging trap 6 
logging facility local0



Part IV. 摸清Linux日誌處理的前因後果

每一個使用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/下的不一樣文件中。

相關文章
相關標籤/搜索