博客地址:http://www.moonxy.com

一、前言

日志文件记录了系统每天发生的各种各样的事情,比如监测系统状况、排查问题等。作为系统运维人员可以通过日志来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。日志的主要功能是审计和监测,还可以实时地监测系统状态、监测和追踪侵入者等等。

二、系统日志文件

Linux日志文件绝大多数存放在 /var/log 目录,其中一些日志文件由应用程序创建,其他的则通过 syslog 来创建。

一般情况下,只需要关注核心的系统和应用程序日志。

例如:

全局系统活动信息等

基于 Debian 的系统,如 Ubuntu 在 /var/log/syslog 中存储。

基于 RedHat 的系统,如 RHEL 或 CentOS 在 /var/log/messages 中存储。

验证和授权信息等

Ubuntu 在 /var/log/auth.log 中存储

RedHat 和 CentOS 在 /var/log/secure 中存储。

2.1 /var/log/messages

日志文件 /var/log/messages 是核心系统日志文件,包含了系统启动时的引导消息,以及系统运行时的其他状态消息。I/O 错误、网络错误和其他系统错误都会记录到这个文件中。还有某个人的身份切换为 root 以及用户自定义安装的软件(Apache)的日志也会出现在此文件中。/var/log/messages 日志文件由 rsyslogd 这个守护进程产生,rsyslog 服务的配置文件为 /etc/rsyslog.conf,这个文件定义了日志的级别。

系统有一个日志轮询的机制,每星期切换一个日志,变成 messages-xxxxxxxx,一个有5个这样的日志文件。比如:

[root@ryan ~]# ll /var/log/messag*
-rw------- root root Jul : /var/log/messages
-rw------- root root May : /var/log/messages-
-rw------- root root May : /var/log/messages-
-rw------- root root Jun : /var/log/messages-
-rw------- root root Jul : /var/log/messages-

/etc/logrotate.conf 是日志的配置文件,可自定义上面的轮询周期和轮询次数等。

2.2 /var/log/secure

/var/log/secure 是和登录信息有关的日志文件。该日志文件记录验证和授权等方面的信息,比如 ssh 登录系统成功和失败时,相关的信息都会记录在这个日志里。

[root@ryan ~]# head /var/log/secure
Jul :: ryan sshd[]: Did not receive identification string from 197.89.57.193 port
Jul :: ryan sshd[]: Invalid user admin from 117.131.245.4 port
Jul :: ryan sshd[]: input_userauth_request: invalid user admin [preauth]
Jul :: ryan sshd[]: pam_unix(sshd:auth): check pass; user unknown
Jul :: ryan sshd[]: pam_unix(sshd:auth): authentication failure; logname= uid= euid= tty=ssh ruser= rhost=117.131.245.4
Jul :: ryan sshd[]: Failed password for invalid user admin from 117.131.245.4 port ssh2
Jul :: ryan sshd[]: Connection closed by 117.131.245.4 port [preauth]
Jul :: ryan sshd[]: Invalid user admin from 113.173.47.127 port
Jul :: ryan sshd[]: input_userauth_request: invalid user admin [preauth]
Jul :: ryan sshd[]: pam_unix(sshd:auth): check pass; user unknown

2.3 /var/log/wtmp

/var/log/wtmp 记录了用户登录成功的历史,但是这个是二进制文件,不能直接使用 cat、vim 等工具来查看。而是使用 last 命令来查看。如下:

[root@ryan ~]# last | head
root pts/ 124.89..5x Wed Jul : still logged in
root pts/ 124.89..5x Sun Jul : - : (:)
root pts/ 124.89..5x Tue Jun : - : (:)
root pts/ 124.89..5x Sat May : - : (:)
root pts/ 124.89..5x Fri May : - : (:)
root pts/ 124.89..5x Wed May : - : (:)
root pts/ 124.89..5x Tue May : - : (:)
root pts/ 124.89..5x Mon May : - : (:)
root pts/ 124.89..5x Sun May : - : (:)
root pts/ 124.89..5x Sat May : - : (:)

2.4 /var/log/btmp

/var/log/btmp 记录了用户登录失败的历史,同时该文件也是二进制文件,需要使用 lastb 命令来查看。如下:

[root@ryan ~]# lastb | head
root ssh:notty 221.131.87.254 Wed Jul : - : (:)
admin ssh:notty 186.3.164.38 Wed Jul : - : (:)
admin ssh:notty 186.3.164.38 Wed Jul : - : (:)
admin ssh:notty 180.183.45.21 Wed Jul : - : (:)
admin ssh:notty 180.183.45.21 Wed Jul : - : (:)
root ssh:notty 58.218.198.161 Wed Jul : - : (:)
root ssh:notty 58.218.198.161 Wed Jul : - : (:)
root ssh:notty 58.218.198.161 Wed Jul : - : (:)
root ssh:notty 58.218.198.161 Wed Jul : - : (:)
root ssh:notty 58.218.198.161 Wed Jul : - : (:)

2.5 dmesg

dmesg 命令可以显示系统的启动信息,可以看到硬件的检测或者断开连接的信息,内核缓冲信息(kernel ring buffer)。用 dmesg 查看系统启动信息的文件对应为:/var/log/dmesg

[root@ryan ~]# dmesg | head
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Initializing cgroup subsys cpuacct
[ 0.000000] Linux version 3.10.-693.2..el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8. (Red Hat 4.8.-) (GCC) ) # SMP Tue Sep :: UTC
[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-3.10.-693.2..el7.x86_64 root=UUID=eb448abb--4d8d-bcde-94434d586a31 ro crashkernel=auto rhgb quiet net.ifnames= console=tty0 console=ttyS0,115200n8
[ 0.000000] e820: BIOS-provided physical RAM map:
[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
[ 0.000000] BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000003ffdffff] usable

三、系统服务管理

3.1 ntsysv 服务配置工具

ntsysv 命令用来配置哪些服务开启或者关闭,类似于图形界面,不过是使用键盘来控制的。如果系统没有这个命令,请使用 yum install -y ntsysv 安装它,安装完毕之后运行 ntsysv 命令,如下:

可以使用空格来选中或者取消需要自动启动的服务,然后按 Tab 键来调到保存(OK)或者取消(Cancel),在按回车键。一般常用的服务如:crond、iptables、irqbalance、microcode_ctl、network、sendmail、sshd、syslog 均需要开启。修改之后需要重启服务器才能生效。

3.2 chkconfig 服务管理工具

Linux 系统所有的预设服务可以通过查看 /etc/init.d/ 目录得到,如下:

[root@ryan ~]# ll /etc/init.d
lrwxrwxrwx. root root Nov /etc/init.d -> rc.d/init.d
[root@ryan ~]# ls /etc/init.d
auditd haldaemon kdump netconsole nfs-rdma rdma saslauthd udev-post
crond halt killall netfs postfix restorecond single winbind
dnsmasq ip6tables mdmonitor network pppoe-server rsyslog sshd wpa_supplicant
functions iptables messagebus NetworkManager rdisc sandbox sysstat

系统的预设服务都可以通过这样的命令实现:service 服务名 start|stop|restart。这里的服务名就是 /etc/init.d/ 目录下的这些文件名了。如启动时可以使用:"service crond start",也可以使用命令:"/etc/init.d/crond start"。

独立服务启动办法:

1)/etc/init.d/ 或 /etc/rc.d/init.d 独立服务名 start|stop|status|restart

2)service 独立服务名 start|stop|status|restart ——【Redhat系列专有命令】,其实 service 就是去/ etc/init.d/ 这个目录下寻找指定的服务

第一种方法是启动服务的万能方法,而通过 service启动服务是Redhat系列专有命令。start 表示启动服务,stop 表示停止服务,status 表示查看指定服务是否启动,restart 表示重启指定服务。

使用 "chkconfig --list" 列出所有的服务及其各服务在每个级别下的开启状态,如下:

[root@ryan ~]# chkconfig --list
NetworkManager :off :off :on :on :on :on :off
auditd :off :off :on :on :on :on :off
crond :off :off :on :on :on :on :off
dnsmasq :off :off :off :off :off :off :off
haldaemon :off :off :off :on :on :on :off
ip6tables :off :off :on :on :on :on :off
iptables :off :off :on :on :on :on :off
kdump :off :off :off :on :on :on :off
mdmonitor :off :off :on :on :on :on :off
messagebus :off :off :on :on :on :on :off
netconsole :off :off :off :off :off :off :off
netfs :off :off :off :on :on :on :off
network :off :off :on :on :on :on :off
nfs-rdma :off :off :off :off :off :off :off
postfix :off :off :on :on :on :on :off
pppoe-server :off :off :off :off :off :off :off
rdisc :off :off :off :off :off :off :off
rdma :off :off :off :off :off :off :off
restorecond :off :off :off :off :off :off :off
rsyslog :off :off :on :on :on :on :off
saslauthd :off :off :off :off :off :off :off
sshd :off :off :on :on :on :on :off
sysstat :off :on :on :on :on :on :off
udev-post :off :on :on :on :on :on :off
winbind :off :off :off :off :off :off :off
wpa_supplicant :off :off :off :off :off :off :off

这里所说的级别(数字0-6)就是 /etc/inittab 里面对应的启动级别,运行级别0、1和6被系统保留。其中0作为 shutdown 动作,1作为重启至单用户模式,6为重启。在一般的 LInux 系统实现中,都是用 2、3、4、5 几个级别。在 CentOS 中,2表示无NFS支持的多用户模式,3表示完全多用户模式(最常用),4保留给用户自定义,5表示图形化登录方式。

开启或关闭某个服务的命令格式是:

chkconfig --level 级别 服务名 off/on

例如:

# chkconfig --level 345 crond off

--level 后面可以指定多个级别,默认是针对级别2、3、4和5操作的。

chkconfig 还可以把某个服务加入到系统服务或者删除,即可以使用 "chkconfig --add 服务名" 或者 "chkconfig --del 服务名"来操作,如下:

# chkconfig --add crond

# chkconfig --list |grep crond 或者 # chkconfig --list crond

# chkconfig --del crond

四、xargs 与 exec

xargs 与 exec 可以实现相同的功能,exec 主要是和 find 一起配合使用,是 find 的一个选项,而 xargs 比 exec 功能更多,常用在管道符之后。

4.1 xargs 应用

xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数,xargs 能够处理管道或者stdin并将其转换成特定命令的命令参数。xargs也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs 的默认命令是 echo,空格是默认定界符。这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。xargs 是构建单行命令的重要组件之一。

比如查找当前目录下创建时间大于10天的文件,然后删除。命令如下:

# find . -mtime + |xargs rm -rf

批量命名文件,将当前目录下所有的 txt 文件统一添加后缀_bak。命令如下:

# ls *.txt |xargs -n1 -i{} mv {} {}_bak

如下所示:

[root@ryan mytest]# ll
total
-rw-r--r-- root root Jul : .txt
-rw-r--r-- root root Jul : .txt
-rw-r--r-- root root Jul : .bat
[root@ryan mytest]# ls *.txt |xargs -n1 -i{} mv {} {}_bak
[root@ryan mytest]# ll
total
-rw-r--r-- root root Jul : .txt_bak
-rw-r--r-- root root Jul : .txt_bak
-rw-r--r-- root root Jul : .bat

其中,"xargs -n1 -i{}" 类似于 for 循环,-n1 表示对逐个对象进行处理,-i{} 表示用 {} 取代前面的对象,mv {} {}_bak相当于 mv file1.txt file1.txt_bak。

xargs 命令用法

xargs 用作替换工具,读取输入数据重新格式化后输出。

定义一个测试文件,内有多行文本数据:

cat test.txt

a b c d e f g
h i j k l m n
o p q
r s t
u v w x y z

多行输入单行输出:

cat test.txt | xargs

a b c d e f g h i j k l m n o p q r s t u v w x y z

-n选项多行输出:

cat test.txt | xargs -n3

a b c
d e f
g h i
j k l
m n o
p q r
s t u
v w x
y z

-d选项可以自定义一个定界符:

echo "nameXnameXnameXname" | xargs -dX

name name name name

结合-n选项使用:

echo "nameXnameXnameXname" | xargs -dX -n2

name name
name name

xargs的一个选项-I,使用-I指定一个替换字符串{},这个字符串在xargs扩展时会被替换掉,当-I与xargs结合使用,每一个参数命令都会被执行一次:

cat arg.txt | xargs -I {} ./sk.sh -p {} -l

-p aaa -l
-p bbb -l
-p ccc -l

-i[replace-str] 选项已经过期,使用 -I 选项代替。

4.2 exec 应用

exec 命令用于调用并执行指令的命令。exec 命令通常用在 shell 脚本程序中,可以调用其他的命令。如果在当前终端中使用命令,则当指定的命令执行完毕后会立即退出终端。-exec 作为 find 命令的选项,与 -ok 选项的作用类似,但是会询问用户(Like  -exec but ask the user first)。

比如查找当前目录下创建时间大于10天的文件并删除:

# find . -mtime + -exec rm -rf {} \;

这个命令中也是用 {} 替代前面 find 出来的文件。后的 \ 作为 ; 的转义符,否则 shell 会把分号作为该行命令的结尾。

-exec 同样可以实现上面提到的批量命名的功能,如下:

# find ./*.txt -exec mv {} {}_bak \;

五、screen 工具

5.1 使用 nohup

nohup

使用 & 命令后,作业被提交到后台运行,当前控制台没有被占用,但是一但把当前控制台关掉(退出帐户时),作业可能就会停止运行。nohup 命令可以在你退出账户之后继续运行相应的进程。nohup 就是不挂起的意思(no hang up)。该命令的一般形式为:

# nohup command &

如果使用 nohup 命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为 nohup.out 的文件中,除非另外指定了输出文件:

# nohup command > myout.file 2>&1 &

使用了 nohup 之后,很多人就这样不管了,其实这样有可能在当前账户非正常退出或者结束的时候,命令还是自己结束了。所以在使用 nohup 命令后台运行命令之后,需要使用exit正常退出当前账户,这样才能保证命令一直在后台运行。

5.2 screen 工具

screen 是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。screen 中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每个screen窗口中创建多个 screen 窗口,在每一个screen窗口中就像操作一个真实的SSH连接窗口一样。

screen 默认没有安装在 Linux 中,可以使用如下命令安装:

# yum install -y screen

运行 # screen 命令后会打开一个新的screen会话:

[root@ryan ~]# screen -ls
There is a screen on:
.pts-.ryan (Attached)
Socket in /var/run/screen/S-root.

如下所示:

然后按 Ctrl+a+d 键(先按 Ctrl+a,再按d)可以退出该 screen 会话,此时只是退出,并没有结束,结束 screen 会话要按 Ctrl+a 键或者输入 exit

[root@ryan ~]# screen
[detached]
[root@ryan ~]# screen -ls
There is a screen on:
.pts-.ryan (Detached)
Socket in /var/run/screen/S-root.

退出后如果还想再次登录某个 screen 会话,可以使用命令:screen -r [screen 编号],比如上面的 1935。如果只打开了一个 screen 会话,后面的编号可以省略。

当我们有某个需要长时间运行的命令或者脚本时就打开一个 screen 会话, 然后运行该任务,按 Ctrl+a 键,在按d退出会话,这样就不会影响终端窗口上其他的操作了。

Linux 笔记 - 第十三章 Linux 系统日常管理之(三)Linux 系统日志和服务的更多相关文章

  1. Linux 笔记 - 第十三章 Linux 系统日常管理之(二)Linux 防火墙和任务计划

    博客地址:http://www.moonxy.com 一.前言 Linux 下的的防火墙功能是非常丰富的,作为 Linux 系统工程师有必要了解一下.防火墙一般分为硬件防火墙和软件防火墙.但是,不管是 ...

  2. Linux 笔记 - 第十三章 Linux 系统日常管理之(四)Linux 中 rsync 工具和网络配置

    博客地址:http://www.moonxy.com 一.前言 rsync 命令是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机间的文件,可以理解为 remote sync(远程同步) ...

  3. Linux 笔记 - 第十三章 Linux 系统日常管理之(一)系统状态监控

    博客地址:http://www.moonxy.com 一.前言 如果你是一名 Linux 运维人员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行.系统运行状态主要包括:系统负载.内存状态 ...

  4. Linux 笔记 - 第二十三章 MySQL 主从复制配置

    一.前言 MySQL Replication,也被称为主从复制.AB 复制.简单来说就是 A 和 B 两台服务器做主从后,在 A 服务器上写入数据,B 服务器上也会跟着写入输入,两者之间的数据是实时同 ...

  5. centos Linux系统日常管理1 cpuinfo cpu核数 命令 w, vmstat, uptime ,top ,kill ,ps ,free,netstat ,sar, ulimit ,lsof ,pidof 第十四节课

    centos Linux系统日常管理1  cpuinfo cpu核数   命令 w, vmstat, uptime ,top ,kill ,ps ,free,netstat ,sar, ulimit ...

  6. centos linux系统日常管理复习 CPU物理数逻辑核数,iftop ,iotop ,sar ,ps,netstat ,一网卡多IP,mii-tool 连接,ethtool速率,一个网卡配置多个IP,mii-tool 连接,ethtool速率 ,crontab备份, 第十八节课

    centos linux系统日常管理复习 物理CPU和每颗CPU的逻辑核数,uptime ,w,vmstat,iftop ,iotop ,sar ,ps,netstat ,一个网卡配置多个IP,mii ...

  7. centos linux 系统日常管理4 scp,rsync,md5sum,sha1sum,strace ,find Rsync 常见错误及解决方法 第十七节课

    centos linux 系统日常管理4  scp,rsync,md5sum,sha1sum,strace ,find Rsync 常见错误及解决方法  第十七节课 rsync可以增量同步,scp不行 ...

  8. centos linux系统日常管理3 服务管理ntsysv,chkconfig,系统日志rsyslog,last ,lastb ,exec,xargs,dmesg,screen,nohup,curl,ping ,telnet,traceroute ,dig ,nc,nmap,host,nethogs 第十六节课

    centos linux系统日常管理3  服务管理ntsysv,chkconfig,系统日志rsyslog,last ,lastb ,exec,xargs,dmesg,screen,nohup,cur ...

  9. centos Linux系统日常管理2 tcpdump,tshark,selinux,strings命令, iptables ,crontab,TCP,UDP,ICMP,FTP网络知识 第十五节课

    centos  Linux系统日常管理2  tcpdump,tshark,selinux,strings命令, iptables ,crontab,TCP,UDP,ICMP,FTP网络知识 第十五节课 ...

随机推荐

  1. python历史背诵

    一.python简介 python2:源代码不统一 有重复功能的代码 默认编码是ascii 没有中文 输出中文需要用头文件 #-*-coding=utf-8-*- 进行转换 py3:源代码统一 没有重 ...

  2. 集成Ribbon的客户端调用工具——Feign

    什么是Feign? 客户端调用工具 Ribbon+RestTemplate Feign Feign特性: Feign本身包含Ribbon Fegin是一个采用基于接口的注解的声明式客户端调用工具,更加 ...

  3. 关于c++中的复合类型

    目录 数组 字符串 结构体 共用体 枚举 指针 数和指针的关系 常见的存储方式 数组替代品 一.数组 存储在每个元素中值的类型 数组名 数组中的元素数 通用格式:typename arrayname ...

  4. Python中模块与包的导入(朴实易懂版的总结)

    这几天,被python包与模块的导入问题,折磨的不行,以前想的很简单,其实不然,经查资料研究,特总结如下: 基本注意点 模块:一般指一个py文件:包:含有许多py文件的文件夹,含有 或不含有(Pyth ...

  5. spring data jpa 的使用

    使用spring data jpa 开发时,发现国内对spring boot jpa全面介绍的文章比较少案例也比较零碎,因此写文章总结一下. spring data jpa介绍 首先了解JPA是什么? ...

  6. python 27 异常处理

    目录 异常处理 1. 错误分类 2. 异常 3. 异常处理 4. 异常处理的两种方法 5. try的结构 5.1 结构一:单分支结构 5.2 结构二:多分支结构 5.3 结构三:万能异常 5.4 结构 ...

  7. unity之中级工程师

    主要是实际操作. Destroy(游戏对象):会真正销毁游戏对象. 动态链接库 热更新:用户不需要更新整个项目,只需要更新需要更新的部分,使用AssetBundle.PC,Android可以使用逻辑热 ...

  8. Codeforces 1009D

    题意略. 思路: 可知对于一个拥有n个点的图来说,它至少需要有n - 1条边来维持连通性,而且数字1恰好与后面的n - 1个数字互质: 至于n个点的图可以产生合法的互质边的个数的上限,我们可以通过莫比 ...

  9. Leetcode之二分法专题-744. 寻找比目标字母大的最小字母(Find Smallest Letter Greater Than Target)

    Leetcode之二分法专题-744. 寻找比目标字母大的最小字母(Find Smallest Letter Greater Than Target) 给定一个只包含小写字母的有序数组letters  ...

  10. MSIL实用指南-逻辑运算

    逻辑运算有三种:与.或.非.实现它们可以用位运算指令And.Or.Not等三个指令.它们的使用方法和位运算一致. 完整的程序如下: using System; using System.Reflect ...