รูปแบบเอาต์พุตยูทิลิตี้สถิติซ็อกเก็ตของ ss - linux


21

เมื่อใช้ssกับ-pตัวเลือกuser/pid/fdคอลัมน์จะกระโดดใต้บรรทัดใดบรรทัดหนึ่ง เช่นนี้เป็นสิ่งที่ฉันเห็นจริง:

# ss -nulp4
State      Recv-Q Send-Q                                           Local Address:Port                                             Peer Address:Port 
UNCONN     0      0                                                            *:20000                                                       *:*      
users:(("perl",pid=9316,fd=6))
UNCONN     0      0                                                            *:10000                                                       *:*      
users:(("perl",pid=9277,fd=6))
UNCONN     0      0                                               192.168.100.10:53                                                          *:*      
users:(("named",pid=95,fd=517),("named",pid=95,fd=516))
UNCONN     0      0                                                    127.0.0.1:53                                                          *:*      
users:(("named",pid=95,fd=515),("named",pid=95,fd=514))

การจัดรูปแบบผลลัพธ์ที่ต้องการ :

# ss -nulp4
State      Recv-Q Send-Q                                           Local Address:Port                                             Peer Address:Port 
UNCONN     0      0                                                            *:20000                                                       *:*      users:(("perl",pid=9316,fd=6))
UNCONN     0      0                                                            *:10000                                                       *:*      users:(("perl",pid=9277,fd=6))
UNCONN     0      0                                               192.168.100.10:53                                                          *:*      users:(("named",pid=95,fd=517),("named",pid=95,fd=516))
UNCONN     0      0                                                    127.0.0.1:53                                                          *:*      users:(("named",pid=95,fd=515),("named",pid=95,fd=514))

เพื่อยืนยันว่าไม่มีการขึ้นบรรทัดใหม่ฉันได้ลอง:

# ss -nulp4 | cat -A
State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port $
UNCONN     0      0                         *:20000                    *:*      users:(("perl",pid=9316,fd=6))$
UNCONN     0      0                         *:10000                    *:*      users:(("perl",pid=9277,fd=6))$
UNCONN     0      0            192.168.100.10:53                       *:*      users:(("named",pid=95,fd=517),("named",pid=95,fd=516))$
UNCONN     0      0                 127.0.0.1:53                       *:*      users:(("named",pid=95,fd=515),("named",pid=95,fd=514))$

และแน่นอนคุณจะเห็นว่าไม่มี แต่ตอนนี้แปลกพอรูปแบบผลลัพธ์เป็นวิธีที่ฉันต้องการให้เป็น มีคนอธิบายได้ไหมว่าเกิดอะไรขึ้นที่นี่ ฉันจะจัดรูปแบบที่ต้องการได้อย่างไร

นี่คือสิ่งเดียวที่หยุดฉันจากการย้ายจากไปnetstatss

คำตอบ:


10

สำหรับเหตุผลอื่น ๆ

ssส่วนหนึ่งของคอลเลกชันยูทิลิตีiproute2ในเคอร์เนล Linux ใช้ioctl ()คำร้องขอเพื่อรับความกว้างปัจจุบันของเทอร์มินัล

อย่างไรก็ตาม; ความกว้างทั้งหมดใช้สำหรับฟิลด์«อื่น ๆ »และเขตข้อมูลกระบวนการจะบีบลงบนบรรทัดถัดไป

คุณสามารถดูได้โดยยกตัวอย่างเช่น (เมื่อมีข้อ จำกัด ใน terminal):

script ss.txt
ss -nlup4
exit

จากนั้นก็ขยายหน้าต่าง terminal cat ss.txtของคุณและ

เหตุผลว่าทำไม

ss -nulp4 | cat -A

«ทำงาน»เป็นเพราะยูทิลิตี้รับรู้ว่ามันเขียนถึง tty หรือไม่ :

if (isatty(STDOUT_FILENO)) {

}

อย่างที่คุณเห็นจากบรรทัดก่อนหน้าในความกว้างเริ่มต้นของซอร์สโค้ดถูกกำหนดเป็น 80 ดังนั้นหากเทอร์มินัลของคุณอยู่ที่ 130 คอลัมน์และคุณ:

ss -nulp4 | cat

มันจำได้ว่าการส่งออกไม่ได้เป็น tty (แต่ไปป์) และสาขาอื่น ๆจะหนาตาลงใน 80 คอลัมน์ในขณะที่เขตกระบวนการจะถูกเขียนหลังจาก 80 คอลัมน์เหล่านี้ แต่เทอร์มินัลของคุณคือกว้างกว่า 80 คอลัมน์และมีที่ว่างสำหรับรายการกระบวนการมันจะแสดงในหนึ่งบรรทัด

เช่นเดียวกันไปเช่น:

ss -nulp4 > ss.txt

สำหรับวิธี«บรรลุการจัดรูปแบบที่ฉันต้องการ»วิธีหนึ่งที่ไม่เหมาะสมคือการทำบางสิ่งในทิศทางของ (ขึ้นอยู่กับเทอร์มินัล):

stty cols 100
ss -nlup4

คำอธิบายที่ยอดเยี่ยมและเคล็ดลับที่ดีกับการตั้งค่า cols stty ขอบคุณมาก!
จันทร์ที่

คำอธิบายที่ดี แต่การใช้column -tดูเหมือนจะเป็นวิธีที่ง่ายที่สุด
pevik

18

การติดตามหนึ่งรายการอาจมีประโยชน์ในการเปลี่ยนเอาต์พุต:

ss -ltunp | column -t 

1
นี่ควรเป็นข้อคิดเห็นในคำตอบ คุณมีชื่อเสียงพอที่จะเพิ่มความคิดเห็นโปรดใช้มัน
grochmal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.