centos linux系统日常管理3 服务管理ntsysv,chkconfig,系统日志rsyslog,last ,lastb ,exec,xargs,dmesg,screen,nohup,curl,ping ,telnet,traceroute ,dig ,nc,nmap,host,nethogs,base64,jq 第十六节课
上半节课
ntsysv
chkconfig
下半节课
rsyslog
/var/log/messages
/var/log/secure
/var/log/maillog
/var/log/cron
/var/log/spooler
/var/log/boot.log
/var/log/dmesg
last
lastb
dmesg
exec
xargs
screen
nohup
curl
ping
telnet
traceroute
dig
nc
host
nmap
nethogs
base64
jq
Linux系统服务管理
ntsysv
工具ntsysv 类似图形界面管理工具,如果没有该命令安装 yum install -y ntsysv
常用服务:crond, iptables, network, sshd, syslog, irqbalance, sendmail, microcode_ctl
保存后需要reboot才能生效
chkconfig (命令行服务管理工具)
列出服务列表: chkconfig --list
关闭2级别 : chkconfig --level atd off
多个level,关闭2,3级别: chkconfig --level atd off
列出atd服务: chkconfig --list atd
开启/关闭3,4,5级别: chkconfig --level [] servicename on/off
默认就是2,3,4,5级别: chkconfig atd off ;chkconfig atd on
删除/添加:chkconfig --add/del servicename
添加自定义服务
cd /etd/init.d/
vi lin //在脚本里面增加chkconfig 345 95 5 345指默认345启动级别,95开启,5关闭 指定开启和关闭顺序
cp lin /etd/init.d/lin //拷贝启动脚本lin到/etd/init.d/目录
chkconfig --add lin
chkconfig lin on
chmod lin //增加脚本执行权限
chkconfig --list lin
查看每个服务脚本的启动/关闭顺序 S,K: ls /etc/rc.d/rc3.d/
在配置文件里更改服务的启动顺序,重启服务器生效reboot: vi /etc/init.d/crond
下半节课
Linux系统日志
rsyslog日志包含一系列的日志,centos6叫syslog,并由syslogd服务保障运行
r表示remote支持保存到远程服务器上: cat /etc/rsyslog.conf
核心系统日志文件 : cat /var/log/messages
/etc/logrotate.conf
messages由syslogd这个守护进程产生的,如果停掉这个服务则系统不会产生 /var/log/messages
# chkconfig --list |grep syslog*
rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
/var/log/messages
/var/log/secure
/var/log/maillog
/var/log/cron
/var/log/spooler
/var/log/boot.log
记录当前登录的用户 /var/run/utmp ,u tmp cat /var/run/utmp
查看用户登录历史 last w tmp: cat /var/log/wtmp 只查看最后10条最新记录 last -
查看无效登录历史 lastb bad tmp : cat /var/log/btmp 只查看最后10条最新记录 lastb -
收发邮件相关的 ,sendmail和postfix发过的邮件: cat /var/log/maillog 查看邮件队列 mailq /var/spool/mqueue
安全登录相关的: cat /var/log/secure
硬件相关的,只存在于内存中,不保存在文件中 dmesg命令: dmesg
dmesg日志文件记录开机启动跟硬件相关的日志跟dmesg命令不一样: cat /var/log/dmesg
dmesg
功能说明:显示开机信息。
kernel会将开机信息存储在ring buffer中。您若是开机时来不及查看信息,可利用dmesg来查看。开机信息亦保存在/var/log目录中,名称为dmesg的文件里。
参 数:
-c 显示信息后,清除ring buffer中的内容。
-s<缓冲区大小> 预设置为8196,刚好等于ring buffer的大小。
-n 设置记录信息的层级。
dmesg -s > /var/log/dmesg
exec
exec 和find同时使用,; :脱义,因为跟shell里面的;分号两条命令一起执行不同
查找当前目录创建时间大于10天的文件并删除 : find . -mtime + -exec rm -rf {} \;
批量更改文件名: find ./* -exec mv {} {}_bak \;
批量拷贝: find /etc/ -type f exec cp {} /tmp/etc_bak/ \;
xargs
xargs会把管道符前面的所有文件组成一串,每两个对象之间用空格隔开,用在管道符号后面
批量删除10天前的文件: find . -mtime + |xargs rm -rf
批量改名: ls -d ./* |xargs -i{} mv {} {}_bak
批量拷贝: find /etc/ -type f |xargs -i cp {} /tmp/etc_bak/
xargs 可以把多行变成一行 : cat .txt|xargs
注意:ls需要cd到目录下,find不需要,因为find将路径传递给后面的命令,例如mv ,而ls没有传递路径
# find /root// -type f
/root//.txt.vcp_bak_bak
/root//.txt.vcp_bak_bak
/root//.txt.vcp_bak_bak
[root@steven ~]# ls /root//
.txt.vcp_bak_bak .txt.vcp_bak_bak .txt.vcp_bak_bak
-i 后面加不加{} 都无所谓: ls -d ./* |xargs -i{} mv {} {}_bak 等价 ls -d ./* |xargs -i mv {} {}_bak
#cd
# ls
.txt .txt .txt
# ls |xargs -i mv {} {}.vcp
# ls
.txt.vcp .txt.vcp .txt.vcp
screen
nohup
安装: yum install -y screen
命令执行后按回车 nohup:忽略输入并把输出追加到"nohup.out": nohup sleep &
日志输出: ls nohup.out
screen 工具介绍
screen相当于一个虚拟终端,它不会因为网络中断而退出,每次登录都可以进入那个screen
使用方法:直接输入screen命令
Ctrl +a 再按d退出该screen会话,只是退出,并没有结束。结束的话输入Ctrl +d 或者输入exit
退出后还想再次登录某个screen会话,使用sreen -r screenid 若只有一个screen 直接screen -r
screen -S aming ; 登录的话 screen -r aming
screen -X -S id号 quit 把已经死掉的(Detached) screen退出
session会保存在下面路径,每个用户都有单独的目录,目录下面存放session名
ls -R /var/run/screen/
/var/run/screen/:
S-root S-steven /var/run/screen/S-root:
.tailzabbixlog /var/run/screen/S-steven:
http://www.cnblogs.com/mchina/archive/2013/01/30/2880680.html#top
参数说明
-d <会话名称> 将指定的screen作业离线。
-r <会话名称> 恢复离线的screen作业。
-R 先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s 指定建立新视窗时,所要执行的shell。
-S <会话名称> 指定screen作业的名称。
-v 显示版本信息。
-x <会话名称> 附加到指定会话并回放指定会话录像,而且附加到会话之后所在session用户依然可以操作(Attach to a not detached screen session. (Multi display mode).)
-ls或--list 显示目前所有的screen作业。
-wipe 检查目前所有的screen作业,并删除已经无法使用的screen作业,清除已经dead的会话 在每个screen session 下,所有命令都以 ctrl+a(C-a) 开始。 常用screen参数
screen -S screenname -> 新建一个叫screenname的session
screen -ls -> 列出当前所有的session
screen -m 即使目前已在作业中的screen作业,仍强制建立新的screen作业。
screen -r screenname或screenid -> 回到screenname或screenid这个session
screen -d screenname -> 远程detach某个session 暂时断开(detach)screen会话
screen -d -r screenname或screenid -> 结束当前session并回到screenname或screenid这个session
screen -d ->断开(detach)当前screen会话
Ctrl +d 或者输入exit -> 结束screen会话
screen -r ->若只有一个screen 直接恢复,不用指定
screen ->不输入screenname则以当前终端为名称的session
screen -wipe ->清除已经dead的screen会话 --总结----------------------------------------
screen -ls
kill 根据screen -ls 命令得出的pid去kill screen会话
screen -S screenname
screen -r screenname或screenid 恢复
screen -d screenname 或screenid 分离
Ctrl -a d 脱离当前session
exit
screen -dmS abc 强制分离abc这个会话,并删除现有abc会话重建一个新的abc会话,之前那个abc会话不要了 回放录像
sessionA
screen -S test
sessionB 不仅能看到对方的操作 而且还能进行操作
screen -x test
curl
curl是Linux系统命令行下用来简单测试web访问的工具
-I /-i只显示header,-v显示详细过程: curl -Iv http://www.qq.com 或 curl -I http://www.qq.com 或 curl -i www.baidu.com
-x 指定代理服务器地址ip和端口,指定反向代理nginx,可以省略修改 /etc/hosts: curl -xip:port www.baidu.com 或 curl -I -x61.66.66.: www.qq.com
-u可以指定用户名和密码,HTTP头会显示401的状态码curl -uxx:xx -I: curl -u user:password http://123.com 或 curl -u lin: http://123.com
-o小o下载文件,需要自定义名字,文件已存在会直接覆盖: curl -o index2.html http://study.lishiming.net/index.html 、 curl -o /tmp/index2.txt www.80ops.cn/.txt
-O大o下载文件,不需要指定名字,文件已存在会直接覆盖: curl -O http://study.lishiming.net/index.html
-e使用referer,测试防盗链功能: curl -e " www.1.com/2.jpg http://www.baidu.com/xxxx"
-s使用silent模式,不显示下载的进度条: curl -s "http://www.baidu.com"
-H, --header LINE 自定义http头发给服务器
http://www.cnblogs.com/MYSQLZOUQI/p/4883828.html
# curl -I http://www.chk1.com
HTTP/1.1 OK
Server: nginx
Date: Sun, Oct :: GMT
Content-Type: text/html; charset=utf-
Content-Length:
Connection: keep-alive
Vary: Accept-Encoding
Cache-Control: private
-x 指定代理服务器,相当于假借身份,比如:curl -I -x61.66.66.66:80 www.qq.com,腾讯服务器以为你的ip就是61.66.66.66,但是你的真正ip是61.76.88.89(打比方)
注意:代理服务器一定是可以访问的,否则终端会一直卡着,一动不动,例如下面,由于内网并没有192.68.0.101这台机,然后终端一直卡着
http提交一个表单,比较常用的是POST模式和GET模式
GET模式什么option都不用,只需要把变量写在url里面就可以了: curl http://www.yahoo.com/login.cgi?user=nickwolfe&password=12345
而POST模式的option则是 -d ,向站点发出一次登陆申请 :
curl -d "user=nickwolfe&password=12345" http://www.yahoo.com/login.cgi
curl -d hostname='node03' -d ip='192.168.1.3' -d osver='CentOS 6.5' -d vendor='HP' -d product="BL 380" -d sn="XXX123" -d cpu_model="Intel" -d cpu_num= -d memory="32G" http://192.168.1.5:8000/hostinfo/collect/
curl 操作http协议 GET/PUT/POST/DELETE ,大写X: curl -X GET /post/put/delete www.baidu.com
继续使用上次留下的cookie信息追加到http request里面-b : curl -x 123.45.67.89: -o page1.html -D cookie0002.txt -b cookie0001.txt http://www.linuxidc.com
--127.0.0.1:Linux虚拟机,没有SQL Server
--192.168.1.8 公司测试机,有安装SQL Server
--192.168.1.106 自己机器,有安装SQL Server
#curl -x127.0.0.1 192.168.1.8:1433 --不加端口,而且127.0.0.1 没有安装SQL Server没有侦听1433端口,无法连接
--#curl: (7) couldn't connect to host
# curl 192.168.1.8:1433 --可以连接
curl: (52) Empty reply from server
# curl -x192.168.1.106:1433 192.168.1.8:1433 --curl需要可以连上192.168.1.106,如果192.168.1.106不存在则couldn't connect to host
curl: (52) Empty reply from server
# curl -x192.168.1.106 192.168.1.8:1433 --curl需要可以连上192.168.1.106,并且需要指定代理服务器的端口,否则couldn't connect to host
--curl: (7) couldn't connect to host
curl -x127.0.0.1:1433 192.168.1.8:1433 --Linux虚拟机没有安装SQL Server,没有侦听1433端口
--curl: (7) couldn't connect to host
几个和网络相关的命令
ping -c 次数:
ping -c www.baidu.com
ping -I eth0 -c -q www.baidu.com
-d 使用Socket的SO_DEBUG功能。
-f 极限检测。大量且快速地送网络封包给一台机器,看它的回应。
-n 只输出数值。
-q 不显示任何传送封包的信息,只显示最后的结果。
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。通常是查看本机的网络接口是否有问题。
-R 记录路由过程。
-v 详细显示指令的执行过程。
-c 数目:在发送指定数目的包后停止。
-i 秒数:设定间隔几秒送一个网络封包给一台机器,预设值是一秒送一次。
-I 网络界面:使用指定的网络界面送出数据包。
-l 前置载入:设置在送出要求信息之前,先行发出的数据包。
-p 范本样式:设置填满数据包的范本样式。
-s 字节数:指定发送的数据字节数,预设值是56,加上8字节的ICMP头,一共是64ICMP数据字节。
-t 存活数值:设置存活数值TTL的大小。
-w 是指执行的最后期限,也就是执行的时间,单位为秒
telnet客户端 :安装 yum install -y telnet ; telnet www.qq.com 按ctrl+] 退出telnet
traceroute 跟踪跳数 :安装 yum install traceroute ; traceroute www.qq.com
nc 全称netcat ,扫描服务器开放了哪些端口,可以检测UDP端口和TCP端口,-w 2 表示 2s超时 port 这里可以只写一个端口,也可以写一个范围。 使用nc扫描端口时,必须要加 -z 否则不显示结果,-z 选项:一旦建立连接后马上断开,而不发送和接收任何数据。另外,如果想把不开放的端口也显示出来,可以加一个 -v,-v显示更多的冗余信息
扫描百度1-1024端口范围 : nc -v -z -w 2 www.baidu.com -
后台扫描端口: nohup nc -v -z -w 2 www.baidu.com - >>/root/.txt >& &
安装: # yum install nc -y
ss命令用法(和netstat类似的) http://www.ttlsa.com/linux-command/ss-replace-netstat/
检测NTP服务器端口是否打开 UDP 123
# nc -zuv 110.75.186.247 #1288这个端口不通
# nc -zuv 202.120.2.101 #101这台机器没有打开123这个端口
# nc -zuv 110.75.186.247 #247这台机器打开了123这个端口
Connection to 110.75.186.247 port [udp/ntp] succeeded!
图片来自《Oracle Exadata技术详解-李亚》
telnet只能对tcp端口进行检测,netcat可以对udp端口进行检测,运行命令如果没有返回123 port [udp/ntp] succeeded!表示udp 123端口没有打开
如果非要在Windows上面测试UDP可以选择安装nmap进行测试。
udp端口
53端口 DNS
67和68 DHCP
123 NTP
# nc -v -z -w 2 www.chk.com 1-1024
Connection to www.chk.com 80 port [tcp/http] succeeded!
Connection to www.chk.com 443 port [tcp/https] succeeded!
nc选项
-u Use UDP instead of the default option of TCP.
-z Specifies that nc should just scan for listening daemons, without sending any data to them. It is an error to
use this option in conjunction with the -l option.
-w timeout
If a connection and stdin are idle for more than timeout seconds, then the connection is silently closed. The -w
flag has no effect on the -l option, i.e. nc will listen forever for a connection, with or without the -w flag.
The default is no timeout.
-x proxy_address[:port]
Requests that nc should connect to hostname using a proxy at proxy_address and port. If port is not specified,
the well-known port for the proxy protocol is used (1080 for SOCKS, 3128 for HTTPS).
nc作为TCP服务器
#窗口一
#作为服务器端 监听本机的12345端口
nc -l 127.0.0.1 #窗口二
#作为客户端发送信息到服务器端
echo sdfsdfsdlkjklj >/tmp/.txt
nc 127.0.0.1 </tmp/.txt #窗口三
#启动logstash 接受tcp客户端发送来的信息
cat /tmp/tcp.conf
input {
tcp {
port =>
mode =>"server"
ssl_enable =>false
}
} output {
stdout{}
} /usr/local/logstash-2.0./bin/logstash -f /tmp/tcp.conf
Default settings used: Filter workers:
Logstash startup completed
--04T03::.355Z 127.0.0.1 sdfsdfsdlkjklj
nmap
跨平台、开源、文档丰富,windows也可以安装,是Network Mapper 的简称。可以检测TCP端口和UDP端口
主机发现( Host Discovery )、端口扫描( Port Scanning ) 、版本侦测( Version Detection ) 、操作系统侦测( Operating System Detection)
安装nmap
yum install nmap
nmap [扫描类型] [选项] {目标说明}
选项
-sL 仅仅打印IP 列表,不会进行任何操作,支持多种通配符
nmap -sL 192.168.0.0/30
nmap -sL 192 168.0.101 192.168.0.102 192.168.0.103
nmap -sL 192.168.0.*
nmap -sL 192.168.0.101,102,103
nmap -sL 192.168.0.101-110
nmap -sL 192.168.0.* --exclude 192.168.0.100
nmap -sL hostname
-iL 从文件读取ip地址并扫描
nmap -iL ip.list
-sP /-sn 不要进行端口扫描,仅仅判断主机是否可达,类似ping命令
nmap -sP 10.166.224.*
nmap -sn 10.166.224.* TCP 空扫描来欺骗防火墙
-sv 端口上运行的应用程序及版本信息
nmap -sv 10.166.224.140
-so 操作系统检测,检测主机运行的操作系统类型及设备类型
nmap -so 10.166.224.140
不添加任何参数便是对主机进行端口扫描。默认情况下, nmap 将会扫描1000 个最常用的端口号
端口扫描协议: T(TCP)、U(UDP)、S (SCTP)、p(IP);
端口扫描类型:-sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon scans
扫描的端口号:-p 80,443 -p 8-160
nmap 10.166.224.140
-p22; -p1-65535 ; -p U:53,lll,137,T:21-25,80,139,8080,S:9
端口状态
open:端口是开放的
closed:端口是关闭的
filtered:被防火墙IDS/IPS屏蔽,无法确定其状态
unfiltered:端口没有被屏蔽,但是否开放需要进一步确定
open|filtered:端口开放或被屏蔽
closed|filtered:端口关闭或被屏蔽
端口扫描类型
TCP SYNC SCAN :半开放扫描,这种类型的扫描为发送一个SYN 包,启动一个TCP 会话,并等待响应的数据包。如果收到的是一个reset 包,表明端口是关闭的;
如果收到的是一个SYNC/ACK 包,则表示端口是打开的。
TCP NULL SCAN : NULL 扫描把TCP 头中的所有标志位都设置为NULL 。如果收到的是一个RST 包,则表示相应的端口是关闭的。
TCP FIN SCAN : TCP FIN 扫描发送一个表示结束一个活跃的TCP 连接的FIN 包,让对方关闭连接。如果收到了一个RST 包,则表示相应的端口是关闭的。
TCP XMAS SCAN : TCP XMAS 扫描发送PSH 、FIN 、URG 和TCP 标志位被设置为l 的数据包,如果收到一个RST 包,则表示相应端口是关闭的。
dig (全称是domain information groper)跟DNS相关的命令,不加@8.8.8.8 使用本地DNS /etc/resolv.conf,主要跟@选项 DNS的IP:安装 yum install -y bind* (bind-util); dig @22.22.22.22 www.baidu.com
-t选项,用来设置查询类型,默认情况下是A,也可以设置MX等类型: dig baidu.com -t MX
-x 选项,查看反向解析: dig -x 210.52.83.228
host host命令提供一个简单的DNS解析的功能。正常地使用域名到IP的解析,当指令没有任何参数和选项的时候,它将输出简单的带命令行参数和选项的概要。
参数可以是IP也可以是域名,也可以反向解析
正向解析
host 114.114.114.114
114.114.114.114.in-addr.arpa domain name pointer public1.114dns.com.
反向解析
host public1.114dns.com
public1.114dns.com has address 114.114.114.114
指定DNS的ip
host www.baidu.com 114.114.114.114
Using domain server:
Name: 114.114.114.114
Address: 114.114.114.114#
Aliases: www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 180.97.33.108
www.a.shifen.com has address 180.97.33.107
nethogs
实时监控各个进程的网络流量
安装
yum install -y nethogs
nethogs 网卡名
参数
nethogs [-V] [-b] [-d seconds] [-t] [-p] [device [device [device ...]]]
-V : 显示版本信息,注意是大写字母V.
-d : 延迟更新刷新速率,以秒为单位。默认值为 1.
-t : 跟踪模式.
-b : bug 狩猎模式 — — 意味着跟踪模式.
-p : 混合模式(不推荐).
设备 : 要监视的设备名称. 默认为 eth0
q: 退出
m: 总数和当前使用情况模式之间切换
base64
base64 编码
base64 -d --decode 解码
base64 -d -i -ignore-garbage 忽略控制字符
base64 file 对文件里的内容编码并输出
貌似==表示换行
将字符串str+换行 编码为base64字符串输出
echo "str" | base64
c3RyCg==
将字符串str编码为base64字符串输出。注意与上面的差别
echo -n "str" | base64
c3Ry
从指定的文件file中读取数据,编码为base64字符串输出
base64 .txt
d3d3d3cKeHh4Cg==
从标准输入中读取已经进行base64编码的内容,解码输出
echo -n "c3RyCg==" |base64 -d
str
从标准输入中读取已经进行base64编码的内容,解码输出。加上-i参数,忽略非字母表字符也就是控制字符,比如换行符
echo -n "c3RyCg==" | base64 -d -i
str
jq
Linux下处理JSON的命令行工具
yum install -y jq
使用jq格式化,格式化web api返回的数据
curl -s http://t.weather.sojson.com/api/weather/city/101310215 | jq
使用jq格式化,格式化文件中的数据
cat json_raw.txt | jq
内建函数
jq还有一些内建函数如 key,has
key是用来获取JSON中的key元素的
cat json_raw.txt | jq 'keys'
has是用来是判断是否存在某个key
cat json_raw.txt | jq 'has("name")'
centos6默认改为 rsyslog.conf 之前版本是 syslog.conf. 该配置文件主要信息为:记录哪些服务和需要记录什么等级的信息。
日志格式:
auth –pam产生的日志
authpriv –ssh,ftp等登录信息的验证信息
cron –时间任务相关
kern –内核
lpr –打印
mail –邮件
mark(syslog)–rsyslog服务内部的信息,时间标识
news –新闻组
user –用户程序产生的相关信息
uucp –unix to unix copy, unix主机之间相关的通讯
local 1~7 –自定义的日志设备
日志级别:
debug –有调式信息的,日志信息最多
info –一般信息的日志,最常用
notice –最具有重要性的普通条件的信息
warning –警告级别
err –错误级别,阻止某个功能或者模块不能正常工作的信息
crit –严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert –需要立刻修改的信息
emerg –内核崩溃等严重信息
none –什么都不记录
从上到下,级别从低到高,记录的信息越来越少
连接符号
.xxx: 表示大于等于xxx级别的信息
.=xxx:表示等于xxx级别的信息
.!xxx:表示在xxx之外的等级的信息
/etc/rsyslog.conf # rsyslog v5 configuration file # For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html #### MODULES #### $ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog # provides kernel logging support (previously done by rklogd)
#$ModLoad immark # provides --MARK-- message capability # Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun # Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun #### GLOBAL DIRECTIVES #### # Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat # File syncing capability is disabled by default. This feature is usually not required,
# not useful and an extreme performance hit
#$ActionFileEnableSync on # Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf #### RULES #### # Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console # Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages # The authpriv file has restricted access.
authpriv.* /var/log/secure # Log all the mail messages in one place.
mail.* -/var/log/maillog # Log cron stuff
cron.* /var/log/cron # Everybody gets emergency messages
*.emerg * # Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler # Save boot messages also to boot.log
local7.* /var/log/boot.log # ### begin forwarding rule ###
# The statement between the begin ... end define a SINGLE forwarding
# rule. They belong together, do NOT split them. If you create multiple
# forwarding rules, duplicate the whole block!
# Remote Logging (we use TCP for reliable delivery)
#
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
#$WorkDirectory /var/lib/rsyslog # where to place spool files
#$ActionQueueFileName fwdRule1 # unique name prefix for spool files
#$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible)
#$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
#$ActionQueueType LinkedList # run asynchronously
#$ActionResumeRetryCount -1 # infinite retries if host is down
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
#*.* @@remote-host:514
# ### end of the forwarding rule ###
控制日志归档的配置文件
# cat /etc/logrotate.d/syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid > /dev/null` > /dev/null || true
endscript
}
du -sh /var/log/message* // messages日志归档 7天归档一次
64K /var/log/messages
68K /var/log/messages-20150913
64K /var/log/messages-20150920
32K /var/log/messages-20150927
4.0K /var/log/messages-20151004
# du -sh /var/log/secure* // secure日志归档 7天归档一次
792K /var/log/secure
332K /var/log/secure-20150913
756K /var/log/secure-20150920
372K /var/log/secure-20150927
176K /var/log/secure-20151004
# du -sh /var/log/btmp*
664K /var/log/btmp
948K /var/log/btmp-20151001
http://www.rsyslog.com/
RSYSLOG is the rocket-fast system for log processing.
It offers high-performance, great security features and a modular design. While it started as a regular syslogd, rsyslog has evolved into a kind of swiss army knife of logging, being able to accept inputs from a wide variety of sources, transform them, and output to the results to diverse destinations.
RSYSLOG can deliver over one million messages per second to local destinations when limited processing is applied (based on v7, December 2013). Even with remote destinations and more elaborate processing the performance is usually considered "stunning".
RSYSLOG:
- Multi-threading
- TCP, SSL, TLS, RELP
- MySQL, PostgreSQL, Oracle and more
- Filter any part of syslog message
- Fully configurable output format
- Suitable for enterprise-class relay chains
f
last
第一列:用户名
第二列:终端位置。pts/0 (伪终端) 意味着从诸如SSH或telnet的远程连接的用户.tty (teletypewriter) 意味着直接连接到计算机或者本地连接的用户
第三列:登录ip或者内核 。如果你看见:0.0 或者什么都没有,这意味着用户通过本地终端连接 ,终端显示为tty。在重启活动时内核版本会显示在状态中。
第四列:开始时间
第五列:结束时间(still login in 还未退出 down 直到正常关机 crash 直到强制关机)
第六列:持续时间
# last
steven pts/ 192.168.1.11 Sun Oct : still logged in
steven pts/ 192.168.1.11 Sat Oct : - : (:)
steven pts/ 192.168.1.10 Sat Oct : - : (:)
steven pts/ 192.168.1.10 Fri Oct : - : (:)
steven pts/ 192.168.1.10 Fri Oct : - : (:)
steven pts/ 192.168.1.10 Fri Oct : - : (:)
steven pts/ 192.168.1.10 Fri Oct : - : (:)
steven pts/ 192.168.1.10 Thu Oct : - : (:)
steven pts/ 192.168.1.18 Tue Oct : - : (:)
steven pts/ 192.168.1.19 Mon Oct : - : (:)
steven pts/ 192.168.1.19 Mon Oct : - : (:)
steven pts/ 192.168.1.12 Sun Oct : - : (:)
reboot system boot 2.6.-.el6.x Sun Oct : - : (+:)
steven pts/ 192.168.1.12 Sun Oct : - down (:)
steven pts/ 192.168.1.12 Sun Oct : - : (:)
root pts/ 192.168.1.13 Mon Sep : - : (:)
root pts/ 192.168.1.13 Sun Sep : - : (:)
root pts/ 192.168.1.20 Sun Sep : - : (:)
root pts/ 192.168.1.21 Sun Sep : - : (:)
reboot system boot 2.6.-.el6.x Sun Sep : - : (+:)
root pts/ 192.168.1.17 Mon Sep : - : (:)
root pts/ 192.168.1.6 Mon Sep : - : (:)
root pts/ 192.168.1.17 Mon Sep : - : (:)
root pts/ 192.168.1.7 Sun Sep : - : (:)
root pts/ 192.168.1.8 Sat Sep : - : (:)
root pts/ 192.168.1.9 Sat Sep : - : (:)
root pts/ 192.168.1.16 Thu Sep : - : (:)
root pts/ 192.168.1.16 Thu Sep : - : (:)
root tty1 Thu Sep : - down (+:)
reboot system boot 2.6.-.el6.x Thu Sep : - : (+:)
root tty1 Thu Sep : - down (:)
root pts/ 192.168.1.22 Thu Sep : - : (:) wtmp begins Thu Sep ::
lastb 有人尝试登录
# lastb -
root ssh:notty 115.206.19.56 Fri Oct : - : (:)
root ssh:notty 91.221.134.113 Fri Oct : - : (:)
root ssh:notty 204.11.230.158 Thu Oct : - : (:)
admin ssh:notty 45.32.9.123 Thu Oct : - : (:)
admin ssh:notty 45.32.9.123 Thu Oct : - : (:)
root ssh:notty 114.207.113.183 Thu Oct : - : (:)
secure日志
# cat /var/log/secure
Oct :: localhost sshd[]: Did not receive identification string from 183.60.15.117
Oct :: localhost sshd[]: Accepted password for steven1 from 196.168.1.1 port ssh2
Oct :: localhost sshd[]: pam_unix(sshd:session): session opened for user steven1 by (uid=)
Oct :: localhost sudo: stev1 : TTY=pts/ ; PWD=/home/stev1 ; USER=user ; COMMAND=/bin/su -
Oct :: localhost su: pam_unix(su-l:session): session opened for user root by steven1(uid=)
Oct :: localhost sshd[]: Bad protocol version identification 'GET / HTTP/1.1' from 183.60.48.110
curl命令
http://baike.baidu.com/link?url=_I6L7zGUkeD163eJW1JNx90V-1sZ0yTkBZ3wxNYMjDKdVB6cp5xPkC3Gf9zKLwq5LTVlyAQc5o_li_WCHfmY3K
选项
-a/--append 上传文件时,附加到目标文件
-A/--user-agent <string> 设置用户代理发送给服务器
- anyauth 可以使用“任何”身份验证方法
-b/--cookie <name=string/file> cookie字符串或文件读取位置
- basic 使用HTTP基本验证
-B/--use-ascii 使用ASCII /文本传输
-c/--cookie-jar <file> 操作结束后把cookie写入到这个文件中
-C/--continue-at <offset> 断点续转
-d/--data <data> HTTP POST方式传送数据
--data-ascii <data> 以ascii的方式post数据
--data-binary <data> 以二进制的方式post数据
--negotiate 使用HTTP身份验证
--digest 使用数字身份验证
--disable-eprt 禁止使用EPRT或LPRT
--disable-epsv 禁止使用EPSV
-D/--dump-header <file> 把header信息写入到该文件中
--egd-file <file> 为随机数据(SSL)设置EGD socket路径
--tcp-nodelay 使用TCP_NODELAY选项
-e/--referer 来源网址
-E/--cert <cert[:passwd]> 客户端证书文件和密码 (SSL)
--cert-type <type> 证书文件类型 (DER/PEM/ENG) (SSL)
--key <key> 私钥文件名 (SSL)
--key-type <type> 私钥文件类型 (DER/PEM/ENG) (SSL)
--pass <pass> 私钥密码 (SSL)
--engine <eng> 加密引擎使用 (SSL). "--engine list" for list
--cacert <file> CA证书 (SSL)
--capath <directory> CA目录 (made using c_rehash) to verify peer against (SSL)
--ciphers <list> SSL密码
--compressed 要求返回是压缩的形势 (using deflate or gzip)
--connect-timeout <seconds> 设置最大请求时间
--create-dirs 建立本地目录的目录层次结构
--crlf 上传是把LF转变成CRLF
-f/--fail 连接失败时不显示http错误
--ftp-create-dirs 如果远程目录不存在,创建远程目录
--ftp-method [multicwd/nocwd/singlecwd] 控制CWD的使用
--ftp-pasv 使用 PASV/EPSV 代替端口
--ftp-skip-pasv-ip 使用PASV的时候,忽略该IP地址
--ftp-ssl 尝试用 SSL/TLS 来进行ftp数据传输
--ftp-ssl-reqd 要求用 SSL/TLS 来进行ftp数据传输
-F/--form <name=content> 模拟http表单提交数据
-form-string <name=string> 模拟http表单提交数据
-g/--globoff 禁用网址序列和范围使用{}和[]
-G/--get 以get的方式来发送数据
-h/--help 帮助
-H/--header <line>自定义头信息传递给服务器
--ignore-content-length 忽略的HTTP头信息的长度
-i/--include 输出时包括protocol头信息
-I/--head 只显示文档信息
从文件中读取-j/--junk-session-cookies忽略会话Cookie
- 界面<interface>指定网络接口/地址使用
- krb4 <级别>启用与指定的安全级别krb4
-j/--junk-session-cookies 读取文件进忽略session cookie
--interface <interface> 使用指定网络接口/地址
--krb4 <level> 使用指定安全级别的krb4
-k/--insecure 允许不使用证书到SSL站点
-K/--config 指定的配置文件读取
-l/--list-only 列出ftp目录下的文件名称
--limit-rate <rate> 设置传输速度
--local-port<NUM> 强制使用本地端口号
-m/--max-time <seconds> 设置最大传输时间
--max-redirs <num> 设置最大读取的目录数
--max-filesize <bytes> 设置最大下载的文件总量
-M/--manual 显示全手动
-n/--netrc 从netrc文件中读取用户名和密码
--netrc-optional 使用 .netrc 或者 URL来覆盖-n
--ntlm 使用 HTTP NTLM 身份验证
-N/--no-buffer 禁用缓冲输出
-o/--output 把输出写到该文件中
-O/--remote-name 把输出写到该文件中,保留远程文件的文件名
-p/--proxytunnel 使用HTTP代理
--proxy-anyauth 选择任一代理身份验证方法
--proxy-basic 在代理上使用基本身份验证
--proxy-digest 在代理上使用数字身份验证
--proxy-ntlm 在代理上使用ntlm身份验证
-P/--ftp-port <address> 使用端口地址,而不是使用PASV
-Q/--quote <cmd>文件传输前,发送命令到服务器
-r/--range <range>检索来自HTTP/1.1或FTP服务器字节范围
--range-file 读取(SSL)的随机文件
-R/--remote-time 在本地生成文件时,保留远程文件时间
--retry <num> 传输出现问题时,重试的次数
--retry-delay <seconds> 传输出现问题时,设置重试间隔时间
--retry-max-time <seconds> 传输出现问题时,设置最大重试时间
-s/--silent静音模式。不输出任何东西
-S/--show-error 显示错误
--socks4 <host[:port]> 用socks4代理给定主机和端口
--socks5 <host[:port]> 用socks5代理给定主机和端口
--stderr <file>
-t/--telnet-option <OPT=val> Telnet选项设置
--trace <file> 对指定文件进行debug
--trace-ascii <file> Like --跟踪但没有hex输出
--trace-time 跟踪/详细输出时,添加时间戳
-T/--upload-file <file> 上传文件
--url <URL> Spet URL to work with
-u/--user <user[:password]>设置服务器的用户和密码
-U/--proxy-user <user[:password]>设置代理用户名和密码
-v/--verbose
-V/--version 显示版本信息
-w/--write-out [format]什么输出完成后
-x/--proxy <host[:port]>在给定的端口上使用HTTP代理
-X/--request <command>指定什么命令
-y/--speed-time 放弃限速所要的时间。默认为30
-Y/--speed-limit 停止传输速度的限制,速度时间'秒
-z/--time-cond 传送时间设置
-0/--http1.0 使用HTTP 1.0
-1/--tlsv1 使用TLSv1(SSL)
-2/--sslv2 使用SSLv2的(SSL)
-3/--sslv3 使用的SSLv3(SSL)
--3p-quote like -Q for the source URL for 3rd party transfer
--3p-url 使用url,进行第三方传送
--3p-user 使用用户名和密码,进行第三方传送
-4/--ipv4 使用IP4
-6/--ipv6 使用IP6
-#/--progress-bar 用进度条显示当前的传送状态
shell常用命令之curl: -w,–write-out参数详解
--http://seofangfa.com/shell/curl-w-write-out.html
顾名思义,write-out的作用就是输出点什么。curl的-w参数用于在一次完整且成功的操作后输出指定格式的内容到标准输出。
输出格式由普通字符串和任意数量的变量组成,输出变量需要按照%{variable_name}的格式,如果需要输出%,double一下即可,即%%,同时,\n是换行,\r是回车,\t是TAB。curl会用合适的值来替代输出格式中的变量,所有可用变量如下:
url_effective 最终获取的url地址,尤其是当你指定给curl的地址存在301跳转,且通过-L继续追踪的情形。
http_code http状态码,如200成功,301转向,404未找到,500服务器错误等。(The numerical response code that was found in the last retrieved HTTP(S) or FTP(s) transfer. In 7.18.2 the alias response_code was added to show the same info.)
http_connect The numerical code that was found in the last response (from a proxy) to a curl CONNECT request. (Added in 7.12.4)
time_total 总时间,按秒计。精确到小数点后三位。 (The total time, in seconds, that the full operation lasted. The time will be displayed with millisecond resolution.)
time_namelookup DNS解析时间,从请求开始到DNS解析完毕所用时间。(The time, in seconds, it took from the start until the name resolving was completed.)
time_connect 连接时间,从开始到建立TCP连接完成所用时间,包括前边DNS解析时间,如果需要单纯的得到连接时间,用这个time_connect时间减去前边time_namelookup时间。以下同理,不再赘述。(The time, in seconds, it took from the start until the TCP connect to the remote host (or proxy) was completed.)
time_appconnect 连接建立完成时间,如SSL/SSH等建立连接或者完成三次握手时间。(The time, in seconds, it took from the start until the SSL/SSH/etc connect/handshake to the remote host was completed. (Added in 7.19.0))
time_pretransfer 从开始到准备传输的时间。(The time, in seconds, it took from the start until the file transfer was just about to begin. This includes all pre-transfer commands and negotiations that are specific to the particular protocol(s) involved.)
time_redirect 重定向时间,包括到最后一次传输前的几次重定向的DNS解析,连接,预传输,传输时间。(The time, in seconds, it took for all redirection steps include name lookup, connect, pretransfer and transfer before the final transaction was started. time_redirect shows the complete execution time for multiple redirections. (Added in 7.12.3))
time_starttransfer 开始传输时间。在发出请求之后,Web 服务器返回数据的第一个字节所用的时间(The time, in seconds, it took from the start until the first byte was just about to be transferred. This includes time_pretransfer and also the time the server needed to calculate the result.)
size_download 下载大小。(The total amount of bytes that were downloaded.)
size_upload 上传大小。(The total amount of bytes that were uploaded.)
size_header 下载的header的大小(The total amount of bytes of the downloaded headers.)
size_request 请求的大小。(The total amount of bytes that were sent in the HTTP request.)
speed_download 下载速度,单位-字节每秒。(The average download speed that curl measured for the complete download. Bytes per second.)
speed_upload 上传速度,单位-字节每秒。(The average upload speed that curl measured for the complete upload. Bytes per second.)
content_type 就是content-Type,不用多说了,这是一个访问我博客首页返回的结果示例(text/html; charset=UTF-8);(The Content-Type of the requested document, if there was any.)
num_connects Number of new connects made in the recent transfer. (Added in 7.12.3)
num_redirects Number of redirects that were followed in the request. (Added in 7.12.3)
redirect_url When a HTTP request was made without -L to follow redirects, this variable will show the actual URL a redirect would take you to. (Added in 7.18.2)
ftp_entry_path The initial path libcurl ended up in when logging on to the remote FTP server. (Added in 7.15.4)
ssl_verify_result ssl认证结果,返回0表示认证成功。( The result of the SSL peer certificate verification that was requested. 0 means the verification was successful. (Added in 7.19.0))
注意:
1、若多次使用-w参数,按最后一个的格式输出。
2、在使用上面变量的时候,注意看后面小括号中的 Added in XXX,这个表示支持该变量curl所需的最低版本,查看curl版本使用curl -V。如果版本不够,curl会提示类似下面的错误。
curl: unknown –write-out variable: ‘redirect_url’
curl -w用法一例
检查一批URL的HTTP状态:cat url.txt|while read line; do curl -I $line -m 5 –connect-timeout 5 -o /dev/null -s -w “$line “%{http_code}”\n”; done>ok.txt
系统日志(/var/log/message/)
业务日志。业务日志量很大,占用很多内存,可以改善吗
答:业务日志不建议存在在journal(/var/log/message/里,因为默认情况下journal存在tmpfs文件系统里,最大占用一半物理内存
如果journal做了持久化,那么也会占用磁盘空间,关键是journal会所有系统服务的日志都存放在同一个文件/var/log/message/中
当业务日志量大的时候,就会影响其他日志的查询效率,比如内核日志、系统日志、服务日志等
f