# find & grep & sed & wc & xargs & split & cat
https://abc.htmltoo.com/thread-44811.htm
# linux服务器被入侵后排查: https://abc.htmltoo.com/thread-46354.htm
# liunx检测系统是否被入侵: https://abc.htmltoo.com/thread-46433.htm
# 线上CPU飙升100%问题排查, 排查IO使用过高的进程, 查看tcp状态
https://abc.htmltoo.com/thread-45882.htm
lsblk # 查看分区和磁盘
df -h # 查看空间使用情况
fdisk -l # 分区工具查看分区信息
cfdisk /dev/sda # 查看分区
blkid # 查看硬盘label(别名)
du -sh ./* # 统计当前目录各文件夹大小
free -h # 查看内存大小
cat /proc/cpuinfo| grep "cpu cores"| uniq # 查看cpu核心数
cat /proc/cpuinfo| grep "physical id"|uniq| wc -l # 查看物理cpu个数
cat /proc/cpuinfo| grep "processor"| wc -l # 查看逻辑cpu的个数
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c # 查看CPU型号
curl ifconfig.me # 查询本机IP
ps -elf # 查看正在运行的进程
pidof <服务名> # 查询某个进程服务的PID值
ps -ef|grep java # 查看所有java进程
netstat -plnt # 查看所有启动端口/服务
netstat -nlp |grep 端口号 # 根据端口号查找进程号
netstat -nlp |grep 进程号 # 根据端口号查找端口号
netstat -anpt | grep sshd # 看下sshd服务端口的客户端请求情况
netstat -anpt | grep 3306 |awk '{print $5}' > /data/site/3306.txt
ls -lt /proc/进程号/cwd # 根据进程号查找文件路径
ls -lt /proc/进程号/exe # 根据进程号查找
cat /etc/hosts # 查看本机host
lsof -i tcp:80 # 查看(80)进程占用哪些文件的
netstat -pant | grep 80 # 端口(80)服务是否已开启
ps -p pid -o lstart,etime # 查看进程的启动时间点,进程已运行时间
service --status-all # 查看服务是否启动
systemctl status 进程号 # 查询关联的守护进程
docker ps # 查看运行的容器, -a 为包过未启动的容器.
supervisorctl status # 守护进程
systemctl status iptables.service # 查看iptables防火墙状态
firewall-cmd --state # 查看firewall防火墙状态
ps -a # 显示所有进程
kill -9 <PID> # 解除进程
top -c # 显示进程完整命令
egrep -i -r 'killed process' /var/log # 根据关键字,查看系统异常
#java
ps -ef|grep java # 查看所有java进程
jps # 查看所有java服务,进程
jinfo -flags pid # 查看正在运行的 java 应用程序输出全部的参数
-显示跟java 有关的日志
dmesg -T | grep "(java)"
#防火墙
---iptables规则 防止DoS攻击
https://abc.htmltoo.com/thread-369.htm
---firewalled规则
https://abc.htmltoo.com/thread-45988.htm
#开启/取消密钥登陆,root登陆
https://abc.htmltoo.com/thread-46277.htm
#Linux服务器被入侵后排查
https://abc.htmltoo.com/thread-46354.htm
#chattr文件保护
https://abc.htmltoo.com/thread-573.htm
#设置开机启动服务,添加自定义系统服务
https://abc.htmltoo.com/thread-46236.htm
# Linux流量监控
https://abc.htmltoo.com/thread-46506.htm
yum install iftop -y
apt install iftop -y
-查看导致流量较高的端口与消耗流量的IP,以eth0端口为例。
iftop
iftop -i eth0 -P
iftop -i eth0 -n -P
iftop -i eth0 -nNB -m 10M
iftop -i enp2s0 -P
iftop -i enp2s0 -nNB -m 10M
-nload查询当前服务器进出流量的情况
-每秒的进出很清晰,再结合上面的分析,确定服务器的流量消耗。
yum install -y nload
nload
-查看每个进程的网络流量
yum install -y nethogs
nethogs eth0
nethogs -s //按接收流量大小排序
-查看服务,端口,用户,进程
ss -tulnp | grep LISTEN
-查看所有连接请求,能看到本地地址和远程IP地址和端口:
netstat -tn 2>/dev/null
-查看服务器端口的连接情况
netstat -ap
-查看所有80端口的连接数
netstat -nat|grep -i 80|wc -l
-对连接的IP按连接数量进行排序:
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
-查看不正常访问的情况,观察两个结果的参数是否过大。
netstat -n | awk '/^tcp/ {++S[$NF]} END {for (a in S) print a, S[a]}'
-查看服务器所有的网络连接数
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
-查看TCP的连接数
netstat -n | grep ^tcp | awk '{++S[$NF]} END {for(a in S) print a, S[a]}'
-查看TCP连接状态,包括LISTEN,ESTABLISHED,Foreign,TIME_WAIT等信息:
netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn
netstat -n | awk '/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}'
netstat -n | awk '/^tcp/ {++state[$NF]}; END {for(key in state) print key,"\t",state[key]}'
netstat -n | awk '/^tcp/ {++arr[$NF]};END {for(k in arr) print k,"\t",arr[k]}'
netstat -n |awk '/^tcp/ {print $NF}'|sort|uniq -c|sort -rn
netstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c
-查看80端口连接数排名前10的IP:
netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n10
-查找较多time_wait连接前20的IP地址和端口
netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20
-查找较多的SYN连接:
netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more
-查看当前服务器的并发访问数:
netstat -an | grep ESTABLISHED | wc -l
-查看只要established的状态,显示TCP端口:
netstat -tn | grep ESTABLISHED 2>/dev/null
-查看访问某一ip的端口所有外部连接IP,这个是出站访问:
netstat -nt | grep 100.100.45.131:22 | awk '{print $5}' | awk -F: '{print ($1>$4?$1:$4)}' | sort | uniq -c | sort -nr | head
-查80WEB服务端口所在的进程:
netstat -ntlp | grep 80 | awk '{print $7}' | cut -d/ -f1
# 修改文件时间戳
-指定日期和时间,格式为 Y-m-d H:M:S
-d
-递归修改目录下所有文件和内容
-r
touch -d "2000-01-01 00:00" /usr/local/etc/cdn.cfg
# nmap端口查看工具
yum install -y nmap
yum install -y tcpdump
nmap localhost #查看主机当前开放的端口
nmap -p 1024-65535 localhost #查看主机端口(1024-65535)中开放的端口
nmap -PS 192.168.21.163 #探测目标主机开放的端口
nmap -PS22,80,3306 192.168.21.163 #探测所列出的目标主机端口
nmap -O 192.168.21.163 #探测目标主机操作系统类型
nmap -A 192.168.21.163 #探测目标主机操作系统类型
---在测试端口的连通性之前,我们先使用 nmap 命令来查看目标服务器的端口开放状态。
nmap lxlinux.net
---在确认了目标服务器的端口开放性之后,我们就可以使用 telnet 来测试端口的连通性了。测试的格式是:
telnet lxlinux.net 80(端口)
---查看到对方ip的路由
win:tracert 10.8.31.106
liunx:traceroute 10.8.31.106
yum install -y traceroute
apt-get install -y traceroute
# 查看系统io信息
-监控整体服务器,cpu,内存,磁盘,网络等
top
-类似top命令,不过iotop是只监控io相关的进程
iotop
-查看当前磁盘每秒的读取,写入量,单位K
apt install dstat
yum -y install dstat
dstat -d
-查看当前磁盘随机的读IOPS,写IOPS
dstat -r
-查看网卡每秒接收,发送量,单位K,不足1K时显示Byte数
dstat -n
-统计各个进程的磁盘IO,也可以监控指定进程,还可以监控cpu和内存
pidstat
-监控io活跃的进程,还可以监控内存,cpu相关
vmstat
# 查看磁盘io情况
iostat -d -k 1 10 #查看TPS和吞吐量信息(磁盘读写速度单位为KB)
iostat -d -m 2 #查看TPS和吞吐量信息(磁盘读写速度单位为MB)
iostat -d -x -k 1 10 #查看设备使用率(%util)、响应时间(await)
iostat -c 1 10 #查看cpu状态
iostat -d -x -k 1
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 1.56 28.31 7.84 31.50 43.65 3.16 21.82 1.58 1.19 0.03 0.80 2.61 10.29
sda 1.98 24.75 419.80 6.93 13465.35 253.47 6732.67 126.73 32.15 2.00 4.70 2.00 85.25
sda 3.06 41.84 444.90 54.08 14204.08 2048.98 7102.04 1024.49 32.57 2.10 4.21 1.85 92.24
可以看到磁盘的平均响应时间<5ms,磁盘使用率>80。磁盘响应正常,但是已经很繁忙了
# 查看当前网络连接情况
查看系统TCP连接资源命令
netstat
netstat -ant|awk '/^tcp/ {++S[$NF]} END {for(a in S) print (a,S[a])}'
一般情况下,系统的socket资源默认5000个。
1、LISTENING状态
FTP服务启动后首先处于侦听(LISTENING)状态。
2、ESTABLISHED状态
ESTABLISHED的意思是建立连接。表示两台机器正在通信。
3、CLOSE_WAIT
对方主动关闭连接或者网络异常导致连接中断,这时我方的状态会变成CLOSE_WAIT 此时我方要调用close()来使得连接正确关闭
4、TIME_WAIT
我方主动调用close()断开连接,收到对方确认后状态变为TIME_WAIT。TCP协议规定TIME_WAIT状态会一直持续2MSL(即两倍的分 段最大生存期),以此来确保旧的连接状态不会对新连接产生影响。处于TIME_WAIT状态的连接占用的资源不会被内核释放,所以作为服务器,在可能的情 况下,尽量不要主动断开连接,以减少TIME_WAIT状态造成的资源浪费。
4. cpu
-查看系统cpu使用情况
top
-查看所有cpu核信息
mpstat -P ALL 1
-查看cpu使用情况以及平均负载
vmstat 1
-进程cpu的统计信息
pidstat -u 1 -p pid
-跟踪进程内部函数级cpu使用情况
perf top -p pid -e cpu-clock
5. 内存
-查看系统内存使用情况
free -m
-虚拟内存统计信息
vmstat 1
-查看系统内存情况
top
-1s采集周期,获取内存的统计信息
pidstat -p pid -r 1
-查看进程的内存映像信息
pmap -d pid
-检测程序内存问题
valgrind --tool=memcheck --leak-check=full --log-file=./log.txt ./程序名
6. 磁盘IO
-查看系统io信息
iotop
-统计io详细信息
iostat -d -x -k 1 10
-查看进程级io的信息
pidstat -d 1 -p pid
-查看系统IO的请求,比如可以在发现系统IO异常时,可以使用该命令进行调查,就能指定到底是什么原因导致的IO异常perf record -e block:block_rq_issue -ag^Cperf report
7. 网络
-显示网络统计信息
netstat -s
-显示当前UDP连接状况netstat -nu
-显示UDP端口号的使用情况netstat -apu
-统计机器中网络连接各个状态个数netstat -a | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
-显示TCP连接
ss -t -a
ss -lt
-显示套接字的 PID
ss -p
-按端口号过滤连接
ss -at '( dport = :80 or sport = :80 )'
-显示sockets摘要信息
ss -s
-显示所有
ss -u -a
-显示 IPv4 和 IPv6 套接字连接
ss -4
ss -6
-查看网络IOsar -n DEV 1//抓包以包为单位进行输出
tcpdump -i eth1 host 192.168.1.1 and port 80
-抓包以流为单位显示数据内容
tcpflow -cp host 192.168.1.1
8. 系统负载
-查看负载情况
uptime top vmstat
-统计系统调用耗时情况
strace -c -p pid
-跟踪指定的系统操作例如
epoll_waitstrace -T -e epoll_wait -p pid
-查看内核日志信息
dmesg
---uptime 机器启动时间+负载
如果每个 CPU 内核的当前活动进程数不大于 3 的话,那么系统的性能还算可以支持。如果每个 CPU 内核的任务数大于 5,那么这台机器的性能有严重问题。如果你的 linux 主机是 1 个双核 CPU 的话,当 Load Average 为 6 的时候说明机器已经被充分使用了。
---负载说明
以下是针对单核情况说明:
load<1:没有等待。
load==1:系统已无额外的资源跑更多的进程了。
load>1:进程都堵着等待资源。
注意:
load < 0.7 :系统很闲,要考虑多部署一些服务。
0.7 < load < 1 :系统状态不错。
load == 1 时:系统马上要超负载了。
load > 5:系统已经非常繁忙。
不同 load 值说明的问题:
(1)1 分钟 load >5,5 分钟 load <3,15 分钟 load <1。
短期内繁忙,中长期空闲,初步判断是一个抖动或者是拥塞前兆
(2)1 分钟 load >5,5 分钟 load >3,15 分钟 load <1
短期内繁忙,中期内紧张,很可能是一个拥塞的开始。
(3)1 分钟 load >5,5 分钟 load >5,15 分钟 load >5
短中长期都繁忙,系统正在拥塞
(4)1 分钟 load <1,5 分钟 Load>3,15 分钟 load >5
短期内空闲,中长期繁忙,不用紧张,系统拥塞正在好转。
9. 实时抓取并显示当前系统种tcp80端口的网络数据信息
tcpdump -n tcp port 80
10. 查看连接本机最多的前 10 个 IP 地址
netstat -antp | awk '{print $4}' | cut -d ':' -f1 | sort | uniq -c | sort -n -k1 -r | head -n 10
11. 统计了每一种状态的tcp连接数量
ss -s
netstat -antp | awk '{a[$6]++}END{ for(x in a)print x,a[x]}'
12. tcpdump-抓包
tcpdump -i eth0 -nn -s0 -v port 80
-i 指定网卡进行抓包
-n 和ss一样,表示不解析域名
-nn 两个n表示端口也是数字,否则解析成服务名
-s 设置抓包长度,0表示不限制
-v 抓包时显示详细输出,-vv、-vvv依次更加详细
---过滤网卡
tcpdump -i eth0 #抓取所有经过网卡eth0数据包
tcpdump -i lo #抓取环回口的数据包
---过滤主机/IP
tcpdump host 192.168.10.10 #抓取所有IP为192.168.10.10的数据包
tcpdump src host 192.168.10.10 #抓取所有源IP为192.168.10.10的数据包
tcpdump dst host 192.168.10.10 #抓取所有目的IP为192.168.10.10的数据包
---过滤端口:
tcpdump port 1234 #抓取所有端口为1234的网络数据
tcpdump src port 1234 #抓取所有源端口为1234的网络数据
tcpdump dst port 1234 #抓取所有目的端口为1234的网络数据
---过滤特定协议:
tcpdump udp #抓取UDP协议的数据包
tcpdump icmp #抓取ICMP协议的数据包
---抓取特定类型的数据包
tcpdump -i eth1 'tcp[tcpflags] = tcp-syn' #抓取所有经过网卡1的SYN类型数据包
tcpdump -i eth1 udp dst port 53 #抓取经过网卡eth1的所有DNS数据包(默认端口)
---逻辑语句过滤-抓取所有经过网卡1,目的网络是172.16,但目的主机不是192.168.1.200的TCP数据
tcpdump -i eth1 ‘((tcp) and ((dst net 172.16) and (not dst host 192.168.1.200)))’
---抓包存取, 抓取所有经过网卡1,目的主机为172.16.7.206的端口80的网络数据并存储
tcpdump -i eth1 host 172.16.7.206 and port 80 -w /tmp/xxx.cap #
tcpdump -A -s0 port 80
tcpdump -i eth0 host 10.10.1.1
tcpdump -i eth0 -s0 -w test.pcap
tcpdump -s 0 -v -n -l | egrep -i "POST /|GET /|Host:"
13. 查看进程内存
--按内存使用大小排序
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head
14. 日志过大切割
https://abc.htmltoo.com/thread-46053.htm