netstat 竟然还能这么玩儿?
一次摸鱼的机会,看到群里小伙伴问了一嘴 netstat -tnpl 这个命令是干啥的,这个命令用过很多,但是我其实也没有认真研究过,但是这是一个问题,我不能放过它,而且 netstat 这个命令我日常就用来查询端口的监听状态了,所以趁着这次机会,一起搞懂 netstat 这个命令。
netstat 这个命令在 Linux 、Windows 和 MacOS 操作系统下都兼容,不同的是,netstat 在 UNIX 下显示详细信息的命令是 man netstat ,而在 Linux 和 Windows 下面是 netstat --help。
Linux 下的 netstat 命令
当我在 Linux 下执行 man netstat命令之后,系统显示出来的提示着实让我吓一大跳,看来这个命令内容很多啊!不要被这么长的描述吓到,我们一步一步来。

首先来了解一下 netstat 这个命令是干啥的。
官方给我们的解释就是
netstat -- show network status
列出网络状态
但是这网络状态都有啥呢?带着疑问,我在 Linux 下执行了一下。

打印出来是一个六元组,六元组每一列的内容分别是

仔细看了一下这个六元组,这好像表明 netstat 这个命令是用于监控传入和传出的网络连接和状态的一个命令行工具啊。
从整体上来看,netstst 的输出结果可以分为两部分,一部分是 Active Internet connections,称为活跃 TCP 连接,其中的 Recv-Q 和 Send-Q 指的是客户端发送队列和客户端接收队列。这两个队列的值一般都是 0 ,如果不是 0 的话表示有消息堆积还没有发出去/取出,这种情况一般很少见到。
另外一部分是 Active UNIX domain sockets, 称为 活跃的 Unix 域套接字,这部分中的 socket 和网络 socket 套接字一样,不同的是,这块只能用来本地通信,性能要比网络 socket 高。Active UNIX domain sockets 也是一个六元组,分别表示

netstat 参数释义
下面我们来解释一下 netstat --help 列出来的一些参数,我们从最常见的一些参数开始入手,这样大家看起来也能形成阶段性记忆,不至于失去重点。
netstat -a
-a 这个参数默认会监控所有的 socket 连接。

包括已经监听的、已经建立连接的、客户端发送的等待服务器的和未被监听都会被列出来。
netstat -at/-t
netstat -at 和 netstat -t 这俩后缀都是用来监听与 TCP 协议有关的端口,不同的是 netstat -at 会监听所有 State(状态)下的端口,而 netstat -t 仅仅会监听 ESTABLISHED 状态的端口。
netstat -at

netstat -t

netstat -au/-u
同样的,netstat -au 和 netstat -u 都会监控与 UDP 有关的端口,不同的是 netstat -au 会监听所有 State(状态)下的端口,而 netstat -u 仅仅会监听 ESTABLISHED 状态的端口。
netstat -au

netstat -u

我这里测试是没有监控已经建立连接状态下的 UDP 协议。
netstat -ap
这条命令用于列出程序运行的端口,常用的命令是
netstat -ap|grep '程序名'
比如我们要找 http 程序,就是 Netstat -ap|grep http

还可以直接列出端口号
netstat -ap|grep 8080

不过需要注意下,并不是所有的程序都能被找到,没有权限的不会显示,使用 root 权限可以查询所有信息。
netstat -l
netstat -l 用于监听正在处于监听状态的端口(读起来还真有那么点费劲,为了读起来更顺畅,后面直接使用列出替换监听)。

netstat -lt 只用于列出所有监听 TCP 端口。

netstat -lu 只用于列出所有监听 UDP 端口。

netstat -lx 只用于列出所有监听 UNIX 端口。

netstat -s
netstat -s用于列出所有端口的统计信息。

netstat -st用于列出 TCP 端口的统计信息。

netstat -su用于列出 UDP 端口的统计信息。

netstat -p
netstat -p 可以与其他参数一起使用,例如 netstat -pt 就可以列出服务名称和 PID 号。

netstat -c
使用 netstat -c 将每隔一秒列出网络信息。

netstat -r
netstat -r用于列出路由核心信息。

netstat --verbose
这条命令会列出系统支持的地址族(Address Family)。

Address Family 简单来说就是底层是使用的哪种通信协议来递交数据的,如 AF_INET 用的是 TCP/IPv4;AF_INET6 使用的是 TCP/IPv6;而 AF_LOCAL 或者 AF_UNIX 则指的是本地通信(即本次通信是在当前主机上的进程间的通信),一般用绝对路径的形式来指明。
netstat -i
netstat -i 用来列出网络接口数据包,包括传输和接收具有 MTU(最大传输单元)的数据包。

另外,netstat -ie 还用于列出内核接口表,和 ifconfig 命令很相似

关于这个问题
所以,回到文章刚开始的那个疑问,netstat -tnpl 是干什么用的,其实这就是几个参数的组合
- -t :仅列出与 tcp 有关的信息
- -n:以数字形式列出
- -p:列出正在使用 socket PID 和 程序名称
- -l:列出正在监听的服务器 socket
我们执行一下这个命令。

另外,在 Linux 中,已经推荐使用 ss 来替代 netstat ,使用 ip route 来替代 netstat -r ,使用 ip -s link 来替代 netstat -i ,使用 ip addr 来替代 netstat -g 了。
原文链接:netstat 还能这么玩儿?
如果这篇文章对你有帮助,希望点赞并关注一下哦!
netstat 竟然还能这么玩儿?的更多相关文章
- SQL还可以这么玩儿
对于数据库的增删改查,我们都再熟悉不过了,今天,将和您一起探讨几种不一样的SQL用法,原来,SQL还可以这么玩儿. 以下是数据库的原表,如图-1. 1.快速复制表结构 这时,如果我们需要复制一份一模一 ...
- 技术大佬:我去,你竟然还在用 try–catch-finally
二哥,你之前那篇 我去 switch的文章也特么太有趣了,读完后意犹未尽啊,要不要再写一篇啊?虽然用的是 Java 13 的语法,对旧版本不太友好.但谁能保证 Java 不会再来一次重大更新呢,就像 ...
- 技术大佬:我去,你竟然还不会用 this 关键字
上一篇文章写的是 Spring Boot 的入门,结果有读者留言说,Java 都还没搞完,搞什么 Spring Boot,唬得我一愣一愣的.那这篇就继续来搞 Java,推出广受好评的我去系列第四集:你 ...
- 我去,你竟然还不会用 Java final 关键字
写一篇文章容易吗?太不容易了,首先,需要一个安静的环境,这一点就非常不容易.很多小伙伴的办公室都是开放式的,非常吵,况且上班时间写的话,领导就不高兴了:只能抽时间写.其次,环境有了,还要有一颗安静的心 ...
- postman一些你不常用的实用技巧,竟然还能这么玩
序言 各位好啊,我是会编程的蜗牛,作为java开发者,平时调试接口的时候,肯定需要用到接口调试工具,或者Swagger之类的.Swagger的优势在于它可以将后台加的一些接口注释信息直接展示出来,但是 ...
- 我去,你竟然还不会用 synchronized
二哥,离你上一篇我去已经过去两周时间了,这个系列还不打算更新吗?着急着看呢. 以上是读者 Jason 发来的一条信息,不看不知道,一看真的是吓一跳,上次我去是 4 月 3 号更新的,离现在一个多月了, ...
- 「mysql优化专题」视图应用竟然还可以这么优化?不得不收藏(8)
一.视图概述(技术文): (1)什么是视图? 视图是基于 SQL 语句的结果集的可视化的表. 视图包含行和列,就像一个真实的表.视图中的字段就是来自一个或多个数据库中的真实的表中的字段.视图并不在数据 ...
- 什么?你竟然还没有用这几个chrome插件?
前言 其实18年之前写过一篇关于chrome插件的文章,里面安利了4个chrome插件.鉴于这已经是9102年了,之前觉得好用的chrome插件跟新了解到的比起来,还是差了那么点味道.所以决定再更新一 ...
- Docker竟然还能这么玩?商业级4G代理搭建实战!
时间过得真快,距离这个系列的上一篇文章<商业级4G代理搭建指南[准备篇]>发布的时间已经过了两个星期了,上个星期由于各种琐事缠身,周二开始就没空写文章了,所以就咕咕咕了. 那么在准备篇中, ...
随机推荐
- Centos7 mysqldump定时任务,对mysql定时备份数据
vi mysqldump_bak.sh #!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/ ...
- ch01系统基础信息模块详解
第1章 系统基础信息模块详解 1.1 系统性能信息模块 psutil 解决VMWare在Windows10的安装问题: 安装VC Redistributable 2017 解决虚拟机的上网问题:修改V ...
- spring cloud --- 使用 actuator 热更新【刷新】单机配置文件
1.前言 分布式微服务想要热更新配置文件,还需要 消息中间件 配合使用 ,一般使用 rabbitMQ 或 Kafka ,这里不解释 . 这篇随笔 只讲解 底层的 单机热更新配置文件 2.环境 spri ...
- hisql ORM 查询语句使用教程
HiSql 提供一个可以适合多种数据库的中间查询语法,不需要关注各个数据库的语法特性,通过HiSql写语句可以在常用的不同类型数据库中执行,且语法与Sql语境类似一看就懂一学就会 hisql.net ...
- PAT 乙级 1002. 写出这个数 (20)(C语言描述)
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10100. 输出格式:在一行内输出n的各位数字之和的每 ...
- Easticsearch概述(API使用)二
Rest简介 一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务端互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制 Rest的操作分为以 ...
- C# - 逆变的具体应用场景
前言 早期在学习泛型的协变与逆变时,网上的文章讲解.例子算是能看懂,但关于逆变的具体应用场景这方面的知识,我并没有深刻的认识. 本文将在具体的场景下,从泛型接口设计的角度出发,逐步探讨逆变的作用,以及 ...
- Spark-寒假-实验2
1. 计算级数 代码: import scala.io.StdIn object jishu { def main(args:Array[String]) { var Sum=0.0 println( ...
- Docker安装配置mysql
Docker安装mysql踩坑日记 拉取镜像 sudo docker pull mysql:5.7 运行镜像 docker run -p 3306:3306 --name mysql -v /myda ...
- dubbo系列十一、dubbo transport层记录
前言 在dubbo接口方法重载且入参未显式指定序列化id导致ClassCastException分析时候用到了dubbo的通信层和编解码,dubbo有个transport层,默认使用netty4进行网 ...