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/下的不一样文件中。