文章目录
netstat 命令是 Linux 系统中一个非常常用的网络工具,用于查询和统计网络连接的状态和数据传输情况。在网络故障排除和性能调优中,netstat 命令是必不可少的工具之一。本文将详细介绍 netstat 命令的常用参数及其用法。
netstat [-a] [-c] [-e] [-f] [-i] [-n] [-o] [-p protocol] [-r] [-s] [-t] [-u] [interval]
netstat 命令的常用选项如下:
-a(all):显示所有连接状态,包括 TCP、UDP 和 Unix 域套接字;
-t(tcp):显示 TCP 连接状态;-u(udp):显示 UDP 连接状态;-x:列出所有unix端口-c(continuous):连续显示网络状态信息。按 Ctrl + C 结束。-e(extend):显示网络统计信息。包括网络接口、协议等。-f:显示外部地址的完全限定域名(FQDN)。-i:显示网络接口信息。-n:以数字形式显示地址和端口号。-o:显示与每个连接相关的进程 ID。-p protocol:显示特定协议(tcp、udp 或 icmp)的连接。-r:显示路由表。-s:显示网络统计信息。包括网络接口、协议等。-t:显示 TCP 协议的连接。-u:显示 UDP 协议的连接。interval:指定连续显示网络状态信息的时间间隔(单位为秒)。 netstat -ano | grep 进程ID
netstat -ano | grep 端口号
netstat -ano
netstat -so -p udp
netstat -so -p tcp
IPv4 的 TCP 统计信息
主动开放 = 8055
被动开放 = 1136
失败的连接尝试 = 2469
重置连接 = 1712
当前连接 = 67
接收的分段 = 2473796
发送的分段 = 454254
重新传输的分段 = 10493
活动连接
协议 本地地址 外部地址 状态 PID
TCP 127.0.0.1:6000 kubernetes:51683 ESTABLISHED 16460
TCP 127.0.0.1:6000 kubernetes:51684 ESTABLISHED 16460
netstat -ano | grep ESTABLISHED
TCP 127.0.0.1:6000 127.0.0.1:51684 ESTABLISHED 16460
TCP 127.0.0.1:6000 127.0.0.1:51685 ESTABLISHED 16460
netstat -ano | grep ESTABLISHED | awk '{print $5}' | sort | uniq -c | sort -nr | head -10
netstat -ano: 显示所有连接和监听端口,以数字形式显示地址和端口号,并显示与每个连接相关的进程 ID
TCP 0.0.0.0:47001 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:49664 0.0.0.0:0 LISTENING 1044
TCP 127.0.0.1:4244 0.0.0.0:0 LISTENING 15104
TCP 127.0.0.1:6000 127.0.0.1:51683 ESTABLISHED 16460
TCP 127.0.0.1:6000 127.0.0.1:51685 ESTABLISHED 16460
...
UDP 192.168.2.226:1900 *:* 10428
UDP 192.168.2.226:61395 *:* 10428
UDP [::]:3702 *:* 15956
UDP [::]:57584 *:* 15956
UDP [::1]:1900 *:* 10428
UDP [::1]:61392 *:* 10428
UDP [fe80::b131:35eb:14b3:8958%50]:1900 *:* 10428
grep ESTABLISHED :过滤出已建立的连接。
TCP 127.0.0.1:6000 127.0.0.1:51683 ESTABLISHED 16460
TCP 127.0.0.1:6000 127.0.0.1:51685 ESTABLISHED 16460
TCP 127.0.0.1:49671 127.0.0.1:62522 ESTABLISHED 8244
TCP 127.0.0.1:49672 127.0.0.1:49673 ESTABLISHED 6952
TCP 127.0.0.1:49673 127.0.0.1:49672 ESTABLISHED 6952
TCP 127.0.0.1:51058 127.0.0.1:51059 ESTABLISHED 4612
TCP 127.0.0.1:51059 127.0.0.1:51058 ESTABLISHED 4612
TCP 127.0.0.1:51061 127.0.0.1:51062 ESTABLISHED 4612
awk '{print $5}' :提取出第5列进程ID。
16460
16460
8244
6952
6952
4612
4612
4612
sort | uniq -c | sort -nr :排序统计每个进程ID的连接数量,并按照连接数量从高到低排序;
sort:排序。uniq -c:用于在文本中查找并计数唯一行,有点像count - group bysort -nr:用于对文本进行排序。
-n 选项表示按照数值大小排序,而不是按照字典序排序;-r 选项表示按照逆序排序,即从大到小排序。netstat -ano | grep ESTABLISHED | awk '{print $5}' | sort
16460
16460
4612
4612
4612
6952
6952
8244
netstat -ano | grep ESTABLISHED | awk '{print $5}' | sort | uniq -c
2 16460
3 4612
2 6952
1 8244
netstat -ano | grep ESTABLISHED | awk '{print $5}' | sort | uniq -c | sort -nr
3 4612
2 16460
2 6952
1 8244
head : 显示前面的若干行。
netstat -ano | grep ESTABLISHED | awk '{print $5}' | sort | uniq -c | sort -nr | head -2
3 4612
2 16460
netstat -ano | awk '{print $3}' | cut -d: -f1 | sort | uniq -c | sort -rn
cut -d: -f1 :用于从文本中剪切文本并打印出指定字段。目的是从连接信息中提取远程 IP 地址,剔除掉冒号和端口号。
-d: 表示使用冒号作为分隔符-f1 表示提取分隔符左边的第一个字段netstat -ano | grep ESTABLISHED | awk '{print $3}'
127.0.0.1:51240
10.2.3.411:443
110.236.32.1:443
netstat -ano | awk '{print $3}' | cut -d: -f1
127.0.0.1
10.2.3.411
110.236.32.1
其他命令跟上面一样单步调试即可。
netstat -ano | awk '{print $1}' | sort | uniq -c
120 TCP
82 UDP
// TCP 网络状态的数量
netstat -ano |grep TCP | awk '{print $4}' | sort | uniq -c
62 ESTABLISHED
51 LISTENING
2 TIME_WAIT
// TCP 网络状态的数量
netstat -ano |grep 进程ID | awk '{print $4}' | sort | uniq -c
62 ESTABLISHED
51 LISTENING
2 TIME_WAIT
netstat -ano | grep -c :
或者
netstat -a -n | grep -c "TCP"
netstat -a -n | grep -c "UDP"
netstat -a -n | grep -w "TCP" | wc -l
netstat -ano | awk 'NR>2{print $1}' | sort | uniq -c | awk '{print $2 "占用了"$1"个端口"}'
上面的都有重复
netstat -ano | awk '{print $3}' | cut -d: -f1 | sort | uniq -c | sort -rn
grep -c : : grep 命令用于在文件或输出中查找与指定模式匹配的行,并将匹配的行打印出来。
: : 表示匹配冒号字符。grep -c : 命令会统计输出或文件中包含冒号字符的行数。netstat -ano | grep 进程ID | grep UDP | grep -v -E ':5353|::'
-v:排除相关的行。grep -v UDP排除UDP相关的行。
-E 'keyword1|keyword2|keyword3' : 匹配多个关键词,keyword1、keyword2和keyword3是关键词,用|分隔。
wc -l : 用于统计文件的行数
netstat -ano | grep 6712 | grep UDP | grep -v -E ':5353|::' | wc -l
| State | 状态 |
|---|---|
| LISTENING | 监听中,服务端需要打开一个socket进行监听,侦听来自远方TCP端口的连接请求 |
| ESTABLISHED | 已连接,代表一个打开的连接,双方可以进行或已经在数据交互了 |
| SYN_SENT | 客户端通过应用程序调用connect发送一个SYN以请求建立一个连接。在收到ACK后,状态转为ESTABLIHSED。 |
| CLOSE_WAIT | 被动关闭端接到FIN后,就发出ACK以回应FIN请求(它的接收也作为文件结束符传递给上层应用程序) |
| TIME_WAIT | 主动关闭端接收到FIN后,TCP就发送ACK包,并进入TIME-WAIT状态 |
| LAST_ACK | 等待对方回应一个ACK(这是准备关闭连接的一个步骤,意味着这个连接正在关闭) |
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions
我有一个问题。我想从另一个ruby脚本运行一个ruby脚本并捕获它的输出信息,同时让它也输出到屏幕。亚军#!/usr/bin/envrubyprint"Enteryourpassword:"password=gets.chompputs"Hereisyourpassword:#{password}"我运行的脚本文件:开始.rboutput=`runner`putsoutput.match(/Hereisyour(password:.*)/).captures[0].to_s正如您在此处看到的那样,存在问题。在start.rb的第一行,屏幕是空的。我在运行程序中看不到“输入您的密
有这样的事吗?我想在Ruby程序中使用它。 最佳答案 试试这个http://csl.sublevel3.org/jp2a/此外,Imagemagick可能还有一些东西 关于ruby-是否有将图像文件转换为ASCII艺术的命令行程序或库?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6510445/
如何在Ruby的if语句中检查bash命令的返回值(true/false)。我想要这样的东西,if("/usr/bin/fswscell>/dev/null2>&1")has_afs="true"elsehas_afs="false"end它会提示以下错误含义,它总是返回true。(irb):5:warning:stringliteralincondition正确的语法是什么?更新:/usr/bin/fswscell寻找afs安装和运行状态。它会抛出这样的字符串,Thisworkstationbelongstocell如果afs没有运行,命令以状态1退出 最
在几个项目中,我希望有一个类似rakeserver的rake任务,它将通过任何需要的方式开始为该应用程序提供服务。这是一个示例:task:serverdo%x{bundleexecrackup-p1234}end这行得通,但是当我准备停止它时,按Ctrl+c并没有正常关闭;它中断了Rake任务本身,它说rakeaborted!并给出堆栈跟踪。在某些情况下,我必须执行Ctrl+c两次。我可能可以用Signal.trap写一些东西来更优雅地中断它。有没有更简单的方法? 最佳答案 trap('SIGINT'){puts"Yourmessa
关于SSHkit-Github它说:Allbackendssupporttheexecute(*args),test(*args)&capture(*args)来自SSHkit-Rubydoc,我明白execute实际上是test的别名?test之间有什么区别?,execute,capture在Capistrano/SSHKit中我应该什么时候使用? 最佳答案 执行只是执行命令。使用非0退出引发错误。测试方法的行为与execute完全相同,但是它返回bool值(true如果命令以0退出,而false否则)。它通常用于控制任务中的流程
我在目录“C:\DocumentsandSettings\test.exe”中有一个文件,但是当我用单引号编写命令时`C:\DocumentsandSettings\test.exe(我无法在此框中显示),用于在Ruby中执行命令,我无法这样做,我收到的错误是找不到文件或目录。我尝试用“//”和“\”替换“\”,但似乎没有任何效果。我也使用过系统、IO.popen和exec命令,但所有的努力都是徒劳的。exec命令还使程序退出,这是我不想发生的。提前致谢。 最佳答案 反引号环境就像双引号,所以反斜杠用于转义。此外,Ruby会将空格解
我正在尝试将cucumber项目的用户名和密码置于版本控制之外。有没有办法在命令行上手动将用户名和密码等变量传递给Cucumber脚本?我的备份计划是将它们放在一个YML文件中,然后将该文件添加到gitignore,这样它们就不会被置于版本控制中。 最佳答案 所以,我看到了您对铁皮人的评论,答案是肯定的。cucumberPASSWORD=my_passwordPASSWORD被设置为环境变量,您可以通过将其引用为ENV['PASSWORD']来使用它的值。例如,browser.text_field(:id=>'pwd').setEN
我想在Windows7上安装带有ruby1.9.3的rspec-railsgem。我收到一些错误消息,提示无法安装某些json库。所以,我使用下面的说明来解决它。来源=The'json'nativegemrequiresinstalledbuildtools从[rubyinstaller.org][3]下载[Ruby1.9.3][2]从[rubyinstaller.org][3]下载DevKit文件对于Ruby1.9.3,使用[DevKit-tdm-32-4.5.2-20110712-1620-sfx.exe][4]将DevKit解压到路径C:\Ruby193\DevKit运行cd