监控系统状态:
w/uptime 查看系统负载 :可以查看到系统的负载是否有压力。
cat /proc/cpuinfo 查看cpu核数
vmstat 监控系统状态
用法 vmstat 1
关键的几列:r,b,swpd,si,so,bi,bo,us,wa
说明:
-
proc 显示进程相关信息
-
r:=run,表示运行中或等待cpu运行的进程数,如果该数长期大于服务器CPU个数,则说明CPU不够用了。
-
b: =block ,表示等待资源的进程数,如,等待I/O,内存等,这列的值如果长时间大于1,则需要关注一下。
-
-
memory 内存相关信息
-
swpd:表示切换到交换分区的内存量(当该数据不断变化时说明内存不足)
-
free:表示当前空闲的内存量
-
buff:缓冲大小
-
cache:缓存大小
-
-
swap 内存交换情况
-
si:=storage in,表示交换区写入到内存的数据量
-
so:=storage out,表示由内存写入到交换区的数据量
-
-
io 磁盘使用情况
-
bi:=block in,表示从块设备读取数据(写入内存)的量(即:读磁盘),单位为KB;
-
bo:=block out,表示(从内存读取)写入到块设备的数据(即:写磁盘),单位为KB;
注: 此处数据会直接关系到proc出的b的值。
-
-
system 显示采集间隔内发生的中断次数
-
in:表示在某一时间间隔中观测到的每秒设备中断数
-
cs:表示每秒产生的上下文切换次数
-
-
CPU 显示CPU的使用状态(us+sy+id=100%)
-
us:表示用户资源所花费CPU的百分比(当该值长时间>50时说明CPU数量不足)
-
sy:表示系统资源所花费CPU的百分比
-
id:表示CPU处于空闲状态的百分比
-
wa:=wait,表示等待使用CPU的百分比(该数值大说明CPU不足)
-
st:表示被偷走的CPU所占百分比(该值一般为0,不用关注)
-
注意:需要关注的是r,b和wa这3列,
io部分和bi和bo也是要经常参考的对象,如果磁盘io压力很大,这两列的数值会比较高(大于5千算高)。
另外,当si和so两列的数值比较高并且不断变化时,说明内存不够了,内存中的数据频繁交换分区中,这往往对系统性能影响极大。
top查看进程使用资源情况
top -c 显示详细的进程信息
top -bn1 静态显示所有进程 (比较适合用于脚本)
q退出,数字1显示所有核cpu,大写字母M按内存使用排序
大写字母P按cpu使用排序
yum install -y sysstat //安装这个包,才可以使用sar命令。命令用法如下:
sar -n DEV 1 10 查看网卡流量,每秒显示一次,显示10次。
sar -q 查看系统历史负载(有助于帮助我们查看服务器过去某个时间的历史负载)
sar -b 磁盘读写
sar -f /var/log/sa/saxx 历史文件
nload命令需要安装以下2个包
yum install -y epel-release 和 yum install -y nload
直接nload 显示如下
监控磁盘的使用情况:
iostat -x 磁盘使用 (yum install -y sysstat)
iotop 磁盘使用 (yum install -y iotop)
free 查看内存使用情况
free -m / -g / -h(-m:以MB为单位显示 ; -g 以GB为单位显示 -h以适合大小的单位显示,更加直观的显示)
buffer/cache区别
公式:total=used+free+buff/cache
avaliable包含free和buffer/cache剩余部分
ps命令的使用: 把当前的进程的快照给汇报一下
ps aux :查看系统进程的使用状况列出来。也可以用ps -elf
ps aux|grep sshd
STAT部分说明
D 不能中断的进程
R run状态的进程
S sleep状态的进程
T 暂停的进程
Z 僵尸进程
< 高优先级进程
N 低优先级进程
L 内存中被锁了内存分页
s 主进程
l 多线程进程
+ 前台进程
1 进程里包含了线程,线程是进程的子单元
2 同一个进程下的线程全部共享相同的内存,而进程之间内存相互隔离。
netstat这个命令是用来查看网络状态的,linux作为服务器上的操作系统。这个服务器上会有很多服务,服务往往是跟客户端相互通信的,所以意味着他要有监听端口,要有对外的通信端口。那netstat命令查看的就是tcp/ip对外的状态,相当于说,服务器想让别人访问或互联,就需要打开一个口,一个端口。通过这个端口,让外界访问。netstat就是查看这个口的
netstat -lnp 查看监听端口
netstat -an 查看系统的网络连接状况
netstat -lntp 只看出tcp的,不包含socket
ss -an 和nestat异曲同工
分享一个小技巧:
netstat -an | awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}'
抓包工具tcpdump (yum install -y tcpdump)
用法:tcpdump -nn
tcpdump -nn -i ens33
tcpdump -nn port 80
tcpdump -nn not port 22 and host 192.168.0.100
tcpdump -nn -c 100 -w 1.cap
tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri"
yum install -y wireshark
ifconfig查看网卡ip(yum install net-tools)
ifup ens33/ifdown ens33
设定虚拟网卡ens33:1
mii-tool ens33 查看网卡是否连接
ethtool ens33 也可以查看网卡是否连接
更改主机名 hostnamectl set-hostname aminglinux
DNS配置文件/etc/resolv.conf
/etc/hosts文件
linux的防火墙netfilter:
selinux临时关闭 setenforce 0
selinux永久关闭 vi /etc/selinux/config
centos7之前使用netfilter防火墙
centos7开始使用firewalld防火墙
关闭firewalld开启netfilter方法
systemctl stop firewalld
systemctl disable firewalled
yum install -y iptables-services
systemctl enable iptables
systemctl start iptables
[root@aming01 ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@aming01 ~]# systemctl stop firewalld
[root@aming01 ~]# yum install -y iptables-service
[root@aming01 ~]# systemctl enable iptables
Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.
[root@aming01 ~]# systemctl start iptables
[root@aming01 ~]# iptables -nvL
netfilter的5个表
filter表用于过滤包,最常用的表,有INPUT、FORWARD、OUTPUT三个链
nat表用于网络地址转换,有PREROUTING、OUTPUT、POSTROUTING三个链
managle表用于给数据包做标记,几乎用不到
raw表可以实现不追踪某些数据包,阿铭从来不用
security表在centos6中并没有,用于强制访问控制(MAC)的网络规则,阿铭没用过
参考文章 http://www.cnblogs.com/metoy/p/4320813.html
数据包流向与netfilter的5个链
PREROUTING:数据包进入路由表之前
INPUT:通过路由表后目的地为本机
FORWARD:通过路由表后,目的地不为本机
OUTPUT:由本机产生,向外发出
POSTROUTING:发送到网卡接口之前
查看iptables规则:iptables -nvL (iptables配置文件的存放位置:/etc/sysconfig/iptables)
iptables -F 清空规则(cat /etc/sysconfig/iptables 规则文件的内容还是存在的,重启后还是会加载回来的)
service iptables save 保存规则
iptables -t nat //-t指定表
iptables -Z 可以把计数器清零
iptables -A INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP //add增加一条规则
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 //-I 插入一条规则
iptables -nvL --line-numbers //序号方式显示防火墙规则
iptables -D INPUT 1 // 删除序号为1的防火墙规则
iptables -P INPUT DROP //如果在连接远程服务器,一旦执行这条命令将会断开。
[root@aming01 ~]# iptables -nvL 查看iptables的默认规则
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
149 12503 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
1 52 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT 139 packets, 16411 bytes)
pkts bytes target prot opt in out source destination
[root@aming01 ~]# iptables -Z ;iptables -nvL //iptables -Z 把计数器清零。
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
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
icmp示例
iptables -I INPUT -p icmp --icmp-type 8 -j DROP 禁止外面的机器ping自己的服务器
[root@aming01 ~]# ls /usr/local/sbin/
iptables.sh nginx_logrotate.sh
[root@aming01 ~]# vim /usr/local/sbin/iptables.sh
[root@aming01 ~]# cat /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,ESTABLISH -j ACCEPT
$ipt -A INPUT -s 192.168.88.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
[root@aming01 ~]# sh /usr/local/sbin/iptables.sh
[root@aming01 ~]# iptables -nvL
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
30 2012 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT tcp -- * * 192.168.88.0/24 0.0.0.0/0 tcp dpt:22
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:21
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 16 packets, 1520 bytes)
pkts bytes target prot opt in out source destination
[root@aming01 ~]#
nat表应用
A机器两块网卡ens33(192.168.133.130)、ens37(192.168.100.1),ens33可以上外网,ens37仅仅是内部网络,B机器只有ens37(192.168.100.100),和A机器ens37可以通信互联。
需求1:可以让B机器连接外网
A机器上打开路由转发 echo "1">/proc/sys/net/ipv4/ip_forward
A上执行 iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
B上设置网关为192.168.100.1
需求2:C机器只能和A通信,让C机器可以直接连通B机器的22端口
A上打开路由转发echo "1">/ proc/sys/net/ipv4/ip_forward
A上执行iptables -t nat -A PREROUTING -d 192.168.133.130 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22
A上执行iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.133.130
B上设置网关为192.168.100.1
操作如下:1,首先在虚拟机1上面添加一块网卡,如下
在机器2添加一块网卡
给机器1的新增网卡添加一个IP地址(重启后失效,编辑配置文件可以永久生效)
在机器1做如下操作
保存和备份iptables规则
service iptables save //会把规则保存到/etc/sysconfig/iptables
把iptables规则备份到my.ipt文件中
iptables-save > my.ipt
恢复刚才备份的规则
iptables-restore < my.ipt
linux的防火墙firewalld:
打开firewalld
systemctl disable iptables
systemctl stop iptables
systemctl enable firewalld
systemctl start firewalld
firewalld默认有9个zone
默认zone为public
firewall-cmd --get-zones //查看所有zone
firewall-cmd --get-default-zone//查看默认zone
firewall-cmd --set-default-zone=work //设定默认zone
firewall-cmd --get-zone-of-interface=ens33 //查指定网卡
firewall-cmd --zone=public --add-interface=lo //给指定网卡设置zone
firewall-cmd --zone=dmz --change-interface=lo //针对网卡更改zone
firewall-cmd --zone=dmz --remove-interface=lo //针对网卡删除zone
firewall-cmd --get-active-zones //查看系统所有网卡所在的zone
firewall-cmd --get-services 查看所有的servies
firewall-cmd --list-services //查看当前zone下有哪些service
firewall-cmd --zone=public --add-service=http //把http增加到public zone下面
firewall-cmd --zone=public --remove-service=http
ls /usr/lib/firewalld/zones/ //zone的配置文件模板
firewall-cmd --zone=public --add-service=http --permanent //更改配置文件,之后会在/etc/firewalld/zones目录下面生成配置文件
需求:ftp服务自定义端口1121,需要在work zone下面放行ftp
cp /usr/lib/firewalld/services/ftp.xml /etc/firewalld/services
vi /etc/firewalld/services/ftp.xml //把21改为1121
cp /usr/lib/firewalld/zones/work.xml /etc/firewalld/zones/
vi /etc/firewalld/zones/work.xml //增加一行
<service name="ftp"/>
firewall-cmd --reload //重新加载
firewall-cmd --zone=work --list-services
[root@aming01 ~]# firewall-cmd --list-services
ssh dhcpv6-client
[root@aming01 ~]# firewall-cmd --zone=public --list-services
ssh dhcpv6-client
[root@aming01 ~]# firewall-cmd --zone=block --list-services
[root@aming01 ~]# firewall-cmd --zone=public --add-service=httpd
Error: INVALID_SERVICE: httpd
[root@aming01 ~]# firewall-cmd --zone=public --add-service=http
success
[root@aming01 ~]# firewall-cmd --zone=block --list-services
[root@aming01 ~]# firewall-cmd --zone=public --list-services
ssh dhcpv6-client http
[root@aming01 ~]# firewall-cmd --zone=public --add-service=ftp
success
[root@aming01 ~]# firewall-cmd --zone=public --list-services
ssh dhcpv6-client http ftp
[root@aming01 ~]# firewall-cmd --zone=public --add-service=ftp --permanent
success
[root@aming01 ~]# ls /etc/firewalld/zones/
public.xml public.xml.old
[root@aming01 ~]# cat /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<service name="dhcpv6-client"/>
<service name="ftp"/>
</zone>
[root@aming01 ~]#
linux的任务计划:
crontab -u、-e、-l、-r // -l 列出任务计划 -r 删除任务计划
格式:分 时 日 月 周 user command
文件/var/spool/cron/username
分范围0-59,时范围0-23,日范围1-31,月范围1-12,周1-7
可用格式1-5表示一个范围1到5
可用格式1,2,3表示1或者2或者3
可用格式*/2表示被2整除的数字,比如小时,那就是每隔2小时
要保证服务是启动状态
crontab -e //编辑任务计划
systemctl start crond.service //启动任务计划
Linux系统服务管理-chkconfig
chkconfig --list
chkconfig --level 3 network off
chkconfig --level 345 network off
chkconfig --del network
chkconfig --add network
Linux系统服务管理-systemd
systemctl list-units --all --type=service
几个常用的服务相关的命令
systemctl enable crond.service //让服务开机启动
systemctl disable crond //不让开机启动
systemctl status crond //查看状态
systemctl stop crond //停止服务
systemctl start crond //启动服务
systemctl restart crond //重启服务
systemctl is-enabled crond //检查服务是否开机启动
ls /usr/lib/systemd/system //系统所有unit,分为以下类型
service 系统服务
target 多个unit组成的组
device 硬件设备
mount 文件系统挂载点
automount 自动挂载点
path 文件或路径
scope 不是由systemd启动的外部进程
slice 进程组
snapshot systemd快照
socket 进程间通信套接字
swap swap文件
timer 定时器
unit相关的命令
systemctl list-units //列出正在运行的unit
systemctl list-units --all //列出所有,包括失败的或者inactive的
systemctl list-units --all --state=inactive //列出inactive的unit
systemctl list-units --type=service//列出状态为active的service
systemctl is-active crond.service //查看某个服务是否为active
系统为了方便管理用target来管理unit
systemctl list-unit-files --type=target
systemctl list-dependencies multi-user.target //查看指定target下面有哪些unit
systemctl get-default //查看系统默认的target
systemctl set-default multi-user.target
一个service属于一种类型的unit
多个unit组成了一个target
一个target里面包含了多个service
cat /usr/lib/systemd/system/sshd.service //看[install]部分
扩展
firewalld自定义iptables规则 https://blog.51cto.com/jevic/1785162
提供一个iptables系列文章的博客 https://www.zsythink.net/archives/tag/iptables/page/2/
anacron https://www.jianshu.com/p/3009a9b7d024?from=timeline
systemd自定义启动脚本 http://www.jb51.net/article/100457.htm
Linux文件同步工具-rsync
rsync -av /etc/passwd /tmp/1.txt
rsync -av /tmp/1.txt 192.168.188.128:/tmp/2.txt
rsync格式
rsync [OPTION] … SRC DEST
rsync [OPTION] … SRC [user@]host:DEST
rsync [OPTION] … [user@]host:SRC DEST
rsync [OPTION] … SRC [user@]host::DEST
rsync [OPTION] … [user@]host::SRC DEST
rsync常用选项
-a 包含-rtplgoD
-r 同步目录时要加上,类似cp时的-r选项
-v 同步时显示一些信息,让我们知道同步的过程
-l 保留软连接
-L 加上该选项后,同步软链接时会把源文件给同步
-p 保持文件的权限属性
-o 保持文件的属主
-g 保持文件的属组
-D 保持设备文件信息
-t 保持文件的时间属性
--delete 删除DEST中SRC没有的文件
--exclude 过滤指定文件,如--exclude “logs”会把文件名包含logs的文件或者目录过滤掉,不同步
-P 显示同步过程,比如速率,比-v更加详细
-u 加上该选项后,如果DEST中的文件比SRC新,则不同步
-z 传输时压缩
rsync通过ssh方式同步
rsync -av test1/ 192.168.133.132:/tmp/test2/
rsync -av -e "ssh -p 22" test1/ 192.168.133.132:/tmp/test2/
rsync 通过服务的方式同步
要编辑配置文件/etc/rsyncd.conf
启动服务rsync --daemon
格式:rsync -av test1/ 192.168.133.130::module/dir/
rsyncd.conf样例
port=873
log file=/var/log/rsync.log
pid file=/var/run/rsyncd.pid
address=192.168.133.130
[test]
path=/root/rsync
use chroot=true
max connections=4
read only=no
list=true
uid=root
gid=root
auth users=test
secrets file=/etc/rsyncd.passwd
hosts allow=192.168.133.132 1.1.1.1 2.2.2.2 192.168.133.0/24
rsyncd.conf配置文件详解
port:指定在哪个端口启动rsyncd服务,默认是873端口。
log file:指定日志文件。
pid file:指定pid文件,这个文件的作用涉及服务的启动、停止等进程管理操作。
address:指定启动rsyncd服务的IP。假如你的机器有多个IP,就可以指定由其中一个启动rsyncd服务,如果不指定该参数,默认是在全部IP上启动。
[]:指定模块名,里面内容自定义。
path:指定数据存放的路径。
use chroot true|false:表示在传输文件前首先chroot到path参数所指定的目录下。这样做的原因是实现额外的安全防护,但缺点是需要以roots权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下chroot值为true,如果你的数据当中有软连接文件,阿铭建议你设置成false。
max connections:指定最大的连接数,默认是0,即没有限制。
read only ture|false:如果为true,则不能上传到该模块指定的路径下。
list:表示当用户查询该服务器上的可用模块时,该模块是否被列出,设定为true则列出,false则隐藏。
uid/gid:指定传输文件时以哪个用户/组的身份传输。
auth users:指定传输时要使用的用户名。
secrets file:指定密码文件,该参数连同上面的参数如果不指定,则不使用密码验证。注意该密码文件的权限一定要是600。格式:用户名:密码
hosts allow:表示被允许连接该模块的主机,可以是IP或者网段,如果是多个,中间用空格隔开。
当设置了auth users和secrets file后,客户端连服务端也需要用用户名密码了,若想在命令行中带上密码,可以设定一个密码文件
rsync -avL test@192.168.133.130::test/test1/ /tmp/test8/ --password-file=/etc/pass
其中/etc/pass内容就是一个密码,权限要改为600
Linux系统日志
/var/log/messages
/etc/logrotate.conf 日志切割配置文件
参考https://my.oschina.net/u/2000675/blog/908189
dmesg命令 (dmesg -c 可以清空内存日志信息)
/var/log/dmesg 日志
last命令,调用的文件/var/log/wtmp
lastb命令查看登录失败的用户,对应的文件时/var/log/btmp (如果遭到强力破解,这里将会记录大量的日志信息)
/var/log/secure (如果遭到强力破解,这里将会记录大量的日志信息)
Screen工具:
为了不让一个任务意外中断
nohup command &
screen是一个虚拟终端
yum install -y screen
screen直接回车就进入了虚拟终端
ctral a组合键再按d退出虚拟终端,但不是结束
screen -ls 查看虚拟终端列表
screen -r id 进入指定的终端
screen -S aming
screen -r aming
扩展
tcp三次握手四次挥手(重点)http://www.doc88.com/p-9913773324388.html
tshark几个用法:http://www.aminglinux.com/bbs/thread-995-1-1.html
https://blog.csdn.net/jyusun/article/details/71513086
http://www.cnblogs.com/chengmo/archive/2010/10/08/1846190.html
http://www.cnblogs.com/lixiaohui-ambition/archive/2012/12/11/2813419.html
1. Linux日志文件总管logrotate http://linux.cn/article-4126-1.html
2. xargs用法详解 http://blog.csdn.net/zhangfn2011/article/details/6776925