Netstat

當我 grep netstat 的 8080 輸出時,為什麼 Tomcat 不顯示?

  • January 21, 2016

我正在執行以下操作以確定 Tomcat 是否正在執行:

$ whoami
voops
voops@esavo00:~/apache-tomcat-7.0.57/bin#
$ ps -ef | grep -i tomcat | grep -v grep
voops     8973     1  0 Apr22 ?        00:00:40 /usr/local/jdk1.7.0_67/bin/java -Djava.util.logging.config.file=/home/voops/apache-tomcat-7.0.57/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/home/voops/apache-tomcat-7.0.57/endorsed -classpath /home/voops/apache-tomcat-7.0.57/bin/bootstrap.jar:/home/voops/apache-tomcat-7.0.57/bin/tomcat-juli.jar -Dcatalina.base=/home/voops/apache-tomcat-7.0.57 -Dcatalina.home=/home/voops/apache-tomcat-7.0.57 -Djava.io.tmpdir=/home/voops/apache-tomcat-7.0.57/temp org.apache.catalina.startup.Bootstrap start

我對上述內容的解讀是,tomcat 正在作為目前登錄使用者 (voops) 擁有的程序執行。然後我做一個:

$ netstat -a | grep 8080

..但沒有任何問題。

我的server.xml文件聲明了以下元素:

<Connector port="8080" protocol="HTTP/1.1"
          connectionTimeout="20000"
          redirectPort="8443" />

netstat -an | grep 8080表明:

$ netstat -an | grep 8080
tcp        0      0 0.0.0.0:8080                0.0.0.0:*                   LISTEN
tcp        1      0 131.176.161.23:44535        131.176.161.23:8080         CLOSE_WAIT
tcp        1      0 131.176.161.23:54600        131.176.161.23:8080         CLOSE_WAIT
tcp        1      0 131.176.161.23:51667        131.176.161.23:8080         CLOSE_WAIT
tcp        1      0 131.176.161.23:50348        131.176.161.23:8080         CLOSE_WAIT         
...  5 more lines similar to the one above

如果對該問題的評論不夠清楚,我將在此處添加一個答案,以及這些評論中未提及的一些指針。

“當我 grep netstat 的 8080 輸出時,為什麼 Tomcat 沒有出現?”

簡短回答:

因為埠號 8080 正在轉換為字元串 http_alt,這與 grep 模式不匹配。

詳情:

https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers可以看到,8080 埠是官方的**“HTTP 替代(http_alt)”——通常用於 Web 代理和記憶體伺服器,或者作為非-root 使用者”**。

基本上,netstat將使用預設顯示顯示埠 8080 的“http-alt”。

使用時netstat -n,將顯示埠號(如 http-alt 的 8080),您將能夠對其進行 grep。使用 -p 執行 netstat 時,將顯示監聽程序的程序 ID。

所以使用netstat -pa | grep http-altornetstat -pan | grep :8080來查看tomcat的入口。

或者,使用lsof -P | grep :8080which 還將顯示擁有正在偵聽埠 8080 的套接字的程序 ID 和程序名稱。這裡 -P 將防止埠號轉換為字元串(如 http-alt 的 8080)

另一種選擇是nmap $SERVERor namp localhost,當 tomcat 執行良好時,它將顯示包括 8080 在內的所有開放埠。

引用自:https://unix.stackexchange.com/questions/198090