一次摸鱼的机会,看到群里小伙伴问了一嘴 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 -atnetstat -t 这俩后缀都是用来监听与 TCP 协议有关的端口,不同的是 netstat -at 会监听所有 State(状态)下的端口,而 netstat -t 仅仅会监听 ESTABLISHED 状态的端口。

netstat -at

netstat -t

netstat -au/-u

同样的,netstat -aunetstat -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 竟然还能这么玩儿?的更多相关文章

  1. SQL还可以这么玩儿

    对于数据库的增删改查,我们都再熟悉不过了,今天,将和您一起探讨几种不一样的SQL用法,原来,SQL还可以这么玩儿. 以下是数据库的原表,如图-1. 1.快速复制表结构 这时,如果我们需要复制一份一模一 ...

  2. 技术大佬:我去,你竟然还在用 try–catch-finally

    二哥,你之前那篇 我去 switch的文章也特么太有趣了,读完后意犹未尽啊,要不要再写一篇啊?虽然用的是 Java 13 的语法,对旧版本不太友好.但谁能保证 Java 不会再来一次重大更新呢,就像 ...

  3. 技术大佬:我去,你竟然还不会用 this 关键字

    上一篇文章写的是 Spring Boot 的入门,结果有读者留言说,Java 都还没搞完,搞什么 Spring Boot,唬得我一愣一愣的.那这篇就继续来搞 Java,推出广受好评的我去系列第四集:你 ...

  4. 我去,你竟然还不会用 Java final 关键字

    写一篇文章容易吗?太不容易了,首先,需要一个安静的环境,这一点就非常不容易.很多小伙伴的办公室都是开放式的,非常吵,况且上班时间写的话,领导就不高兴了:只能抽时间写.其次,环境有了,还要有一颗安静的心 ...

  5. postman一些你不常用的实用技巧,竟然还能这么玩

    序言 各位好啊,我是会编程的蜗牛,作为java开发者,平时调试接口的时候,肯定需要用到接口调试工具,或者Swagger之类的.Swagger的优势在于它可以将后台加的一些接口注释信息直接展示出来,但是 ...

  6. 我去,你竟然还不会用 synchronized

    二哥,离你上一篇我去已经过去两周时间了,这个系列还不打算更新吗?着急着看呢. 以上是读者 Jason 发来的一条信息,不看不知道,一看真的是吓一跳,上次我去是 4 月 3 号更新的,离现在一个多月了, ...

  7. 「mysql优化专题」视图应用竟然还可以这么优化?不得不收藏(8)

    一.视图概述(技术文): (1)什么是视图? 视图是基于 SQL 语句的结果集的可视化的表. 视图包含行和列,就像一个真实的表.视图中的字段就是来自一个或多个数据库中的真实的表中的字段.视图并不在数据 ...

  8. 什么?你竟然还没有用这几个chrome插件?

    前言 其实18年之前写过一篇关于chrome插件的文章,里面安利了4个chrome插件.鉴于这已经是9102年了,之前觉得好用的chrome插件跟新了解到的比起来,还是差了那么点味道.所以决定再更新一 ...

  9. Docker竟然还能这么玩?商业级4G代理搭建实战!

    时间过得真快,距离这个系列的上一篇文章<商业级4G代理搭建指南[准备篇]>发布的时间已经过了两个星期了,上个星期由于各种琐事缠身,周二开始就没空写文章了,所以就咕咕咕了. 那么在准备篇中, ...

随机推荐

  1. EasySharding.EFCore 如何设计使用一套代码完成的EFCore Migration 构建Saas系统多租户不同业务需求且满足租户自定义分库分表、数据迁移能力?

    下面用一篇文章来完成这些事情 多租户系统的设计单纯的来说业务,一套Saas多租户的系统,面临很多业务复杂性,不同的租户存在不同的业务需求,大部分相同的表结构,那么如何使用EFCore来完成这样的设计呢 ...

  2. 解决VirtualBox 运行时报内存不能written

    在VirtualBox 虚拟机中安装系统的时候,突然报"0x00000000指令,该内存不能written",只能强制停止,这个问题要怎么解决呢? 解决办法是恢复系统主题3个dll ...

  3. 第10组 Alpha冲刺 (5/6)(组长)

    1.1基本情况 ·队名:今晚不睡觉 ·组长博客:https://www.cnblogs.com/cpandbb/p/13996848.html ·作业博客:https://edu.cnblogs.co ...

  4. VsCode安装与配置

    一.安装 二.配置 开启emmet完整的语法 文件-首选项-设置:Emmet: Trigger Expansion On Tab 三.常用插件 必装: Chinese (Simplified) Lan ...

  5. 缓存一致性性协议MESI笔记

    概述 今天的笔记只是讲解一下MESI的概念和使用场景的介绍,MESI(Modified Exclusive Shared Or Invalid)也称为伊利诺斯协议,是一种广泛使用的支持协会策略的缓存一 ...

  6. 使用.NET 6开发TodoList应用(28)——实现应用程序健康检查

    系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求 应用健康检查在容器部署的微服务场景下非常常见,相比而言单体非容器部署的应用就不太关心这个特性,为了后续的内容我们在本文中简单介 ...

  7. 【Java】抽象类与抽象方法

    文章目录 抽象类与抽象方法 abstract关键字的使用 abstract修饰类:抽象类 abstract修饰方法:抽象方法 abstract使用上的注意点: 抽象类的匿名子类 模板方法设计模式 抽象 ...

  8. 获取app启动时间

    启动APP并收集消耗时间的命令: adb shell am  start -W -n package/activity 手动关闭谷歌浏览器APP(也可以使用命令关闭adb shell am force ...

  9. 【linux】Ubuntu20.04使用apt下载和卸载openJDK

    Ubuntu20.04使用apt下载和卸载openJDK 前言 由于最近电脑装了ubuntu和win双系统,想再ubuntu上学习.在成功配置完系统之后,开始了配学习环境的旅程.... 这次的是使用u ...

  10. Centos下安装Scala(2)

    1.下载压缩包 命令:wget https://downloads.lightbend.com/scala/2.11.8/scala-2.11.8.tgz 2.解压缩包 命令:tar -xzvf sc ...