iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >Linux运维之如何使用ss命令代替netstat
  • 809
分享到

Linux运维之如何使用ss命令代替netstat

sslinux命令linux常用命令netstatlinuxss命令 2022-06-04 22:06:27 809人浏览 泡泡鱼
摘要

前言 在运维和管理 linux 服务器的时候,我们最常用的一个命令就是 netstat,我常用这个命令来查看当前服务器上有哪些进程正在侦听端口,主要用来诊断网络服务的工作状态。 不过,最近有一次安装好一个 ubuntu

前言

运维和管理 linux 服务器的时候,我们最常用的一个命令就是 netstat,我常用这个命令来查看当前服务器上有哪些进程正在侦听端口,主要用来诊断网络服务的工作状态。

不过,最近有一次安装好一个 ubuntu 发型版,发现默认没有安装 netstat,觉得非常奇怪,自己手动安装后,发现 man pages 提示,netstat 命令已经是 deprecated 了,建议使用 ss 命令代替。

This program is mostly obsolete. Replacement for netstat is ss. Replacement for netstat -r is ip route. Replacement for netstat -i is ip -s link. Replacement for netstat -g is ip maddr.

netstat man pages

netstat 的用法

netstat 有许多许多参数,我一般就用一种组合,以至于后来已经想不起来为什么是这几个参数了:


netstat -npl

得到的结果是这样的:


Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address      Foreign Address     State    PID/Program name
tcp    0   0 127.0.0.53:53      0.0.0.0:*        LISTEN   655/systemd-resolve
tcp    0   0 0.0.0.0:22       0.0.0.0:*        LISTEN   890/sshd
tcp    0   0 127.0.0.1:631      0.0.0.0:*        LISTEN   30790/cupsd
tcp    0   0 0.0.0.0:18025      0.0.0.0:*        LISTEN   890/sshd
tcp6    0   0 :::22          :::*          LISTEN   890/sshd
tcp6    0   0 ::1:631         :::*          LISTEN   30790/cupsd
tcp6    0   0 :::9090         :::*          LISTEN   15415/./prometheus
tcp6    0   0 :::18025        :::*          LISTEN   890/sshd
udp    0   0 127.0.0.53:53      0.0.0.0:*              655/systemd-resolve
udp    0   0 0.0.0.0:631       0.0.0.0:*              30792/cups-browsed
udp    0   0 0.0.0.0:5353      0.0.0.0:*              757/avahi-daemon: r
udp    0   0 0.0.0.0:42360      0.0.0.0:*              757/avahi-daemon: r
udp6    0   0 :::58232        :::*                757/avahi-daemon: r
udp6    0   0 :::5353         :::*                757/avahi-daemon: r
Active UNIX domain Sockets (only servers)
Proto RefCnt Flags    Type    State     I-node  PID/Program name   Path
unix 2   [ ACC ]   STREAM   LISTENING   35116  1304/gnome-session- @/tmp/.ICE-unix/1304
unix 2   [ ACC ]   SEQPACKET LISTENING   1448   1/init        /run/udev/control
unix 2   [ ACC ]   STREAM   LISTENING   34277  1270/systemd     /run/user/1000/systemd/private
unix 2   [ ACC ]   STREAM   LISTENING   34282  1270/systemd     /run/user/1000/gnupg/S.gpg-agent.ssh
unix 2   [ ACC ]   STREAM   LISTENING   33510  1270/systemd     /run/user/1000/gnupg/S.gpg-agent
unix 2   [ ACC ]   STREAM   LISTENING   33511  1270/systemd     /run/user/1000/pulse/native
unix 2   [ ACC ]   STREAM   LISTENING   33512  1270/systemd     /run/user/1000/gnupg/S.gpg-agent.extra

最常用的就是这个命令组合,展示的结果有两个段落,第一个段落展示的是 TCP/UDP 协议的侦听情况,第二个段落展示的是 socks 文件的侦听情况。参数 n 的意思是展示数字格式的 IP 地址,不然会展示主机名称或者是域名,参数 p 的意思显示进程的名字(有时候显示不出来),l 的意思,是关注处于 LISTENING 状态的 socket。

通过如上命令,我们看到了系统所有打开的 socket,如果你启动一种网络服务也好,自己开发一个网络服务打开端口也好,通过这个命令都应该能看到自己打开的端口,如果看不到,应该就是没有能够正确打开端口,要好好查询是什么原因。所以这是一个很好用的调试命令。

ss 的用法

上面介绍了 netstat 的最最基本的一种用法,其他用法当然还有很多,但是先略过不表,如果想使用 ss 命令来代替 netstat 的话,我们怎样达到类似的效果呢?


ss -atlp

这是我自己摸索的一个参数组合,目前我背诵得还不是很流利,每次还需要看一下文档:


State     Recv-Q      Send-Q           Local Address:Port            Peer Address:Port
LISTEN     0        128             127.0.0.53%lo:domain             0.0.0.0:*       users:(("systemd-resolve",pid=655,fd=13))
LISTEN     0        128                0.0.0.0:ssh               0.0.0.0:*       users:(("sshd",pid=890,fd=5))
LISTEN     0        5                127.0.0.1:ipp               0.0.0.0:*       users:(("cupsd",pid=30790,fd=7))
LISTEN     0        128                0.0.0.0:18025              0.0.0.0:*       users:(("sshd",pid=890,fd=3))
LISTEN     0        128                 [::]:ssh                [::]:*       users:(("sshd",pid=890,fd=6))
LISTEN     0        5                  [::1]:ipp                [::]:*       users:(("cupsd",pid=30790,fd=6))
LISTEN     0        128                   *:9090                 *:*       users:(("prometheus",pid=15415,fd=3))
LISTEN     0        128                 [::]:18025               [::]:*       users:(("sshd",pid=890,fd=4))

这是 ss 命令呈现出来的结果,可以看到,格式和 netstat 很不一样,不像 netstat 命令那么紧凑和直观。这是很多人诟病这个命令的原因之一。当然,批判这种批判的声音认为,人们只是死守了一种习惯,不愿前行。当然了,这么说也未尝不对,就拿 Charles 个人来说,就算我 2010 年参加工作,才学会 netstat 命令,那我到现在也使用了将近十年,从来没有变过,当然看得无比顺眼啦。

当然,也有一种理由是老外提出来的,说 ss 这个命令的名字不好,其实 ss 可能是 socket statistics 的意思,缩写以后,竟然只有两个字母,不太好联想,不像 netstat 那么直观。当然这是我的解释,不是老外抱怨的理由,他们抱怨的是,每每提及 ss,他们会联想起希特勒!是不是匪夷所思,我是 80 后,我这个年代的人,对这个都没有什么印象,关键我们用中文为主,估计大家看到 ss 最多联想到梯子,怎么都不会想到希特勒。这个大纳粹有一个武装部队,以前叫党卫队特别机动部队,后来改名叫武装党卫队。它的德语简称正是SS。

不说闲话了,说说几个参数,a 参数是显示所有的意思,t 参数意思是显示 TCP 协议的,l 代表正在 LISTENING 状态的,p 代表进程信息。从上面的表里,我们看到 p 参数打印的信息,组织得不如 netstat 精炼。但是更为完善一点,显示了进程名字和 PID 以及 FD。但是因为用了两重小括号,key/value 的格式,再加引号,看起来脏乱差。当然,我们可以用一些命令去格式化它,不过还是太麻烦了。

更换的原因是什么?

这可能是我最为好奇的事情。不过网上我搜索了不少的资料,基本都语焉不详。这也有点让我有点无奈。

大体上,我们能看出来,主要是 net-tools 这个包,将要被 iproute 这个包给替换。理由大概是,1,这个包太老了,2,这个包不支持很多内核新的特性(但是没有说是哪些特性),界面不够优化使用困难(对命令行不友好),3,net-tools 里面的 ifconfig 确实缺点多多,4,未来不再想维护 net-tools 了。

Luk Claes and me, as the current maintainers of net-tools, we've been thinking about it's future. Net-tools has been a core part of Debian and any other linux based distro for many years, but it's showing its age.

It doesnt support many of the modern features of the linux kernel, the interface is far from optimal and difficult to use in automatisation, and also, it hasn't Got much love in the last years.

On the other side, the iproute suite, introduced around the 2.2 kernel line, has both a much better and consistent interface, is more powerful, and is almost ten years old, so nobody would say it's untested.

Hence, our plans are to replace net-tools completely with iproute, maybe leading the route for other distributions to follow. Of course, most people and tools use and remember the venerable old interface, so the first step would be to write wrappers, trying to be compatible with net-tools.

At the same time, we believe that most packages using net-tools should be patched to use iproute instead, while others can continue using the wrappers for some time. The ifupdown package is obviously the first candidate, but it seems that a version using iproute has been available in experimental since 2007.

https://serverfault.com/questions/633087/where-is-the-statement-of-deprecation-of-ifconfig-on-linux

也有从 原理层面 分析的:现在的 netstat 和 ifconfig 命令,都是通过读写 /proc 目录下的虚拟文件来完成任务的,这个东西在小型业务系统上,是没问题的,但是在大规模系统里,可能会伤害系统的性能之类的。相比之下,ss 和 ip 两个命令,使用的是 Linux 内核的 netlink sockets 特性。有着根本上的不同。虽然,老命令也可以用新原理重写,但是其实并没有人那么做,主要因为不同程序员团体的一些 political issues ,大家意见不合……

当然,深层次的还有,我们使用这样的调试命令,本质上还是希望获知内核的状态的,其实,内核已经改变了 networking 模块的整个原理,另一方面我还要求命令像从前那样去展示信息,展示层面的格式和真实原理已经背离,所以,从长远看,替代这两个命令才是必然。

结论

咱们这些做技术的,也还是要与时俱进比较好,虽然,以前的那些命令熟悉,好用,手到擒来,甚至无法忘记,但是新的还是要保持学习。很多发型版已经默认不带有 net-tools 包了,虽然仍然可以手动安装回来,但是,这背后的态度已经很明确了。另一方面,我们做技术,也要谨防自己的大脑僵化,还是要保持对新事物的好奇心和热情。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。

--结束END--

本文标题: Linux运维之如何使用ss命令代替netstat

本文链接: https://www.lsjlt.com/news/20438.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Linux中如何使用Netstat命令
    本文小编为大家详细介绍“Linux中如何使用Netstat命令”,内容详细,步骤清晰,细节处理妥当,希望这篇“Linux中如何使用Netstat命令”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Netstat 命...
    99+
    2023-06-27
  • Linux的ss命令如何使用
    这篇文章主要讲解了“Linux的ss命令如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux的ss命令如何使用”吧!Linux常用命令ss是Socket Statistics的缩...
    99+
    2023-06-28
  • linux系统如何使用netstat命令
    这篇文章主要为大家展示了“linux系统如何使用netstat命令”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“linux系统如何使用netstat命令”这篇文章吧。Netstat 命令用于显示...
    99+
    2023-06-27
  • 如何在Linux中使用netstat命令
    本篇文章为大家展示了如何在Linux中使用netstat命令,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.命令格式:netstat [-acCeFghilMnNoprstuvVwx][...
    99+
    2023-06-13
  • linux系统中如何使用Netstat命令
    小编给大家分享一下linux系统中如何使用Netstat命令,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Netstat 命令用于显示各种网络相关信息,如网络连接...
    99+
    2023-06-28
  • Netstat命令如何使用
    这篇文章主要讲解了“Netstat命令如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Netstat命令如何使用”吧!Netstat是控制台命令,是一个监控TCP/IP网络的非常有用的...
    99+
    2023-06-27
  • Linux系统中netstat命令如何使用
    这篇文章将为大家详细讲解有关Linux系统中netstat命令如何使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。netstat man的帮助手册会有提示信息:NOTEThis ...
    99+
    2023-06-12
  • Linux系统中如何使用ss命令
    这篇文章主要介绍了Linux系统中如何使用ss命令,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。ss是Socket Statistics的缩写。顾名思义,ss命令可以用来获取...
    99+
    2023-06-28
  • Linux下如何安装并使用netstat命令
    这篇文章主要介绍了Linux下如何安装并使用netstat命令,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Netstat命令用于显示协议统计数据和当前TCP/IP网络的连接...
    99+
    2023-06-27
  • linux如何替代du命令
    这篇文章给大家分享的是有关linux如何替代du命令的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。ncduncdu 作为普通 du 的替代品,这在 Linux 社区中已经很流行了。ncdu 正是基于开发者们对 d...
    99+
    2023-06-16
  • Linux命令之lz4命令如何使用
    本篇内容主要讲解“Linux命令之lz4命令如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux命令之lz4命令如何使用”吧!一、lz4命令简介LZ4是一种压缩格式,特点是压缩/解压...
    99+
    2023-07-05
  • linux中如何使用ss命令查看网络状态
    这篇文章主要为大家展示了“linux中如何使用ss命令查看网络状态”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“linux中如何使用ss命令查看网络状态”这篇文章吧。ss命令用于显示socket...
    99+
    2023-06-27
  • 如何在Linux中使用netstat命令获取网络信息
    这篇文章将为大家详细讲解有关如何在Linux中使用netstat命令获取网络信息,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。netstat - 显示网络连接,路由表,接口状态,伪装连接,网...
    99+
    2023-06-12
  • Linux如何使用ss命令查看系统的socket状态
    小编给大家分享一下Linux如何使用ss命令查看系统的socket状态,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是Linux系统Linux是一种免费使用和...
    99+
    2023-06-13
  • Linux系统如何使用命令运行PHP
    小编给大家分享一下Linux系统如何使用命令运行PHP,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!在命令行上执行php所需的设置首先在Linux系统中安装PHP,如果没有安装的小伙伴可以参考Linux系统安装php教程,...
    99+
    2023-06-28
  • 如何在Linux中使用netstat命令查看80端口的连接数
    本篇文章给大家分享的是有关如何在Linux中使用netstat命令查看80端口的连接数,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。服务器上的一些统计数据:  1)统计80端口...
    99+
    2023-06-13
  • 如何使用SQL Server代理运行CmdExec命令
    这篇文章将为大家详细讲解有关如何使用SQL Server代理运行CmdExec命令,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。需求:调用网服务器(SMS SQL Ser...
    99+
    2024-04-02
  • Linux中如何使用netstat命令检查默认的网关或路由IP地址
    这篇文章主要介绍了Linux中如何使用netstat命令检查默认的网关或路由IP地址,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。如何在 L...
    99+
    2024-04-02
  • redis如何使用scan指令代替keys指令
    这篇文章主要为大家展示了“redis如何使用scan指令代替keys指令”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“redis如何使用scan指令代替keys...
    99+
    2024-04-02
  • 如何使用Linux系统中定时运行命令
    这篇文章主要介绍“如何使用Linux系统中定时运行命令”,在日常操作中,相信很多人在如何使用Linux系统中定时运行命令问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Linux系统中定时运行命令”的疑...
    99+
    2023-06-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作