किसी अन्य शेल में निष्पादित कमांड कैसे देखें?


9

क्या यह देखने का कोई तरीका है कि किसी अन्य शेल में क्या कमांड निष्पादित किए जा रहे हैं, क्योंकि वे निष्पादित हो रहे हैं? दोनों गोले बैश हैं, और मेरे पास रूट एक्सेस है, अगर यह मायने रखता है। मैं कोई अतिरिक्त सॉफ़्टवेयर स्थापित नहीं कर सकता, और मैं नहीं चाहता कि दूसरे शेल को रन स्क्रीन की तरह कुछ विशेष करना पड़े।

स्थिति: मैं दूरस्थ रूप से लिनक्स मशीन में लॉग इन हूं, और इसलिए एक सहकर्मी है। मैं उसके गोले में चल रही आज्ञाओं को देखना चाहूंगा। मुझे पता है कि मैं कुछ संयोजनों का उपयोग कर सकता हूं watchऔर psचलाने के लिए एक सेकंड से अधिक समय लेने वाली किसी भी कमांड को देख सकता हूं, लेकिन मुझे विश्वास नहीं है कि यह बहुत ही कम कमांड के साथ मदद करेगा।


5
अंतर्निहित आदेश जैसे kill, और cdउप-प्रक्रियाओं को स्पॉन नहीं करते हैं और पीएस आउटपुट में कभी नहीं दिखाई देंगे।
जोर्डम 18

@ जोर्डनम धन्यवाद, यह एक अच्छी बात है। यहां तक ​​कि केवल कमांड के साथ जो कांटा / निष्पादन का कारण बनता है, वह संभवतः काफी अच्छा होगा।
टॉम पैनिंग

जवाबों:


7

जब से आप जड़ हैं, आप हमेशा कर सकते हैं strace -f -e execve -p her_bash_pid। यह -fआवश्यक है क्योंकि उसका खोल एक नई प्रक्रिया से पहले कांटा जाएगा exec, लेकिन इसका मतलब यह भी है कि आप कुछ भी देखेंगे जो बच्चे प्रक्रियाओं को निष्पादित करते हैं।


धन्यवाद, निष्पादन के लिए स्ट्रेपिंग आउटपुट को पकड़ना इसे काफी पठनीय बनाता है। मुझे यकीन है कि यह तथ्य यह है कि यह बच्चों के बच्चों का पालन करता है किसी दिन मुझे भ्रमित करेगा, लेकिन अब मुझे लगता है कि मैं सुरक्षित रहूंगा। यह शर्म की बात है कि इसे निष्पादित करने के बाद किसी प्रक्रिया से स्वचालित रूप से अलग करने का कोई तरीका नहीं है।
टॉम पैनिंग

यह खुला स्रोत है; यदि आपको वास्तव में इसकी आवश्यकता है तो आप हमेशा उस सुविधा को जोड़ सकते हैं। :) या स्ट्रेस आउटपुट को पार्स करते हुए थोड़ा और इंटेलिजेंट स्क्रिप्ट जोड़ें जो एक पीआईडी ​​को एक बार अनदेखा कर दे exec
जिम पेरिस

5

यदि आपका सहकर्मी अपने बैश शेल के लिए कुछ इतिहास सेटिंग्स को संशोधित कर सकता है, तो आप इस जानकारी को टेल -f / home/user/.bash_history से प्राप्त कर सकते हैं। यहां उन सेटिंग के बारे में बताया गया है जो शेल कमांड के बजाय प्रत्येक कमांड के बाद .bash_history के लिए लिखी जानी चाहिए:

export PROMPT_COMMAND="history -a"
shopt -s histappend

हालांकि मैं एक स्क्रीन सत्र को "आदर्श" समाधान मानूंगा।


5

एक त्वरित शोध (और कुछ सोच) के बाद मैं आपको संभावित विकल्पों की निम्नलिखित सूची दे सकता हूं:

  • उसे bash_history पढ़ें। लेकिन यह आमतौर पर केवल लॉगआउट पर लिखा जाता है। askubuntu.com के पास उस व्यवहार को बदलने के बारे में एक पोस्ट है ( संपादित करें : @jordanm का स्पष्ट रूप से एक ही विचार था और पोस्ट करने के लिए तेज़ था ...)।
  • यदि वह एक भौतिक टर्मिनल (/ देव / ttyX) पर था, तो आप कार्यक्रम का उपयोग कर सकते हैं conspy
  • उसका उपयोग करो screen। यदि आप बस उसकी सहायता करना चाहते हैं और उसकी जासूसी नहीं करना चाहते हैं तो वह अपना सत्र स्क्रीन के अंदर चलाने के लिए तैयार हो सकता है। फिर आप बस उसके सत्र से जुड़ सकते हैंsudo -u herUsername screen -x
  • आप एक शेल रैपर स्क्रिप्ट लिख सकते हैं जो कमांड को आपकी पसंद के लॉगफाइल में लॉग करती है। आपको उसका शेल उस स्क्रिप्ट में सेट करना होगा (यह सिर्फ एक विचार है, यह काम कर सकता है या नहीं भी हो सकता है)।
  • इस्तेमाल करना cat /dev/pts/X | tee /dev/pts/Xपहली बात थी जो मेरे दिमाग में आई। लेकिन कोशिश के बाद वास्तव में काम नहीं करता है और एक बहुत ही गंदा समाधान है। प्रत्येक वर्ण केवल संलग्न टर्मिनलों में से एक के लिए मुद्रित होता है (जो कि कॉलिंग का कारण teeभी है)। इसे आजमाते हुए मैं हर दूसरे किरदार की जासूसी कर सकता था। एक छोटी सी कल्पना के साथ आप अनुमान लगा सकते हैं कि वह क्या है ...

गलत: conspy ttys के साथ काम नहीं करता है
Zibri

3

GNU स्क्रीन IMO की अब तक की सबसे अच्छी प्रशंसा है। यदि GNU स्क्रीन (या tmux) उपलब्ध नहीं है, तो अपने सहकर्मी को चलाएं script -f

और फिर आप देख सकते हैं कि वह क्या कर रहा है tail -fn +0 /path/to/typescript


0

यूनिक्स स्क्रीन टर्मिनल साझा करने के लिए, ताकि आप वास्तविक समय में अपने सहकर्मी के इनपुट और आउटपुट देख सकें, यूनिक्स screenकमांड का उपयोग कर सकें ।

  1. आप और सहकर्मी ssh में समान यूनिक्स उपयोगकर्ता के रूप में लॉग इन करते हैं
  2. आप कमांड में टाइप करें

    screen -d -m -S myscreenname

    screen -x myscreenname

    (निश्चित रूप से जो भी आप स्क्रीन का नाम चाहते हैं, उसके साथ myscreenname बदलें)।

  3. सहकर्मी कमांड टाइप करता है

    screen -x myscreenname

  4. अपने यूनिक्स टर्मिनलों को साझा करने के साथ समाप्त करने के लिए, कोई भी व्यक्ति कमांड में टाइप कर सकता है

    exit

स्क्रीन की महान विशेषता यह है कि आप अपने यूनिक्स टर्मिनल से कमांड टाइप कर सकते हैं और सहकर्मी उसकी स्क्रीन पर आउटपुट देख सकते हैं। यह जोड़ी-प्रशासन और संरक्षक जूनियर यूनिक्स प्रवेश करने का एक शानदार तरीका है।


0

@ जोर्डनम के उत्तर को पूरा करने के लिए ... यदि आप दोनों एक ही उपयोगकर्ता खाते का उपयोग कर रहे हैं, अर्थात् आउटपुट से

echo $HOSTNAME
echo $USER 

आपके और आपके सहकर्मी के लिए समान है तो हम कुछ मजा कर सकते हैं।

हम एक टर्मिनल में आह्वान किए गए आदेशों को तुरंत दूसरे में उपलब्ध होने के लिए देखने में सक्षम कर सकते हैं

यदि आप historyअपने टर्मिनल में आह्वान करते हैं तो आप अपने पिछले आदेशों को देखते हैं। डिफ़ॉल्ट रूप से, बैश ~/.bash_history fileएक अद्यतन संस्करण के साथ मौजूदा फ़ाइल को अधिलेखित करने के लिए प्रत्येक सत्र के अंत में अपना इतिहास लिखता है । इसका मतलब यह है कि यदि आप कई बैश सत्रों में लॉग इन होते हैं, तो बाहर निकलने वाले अंतिम व्यक्ति के पास अपना इतिहास बच जाएगा।

-------------------------------------------------- -----

अपना संपादन करें ~/.bashrcऔर इसमें जोड़ें

export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

कहाँ पे

history -a~/.bash_historyसत्र के अंत में तुरंत फाइल करने की अपील करता है

history -c वर्तमान सत्र इतिहास को साफ करता है

history -rउस ~/.bash_historyफ़ाइल को पढ़ता है जिसे हमने संलग्न किया है, हमारे सत्र इतिहास में वापस

नोट: पैरामीटर आदेशों क्रियान्वित कर रहे हैं होता है से पहले शीघ्र प्रत्येक नए आदेश। इसलिए command1 केवल इतिहास में सहेज लिया जाएगा जब command2 निष्पादित किया जाता हैPROMPT_COMMAND

आप इतिहास देखने के दौरान सुविधा के लिए प्रत्येक कमांड के बगल में टाइमस्टैम्प को थप्पड़ मारना भी चाह सकते हैं। फिर से, अपना ~/.bashrcऔर एडिट करें

export HISTTIMEFORMAT="%d/%m/%y %T "

यदि आप कई टर्मिनलों का उपयोग करना पसंद करते हैं और उपलब्ध आदेशों के अपने इतिहास को पसंद करना चाहते हैं, तो भी एक अच्छा हैक :)

और जानकारी

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