आप इस आदेश को कैसे सरल करेंगे?


10

मैं स्ट्रेस / नेटस्टैट / आदि के लिए काफी नया हूं। मैं अपने अनुरोध (टेलनेट) को संभालने वाली अपाचे प्रक्रिया का पता लगाने के लिए इस कमांड का उपयोग कर रहा हूं, क्या यह थोड़ा सरल करने का एक तरीका है?

sudo strace -o /tmp/strace -f -s4096 -r -p $(netstat -antlp | \ 
    grep $(lsof -p `pidof telnet` | grep TCP | \
    perl -n -e'/localhost:(\d+)/ && print $1') | grep apache2 | \ 
    perl -n -e'/ESTABLISHED (\d+)/ && print $1')

धन्यवाद!


क्या आप टेलनेट प्रक्रिया शुरू करने से पहले या बाद में इसे चला रहे हैं?
11

शुरू होने के बाद, आपको इसे अपाचे से कनेक्ट करने के लिए कुछ सेकंड इंतजार करना होगा, फिर आप
स्ट्रेस

1
यदि आपकी कमांड काम करती है, तो इसे आसान बनाने में परेशान न करें।
टॉम ओ'कॉनर

जवाबों:


1

मैं मार्क हेंडरसन पर थोड़ा सुधार कर सकता हूं, $ `() के बजाय` `और बेहतर sed के साथ grep को हटा रहा है:

sudo strace -o /tmp/strace -f -s4096 -r -p $(netstat -antlp | \
   sed -e "/telnet/s/^.*ESTABLISHED\ \|\/.*$//g")

व्यक्तिगत रूप से मुझे लगता है कि बैकटिक्स को पढ़ना मुश्किल है; इसके अलावा, वे $ () सिंटैक्स के विपरीत, घोंसला नहीं बनाते हैं


+1, बेहतर स्क्रिप्ट फू और कुछ शेल विशेषताओं के लिए अच्छा सीखने का उदाहरण।
जेफ फेरलैंड

यह स्क्रिप्ट straceटेलनेट में है, अपाचे प्रक्रिया में नहीं जो इसे परोस रही है।
बीएमडीएन

2

strace -p $(ss -npt|sed -n "/:$(ss -npt|sed -n '/telnet/s/^.*\?:\([0-9]\+\).*/\1/p') \+u/s/.*,\(.*\),.*/\1/p")

जब तक आपके पास केवल एक ही telnetचल रहा है, तब तक यह straceसंबंधित सर्वर होगा यदि कोई हो।

यदि कोई नहीं है ( जैसे आप telnetकिसी बाहरी सर्वर पर अंतिम रूप से एड करते हैं), के straceसाथ विफल हो जाएगाstrace: option requires an argument -- 'p'


1
strace -p $(netstat -tnp|awk -F'[ /]+' "/:$(netstat -tnp|awk -F'[ :]+' 
"/\/telnet/{print \$5}") /&&/apache2/{print \$7}")

या, आसान पढ़ने के लिए स्वरूपित, और ओपी के स्ट्रेस झंडे के साथ बरकरार:

sudo strace -o /tmp/strace -f -s4096 -r -p $(netstat -tnp | \
awk -F'[ /]+' "/:$(netstat -tnp | awk -F'[ :]+' "/\/telnet/ \
{print \$5}") / && /apache2/ {print \$7}")

ब्रेकडाउन, सबसे पहले:

netstat -tnp | awk -F'[ :]+' "/\/telnet/ {print \$5}"

मुझे दिखाएँ, DNS नामों के आईपी पते को हल किए बिना, सभी सक्रिय टीसीपी कनेक्शन। पाइप को जागृत करने के लिए, जो समाप्त होने वाली किसी भी रेखा पर पांचवें क्षेत्र को प्रिंट करता है /telnet, जहां खेतों को एक या अधिक रिक्त स्थान और कॉलोन द्वारा अलग किया जाता है। यह फ़ील्ड स्रोत पोर्ट होगा।

सुधार करने के लिए : awk | head -n 1के अंत या ;exitएक्शन हिस्से के अंदर एक जोड़कर बहुत अधिक मजबूत बनाया जा सकता है , लेकिन आपके मूल संस्करण में एक समतुल्य कमी थी, इसलिए मैं इसे लंबे समय तक नहीं बनाना चाहता था।

netstat -tnp | awk -F'[ /]+' "/:**** / && /apache2/ {print \$7}")

****यहाँ भाग मैं पहले से ही ऊपर समझाया है, है। यहां, मैं किसी भी लाइन की तलाश कर रहा हूं netstat -tnpजिसमें समान पोर्ट है जैसा कि मैंने ऊपर खोजा है, और अपाचे के स्वामित्व में है; जब मुझे पता चलता है, तो मैं सातवें क्षेत्र को प्रिंट करता हूं (एक या अधिक रिक्त स्थान या स्लैश द्वारा सीमांकित)। यह अपाचे बच्चे का पीआईडी ​​है।

सुधार करने के लिए : केवल एक पीआईडी ​​(ऊपर के समान तरीकों के माध्यम से) वापस करने के अलावा, सबसे बड़ी चीज जिसकी मैं कल्पना कर सकता हूं, वह अधिक भेदभावपूर्ण है जब यह वास्तव में कुछ और के विपरीत dport के मिलान की बात आती है कि ऐसा सिर्फ पैटर्न फिट करने के लिए होता है। यह एफएस ( -F) के लिए कॉलोनों को जोड़कर करना आसान होता, लेकिन समस्या मिश्रित आईपीवी 4 बनाम आईपीवी 6 स्थितियों में होती है, जहां पते में कॉलोन हो सकते हैं, और जैसे कि बल्कि जल्दी से बुरा हो सकता है। यह विशेष रूप से अनुगामी स्थान के साथ बहुत ज्यादा मजबूत लग रहा था।

sudo strace -o /tmp/strace -f -s4096 -r -p

यह आपके मूल प्रश्न की एक सीधी प्रति है; मैंने इसे कम से कम में संशोधित नहीं किया।

यदि आप मुझे कुछ अतिरिक्त वर्णों की अनुमति देंगे, तो मेरे द्वारा चलाए जाने वाला संस्करण हो सकता है:

sudo strace -o /tmp/strace -f -s4096 -r -p $(netstat -tnp | \
awk -F'[ /]+' "/:$(netstat -tnp | awk -F'[ :]+' "/\/telnet/ \
{print \$5;exit}") / && /apache2/ {print \$7;exit}")

0

यह कोशिश करो, आशा है कि यह मदद करता है:

sudo strace -o /tmp/strace -f -s4096 -r -p `netstat -antlp | \
  grep telnet | sed -e "s/^.*ESTABLISHED\ \|\/.*$//g"`

उत्तर अच्छा लगेगा यदि आपको यह सब देखने के लिए दाईं ओर स्क्रॉल नहीं करना पड़ा।
djangofan

इस straceमें है telnetअपाचे, नहीं।
पियरे कैरियर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.