执行时netstat
,我发现无论控制台大小如何,该命令的输出宽度都受到限制,与其他命令(例如ps
似乎需要调整的命令)形成鲜明对比。
例如:
$ sudo netstat -natp | grep sshd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1454/sshd
tcp 0 48 xx.xx.xx.xx:22 xx.xx.xx.xx:44182 ESTABLISHED 1147/sshd: wtower [
tcp6 0 0 :::22 :::* LISTEN 1454/sshd
您可以注意到第二个输出的线宽很短(结束于[
)。有什么方法可以让我得到正确的输出吗netstat
?
更新:该软件包版本net-tools_1.60-24.1ubuntu2_i386
在 Ubuntu Server 12.04.5 LTS 上运行。
不幸的是,重定向到文件会产生相同的输出。
在任何控制台尺寸下,输出都是上面的。在较小的尺寸下,它只是包裹每一行,但是仍然输出是相同的,只是缩短了。
答案1
正如中所解释的对类似问题的回答关于aptitude
and dpkg
,netstat
正在截断输出,因为当它通过管道传输到 grep 时,它不知道输出应该有多宽。这个一般问题的解决方案具体取决于输入管道的程序的选项。在 的情况下netstat
,我看到的唯一选择是使用该--wide
选项,该选项告诉它假设输出的宽度与输出所需的宽度一样。然后你可能想使用cut -c-100
例如。如果你真的只想每行 100 个字符。
答案2
这个问题现在可能已经解决了。我在尝试查看哪些端口正在侦听时遇到了同样的问题。
我之前在跑步netstat -vat
。这导致列被截断。我发现只要在末尾添加一个大写字母“T”,它就会给我我想要的东西。
netstat -vatT
v = verbose a = all t = tcp T = notrim(停止修剪长地址)
答案3
在 Amazon linux 上我使用-W
选项。例如:netstat -atgW
netstat --version
net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
...
man netstat
--wide , -W 不要根据需要使用输出截断 IP 地址。目前这是可选的,以免破坏现有脚本。
答案4
您可以注意到第二个输出的线宽很短(以 [ 结束)。有什么方法可以让我从 netstat 获得正确的输出吗?
PID/Program name
不幸的是, netstat 中列的宽度是硬编码的#define PROGNAME_WIDTH 20
因此无法直接从 netstat 获取完整输出。最后还有 19 个字符和一个空格。
在今天的 Linux 中,我们可以使用sudo ss -natp
格式稍有不同但带有全名的完整信息:
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=1360261,fd=14))
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1360240,fd=3))
LISTEN 0 4096 0.0.0.0:25 0.0.0.0:* users:(("docker-proxy",pid=1388011,fd=4))
ESTAB 0 0 10.0.2.15:22 10.0.2.2:39156 users:(("sshd",pid=1052681,fd=4),("sshd",pid=1052550,fd=4))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1360240,fd=4))
LISTEN 0 4096 [::]:3478 ```