আমার মেশিনে আমার উবুন্টু রয়েছে এবং আমি এর উপরে দুর্দান্ত উইন্ডো ম্যানেজার চালাচ্ছি। আমি কোন টার্মিনালটি চালাচ্ছি তা কীভাবে পরীক্ষা করব? এটির জন্য কোন আদেশ আছে?
আমার মেশিনে আমার উবুন্টু রয়েছে এবং আমি এর উপরে দুর্দান্ত উইন্ডো ম্যানেজার চালাচ্ছি। আমি কোন টার্মিনালটি চালাচ্ছি তা কীভাবে পরীক্ষা করব? এটির জন্য কোন আদেশ আছে?
উত্তর:
ls -l /proc/$$/exe
xprop _NET_WM_PID WM_CLASS
। pid
পরে মানটি 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
, নিশ্চিত
ps | grep
? ps -p $$
! বা, কেবল কমান্ডের জন্য ps -p $$ -o cmd=
,।
ps | grep
এটি কেবল খারাপ ফর্ম। আপনি গ্রেপ করতে পারেন তার বেশিরভাগটি আসলে ps
নিজেরাই বা অন্যান্য সরঞ্জাম দ্বারা প্রাপ্ত হতে পারে ।
সংক্ষিপ্ত সংস্করণ (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'.
cat /etc/alternatives/x-terminal-emulator | grep exec
Binary file (standard input) matches
বা update-alternatives: error: unknown argument
কনফিগ '
--config
sudo
। ব্যবহারupdate-alternatives --display x-terminal-emulator
file /etc/alternatives/x-terminal-emulator
ব্যবহার cat
করে পরিবর্তে এই প্রতীকী লিঙ্কটির লক্ষ্য পেতে ব্যবহার বিবেচনা করতে পারেন । file
উপযোগ সবচেয়ে সিস্টেমে ইনস্টল করা উচিত এবং লক্ষ্য এক্সিকিউটেবল এটি ব্যবহার করা যাবে। cat
প্রতীকী লিঙ্কে এই লিঙ্কের লক্ষ্য অনুসারে কোনও শেল স্ক্রিপ্ট বা এমনকি বাইনারি ফাইল মুদ্রণ করতে পারে (এর জন্য শেল স্ক্রিপ্ট gnome-terminal
, বাইনারি ফাইল urxvt
, ইত্যাদি) etc.
আপনি যে টার্মিনাল প্রোগ্রামটি ব্যবহার করছেন তা যদি জানতে চান তবে এটি ব্যবহার করুন:
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
sshd: username@pts/4
। দ্রষ্টব্য আমি মেশিনের সাথে সংযোগ করতে পট্টি ব্যবহার করছি। sshd
আসলেই কি টার্মিনাল এমুলেটর?
printenv
ওপেন সেশনের সমস্ত ভেরিয়েবল দেখতে টার্মিনাল উইন্ডো থেকে টাইপ করুন।
echo $COLORTERM
টার্মিনাল উইন্ডো থেকে টাইপ করুন । দ্রষ্টব্য: এটি সমস্ত টার্মিনালের সাথে কাজ করে না, একটির মতো sakura
এটির পিছনে প্রতিবেদন করে না।
root@terrance-Linux:~# echo $COLORTERM
gnome-terminal
নীচের একটি aterm
টার্মিনাল থেকে is
root@terrance-Linux:~$ echo $COLORTERM
rxvt-xpm
cat /etc/alternatives/x-terminal-emulator | grep exec
নমুনা আউটপুট:
Exec ( 'জিনোম-টার্মিনাল', @ args);
আমার সিস্টেমের উত্তর আছে: জিনোম-টার্মিনাল ।
সুতরাং, gnome-terminal
আমার টার্মিনাল টাইপ করা এখন আর একটি অভিন্ন টার্মিনাল উইন্ডো খুলবে।
সহজ উত্তর। কনসোল বা 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" এ ভেরিয়েবলটি সেট করা টার্মিনালে চলমান যে কোনও প্রোগ্রামকে জানতে দেয় যে বর্তমান টার্মিনালটি রঙ বোঝার কথা; এটিকে "লিনাক্স" এ সেট করা প্রোগ্রামগুলিকে বলে যে এটি কোনও ভিটি হওয়ার কথা; ইত্যাদি