আমি কীভাবে অন্য টার্মিনাল থেকে একটি টার্মিনালের আউটপুটটিতে আটকানো যেতে পারি?


45

ভার্চুয়াল টার্মিনাল থেকে বর্তমানে চলমান টার্মিনাল (tty1) আউটপুট এঁকে আমাকে ক্যাপচার করতে হবে (এক্স সার্ভার চলমান)।


5
আমি যখন বুঝতে পেরেছি যে কমান্ড চলার পরে কখনও কখনও অন্য টিটিতে কন্টেন্ট ক্যাপচার করার প্রয়োজন দেখা দেয় তবে প্রতি আউন্স প্রতিরোধের জন্য এক পাউন্ড নিরাময়ের মূল্য রয়েছে, তাই আপনি অন্য কোনও টার্মিনাল থেকে অ্যাক্সেস নিতে চাইতে পারেন এমন কমান্ড ব্যবহার করা screenবা শুরু করার tmuxআগে সর্বদা বিবেচনা করুন ।
ছাড়ুন

এবং আপনি যখন এটি আগে প্রস্তুত করতে পারেন, তখনও টমেট এমন এক দুর্দান্ত প্রার্থী হতে পারে যা কেবল স্থানীয় নয় কেবল ইন্টারনেট জুড়ে কাজ করে। (এবং
writeচ্ছিক

উত্তর:


23

আমি ডাকা এই একটি সরঞ্জাম জুড়ে এসেছি ttylog। এটা একটা পার্ল প্রোগ্রাম CPAN উপলব্ধ এখানে । এটিতে বেশ কয়েকটি ক্যাভেটস রয়েছে, একটি হ'ল আমি কেবলমাত্র টার্মিনালের সাথে কীভাবে সংযুক্ত করতে পারি তা বুঝতে পারি যে আমার বাক্সে ছড়িয়ে পড়া কেউ এর অংশ হিসাবে তৈরি হয়েছিল। অন্যটি হ'ল আপনাকে এটিকে উন্নত সুবিধাগুলি দিয়ে চালাতে হবে (অর্থাত্ রুট বা সুডো)।

কিন্তু এটি কাজ করে!

উদাহরণ স্বরূপ

TERM # 1 এ আপনার বক্সে প্রথম এসএসএস করুন:

TERM#1% ssh saml@grinchy

এই নতুন টার্মিনালের tty নোট করুন:

TERM#1% tty
/dev/pts/3

এখন অন্য টার্মিনালে (TERM # 2) এই কমান্ডটি চালান:

TERM#2% ttylog pts/3
DEBUG: Scanning for psuedo terminal pts/3
DEBUG: Psuedo terminal [pts/3] found.
DEBUG: Found parent sshd pid [13789] for user [saml]

এখন TERM # 1 এ ফিরে যান এবং স্টফ টাইপ করুন, এটি TERM # 2 এ প্রদর্শিত হবে।

টার্মিনালের এসএস

আমি চেষ্টা করা সমস্ত কমান্ড, (শীর্ষ, এলএস, ইত্যাদি) ঘটনা ব্যবহার না করেই কাজ করে ttylog


হুবহু আমি যা খুঁজছিলাম (আমি আগে এটি ব্যবহার করেছি, তবে নামটি ভুলে গিয়েছিলাম এবং স্মরণ করতে পারিনি)। অনেক ধন্যবাদ, আমি অস্থায়ীভাবে নোংরা বিকল্প (জিডিবি এবং আউটপুট প্রতিলিপি) ব্যবহার করেছি।
pruzinat

হ্যাঁ, gdbআমি প্রথম যে বিকল্পটি পেলাম এটিই ছিল, আমি আগে এটি ব্যবহার করেছি, তবে এটি আমার কাছে অন্ততঃ হ্যাকি। খুশি এই আপনাকে সাহায্য করেছে!
SLM

1
ttylog সঠিক প্রক্রিয়াটির সাথে সংযুক্ত হতে পারে বলে মনে হচ্ছে না - কেউ কি আমার প্রশ্নের উত্তর দিতে পারে: সার্ভারফল্ট
লিটলববি টেবিল

21

অবশ্যই এটা. / Dev / vcs * এবং / dev / vcsa * ডিভাইসগুলি / dev / tty * ডিভাইসগুলির (ভার্চুয়াল টার্মিনাল) সাথে সম্পর্কিত। এফ 1 = tty1 = vcs1 / vcsa1 এবং আরও। "বর্তমান" ভার্চুয়াল টার্মিনালের জন্য ভিসিএস / ভিসিএসএ টিটিটির মতো।

রুট হিসাবে, আপনি কেবল এই ডিভাইসগুলি (যেমন বিড়াল / দেব / ভিসিএস 2) বিড়াল করতে পারেন, এবং স্ন্যাপশট নেওয়ার মতো সংশ্লিষ্ট ভিটিতে (যেমন / ডিভ / টিটি 2 তে) দেখুন। ভিসিএসএ * ভিসিএস * এর থেকে পৃথক যে এতে তারা টার্মিনালের (পর্দা) মাত্রা সম্পর্কে তথ্য অন্তর্ভুক্ত করে। মনে রাখবেন, এটি পর্দায় প্রদর্শিত অক্ষরের একটি কাঁচা স্ন্যাপশট - টার্মিনালটিতে বরাদ্দ হওয়া মেমরি থেকে সংগ্রহ করা - সুতরাং সুন্দর, সহজে পার্সেবল আউটপুট আশা করবেন না।

ত্রুটিটি হ'ল যদি তথ্যগুলি খুব দ্রুত অতীত হয়ে ওঠে তবে এটি ক্যাপচার করা কঠিন হতে পারে। সম্ভবত লেজ -f / dev / vcs1 কাজ করবে, আপনার যদি বেশ কয়েকটি স্ক্রিনফুলগুলি অনুসরণ করতে হয় (নিজেকে চেষ্টা করে দেখেন না)? এটি প্রথমে কোনও ফাইলটিতে পুনর্নির্দেশ করা সবচেয়ে সহজ হতে পারে। এটি দেখার জন্য কোনও ভিটি (F1-F6) ব্যবহার করা ভাল ধারণাও হতে পারে, কারণ টার্মিনালের একই মাত্রা থাকবে have আমার অভিজ্ঞতায়, ভিসিএস * - ভিসিএসএ * নয় - ডিভাইস ব্যবহার করা ভাল।

যদি এটি কাজ না করে, সম্ভবত কোনও "বড় ভাইরাশ" প্যাকেজ যা কোনও প্রশাসককে টার্মিনালের ক্রিয়াকলাপের দিকে নজর রাখতে সহায়তা করে তা কার্যকর হতে পারে।

PS: আপনি কী ওএস ব্যবহার করবেন তা জিজ্ঞাসা করতে ভুলে গিয়েছিলাম। এটি লিনাক্সের জন্য, যদিও একই রকম ডিভাইসগুলি সম্ভবত অন্যান্য ওএসেও উপস্থিত রয়েছে। ডিভাইসের জন্য ম্যান-পৃষ্ঠাগুলির মধ্যে "ভার্চুয়াল কনসোল মেমরি" অনুসন্ধান করার চেষ্টা করুন।


Ssh থেকে tty1 ইনপুট ইনজেকশন করার কোনও উপায় আছে কি? উদাহরণস্বরূপ, আমি একটি রাস্পবেরি পাই সাথে কাজ করতে চাই পাইিয়ান চলমান, তবে সমস্যাটি হ'ল এটিতে কেবল একটি ইউএসবি পোর্ট রয়েছে, এটি ওয়াইফাই অ্যাডাপ্টারের সাহায্যে নেওয়া হয়েছে, এবং তাই এর সাথে টিটি 1 ব্যবহার করতে আমি কোনও কীবোর্ড শারীরিকভাবে সংযুক্ত করতে পারি না। যেহেতু আমাকে একটি স্ক্রিপ্ট চালানো দরকার যা কার্যকর করার প্রক্রিয়া চলাকালীন বন্ধ হয়ে যায় wlan0, আমার আসলে একটি ক্যাচ -২২ পরিস্থিতি যেখানে এই স্ক্রিপ্টটি ব্যর্থ হচ্ছে সেখানে ডিবাগ করার চেষ্টা করছে। ধরুন আমি কোনও ইউএসবি হাব ব্যবহার করতে পারি না ... আমার জন্য কোনও উপায় / দেব / টিটি 1 তে চরগুলি পাইপ করার কি উপায় আছে?
স্টিভেন লু

2
ভাল। আমি স্টাফগুলিকে /dev/tty1মূল হিসাবে পাইপ করতে সক্ষম হয়েছি তবে এইগুলি হ'ল স্ক্রিনে অক্ষরগুলি প্রদর্শন করা হয়, সেগুলি প্রবেশ করে না
স্টিভেন লু

1
দুঃখিত যদি এটি শুধু শব্দ হয়। এটি সত্যই 100% প্রাসঙ্গিক নয়। তবে আমি উপরের মন্তব্যে আমার প্রশ্নের
স্টিভেন লু

18

তাকানো:

man 1 script

উদাহরণ স্বরূপ:

script -f /dev/tty1

আমি এটা খুঁজছিলাম। screenদুর্ভাগ্যক্রমে সংযুক্ত করার চেষ্টা করা হয়েছে। এটা কাজ করে।
sdkks

5

ttyতাদের সনাক্ত করতে প্রতিটি টার্মিনালে কমান্ডটি ব্যবহার করুন:

$ tty
/dev/pts/0

$ tty
/dev/pts/1

এই টিটিওয়াইকে ধরে নিয়ে, প্রথমটির স্টাডআউটকে দ্বিতীয়টিতে পুনর্নির্দেশ করতে, এটি প্রথম টার্মিনালে চালান:

exec 1>/dev/pts/1

দ্রষ্টব্য: এখন প্রতিটি কমান্ড আউটপুট pts / 1 এ প্রদর্শিত হবে

Pts / 0 এর ডিফল্ট আচরণ stdout পুনরুদ্ধার করতে:

exec 1>/dev/pts/0

একটি প্রদর্শনের জন্য এই ভিডিওটি দেখুন ।


2

এটি আমার পক্ষে কাজ করেছে:

  • "এ" কম্পিউটারে কীবোর্ড ব্যবহার করে (যেমন শারীরিক কম্পিউটার যা নিয়ন্ত্রণ করা উচিত) চালনা করুন: screen -q

  • sshকম্পিউটার "বি" থেকে কম্পিউটার "এ" এর সাথে সংযুক্ত হন ।

  • Ssh সেশনে, টাইপ করুন: screen -lsসংযোগ করতে একটি সেশন আইডি পেতে ( tty রয়েছে এমন সারিতে 4 টি সংখ্যা )।

  • উপরের সেশনে এর সাথে সংযুক্ত করুন: screen -x <session id>... screen -lsউপরের কমান্ড থেকে প্রাপ্ত সেশন আইডি নম্বরটি ব্যবহার করে ।

"সেশনে" উভয়ই টাইপ করা যেকোন কিছুই "সেশন" এ ঘটবে, সুতরাং উদাহরণস্বরূপ টাইপিং দুটি সেশন screen -dছাড়বে।


1

আর একটি পদ্ধতি হ'ল screenআপনার স্থানীয় মেশিনে gnu ইউটিলিটি ব্যবহার করা । -Lঅপশনটি দিয়ে এটিকে ডাকুন , বা সেই বিকল্পটি ছাড়াই শুরু করুন এবং ^aHকমান্ড সিকোয়েন্সটি ব্যবহার করুন । হয় পদ্ধতির ফলে সমস্ত ইনপুট এবং আউটপুটকে এমন কোনও ফাইলে লগ করতে হয় screenlog.xযেখানে x স্ক্রিন নম্বর।

এটি সুবিধাজনক কারণ দূরবর্তী মেশিনে অতিরিক্ত কিছু ইনস্টল করার দরকার নেই।


1

যেহেতু আমি স্ক্রিপ্টটির সাহায্যে tty1 শুরু করি নি এই স্ক্রিপ্টটি সাহায্য করেছে:

আমি উপরে বার্ড কোপার্পিউডের উত্তরটি ব্যবহার করেছি। "128" হ'ল আমার টিটি 1 এর 1 লাইন। ঘুম একটি উপযুক্ত নম্বর সেট করা যেতে পারে।

#!/bin/bash
while true
do
    sudo tail -c 128 /dev/vcs1 && echo ""
    sleep 10
done

আমি এটি টার্মিনেটরে ব্যবহার করেছি এবং কলামটি আকার দিয়েছি যাতে স্ক্রোলটি পাঠ্যের একটি লাইন।


ধারণার জন্য ধন্যবাদ, রাস্পেরিতে আমাকে কেবল '' 'ওয়াচ বিড়াল / দেব / ভিসিএস' 'করতে হয়েছিল' একটি প্রক্রিয়া দেখার জন্য আমি 'স্ক্রিন' ব্যবহারের কথা ভুলে ভার্চুয়াল কনসোলে শুরু করেছিলাম। এবং আমি আমার জিনোম-টার্মিনালটি সামঞ্জস্য করেছি আমি এটিকে 80 টি অক্ষর প্রশস্ত করতে চলেছি।
axkibe

0

দুটি টার্মিনাল খুলুন। ttyপ্রতিটি টাইপ করুন এবং আপনি এটি হিসাবে আইডি পাবেন/dev/pts/nº

তারপরে প্রথমে আপনি টাইপ করুন script -f /dev/pts/nºofSecondTerminalএবং দ্বিতীয়টিতে আপনি বিপরীত কাজটি করুন script -f /dev/pts/nºofFirstTerminalযাতে তারা লিঙ্ক হয়

অভিনন্দন! উভয় টার্মিনাল একই জিনিস আউটপুট এবং গ্রহণ করে। তৃতীয় দরকার? আচ্ছা, আপনি কম্বিনেশন অধ্যয়ন করেছেন? আপনার 6 টি script -fকমান্ড লাগবে । এমনকি আরও tty? শীঘ্রই...

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.