Linux日常管理技巧:free,ps,netstat命令和抓包工具
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux日常管理技巧:free,ps,netstat命令和抓包工具相关的知识,希望对你有一定的参考价值。
一、free命令
free命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。
用法:
free [选项]
选项:
-b:以Byte为单位显示内存使用情况;
-k:以KB为单位显示内存使用情况;
-m:以MB为单位显示内存使用情况;
-o:不显示缓冲区调节列;
-s<间隔秒数>:持续观察内存使用状况;
-t:显示内存总和列;
-V:显示版本信息。
实例:
total:内存总数;
used:已经使用的内存数;
free:空闲的内存数;
shared:当前已经废弃不用;
buff/cache:分配给buffer和cache的内存总共有多大;
available:系统可使用内存大小,avaliable包含free和buffer/cache剩余部分。
二、ps命令
ps命令用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。
用法:
# ps [选项]
选项(参考):
http://man.linuxde.net/ps
由于ps命令能够支持的系统类型相当的多,所以选项多的离谱!
实例:
有的人喜欢用ps -elf
大同小异,显示的信息基本上是一样的。ps命令还有更多的用法,这里不多做介绍,因为你只要会用这个命令就足够了,如果需要其他用法,man一下或者网上搜索。下面说几个参数的意义。
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:多线程进程
+:代表在前台运行的进程
在日常工作中,ps命令经常配合管道符使用:
三、netstat命令
netstat命令用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况。
用法:
# netsta [参数]
参数:
-a或--all:显示所有连线中的Socket;
-A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址;
-c或--continuous:持续列出网络状态;
-C或--cache:显示路由器配置的快取信息;
-e或--extend:显示网络其他相关信息;
-F或--fib:显示FIB;
-g或--groups:显示多重广播功能群组组员名单;
-h或--help:在线帮助;
-i或--interfaces:显示网络界面信息表单;
-l或--listening:显示监控中的服务器的Socket;
-M或--masquerade:显示伪装的网络连线;
-n或--numeric:直接使用ip地址,而不通过域名服务器;
-N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称;
-o或--timers:显示计时器;
-p或--programs:显示正在使用Socket的程序识别码和程序名称;
-r或--route:显示Routing Table;
-s或--statistice:显示网络工作信息统计表;
-t或--tcp:显示TCP传输协议的连线状况;
-u或--udp:显示UDP传输协议的连线状况;
-v或--verbose:显示指令执行过程;
-V或--version:显示版本信息;
-w或--raw:显示RAW传输协议的连线状况;
-x或--unix:此参数的效果和指定"-A unix"参数相同;
--ip或--inet:此参数的效果和指定"-A inet"参数相同。
参考: http://man.linuxde.net/netstat
实例:
netstat命令用来打印网络连接状况、系统所开放端口、路由表等信息。最常用的关于netstat的命令就是这个netstat -lnp
(打印当前系统启动哪些端口)以及netstat -an
(打印网络连接状况)这两个命令非常有用,请一定要记住。
上图最右侧为网络连接状态,了解下tcp三次握手,就很好理解了。
如果你所管理的服务器是一台提供web服务(80端口)的服务器,那么你就可以使用 netstat -an |grep 80 查看当前连接web服务的有哪些IP了。
补充:ss -an
与netstat -an
作用类似。
# netstat -an | awk ‘/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}‘ //查看tcp各网络连接状态的数量
四、抓包工具
1、tcpdump抓包工具。
有时候,也许你会有这样的需求,想看一下某个网卡上都有哪些数据包,尤其是当你初步判定你的服务器上有流量攻击。这时,使用抓包工具来抓一下数据包,就可以知道有哪些IP在攻击你了。
# tcpdump -nn -c 10 -i ens33 //抓取10次包指定ens33网卡,并显示ip和端口,不显示主机名和服务名称
如果没有tcpdump 这个命令,需要用yum install -y tcpdump
命令去安装一下。上例中第三列和第四列显示的信息为哪一个IP+port在连接哪一个IP+port,后面的信息是该数据包的相关信息,-nn参数是为了直接显示ip+端口号,需要关注的只是第三列以及第四列。-i 选项后面跟设备名称,如果你想抓ens33网卡的包,后面则要跟eens33。-nn选项的作用是让第三列和第四列显示成IP+端口号的形式,如果不加-nn则显示的是主机名+服务名称。
-c选项,指定抓包数量。
参考:http://man.linuxde.net/tcpdump
一些常用的tcpdump实例:
# tcpdump -nn -i ens33 port 22 //只抓22端口的包
# tcpdump host 192.168.x.x //抓取指定ip的包
# tcpdump -nn -i ens33 tcp and not port 22 //指定抓tcp的包,但是不要22端口的
# tcpdump -nn -i ens33 port 22 and port 53 //只抓22和53端口的包
# tcpdump -nn -i ens33 -c 10 -i ens33 -w /tmp/tset.cap //保存10次抓包到/tmp/test.cap
# tcpdump -r /tmp/test.cap //读取抓包文件
2、wireshark工具
参考:http://www.360doc.com/content/15/0516/18/14900341_471040655.shtml
实例:
# 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"
这类似与访问web日志,若服务器没有配置访问日志,可以临时使用该命令查看当前的web请求。
更多用法可参考:https://www.cnblogs.com/liun1994/p/6142505.html
以上是关于Linux日常管理技巧:free,ps,netstat命令和抓包工具的主要内容,如果未能解决你的问题,请参考以下文章
Linux--命令大全/常用命令--管理类--内存/磁盘/进程--top/free/du/df/ps/pstree/kill/killall