w查看系统负载
date 查看当前系统的时间
w出来的,第一行从左面开始显示的信息依次为:时间,系统运行时间,登录用户数,平均负载。第二行开始以及下面所有的行,告诉我们的信息是,当前登录的都有哪些用户,以及他们是从哪里登录的等等。其实,在这些信息当中,我们最应该关注的应该是第一行中的 ‘load average:’ 后面的三个数值。
第一个数值表示1分钟内系统的平均负载值;第二个数值表示5分钟内系统的平均负载值;第三个数值表示15分钟系统的平均负载值。这个值的意义是,单位时间段内CPU活动进程数。当然这个值越大就说明你的服务器压力越大。一般情况下这个值只要不超过服务器的cpu数量就没有关系,如果服务器cpu数量为8,那么这个值若小于8,就说明当前服务器没有压力,否则就要关注一下了。到这里你肯定会问,如何查看服务器有几个cpu?
查看逻辑cpu命令:cat /proc/cpuinfo 看第一行processor 如果是0就证明他有1个cpu 是2就证明他有3个cpu
vmstat命令
vmstat:监控系统的状态
w 查看的是系统整体上的负载,通过看那个数值可以知道当前系统有没有压力,但是具体是哪里(CPU, 内存,磁盘等)有压力就无法判断了。通过 vmstat 就可以知道具体是哪里有压力。
命令:vmstat 1 每1秒以动态的形式显示一次 按ctrl+c结束。也可以后边跟一个数字,代表只显示的次数,例如:vmstat 1 5 这个就是每一秒显示1次只让他显示5次,如下图:
每一列分别表示什么意思:
1.procs 显示进程相关信息
r :表示运行和等待cpu时间片的进程数,如果长期大于服务器cpu的个数,则说明cpu不够用了;
b :表示等待资源的进程数,比如等待I/O, 内存等,这列的值如果长时间大于1,则需要关注一下了;
2.memory 内存相关信息
swpd :表示切换到交换分区中的内存数量 ;如果他的数值一直在变幻那证明他的内存不够了
free :当前空闲的内存数量;
buff :缓冲大小,(即将写入磁盘的);
cache :缓存大小,(从磁盘中读取的);
3.swap 内存交换情况
si :由交换区写入到内存的数据量;单位kb
so :由内存写入到交换区的数据量;
4.io 磁盘使用情况
这两个频繁的变证明他们在频繁的读写
bi :从块设备读取数据的量(读磁盘);从磁盘里出来进入到内存里边去
bo: 从块设备写入数据的量(写磁盘);
5.system 显示采集间隔内发生的中断次数
in :表示在某一时间间隔中观测到的每秒设备中断数;
cs :表示每秒产生的上下文切换次数;
6.CPU 显示cpu的使用状态
us :显示了用户下所花费 cpu 时间的百分比;长时间大于50%说明资源不够了
sy :显示系统花费cpu时间百分比;
id :表示cpu处于空闲状态的时间百分比;
wa :表示I/O等待所占用cpu时间百分比;
st :表示被偷走的cpu所占百分比(一般都为0,不用关注);
us+sy+id=100%
重点关注:r、b、swpd、si、so、bi、bo、us、wa。
top命令
显示进程所占系统资源
top命令打印出了很多信息,包括系统负载(loadaverage)、进程数(Tasks)、cpu使用情况、内存使用情况以及交换分区使用情况。
top:这个命令用于动态监控进程所占系统资源,每隔3秒变一次。这个命令的特点是把占用系统资源(CPU,内存,磁盘IO等)最高的进程放到最前面。
你关注的也就是几项:%CPU, %MEM, COMMAND 这些项目所代表的意义,RES 这一项为进程所占内存大小,而 %MEM 为使用内存百分比。在 top 状态下,按 “shift + m”, 可以按照内存使用大小排序。shift+p换回来。按数字 ‘1’ 可以列出各颗cpu的使用状态。
命令:top -c 查看具体的命令全局路径以及使用情况
命令:top -bn1 静态的显示全局的系统资源使用情况。一般在写脚本的时候使用。
sar监控系统状态
安装sar命令:yum insatll -y sysstat
命令:sar -n DEV 查看网卡流量
命令:sar -n DEV 1 每隔一秒钟显示一次
命令:sar -n DEV 1 10 每隔一秒钟显示一次,一共显示十次。
IFACE这列表示设备名称,
rxpck/s 表示每秒进入收取的包的数量,几千是正常的,上万不正常
txpck/s 表示每秒发送出去的包的数量,
rxbyt/s 表示每秒收取的数据量(单位Byte),
txbyt/s表示每秒发送的数据量。
命令:-f 查看指定某一天网卡流量历史。例如:sar -n DEV -f /var/log/sa/sa21
后边sa21指的是那一天的,sar会以日期号为结尾保存,最多保存一个月的。
文件:var/log/sa/sar21 这个可以cat查看,第二天才会生成。
命令:sar -q 查看历史负载
命令:sar -b 查看磁盘的(读写)
nload命令
先安装:yum install epel - releast yum install nload
直接敲命令:nload
第一行按左右方向键可以切换网卡,按 q 退出。
第二行一次是,当前值、平均值、最小值、最大值。
监控io性能
命令:iostat -x 磁盘使用 主要查看%utio 这个是显示你等待磁盘io的百分比
命令:iotop 动态排序显示进程使用io的情况
free 查看内存使用情况
命令:free 直接回车,可以显示当前系统的总内存大小以及使用内存的情况
命令:free -m 指定它显示的单位为兆
命令:free -h 在具体的数字后边加上单位
公式:total=used+free+buff/cache 总用量=已用量+free+缓冲/缓存
avaliable包含free和buff/cache没用完剩余部分
ps 查看系统进程
命令:ps aux 把你系统里边所有的进程列出来
命令:ps aux |grep 检查系统中一个进程有没有运行。例如:ps aux |grep nginx、ps aux |grep mysql
命令:ps aux |grep -c 查看一个进程的数量。
命令:ps -elf 结果跟ps aux相似
PID :进程的id,这个id很有用,在linux中内核管理进程就得靠pid来识别和管理某一个程,比如我想终止某一个进程,则用 ‘kill进程的pid 有时并不能杀掉,则需要加一个-9选项了 kill -9 进程pid
STAT :表示进程的状态,进程状态分为以下几种(不要求记住,但要了解)
D:不能中断的进程(通常为IO)
R:正在运行中的进程
S:已经中断的进程,通常情况下,系统中大部分进程都是这个状态
T:已经停止或者暂停的进程,如果我们正在运行一个命令,比如说 sleep 10 如果我们按一下ctrl -z 让他暂停,那么我们用ps查看就会显示T这个状态
W:这个好像是说,从内核2.6xx 以后,表示为没有足够的内存页分配
X:已经死掉的进程(这个好像从来不会出现)
Z:僵尸进程,杀不掉,打不死的垃圾进程,占系统一小点资源,不过没有关系。如果太多,就有问题了。一般不会出现。
<:高优先级进程
N:低优先级进程
L:在内存中被锁了内存分页
s:主进程
l:多线程进程。有一个进程有多个线程。
+:代表在前台运行的进程
netstat 查看网络状况
命令:netstat -lnp 显示当前系统启动哪些端口
命令:netstat -an 查看系统网络连接状况
命令:netstat -lntp 只看tcp的,不包含socket
命令:ss -an 跟netstat异曲同工,缺点是不能显示进程的名字。
状态:TIME_WAIT 客户端与服务端两台机器,相互通信完之后,他们的链接还没断开,处于一种相互等待的状态,等待这两个机器再一次连接传输数据
命令:netstat -an |awk ‘/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}‘ 查看所有状态用数字列出来
如果ESTABLISHED很大,证明你的系统很忙
tcptump 抓包工具
在你判断你的服务器上有流量攻击时,使用抓包工具来抓一下包,就知道那些IP在攻击你了。
命令:tcptump -nn
命令:tcpdump -nn -i ens33 加上网卡的名字
命令:tcpdump -nn port 指定端口
命令:tcpdump -nn not port 不要某个端口
命令:tcpdump -nn not port 22 and host 192.168.0.100 不要某个端口并且只要一个指定IP的。
命令:tcpdump -nn -c 指定抓包的个数。比如只要100个:tcpdump -nn -c 100
命令:tcpdump -nn -w 把抓到的包存到一个文件里去(文件名字可以自己取)。
命令:tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e 可以查看指定网卡80端口web访问的情况。但是需要先安装一个包才能使用这个命令,yum install wireshark。
linux 网络相关
命令:ifconfig 查看网卡ip 需要安装包:(yum install net-tools)
命令:ifconfig -a 在你网卡被当(down)掉不显示时,它会显示出来。
命令:ifup ens33开启网卡 ifdown ens33关闭网卡 在我们编辑一个网卡并且不想让所有网卡都重新关闭开启式用这个命令。
如果我们远程登录服务器,当使用ifdown eth0这个命令的时候,很有可能后面的命令ifup eth0不会被运行,这样导致我们断网而无法连接服务器,所以请尽量使用 service network restart 这个命令来重启网卡。
命令:ifdown ens33 && ifup ens33 一次性关闭并重启网卡
设定虚拟网卡ens33:1
方法:第一步,先到网卡所在的文件中去:cd /etc/sysconfig/network-scripts/
第二步,把ens33拷贝到ens33:1里:cp ifcfg-ens33 ifcfg-ens33\:1
第三步,编辑配置文件:vi ifcfg-ens33\:1
第四步,把里边带ens33的改成ens33:1,把ip改一下,网关跟DNS1都可以不要。
第五步,重启网卡:ifdown ens33 && ifup ens33
命 令:mii-tool ens33 查看网卡是否连接,显示link ok 证明连接。
ethtool ens33 也可以查看网卡是否连接,最后一行显示yes证明连接。
查看主机名:hostname
更改主机名:hostnamectl set-hostname aminglinux
DNS配置文件/etc/resolv.conf
特殊文件:/etc/hosts 编辑它的配置文件可以给域名指定IP
格式:192.268.65.150 www.qq123.com 一个IP可以指定多个域名
Linux 防火墙
netfilter防火墙
selinux临时关闭 setenforce 0
selinux永久关闭 vi /etc/selinux/config 改成disabled
命令:getenforce 查看防火墙是否开启
centos7之前使用netfilter防火墙
centos7开始使用firewalld防火墙
关闭firewalld开启netfilter方法
第一步,不让他开机启动:systemctl disable firewalled
第二步,再把服务停掉:systemctl stop firewalld
第三步,然后开启netfilter防火墙,开启之前需要安装包:yum install -y iptables-services
第四步,安装完它会产生iptables服务,查看一下:systemctl enable iptables
第五步,开启iptables服务:systemctl start iptables
命令:iptables -nvL 查看它的默认规则
netfilter是防火墙的名字,而iptables只是它的一个工具
netfilter的5个表
filter表用于过滤包,最常用的表,有INPUT、FORWARD、OUTPUT三个链
filter 这个表主要用于过滤包的,是系统预设的表,这个表也是用的最多的。内建三个链INPUT、 OUTPUT以及FORWARD。INPUT作用于进入本机的包;OUTPUT作用于本机送出的包;FORWARD作用于那些跟 本机无关的包。
nat表用于网络地址转换,有PREROUTING、OUTPUT、POSTROUTING三个链
nat 主要用处是网络地址转换,也有三个链。PREROUTING 链的作用是在包刚刚到达防火墙时改变它的 目的地址,如果需要的话。OUTPUT链改变本地产生的包的目的地址。POSTROUTING链在包就要离开防火 墙之前改变其源地址。
managle表用于给数据包做标记,几乎用不到
raw表可以实现不追踪某些数据包。
security表在centos6中并没有,用于强制访问控制(MAC)的网络规则
参考文章:iptables详解
iptables传输数据包过程
经过本机:PREROUTING > INPUT > 主机 > OUTPUT > POSTROUTING
不经过主机:PREROUTING > FORWARD > POSTROUTING
数据包流向与netfilter的5个链
PREROUTING:数据包进入路由表之前
INPUT:通过路由表后目的地为本机
FORWARD:通过路由表后,目的地不为本机
OUTPUT:由本机产生,向外发出
POSTROUTING:发送到网卡接口之前
iptables 基本语法
查看iptables规则:iptables -nvL
规则保存地址:cat /etc/sysconfig/iptables 配置文件的路径
iptables -F 清空规则。 service iptables restart 重启加载回来
service iptables save 保存规则(把当前的规则保存到配置文件去)
iptables -t 指定表。默认是filter表。
iptables -Z 可以把计数器清零
iptables -A 增加一条规则(增加到最后边)
例如:iptables -A INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP
解释:-s:指定来源IP -p:制定协议(tcp、odp、icmp) --sport:目标端口 -j:最后操作 DROP:把数据 直接扔掉 REJECT:拒绝 这两个的最终结果都是让这个数据包过不来封掉了这个IP
iptables -I 插入规则。(插入到最前边)
iptables -D 删除规则。
iptables -I/-A/-D INPUT -s 1.1.1.1 -j DROP
iptables -I INPUT -s 192.168.1.0/24 -i eth0 -j ACCEPT
iptables -nvL --line-numbers 如果你写的规则很久了记不得了可以用这条命令,它会把规则的序列 号打印出来。
再用命令加上序列号删除:iptables -D INPUT 1
iptables -P INPUT DROP 更改默认规则的。最好不用动!!
iptables小案例
先编辑vi /usr/local/sbin/iptables.sh 加入如下内容
#! /bin/bash
ipt="/usr/sbin/iptables" 尽量写全局的绝对路径!
$ipt -F 把之前的规则清除掉
$ipt -P INPUT DROP
$ipt -P OUTPUT ACCEPT
$ipt -P FORWARD ACCEPT
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$ipt -A INPUT -s 192.168.133.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
w查看一下。
执行一下:sh /usr/local/sbin/iptables.sh
icmp示例
命令:iptables -I INPUT -p icmp --icmp-type 8 -j DROP 你可以ping外网,但是外网不能ping你