标签:linux yum rpm iptables cron vmstat
一、监控系统状态
1.w 查看系统当前负载
[root@localhost sbin]# w
15:23:46 up 3:34, 2 users, load average: 0.03, 0.05, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - 12:26 2:55m 0.11s 0.11s -bash
root pts/0 10.72.137.53 12:28 1:17m 1:32 1:32 -bash
查看登录用户的信息,以及通过什么方式登录
关注数据:load average(单位时间段内cpu活动进程数)
1分钟内平均负载;5分钟内平均负载;15分钟内平均负载
值越大服务器压力愈大,值 <= cpu数量即可
1.1 查看cpu数量
cat /proc/cpuinfo
processor id表示了cpu的数量
仅查看系统上的整体负载,通过查看load average判断系统是否有压力。但不能判断具体哪里在承压(cpu,内存,磁盘)
2.vmstat 监控系统状态
能够查看到系统每个设备运行状况(进程procs,内存memory,swap内存交换,io磁盘读写,system系统中断次数,cpu是cpu使用状态)
重点关注r、b、wa列 r运行等待cpu时间片的进程数,大于cpu个数,则cpu不够用 b等待资源的进程数,比如等待I/O,内存等,长时间大于1,则需关注 wa I/O等待所占用cpu时间百分比 次关注si、so、bi、bo si 交换区写入到内存数据量 so 内存写入到交换区数量 si、so值高时,内存不够用,数据频繁出入交换区,对系统性能影响极大 bi 磁盘写入到内存数据量 bo 内存写入到磁盘的数据量 vmstat 1 5 每秒收集一次,共收集5次 动态监控进程占用的系统资源,每隔3秒变一次 loadaverage、进程数Tasks、cpu使用情况、内存和交换分区使用情况。 重点关注项:%CPU, %MEM, COMMAND shift+m按照内存大小对进程列表进行排序 ##top -bnl 一次性把当前系统信息显示,而非动态显示 可以监控系统所有资源状态,比如负载均衡、网卡流量、磁盘状态,内存使用
可以查看历史监控信息,保存数据库文件 /var/log/sa/,默认保存一个月 安装sar工具:yum -y install sysstat sar -n DEV查看网卡流量状态 txpck/s每秒发出去数据包数量,rxpck/s每秒收到数据包数量; txkB/s每秒发出去数据量,rxkB/s每秒收到数据量 sar -n DEV 1 5 每秒监控一次网卡流量,共5次 sar -n DEV -f /var/log/sa/sa24查看历史某一天的网卡流量 sar -q查看历史负载,可以查看过去某个时间点的负载情况
5. free查看内存使用状况
[root@localhost ~]# free
total used free shared buffers cached
Mem: 326616 137332 189284 0 34480 73336
-/+ buffers/cache: 29516 297100
Swap: 2097144 1144 2096000
29516才是真正使用的内存,297100才是真正剩余的内存
因为系统初始化时,分配一部分内存给换成buffer,提供给程序使用,没用时则也属于空闲内存
free -h 人能看懂,M为单位;free -m以M为单位,但不显示M;free -g以G为单位
6. ps 查看系统进程
相比较top显示的结果,更容易看懂
[root@localhost ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 2900 852 ? Ss 11:49 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S 11:49 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 11:49 0:00 [migration/0]
root 4 0.0 0.0 0 0 ? S 11:49 0:11 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S 11:49 0:00 [migration/0]
root 6 0.0 0.0 0 0 ? S 11:49 0:00 [watchdog/0]
root 7 0.0 0.0 0 0 ? S 11:49 0:04 [events/0]
root 8 0.0 0.0 0 0 ? S 11:49 0:00 [cgroup]
root 9 0.0 0.0 0 0 ? S 11:49 0:00 [khelper]
STAT:表示进程状态
D 不能中断的进程(通常I/O);
R 正在运行的进程;
S 已经中断的进程,通常系统大部分进程的状态;
s 主进程
T 已经停止或暂停的进程,例如运行进程sleep 10 然后ctrl+z暂停后,状态即为T;
W 内核2.6以后,表示没有足够内存页分配;
X 已经死掉的进程(好像重来没有出现);
Z 僵尸进程,杀不掉打不死的垃圾进程,占用一小部分资源,没太大关系,但是太多就有问题,一般不会出现;
< 高优先级进程
N 低优先级进程
L 在内存中被锁定了内存分页的进程
l 多线程进程
+ 代表在前台运行的进程
通常ps会连同 | 一起使用 ps aux |grep -c mingetty (-c 统计)。常用命令
7.netstat 查看网络状况
查看看网络连接状况,系统开放端口,路由表等信息
最常用两个命令:netstat -lnp(打印系统启用哪些端口)、netstat -an(打印网络连接状况)
[root@localhost ~]# netstat -lnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 929/sshd
tcp 0 0 :::80 :::* LISTEN 25005/httpd
tcp 0 0 :::22 :::* LISTEN 929/sshd
udp 0 0 0.0.0.0:68 0.0.0.0:* 1597/dhclient
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 2 [ ACC ] STREAM LISTENING 6783 1/init @/com/ubuntu/upstart
[root@localhost ~]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 10.72.137.159:22 10.72.137.53:50507 ESTABLISHED
tcp 0 52 10.72.137.159:22 10.72.137.53:50827 ESTABLISHED
tcp 0 0 :::80 :::* LISTEN
tcp 0 0 :::22 :::* LISTEN
udp 0 0 0.0.0.0:68 0.0.0.0:*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 6783 @/com/ubuntu/upstart
unix 2 [ ] DGRAM 6953 @/org/kernel/udev/udevd
unix 3 [ ] DGRAM 6973
unix 3 [ ] DGRAM 6972
8.tcpdump 抓包工具
安装tcpdump:yum -y install tcpdump
[root@localhost ~]# tcpdump -nn -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
19:13:56.689147 IP 10.72.137.159.22 > 10.72.137.53.50827: Flags [P.], seq 2793829986:2793830182, ack 1384443306, win 1067, length 196
19:13:56.691389 IP 10.72.137.159.22 > 10.72.137.53.50827: Flags [P.], seq 196:376, ack 1, win 1067, length 180
19:13:56.691541 IP 10.72.137.53.50827 > 10.72.137.159.22: Flags [.], ack 376, win 16266, length 0
19:13:56.694499 IP 10.72.137.159.22 > 10.72.137.53.50827: Flags [P.], seq 376:636, ack 1, win 1067, length 260
19:13:56.695659 IP 10.72.137.159.22 > 10.72.137.53.50827: Flags [P.], seq 636:800, ack 1, win 1067, length 164
19:13:56.695793 IP 10.72.137.53.50827 > 10.72.137.159.22: Flags [.], ack 800, win 16160, length 0
19:13:56.698429 IP 10.72.137.159.22 > 10.72.137.53.50827: Flags [P.], seq 800:1060, ack 1, win 1067, length 260
19:13:56.700332 IP 10.72.137.159.22 > 10.72.137.53.50827: Flags [P.], seq 1060:1224, ack 1, win 1067, length 164
19:13:56.700419 IP 10.72.137.53.50827 > 10.72.137.159.22: Flags [.], ack 1224, win 16425, length 0
第三、第四列显示信息为:源IP+PORT 目的IP+PORT,重点关注这两列即可
-i 指定抓取那个设备上的包
-nn 使显示结果为IP+PORT,若不加则显示结果为:主机名+服务名
二、Linux网络相关
1.ifconfig 查看网卡信息
修改网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0
重启网卡 service network restart
2.给一个网卡设定多个IP
#cd /etc/sysconfig/network-scripts/
#cp ifcfg-eth0 ifcfg-eth0\:1 将eth0的配置文件拷贝到eth0:1
#vi ifcfg-eth0\:1
DEVICE=eth0:1
HWADDR=00:0C:29:D9:F0:52
TYPE=Ethernet
UUID=a5442526-0329-421d-86cf-8d7f16d01374
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.80.5
NETMASK=255.255.255.0
GATEWAY=192.168.80.2
NM_CONTROLLED=yes
再重启网卡service network restart,即可
3.查看网卡连接状态
#mii-tool eth0
显示link ok则状态正常;no link则网卡坏掉或者没有连接网线(即为直接判断网卡状态)
4.更改主机名 hostnamectl
#hostnamectl 查看static,transient,pretty三种状态的主机名
#hostnamectl set-hostname jasonhost 同时修改三个状态的主机名
修改后立即生效,重启后也有效。
127.0.0.1 jasonhost hunk_zhu
#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain
::1 localhost localhost.localdomain localhost6 localhost6.localdomai
修改/etc/hosts下的相应主机名,很多时候开机启动慢时,考虑此原因。
5.设置 DNS
查看配置的DNS服务器的ip,同时也可以修改配置,指定DNS
[root@localhost ~]# vim /etc/resolv.conf
; generated by /sbin/dhclient-script
nameserver 202.106.46.151
修改域名解析映射表。修改后,pingwww.baidu.com域名则目的IP为192.168.1.111
[root@localhost ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.111 www.baidu.com
一个IP可以对应多个域名;但是一个域名只能解析一个IP;相同的域名出现在多行时,最先匹配原则。
三、Linxu防火墙
selinux
redhat/centos特有的安全机制,但因为配置复杂,限制太多,很少有人真正使用。
一般关闭selinux,避免不必要的麻烦。
#vi /etc/selinux/config
SELINUX=disabled(关闭,没有运行)/enforcing(默认,强制模式,开始限制)/permissive(宽容模式,仅会有警告信息)
#getenforce 查看selinux的状态
#setenforce enforcing/permissive/1/0,临时设置
2.Iptables ,Linux上特有的防火墙
系统管理中,日常常用到一两个应用,但是功能非常强大
Centos上默认没有iptables规则
/etc/init.d/iptables save 保存防火墙文件到/etc/sysconfig/iptables;
iptables -nvL查看规则;
iptables -F 清空当期规则,但是只是临时的,没有修改配置文件中的内容;
2.1 iptables的三个表
filter:保存过滤规则,系统预设表,最常用。内建三个链INPUT/OUTPUT/FORWARD
INPUT: 作用于进入本机的包
OUTPUT:作用 于送出的包
FORWARD:作用于那些跟本机无关的包
nat:保存网络地址转换规则,也有三个链PREROUTING/OUTPUT/POSTROUTING
PREROUTING:作用于其他主机发出的包刚到防火墙时改变目的地址的包
OUTPUT:改变本地产生包的目的地址
POSTROUTING:作用于离开防火墙的包改变其源地址
mangle:主要给包打标记,然后根据标记做相应操作。几乎不用,高级网络工程师使用。
2.2 iptables基本语法
#iptables -t nat -nvL
-t 指定表名,若不加,则默认显示filter表的信息;-nvL 查看该表的规则,-n不针对IP反解析主机名,-L列出信息,-v详细信息;
#iptables -F 删除所有规则
#iptables -Z 把包和流量计算器归零(很有用)
#iptables -A INPUT -s 10.10.86.90 -p tcp --sport 1234 -d 10.10.86.100 --dport 80 -j DROP
省略-t,则针对默认表filter;-A,表示增加一条规则(-I,插入;-D,删除一条规则);INPUT,作用链(还以OUTPUT/FORWORD);-s/-d,源地址/目的地址;给源地址反馈;ACCEPT允-p,协议(tcp,udp,icmp);--sport/--dport 源端口/目标端口;-j,后跟动作;DROP把包丢掉,不会反馈(REJECT拒绝,会许)
#iptables -I INPUT -s 1.1.1.1 -j DROP 在filter表中插入一条规则,丢掉源地址1.1.1.1的包
#iptables -D INPUT -s 1.1.1.1 -j DROP 删除刚插入的规则,删除规则必须与原有规则一致
#iptables -I INPUT -s 2.2.2.2 -p tcp --sport 80 -j DROP 丢掉2.2.2.2的80端口发出的数据包
#iptables -I OUTPUT -p tcp --dport 22 -d 2.2.2.2 -j DROP 丢掉发往2.2.2.2的80端口的包
#iptables -I INPUT -s 2.2.2.0/24 -i eth0 -j ACCEPT 将来自2.2.2.0/24网段并且作用在eth0的包放行
作用于FORWARD链几乎没用到。-i,指定网卡,很少用到。
#iptables -nvL --line-numbers显示每天规则相应的编号
#iptables -D INPUT 1 删除INPUT链上第一条规则,必须要指定链名,因为每条链上规则独立。
2.2.1 -P 表示预设策略,默认策略,策略内容为DROP或者ACCEPT,默认ACCEPT
#iptables -P INPUT DROP 设置默认策略为DROP,远程连接时,该命令后断开ssh
#iptables -F无法情况该规则
#iptables -P INPUT ACCEPT 只有通过该命令才能恢复远程连接,
[root@localhost ~]# cat /usr/local/sbin/iptables.sh
#! /bin/bash
ipt="/sbin/iptables"
$ipt -F
$ipt -P INPUT DROP
$ipt -P OUTPUT ACCEPT
$ipt -P FORWARD ACCEPT
$ipt -A INPUT -s 192.168.137.0/24 -p tcp --dport 22 -j ACCEPT
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT
该shell脚本实现:针对filter表,预设INPUT链DROP,其他两个链ACCEPT;针对源地址192.168.167.0/24网段主机开放22断开;针对所有网段开放21和80端口。
若想该规则shell开机启动,则在开机初始化时启动该防火墙规则
2.2.2 丢掉icmp包,使其他主机不能ping本机,但本机能ping外网
#iptables -I INPUT -p icmp --icmp-type 8 -j DROP
--icmp-type 8指的就是使本机能ping外网,外网不能ping本机。切记,常用
2.3 NAT表的应用
#echo "1" >/proc/sys/net/ipv4/ip_forward
#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASOUERADE
将1292.168.1.0/24网段的主机通过eth0访问外网,即eth0实现路由转发的功能。
MASOUERADE伪装的意思:伪装
2.4 iptables 服务启动暂停和保存备份
#service iptables status 查看iptables服务的状态
= #systemctl status iptables
#systemctl enable iptables 在系统开机服务中添加iptables服务
#systemctl disable iptables 开机服务中禁用iptables服务 ,则开机时不会自动检测/etc/sysconfig/iptables文件
#systemctl start iptables 启动iptables服务
#systemctl stop iptables 暂停iptables服务
#service iptables save 将防火墙规则保存到/etc/sysconfig/iptables文件中
该命令有效执行的前提,yum -y install iptables 两个文件都已安装
yum -y install iptables.service
#iptables-save > myipt.rule 将iptables规则备份到本地指定文件中
#iptables-restore < myipt.rule 将指定文件中的规则恢复到/etc/sysconfig/iptables中
四、系统任务计划 cron
cron计划任务都是通过crontab命令完成
/etc/crontab 全局配置文件
crontab -u/-e/-l/-r
-u: 指定某个用户,不加 -u 则为当前用户;
-e:制定计划任务(enact制定)
-l:列出计划任务
-r:删除计划任务
#crontab -e
01 10 05 06 3 echo "ok" > /root/cron.log
从左到右:分 时 日 月 周。 表示:6月5号(这一天必须是星期3),10:01,执行命令echo "ok" >/root/cron.lo
该命令实际打开/var/spool/cron/username文件,并使用vim编辑器编写计划任务,wq 保存退出
#crontab -l
查看/var/spool/cron/username文件中的计划任务
#crontab -r
删除计划任务
每天凌晨1点20分清除/var/log/slow.log这个文件
每周日3点执行 “/bin/sh /usr/local/sbin/backup.sh”
每月14号4点10分执行 “/bin/sh /usr/local/sbin/backup_month.sh”
每隔8小时执行 “ntpdate time.windows.com”
每天的1点,12点,18点执行 “/bin/sh /usr/local/sbin/test.sh”
每天的9点到18点执行 “/bin/sh /usr/local/sbin/test2.sh”
1. 20 1 * * * echo "" >/var/log/slow.log
2. 0 3 * * 0 /bin/sh /usr/local/sbin/backup.sh
3. 10 4 14 * * /bin/sh /usr/local/sbin/backup_month.sh
4. 0 */8 * * * ntpdate time.windows.com
5. 0 1,12,18 * * /bin/sh /usr/local/sbin/test.sh
6. 0 9-18 * * * /bin/sh /usr/local/sbin/test2.sh
保存路径/var/spool/cron/username
# service crond status 查看crond服务的状态
# systemctl crond disable/enable 修改crond服务是否开机启动,只能用systemctl修改
# service crond stop/start
= # systemctl crond stop/start 都可以修改crond服务的状态
五、Linux系统服务管理
1.开机启动的服务,日常用不到服务停掉,节省资源;减少安全隐患。
建议只开启“crond,iptables,network,sshd,syslog,irqbalance,sendmail,microcode_ctl”服务
#vtsysv 直接打开服务配置界面
#yum -y instll vtsysv 安装命令
2. chkconfig 服务管理工具
系统预设服务,可以在 /etc/init.d/目录下看到有哪些服务
这些系统服务都可以通过这条命令实现:
#service 服务名 start/stop/restart
#/etc/init.d/crond start/stop/restart
# chkconfig --list 查看每个服务针对不同运行级别的状态
# chkconfig --list |gerp cron
运行级别:0 shutdown;1 重启至单用户模式;6 reboot;--被系统保留
2 无NFS(网络)支持多用户模式;3 完全多用户、命令行模式;
4 保留给用户自定义;5 图形登录模式。
#chkconfig --level 3 crond off 关闭level 3的crond服务
#chkconfig --level 345 crond off 同时关闭level3 4 5 的crond服务
#chkconfig crond on 省略级别,默认针对2,3,4,5
#chkconfig --add crond 将crond服务添加到服务项
#chkconfig --del crond 删除
(在centos 7中chkconfig无效,systemctl status 查看相应启动项服务状态)
Linux系统日常管理
标签:linux yum rpm iptables cron vmstat