Linux系统日志及screen工具

Linux系统日志

  • /var/log/nessages/:系统总日志存放位置
[root@localhost .ssh]# ls /var/log/messages
messages           messages-20170820  messages-20170828 
  • /etc/logrotate.conf:日志切割配置文件

    compress 通过gzip压缩转储以后的日志

    nocompress 不压缩

    copytruncate 用于还在打开中的日志文件,把当前日志备份并截断

    nocopytruncate 备份日志文件但是不截断

    create mode owner group 转储文件,使用指定的文件模式创建新的日志文件

    nocreate 不建立新的日志文件

    delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩

    nodelaycompress 覆盖

    delaycompress 选项,转储同时压缩。

    errors address 专储时的错误信息发送到指定的Email 地址

    ifempty 即使是空文件也转储,这个是 logrotate 的缺省选项。

    notifempty 如果是空文件的话,不转储

    mail address 把转储的日志文件发送到指定的E-mail 地址

    nomail 转储时不发送日志文件

    olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统

    noolddir 转储后的日志文件和当前日志文件放在同一个目录下

    prerotate/endscript 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行

    postrotate/endscript 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行

    daily 指定转储周期为每天

    weekly 指定转储周期为每周

    monthly 指定转储周期为每月

    rotate count 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份

    tabootext [+] list 让logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~

    size size 当日志文件到达指定的大小时才转储,bytes(缺省)及KB(sizek)或MB(sizem)

  • dmesg命令

  • dmesg:列出系统硬件相关的信息(位于内存中)

  • dmesg -c:清空信息

  • /var/log/dmesg:记录系统启动的日志

  • last命令:查看正确的登陆,重启等信息(其调用的文件为/var/log/wtmp)

[root@localhost ~]# last
root     pts/0        192.168.101.1    Tue Aug 29 21:27 - 21:27  (00:00)    
root     pts/1        192.168.101.1    Tue Aug 29 21:13   still logged in   
root     pts/0        192.168.101.1    Tue Aug 29 21:08 - 21:13  (00:04)    
root     tty1                          Tue Aug 29 21:06   still logged in   
reboot   system boot  3.10.0-514.el7.x Tue Aug 29 21:03 - 22:57  (01:53)    
root     tty1                          Tue Aug 29 20:36 - 20:43  (00:07)    
reboot   system boot  3.10.0-514.el7.x Tue Aug 29 20:35 - 22:57  (02:21)    
  • lastb命令:查看登陆失败的信息,对应文件为/var/log/btmp

  • /var/log/secrue :系统安全日志


screen工具

screen一个虚拟终端,作用是防止一个任务意外中断.系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份、ftp 传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为它们执行的时间太长了。必须等待它们执行完毕,在此期间不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。

  • 安装:yum install -y screen

  • 语法: screen [-AmRvx -ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>]

参数说明:

-A  将所有的视窗都调整为目前终端机的大小。

-d <作业名称>  将指定的screen作业离线。

-h <行数>  指定视窗的缓冲区行数。

-m 即使目前已在作业中的screen作业,仍强制建立新的screen作业。

-r <作业名称>  恢复离线的screen作业。

-R 先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。

-s 指定建立新视窗时,所要执行的shell。

-S <作业名称>  指定screen作业的名称。

-v 显示版本信息。

-x 恢复之前离线的screen作业。

-ls或--list 显示目前所有的screen作业。

-wipe 检查目前所有的screen作业,并删除已经无法使用的screen作业

screen常见用法:

  • screen:回车进入虚拟终端

  • ctrl+a,然后d,退出终端(仅仅是退出,而不是结束)

  • screen -ls:

[root@localhost ~]# screen
[detached from 2899.pts-0.localhost]
[root@localhost ~]# screen -ls
There is a screen on:
	2899.pts-0.localhost	(Detached)
1 Socket in /var/run/screen/S-root.
  • screen -r yourname :回到yourname这个session

  • screen -d -r yourname : 结束当前session并回到yourname这个session

在每个screen session 下,所有命令都以 ctrl+a(C-a) 开始:

  • C-a ? -> 显示所有键绑定信息

  • C-a c -> 创建一个新的运行shell的窗口并切换到该窗口

  • C-a n -> Next,切换到下一个 window

  • C-a p -> Previous,切换到前一个 window

  • C-a 0..9 -> 切换到第 0..9 个 window

  • Ctrl+a [Space] -> 由视窗0循序切换到视窗9

  • C-a C-a -> 在两个最近使用的 window 间切换

  • C-a x -> 锁住当前的 window,需用用户密码解锁

  • C-a d -> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里,每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。

  • C-a z -> 把当前session放到后台执行,用 shell 的 fg 命令则可回去。

  • C-a w -> 显示所有窗口列表

  • C-a t -> Time,显示当前时间,和系统的 load

  • C-a k -> kill window,强行关闭当前的 window

  • C-a [ -> 进入 copy mode,在 copy mode 下可以回滚、搜索、复制就像用使用 vi 一样

      C-b Backward,PageUp 
    
      C-f Forward,PageDown 
    
      H(大写) High,将光标移至左上角 
    
      L Low,将光标移至左下角 
    
      0 移到行首 
    
      $ 行末 
    
      w forward one word,以字为单位往前移 
    
      b backward one word,以字为单位往后移 
    
      Space 第一次按为标记区起点,第二次按为终点 
    
      Esc 结束 copy mode 
    

C-a ] -> Paste,把刚刚在 copy mode 选定的内容贴上


扩展内容

Linux日志文件总管——logrotate

logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件

例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循,并删除超过6个月的日志。配置完后,logrotate的运作完全自动化,不必进行任何进一步的人为干预

logrotate的配置文件是/etc/logrotate.conf,通常不需要对它进行修改。日志文件的轮循设置在独立的配置文件中,它(们)放在/etc/logrotate.d/目录下

实例1

背景:有一个10MB的日志文件/var/log/log-file,怎样使用logrotate来管理该日志文件?

  • 创建一个日志文件,填入一个10MB的随机比特流数据
[root@zyxlinux01 log]# du log-file 
0	log-file
[root@zyxlinux01 log]# head -c 10M < /dev/urandom > log-file 
[root@zyxlinux01 log]# du -sh log-file 
10M	log-file
  • 日志文件已经准备好,将配置logrotate来轮循该日志文件。为该文件创建一个配置文件
/var/log/log-file {
    monthly
    rotate 5
    compress
    delaycompress
    missingok
    notifempty
    create 644 root root
    postrotate
        /usr/bin/killall -HUP rsyslogd
    endscript
}
monthly: 日志文件将按月轮循。其它可用值为‘daily’,‘weekly’或者‘yearly’。

rotate 5: 一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除。

compress: 在轮循任务完成后,已轮循的归档将使用gzip进行压缩。

delaycompress: 总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。

missingok: 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。

notifempty: 如果日志文件为空,轮循不会进行。

create 644 root root: 以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。

postrotate/endscript: 在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。

上面的模板是通用的,而配置参数则根据需求进行调整,不是所有的参数都是必要的。

实例2

只轮循一个日志文件,日志文件大小可以增长到50MB

# vim /etc/logrotate.d/log-file

/var/log/log-file {
    size=50M
    rotate 5
    create 644 root root
    postrotate
        /usr/bin/killall -HUP rsyslogd
    endscript
}

实例3

让旧日志文件以创建日期命名,可以通过添加dateext常熟实现

# vim /etc/logrotate.d/log-file

/var/log/log-file {
    monthly
    rotate 5
    dateext
    create 644 root root
    postrotate
        /usr/bin/killall -HUP rsyslogd
    endscript
}

这将让归档文件在它们的文件名中包含日期信息


Xargs

xargs 可以读入stdin的资料,并且以空白字元或断行字元作为分辨,将 stdin 的资料分隔成为 arguments

之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了xargs命令

例如:

find /sbin -perm +700 |ls -l       这个命令是错误的
find /sbin -perm +700 |xargs ls -l   这样才是正确的

选项用法

  • -a:file 从文件中读入作为sdtin
[root@localhost ~]# cat test
#!/bin/sh
echo "hello world/n"
[root@localhost ~]# xargs -a test echo
#!/bin/sh echo hello world/n
[root@localhost ~]#
  • 当sdtin含有特殊字元时候,将其当成一般字符,如:“/”,空格等
[root@localhost ~]# echo "/" |xargs echo
/
  • -e: flag ,注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止
[root@localhost ~]# cat txt 
/bin zhou yi xuan
[root@localhost ~]# cat txt |xargs -E 'yi' echo
/bin zhou
  • -p: 当每次执行一个argument的时候询问一次用户
[root@localhost ~]# cat txt |xargs -p echo
echo /bin zhou yi xuan ?...y
/bin zhou yi xuan
  • -n: num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的
[root@localhost ~]# cat txt |xargs -n1 echo
/bin
zhou
yi
xuan
[root@localhost ~]# cat txt |xargs -n2 echo
/bin zhou
yi xuan
  • -:t 表示先打印命令,然后再执行
[root@localhost ~]# cat txt |xargs -t -n2 echo
echo /bin zhou 
/bin zhou
echo yi xuan 
yi xuan
  • -i: 或者是-I,这得看Linux支持了,将xargs的每项名称,一般是一行一行赋值给{},可以用{}代替

  • -r: no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了

[root@localhost ~]# echo "" |xargs -t mv
mv 
mv: 缺少了文件操作数
Try 'mv --help' for more information.
[root@localhost ~]# echo "" |xargs -t -r mv
  • -s:num 命令行的最好字符数,指的是xargs后面那个命令的最大命令行字符数

  • -d: delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符

  • -x: exit的意思,主要是配合-s使用


posted @ 2017-09-22 22:32  指环王Raul  阅读(314)  评论(0编辑  收藏  举报