自动化运维压箱底的命令都在这里了(四)

netstat

netstat命令英语显示各种网络相关信息,如网络连接、路由表接口状态(Interface Statistics),masquerade连接,多播成员(Multicast Memberships)等等。

[root@vagrant-centos65 ~]# netstat
常用参数:
-a:(all)显示所有选项,默认不显示LISTEN相关
-t:(tcp)仅显示 tcp 相关选项
-u:(udp)仅显示 udp 相关选项
-l:仅列出有在 Listen(监听)的服务状态

-p:显示简历相关链接的程序名
-r:显示路由信息,路由表
-e:显示扩展信息,例如 uid 等
-s:按各个协议进行统计
-c:每隔一个固定时间,执行该 netstat 命令
注:LISTEC 和 LISTENING 的状态只有用 -a 或者 -l 才能看到

用法如下:

  • 列出所有端口号(包括监听和未监听)
# netstat -a      列出所有端口
# netstat -at      列出所有 tcp 端口
# netstat -au      列出所有 udp 单口
  • 列出所有处于监听状态的 sockets
# netstat -l      只显示监听端口
# netstat -lt     只列出所有监听 tcp 端口
# netstat -lu     只列出所有监听 udp 端口
# netstat -lx     之列吃所有监听 UNIX 端口
  • 显示每隔协议的统计信息
# netstat -s      显示所有端口的统计信息
# netstat -st      显示 tcp 端口的统计信息
# netstat -sc      显示 udp 端口的统计信息
  • 在 netstat 输出中显示 PID 和进程名称
# netstat -pt
  • 显示核心路由信息
# netstat -r
  • 找出程序运行的端口

    并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。

# netstat -ap | grep ssh
  • 找出运行在指定端口的进程
# netstat -an | grep ':80'
  • 显示网络接口列表
# netstat -i

ss

ss 即 socket state,也就是说,是可以查看系统中 socket 的状态的,我们可以用netstat的,但为什么还要用 ss这个工具呢?当然 ss自然有它的优点,当我们打开的 socket 数量很多时,netstat就会变得很慢。

​ netstat是遍历/proc下面每个PID目录,ss直接读/proc/net下面的统计信息。所以ss执行的时候消耗资源以及消耗的时间都比netstat少很多

[root@vagrant-centos65 ~]# ss -h
Usage: ss [ OPTIONS ]
       ss [ OPTIONS ] [ FILTER ]
   -h, --help           this message
   -V, --version        output version information
   -n, --numeric        don't resolve service names
   -r, --resolve       resolve host names
   -a, --all            display all sockets
   -l, --listening      display listening sockets
   -o, --options       show timer information
   -e, --extended      show detailed socket information
   -m, --memory        show socket memory usage
   -p, --processes      show process using socket
   -i, --info           show internal TCP information
   -s, --summary        show socket usage summary

   -4, --ipv4          display only IP version 4 sockets
   -6, --ipv6          display only IP version 6 sockets
   -0, --packet display PACKET sockets
   -t, --tcp            display only TCP sockets
   -u, --udp            display only UDP sockets
   -d, --dccp           display only DCCP sockets
   -w, --raw            display only RAW sockets
   -x, --unix           display only Unix domain sockets
   -f, --family=FAMILY display sockets of type FAMILY

   -A, --query=QUERY, --socket=QUERY
       QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]

   -D, --diag=FILE      Dump raw information about TCP sockets to FILE
   -F, --filter=FILE   read filter information from FILE
       FILTER := [ state TCP-STATE ] [ EXPRESSION ]

常用的ss命令

ss -l 显示本地打开的所有端口
ss -pl 显示每个进程具体打开的socket
ss -t -a 显示所有tcp socket
ss -u -a 显示所有的UDP socekt
ss -s 列出当前socket详细信息
ss -o state established '( dport = :http or sport = :http )'  列出所有http连接中的连接
ss src ADDRESS_PATTERN    使用IP地址筛选
	src:表示来源       ADDRESS_PATTERN:表示地址规则

ss dport OP PORT     端口筛选
  OP:是运算符
  PORT:表示端口
  dport:表示过滤目标端口、相反的有sport
  OP运算符如下:
  <= or le : 小于等于 
  >= or ge : 大于等于
  == or eq : 等于
  != or ne : 不等于端口
  < or lt : 小于这个端口 > or gt : 大于端口

lsof

lsof(list open files)是一个列出当前系统打开文件的工具。在Linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以,lsof的功能很强大。一般 root 用户才能执行lsof命令,普通用户可以看见/usr/sbin/lsof命令,但是普通用户执行会显示“permission denied”。因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。

# yum -y install losf

​ 在终端下输入lsof即可显示系统打开的文件,因为lsof需要访问核心内存和各种文件的身份,来运行它才能够充分地发挥其功能。即需要 root 权限

[root@vagrant-centos65 ~]# lsof
用法:
lsof abc.txt      显示开启文件abc.txt的进程
lsof directory    查找谁在使用文件目录系统
lsof -i:22        查找22端口被哪个进程占用
lsof -c abc       显示abc进程现在打开的文件
lsof -g gid       显示归属gid的进程情况
lsof -p 12        看进程为12的进程打开了哪些文件
lsof -u username  查看用户打开了哪些文件
lsof -i @192.168.1.111    查看远程已打开的网络连接(连接到192.168.1.111)

猜你喜欢

转载自blog.csdn.net/qq_42992919/article/details/94561046
今日推荐