আমি কোন টার্মিনালটি ব্যবহার করছি তা কীভাবে চেক করব?


23

আমার মেশিনে আমার উবুন্টু রয়েছে এবং আমি এর উপরে দুর্দান্ত উইন্ডো ম্যানেজার চালাচ্ছি। আমি কোন টার্মিনালটি চালাচ্ছি তা কীভাবে পরীক্ষা করব? এটির জন্য কোন আদেশ আছে?


5
আপনি কী বোঝাতে চেয়েছেন , যা ? ক্লিক করুন সাহায্য -> আমাদের সম্পর্কে এটা হল?
জোকেআর

3
টার্মিনালটির অর্থ টার্মিনাল প্রোগ্রাম বা শেল?
হিমেইল

উত্তর:


24

টি এল; ডিআর

  • বর্তমানে চলমান শেল ব্যবহার সন্ধান করতে ls -l /proc/$$/exe
  • বর্তমানে চলমান টার্মিনালটি সন্ধান করতে, ব্যবহার করুন xprop _NET_WM_PID WM_CLASSpidপরে মানটি ps -p <pid> -o argsকমান্ডে পাস করা যেতে পারে ।
  • প্রযুক্তিগতভাবে, টার্মিনাল এমুলেটরটির জন্য আপনার এমনকি কমান্ডের প্রয়োজনও হবে না, যেমন মন্তব্যগুলিতে বলা হয়েছে :

    তুমি কোনটা বোঝাতে চাও? সহায়তা ক্লিক করুন -> এটি প্রায়? - জোকের

শেল বনাম টার্মিনাল

আমাদের প্রথমে যে বিষয়টি স্পষ্ট করতে হবে তা হ'ল কী জিজ্ঞাসা করা হচ্ছে - চলমান শেল বা চলমান টার্মিনালটি সন্ধান করুন। প্রায়শই এই দুটি পদটি আদান-প্রদানের জন্য ব্যবহৃত হয় তবে এগুলি পুরোপুরি ভিন্ন জিনিস। শেল হ'ল কমান্ড-লাইন ইন্টারপ্রেটার, বিশেষত ইন্টারেক্টিভ শেল হ'ল প্রম্পট প্লাস পাঠ্য ক্ষেত্র যেখানে আপনি কমান্ডগুলি প্রবেশ করেন। শেলগুলি অ-ইন্টারেক্টিভও হতে পারে, উদাহরণস্বরূপ কোনও স্ক্রিপ্ট অ-ইন্টারেক্টিভ শেল bash -c 'echo hello world'শুরু করে , বা অ-ইন্টারেক্টিভ শেলও শুরু করে।

বিপরীতে, টার্মিনাল হ'ল শেলের ইন্টারফেস (যদিও এটি অন্য একটি অ্যাপ্লিকেশন হতে পারে)। মূলত টার্মিনালটি প্রকৃত হার্ডওয়্যারকে বোঝায় তবে আজকাল তারা বেশিরভাগ সফটওয়্যার। আপনি যখন Ctrl+ Alt+ টিপুন tবা জিইউআই-তে টার্মিনাল আইকনটিতে ক্লিক করেন তখন যা দেখেন , এটি একটি টার্মিনাল এমুলেটর শুরু করে, একটি উইন্ডো যা হার্ডওয়্যারটির আচরণ অনুকরণ করে এবং সেই উইন্ডোর মধ্যে আপনি শেলটি চলমান দেখতে পাবেন। Ctrl+ Alt+ F2(বা function টি ফাংশন কীগুলির মধ্যে কোনওটি) ভার্চুয়াল কনসোলটি খুলবে, ওরফে tty। আমি ভার্চুয়াল টার্মিনাল "ভার্চুয়াল" কেন এবং "কেন" কেন "আসল" টার্মিনালটি পড়ার পরামর্শ দিচ্ছি ? সুনির্দিষ্ট আরও তথ্যের জন্য।

শেল তথ্য প্রাপ্তি

প্রতিটি ব্যবহারকারীর /etc/passwdতাদের ব্যবহারকারীর নাম অনুসারে একটি ডিফল্ট শেল বরাদ্দ করা হয় । ধরে নিই যে আপনি ডিফল্ট কনফিগারেশন ব্যবহার করছেন এবং অন্য শেলকে স্পষ্টভাবে কমান্ড হিসাবে ডেকেছেন না, এটি করার জন্য যথেষ্ট:

echo $SHELL

তবে অবশ্যই এটি ডিফল্ট মান দেখায় । ধরুন আমরা নিম্নলিখিতটি করি:

user@ubuntu:~$ dash
$

আমরা মূলত ছিল bash, কিন্তু ইন্টারেক্টিভ সেশন শুরু /bin/dash, উবুন্টু এর POSIX বা সিস্টেম শেল । ভেরিয়েবল পরিবর্তন $SHELLহবে না, কারণ এটি তার উদ্দেশ্য নয় - এটি বর্তমান মান নয় ডিফল্ট দেখায়। আমাদের অন্য দৃষ্টিকোণ থেকে এটির প্রয়োজন হবে - একটি প্রক্রিয়াটির দৃষ্টিকোণ, যা আমি বাশ বা শ ব্যবহার করছি তা আমি ?েকে রেখেছি?

$ echo $$
4824
$ cat /proc/4824/comm                                                          
mksh
$ bash
xieerqi@eagle:~$ echo $$
6197
xieerqi@eagle:~$ cat /proc/6197/comm
bash

এখানে আমরা /proc/ফাইল সিস্টেমের সুবিধা গ্রহণ করি । প্রক্রিয়াটির নাম এবং কমান্ড-লাইন প্যারামিটারগুলি প্রদর্শিত হয় /proc/<pid>/comm। আমাদের কেবলমাত্র শেলের পিআইডি সরবরাহ করা দরকার যা এটি $$করে। উপরের উদাহরণে আমি এটিকে পৃথকভাবে যুক্ত করছি, তবে আমাদের কেবল ন্যায়বিচার করতে বাধা দিচ্ছে না

cat /proc/$$/comm

থিমের বিভিন্নতাও হতে পারে

ps -p $$ -o args

আমরা এটির কাছে যেতে পারার আরেকটি উপায় হ'ল চেক করা /proc/<pid>/exe। এই ফাইলটি একটি সিমিলিংক যা এক্সিকিউটেবল ফাইলকে নির্দেশ করে। এইভাবে আমরা করতে পারি

user@ubuntu:~$ ls -l /proc/$$/exe
lrwxrwxrwx 1 adminx adminx 0 Apr  4 18:20 /proc/1241/exe -> /bin/bash
user@ubuntu:~$ sh
$ ls -l /proc/$$/exe
lrwxrwxrwx 1 adminx adminx 0 Apr  4 18:20 /proc/1255/exe -> /bin/dash

দুটি পদ্ধতির মধ্যে 99% ক্ষেত্রেই কাজ করে। অবশ্যই, এমন কয়েকটি উপায় রয়েছে যার মাধ্যমে সেগুলি বিপর্যস্ত করা যায়। উদাহরণস্বরূপ, সিমবলিক লিঙ্ক যে কোন জায়গায় বাতলান না যদি এক্সিকিউটেবল শীঘ্রই মোছা পর শেল শুরু (এবং যে ক্ষেত্রে আপনি সম্ভবত সম্মুখীন হবে সিস্টেম সমস্যা, অপসারণ যেহেতু /bin/sh, /bin/dash, অথবা এমনকি /bin/bashবাঞ্ছনীয় নয় - সব পরে স্ক্রিপ্ট অনেকটা তাদের উপর নির্ভর বিশেষত সিস্টেম-স্তরের)) শেলের জন্য কমান্ডের নামটি সাধারণত execve()সিস্কেলে প্রথম আর্গুমেন্ট হিসাবে সেট করা হয় । এটি আচ্ছাদিত রয়েছে কীভাবে বাশ কীভাবে এটি চালিত হচ্ছে তা জানতে পারে? , সুতরাং আপনার যদি শেল প্রবর্তন করে এমন কোনও অ্যাপ্লিকেশন থাকে তবে execve()এটি কোনও নাম দিতে পারে। তবে এগুলি অ-মানক এবং অ-সাধারণ জিনিস, যা ধারাবাহিকতা এবং সুরক্ষার জন্য এড়ানো উচিত।


টার্মিনাল তথ্য প্রাপ্তি

আমরা পরিবেশের ভেরিয়েবল দিয়ে শুরু করতে পারি। অনেক টার্মিনাল নিজেদের মাস্ক বলে মনে হচ্ছে xterm-compatible, যা দ্বারা রিপোর্ট করা হয় echo $TERMবা echo $COLORTERM। তবে তারপরে পরিবেশের ভেরিয়েবলগুলি খুব নির্ভরযোগ্য সরঞ্জাম নয়। সেগুলি সেট এবং আনসেট করা যেতে পারে। আমরা পিআইডি দিয়ে আবার একই জিনিসটি করতে পারি, এই সময়টি বাদে আমরা প্যারেন্ট পিআইডির দিকে নজর দেব। আপনার মনে আছে, টার্মিনালটি শেলের ইন্টারফেস এবং প্রায়শই শেলটি নিজেই শুরু করে। অতএব আমরা আমাদের শেলের মূল প্রক্রিয়াটি কী তা জানতে পারি:

$ ps -p $$ -o args,ppid
COMMAND                      PPID
bash                         1234
$ ps -p 1234 -o args
COMMAND
/usr/lib/gnome-terminal/gnome-terminal-server

আসুন অন্য একটি টার্মিনাল অ্যাপ্লিকেশন দিয়ে চেষ্টা করুন sakura:

$ ps -p $$ -o args,ppid
COMMAND                      PPID
/bin/bash                   16950
$ ps -p 16950 -o args
COMMAND
sakura

সেখান থেকে আমরা ইতিমধ্যে দেখতে পাচ্ছি যে এই শেলটি কী শুরু হয়েছিল gnome-terminal। এই পদ্ধতিটি অবশ্যই ধরে নিয়ে কাজ করে যে আপনি ইন্টারেক্টিভ শেল নিয়ে কাজ করছেন। আমরা যদি এর bash -c '...'মাধ্যমে পিতামাতার বা শেলের মাধ্যমে শুরু করার চেষ্টা করি ssh, উদাহরণস্বরূপ, পিআইডি খুব সম্ভবত নন-টার্মিনাল অ্যাপ্লিকেশন হতে পারে এবং নন-জিইউআই হতে পারে।

সুতরাং আমরা যদি বিশেষত জিইউআই টার্মিনালটি মোকাবেলা করতে চাই, তবে আমরা কী করতে পারি তা চালানো যায় xprop, কাঙ্ক্ষিত উইন্ডোটিতে ক্লিক করুন, এর পিডটি গ্রেপ করুন এবং পিডির সাথে মিলে যাওয়া পিডের নামটি খুঁজে বের করুন। বা অন্য কথায়:

$ ps aux | grep $(xprop | awk -F'='  '/PID/ {print $2}')                       
xieerqi   2124  0.6  1.7 208068 34604 ?        Sl   18:47   1:49 gnome-terminal

অতিরিক্ত হিসাবে, নির্দিষ্টকরণ অনুযায়ী উইন্ডো পরিচালকদের WM_CLASSসম্পত্তি সেট করা উচিত । সুতরাং, আমরা xpropপাশাপাশি থেকে এটি পেতে পারি :

$ xprop WM_CLASS 
WM_CLASS(STRING) = "sakura", "Sakura"

অবশ্যই, এটির এর 1% অসুবিধাও রয়েছে: WM_CLASSবৈশিষ্ট্য নির্ধারণ উইন্ডো ম্যানেজারের উপর নির্ভর করে এবং পিআইডি কোনও উইন্ডোটি সঠিক হওয়ার নিশ্চয়তা দেয় না (দেখুন কী এক্সেস 11 এই উইন্ডোটি তৈরি করেছে? ), এতে জটিল ডিবাগিং জড়িত থাকতে পারে। এবং এগুলি পদ্ধতিগুলির নিজস্বতা নয়, তবে এক্স 11 সার্ভারের short তবে, বেশিরভাগ স্থিতিশীল এবং সুপরিচিত উইন্ডো ম্যানেজার (যেমন ওপেনবক্স, মেটাসিটি, ব্ল্যাকবক্স) এবং বেশিরভাগ অ্যাপ্লিকেশনগুলি ভাল আচরণ করে তাই আমাদের জিনোম টার্মিনাল বা টার্মিনেটরের মতো কোনও সমস্যা আশা করা উচিত নয়।

কিন্তু যখন জিইউআই টার্মিনাল এমুলেটরগুলির কথা আসে তখন আমাদের একটি কমান্ডও সন্ধান করার প্রয়োজন হয় না। আমরা কেবল Aboutউইন্ডোটির ডায়ালগটি ব্যবহার করতে পারি । সেই নিয়মের ব্যতিক্রম xterm


ও_ও $SHELL, নিশ্চিত
এবি

Eek। আপনি লোকেরা কেন ব্যবহার করেন ps | grep? ps -p $$! বা, কেবল কমান্ডের জন্য ps -p $$ -o cmd=,।
মুড়ু

@ মুরু, কারণ আমি আপনার চেয়ে কম অভিজ্ঞ ব্যবহারকারী এবং আমার কাছে সমস্ত পিএইচ পতাকা মুখস্থ নেই> _ <ভোঁতা
সের্গি কোলোডিয়াজনি

2
আমিও করি না, তবে ps | grepএটি কেবল খারাপ ফর্ম। আপনি গ্রেপ করতে পারেন তার বেশিরভাগটি আসলে psনিজেরাই বা অন্যান্য সরঞ্জাম দ্বারা প্রাপ্ত হতে পারে ।
মুড়ু

দ্রষ্টব্য: আমি আমার উত্তর আপডেট করেছি, যেহেতু এই প্রশ্নটি সামগ্রিকভাবে অস্পষ্ট ছিল এবং এর কিছু অংশের কিছুটা পটভূমি প্রয়োজন; সময়ের সাথে সাথে আমি বুঝতে পারি যে কমান্ড চাওয়ার আরও ভাল উপায় আছে।
সের্গেই কলডিয়াজনি

12

সংক্ষিপ্ত সংস্করণ (thx @ সার্জ )

cat /etc/alternatives/x-terminal-emulator

দীর্ঘ সংস্করণ

sudo update-alternatives --config x-terminal-emulator

এবং *আউটপুট মধ্যে সন্ধান করুন

;)


উদাহরণ আউটপুট

There are 7 alternatives which provide `x-terminal-emulator’.
বিকল্প নির্বাচন
----------------
    1 / usr / বিন / এক্সটার্ম
    2 / usr / বিন / uxterm
    3 / usr / বিন / koi8rxterm
    4 / usr / বিন / lxterm
 * + 5 / সামার / বিন /gnome-terminal.wrapper
    6 / usr / বিন / কনসোল
    7 /usr/bin/xfce4-terminal.wrapper
Press enter to keep the default[*], or type selection number:

বা, @ মুরুকে ধন্যবাদ , এখানে আরও বিস্তারিত আউটপুট দেওয়া আছে

$ update-alternatives --display x-terminal-emulator
x-terminal-emulator - auto mode
  link currently points to /usr/bin/gnome-terminal.wrapper
/usr/bin/gnome-terminal.wrapper - priority 40
  slave x-terminal-emulator.1.gz: /usr/share/man/man1/gnome-terminal.1.gz
/usr/bin/koi8rxterm - priority 20
  slave x-terminal-emulator.1.gz: /usr/share/man/man1/koi8rxterm.1.gz
/usr/bin/lxterm - priority 30
  slave x-terminal-emulator.1.gz: /usr/share/man/man1/lxterm.1.gz
/usr/bin/mate-terminal.wrapper - priority 30
  slave x-terminal-emulator.1.gz: /usr/share/man/man1/mate-terminal.1.gz
/usr/bin/uxterm - priority 20
  slave x-terminal-emulator.1.gz: /usr/share/man/man1/uxterm.1.gz
/usr/bin/xterm - priority 20
  slave x-terminal-emulator.1.gz: /usr/share/man/man1/xterm.1.gz
Current 'best' version is '/usr/bin/gnome-terminal.wrapper'.

2
cat /etc/alternatives/x-terminal-emulator | grep exec
সের্গেই কোলোডিয়াজনি

আমার কি একটি ইউটিলিটি ইনস্টল করা দরকার? আমি হয় Binary file (standard input) matchesবা update-alternatives: error: unknown argument কনফিগ '
টেরেন্স

কিছুই নয়, এটি--config
টেরেন্স

1
আপনি প্রয়োজন হবে না sudo। ব্যবহারupdate-alternatives --display x-terminal-emulator
মুড়ু

সংক্ষিপ্ত সংস্করণের জন্য আপনি এটি file /etc/alternatives/x-terminal-emulatorব্যবহার catকরে পরিবর্তে এই প্রতীকী লিঙ্কটির লক্ষ্য পেতে ব্যবহার বিবেচনা করতে পারেন । fileউপযোগ সবচেয়ে সিস্টেমে ইনস্টল করা উচিত এবং লক্ষ্য এক্সিকিউটেবল এটি ব্যবহার করা যাবে। catপ্রতীকী লিঙ্কে এই লিঙ্কের লক্ষ্য অনুসারে কোনও শেল স্ক্রিপ্ট বা এমনকি বাইনারি ফাইল মুদ্রণ করতে পারে (এর জন্য শেল স্ক্রিপ্ট gnome-terminal, বাইনারি ফাইল urxvt, ইত্যাদি) etc.
chris544

9

আপনি যে টার্মিনাল প্রোগ্রামটি ব্যবহার করছেন তা যদি জানতে চান তবে এটি ব্যবহার করুন:

ps -o 'cmd=' -p $(ps -o 'ppid=' -p $$)

আর কোনও শেল উদাহরণ না দিয়ে টার্মিনাল (শেল) খোলার পরে এটি চালান ।

আপনি যখন টার্মিনাল প্রোগ্রামটি খোলেন, এটি মূলত একটি শিশু প্রোগ্রাম, একটি শেল তৈরি করে। সুতরাং বিভক্ত শেলটির পিতা-মাতা হ'ল টার্মিনাল। অন্য কথায় শেলের পিপিআইডি হ'ল টার্মিনাল প্রোগ্রামের পিআইডি।

এখানে আমরা শেলের ( bash) দ্বারা প্যারেন্ট প্রসেস আইডি (পিপিআইডি) সন্ধান করছি ps -o 'ppid=' -p $$যা টার্মিনাল প্রোগ্রামের প্রসেস আইডি হবে।

তারপরে আমরা পিআইডি থেকে প্রক্রিয়াটির নামটি খুঁজে পাচ্ছি:

$ ps -o 'cmd=' -p $(ps -o 'ppid=' -p $$)
gnome-terminal

এটি মূলত: একটি লাইনার:

$ ps -o 'ppid=' -p $$
 2268

$ ps -o 'cmd=' -p 2268
gnome-terminal

1
আমি যখন এই কমান্ডটি চালাচ্ছি আমি তা পাই sshd: username@pts/4। দ্রষ্টব্য আমি মেশিনের সাথে সংযোগ করতে পট্টি ব্যবহার করছি। sshdআসলেই কি টার্মিনাল এমুলেটর?
ব্যবহারকারী3731622

3

printenvওপেন সেশনের সমস্ত ভেরিয়েবল দেখতে টার্মিনাল উইন্ডো থেকে টাইপ করুন।

echo $COLORTERMটার্মিনাল উইন্ডো থেকে টাইপ করুন । দ্রষ্টব্য: এটি সমস্ত টার্মিনালের সাথে কাজ করে না, একটির মতো sakuraএটির পিছনে প্রতিবেদন করে না।

root@terrance-Linux:~# echo $COLORTERM
gnome-terminal

নীচের একটি atermটার্মিনাল থেকে is

root@terrance-Linux:~$ echo $COLORTERM
rxvt-xpm

Sakura মধ্যে প্রতিধ্বনি $ COLORTERM ফাঁকা রিপোর্ট
Sergiy Kolodyazhnyy

@ সার্জ আপনাকে ধন্যবাদ দেখে মনে হচ্ছে এটি তখন xterm এর বৈকল্পিক।
টেরেন্স

@ সার্গ শুধু ভাবছেন যে আপনি সাকুরা পছন্দ করেন? এবং কী আপনাকে এটি আকর্ষণ করে?
টেরেন্স

এটি ঠিক আছে, বিশেষ কিছু নয়, বেশ সরল l আমি বিভিন্ন ধরণের টার্মিনাল এমুলেটর চেষ্টা করেছি: টার্মিনেটর, রক্সটার্ম, টিলড, ড্রপডাউন এক (একে কী বলে, ভুলে গেছেন আর কিছু দিয়ে আরম্ভ করে)। আমার ধারণা এটি এক্সটার্ম এবং জিনোম-টার্মিনালের মধ্যে একটি সমঝোতা
সের্গি কলডিয়াজহনি

@ সার্গ আহ, এটি জেনে রাখা ভাল। আমি এটি যাচ্ছি। :-) আমি সর্বদা একটি ভাল টার্মিনালটির সন্ধানে থাকি যা আমার রক্ষণশীল স্ক্রিপ্টের সাথে কাজ করে যা তাদের কাছে এক্সডটুল কীগুলি প্রেরণ করে।
টেরেন্স

3

আপনি যদি কেবল টার্মিনাল প্রোগ্রামটির নাম চান, আপনি সম্ভবত এটি সহায়তা> সম্পর্কে অন্তর্ভুক্ত পাবেন।


0
cat /etc/alternatives/x-terminal-emulator | grep exec

নমুনা আউটপুট:

Exec ( 'জিনোম-টার্মিনাল', @ args);

আমার সিস্টেমের উত্তর আছে: জিনোম-টার্মিনাল

সুতরাং, gnome-terminalআমার টার্মিনাল টাইপ করা এখন আর একটি অভিন্ন টার্মিনাল উইন্ডো খুলবে।

সূত্র:


-1

সহজ উত্তর। কনসোল বা ssh উভয়ের জন্যই কাজ করে।

সাধারণ অক্ষর টার্মিনালের উদাহরণ:

ssh username@systemname
echo $TERM
dumb

আপনাকে বলে যে আপনি সেই সংযোগে জিইউআই অ্যাপ্লিকেশন খুলতে পারবেন না

এক্সটার্মের উদাহরণ (উইন্ডোতে পটিটিওয়াই / জিমিংয়ের সাথেও কাজ করে)

ssh -Y username@systemname      -- omit this if using PuTTY --
echo $TERM
xterm

এর অর্থ আপনি লিউপ্যাড সম্পাদক বা নটিলাস ফাইল ম্যানেজার খোলার মতো জিইউআই কমান্ড ব্যবহার করতে পারেন।

কনসোলে এটি একই:

Open terminal window
echo $TERM
xterm

TERMএকটি পরিবর্তনশীল নয় যা ডিফল্ট টার্মিনাল এমুলেটরকে সংজ্ঞায়িত করে, বরং বর্তমানের সক্ষমতা নির্ধারণ করে এমন একটি। উদাহরণস্বরূপ, "xterm-color" এ ভেরিয়েবলটি সেট করা টার্মিনালে চলমান যে কোনও প্রোগ্রামকে জানতে দেয় যে বর্তমান টার্মিনালটি রঙ বোঝার কথা; এটিকে "লিনাক্স" এ সেট করা প্রোগ্রামগুলিকে বলে যে এটি কোনও ভিটি হওয়ার কথা; ইত্যাদি
সাইবোলিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.