'বিড়াল' কি অন্তর্নির্মিত শেল বা কোনও বাহ্যিক প্রোগ্রাম?


33

শেলটি অন্তর্নির্মিত বা বাহ্যিক প্রোগ্রাম typeকিনা catতা জানতে আমি যখন আদেশটি ব্যবহার করি তখন নীচের আউটপুটটি পাই:

-$ type cat
cat is hashed (/bin/cat)
-$

এর অর্থ কি এটি catবাহ্যিক প্রোগ্রাম যা /bin/cat?

আমি বিভ্রান্ত হয়ে পড়েছিলাম, কারণ যখন আমি নীচের আউটপুটটি পরীক্ষা করেছিলাম তখন আমি echoদেখতে পেলাম যে এটি একটি built-inতবে একটি প্রোগ্রাম/bin/echo

-$ type echo
echo is a shell builtin
-$ which echo
/bin/echo
-$ 

সুতরাং আমি যুক্তিটি ব্যবহার করতে পারিনি যা /bin/catঅবশ্যই বাহ্যিক প্রোগ্রামের অর্থ হয়, কারণ প্রতিধ্বনি /bin/echoকিন্তু এখনও একটি অন্তর্নির্মিত ছিল।

তাহলে আমি কীভাবে জানব কী cat? অন্তর্নির্মিত বা বাহ্যিক?


1
-কমান্ড বিড়াল একটি বাহ্যিক প্রোগ্রাম যা সিস্টেমের অংশ তৈরি করে, যার ফলে এটি করতে পারে এমন অনেকগুলি ক্রিয়াকলাপ সাধারণ অন্তর্নির্মিত নয়।
জোক সিনিয়র ঠিক আছে

12
type whichআপনাকে উত্তর দিতে পারে কেন whichআপনাকে উত্তর দেয় না।
দুবু

1
আপনি যে শেলটি ব্যবহার করছেন তার উপর নির্ভর করে
nsn

6
মজাদার ঘটনা: catএবং উভয়ই ls/ স্টলম্যান নিজে লিখেছিলেন। তিনি কতটা জিনিস লিখেছিলেন তা অবাক করে দিয়ে যাবেন। ভুলে যাবেন না যে তিনি কম্পাইলারের প্রথম সংস্করণ লিখেছিলেন যা আজ বিশ্বের সেরা সংকলক যা সমস্ত এবং মূল ব্যবহারগুলির বেশিরভাগ সংকলন করে। স্রেফ বলুন '
অ্যালেক টিল

2
@ অ্যালকিটেল আপনি কি বুঝতে পেরেছেন যে বেশিরভাগ ইউনিক্স সিস্টেমগুলি ls এবং বিড়ালের সংস্করণ ব্যবহার করে যা জিএনইউ সংস্করণগুলির অনেক আগে থেকেই রিচার্ড স্টালম্যানের হাত ধরেছিল?
রস রিজ

উত্তর:


59

typeশেলটি কী ব্যবহার করবে তা আপনাকে জানায়। উদাহরণ স্বরূপ:

$ type echo
echo is a shell builtin
$ type /bin/echo
/bin/echo is /bin/echo

এর অর্থ হল যে, যদি ব্যাশ প্রম্পটে আপনি টাইপ করেন তবে echoআপনি অন্তর্নির্মিত পাবেন। আপনি যদি পথটি নির্দিষ্ট করে থাকেন তবে /bin/echo, আপনি বাহ্যিক আদেশ পাবেন।

whichবিপরীতে, একটি বহিরাগত প্রোগ্রাম যা শেলটি কী করবে সে সম্পর্কে কোনও বিশেষ জ্ঞান নেই। ডিবিয়ান-জাতীয় সিস্টেমে whichহ'ল একটি শেল স্ক্রিপ্ট যা এক্সিকিউটেবলের জন্য PATH অনুসন্ধান করে। শেলটি অন্তর্নির্মিত ব্যবহার করা হলেও এটি আপনাকে বহিরাগত নির্বাহযোগ্যের নাম দেবে।

যদি কোনও কমান্ড কেবল অন্তর্নির্মিত হিসাবে উপলভ্য থাকে তবে whichকিছুই ফিরিয়ে দেবে না:

$ type help
help is a shell builtin
$ which help
$ 

এখন, এর দিকে তাকান cat:

$ type cat
cat is hashed (/bin/cat)
$ which cat
/bin/cat

cat একটি বহিরাগত নির্বাহযোগ্য, শেল বিল্টিন নয়।


5
আপনি type -all echoশেলটির সাথে পরিচিত আলাদা "প্রতিধ্বনি" আবিষ্কার করতে পারেন (ক্রমের পরিবর্তনের জন্য যদি আপনি কিছু নির্দিষ্ট না করেন, তবে অনুরোধ করা "echo"বা \echo, বা command echo)
অলিভিয়ার ডুলাক

ভাল উত্তর. একটি সংযোজন: echohistoricalতিহাসিক কারণে দুটি সংস্করণ রয়েছে । এটি বাহ্যিক কমান্ড হিসাবে শুরু হয়েছিল, তারপরে অন্তর্নির্মিত হিসাবে যুক্ত করা হয়েছিল। বোর্ন শেল ( /bin/sh) এর প্রাথমিক সংস্করণগুলি এটি ছিল না। /bin/echoসামঞ্জস্যতার জন্য রাখা ছিল, যেহেতু সমস্ত ধরণের জিনিস এটির উপর নির্ভর করে। (একই জিনিসটি ঘটেছে test))
অ্যালেক্সিস

পার্শ্ব দ্রষ্টব্য: whichনিজেই অন্তর্নির্মিত সেন্টিমিড শেল হতে পারে, উদাহরণস্বরূপ tcsh এ:which which which: shell built-in command.
ড্যান কর্নিলিস্কু

আমি পার্টিতে দেরিতে পৌঁছে যাচ্ছি, তবে আপনি কেন এর ম্যান পেজটি পরীক্ষা করছেন না এবং আপনি আসলে প্রথম বন্ধনীগুলির মধ্যে সংখ্যাটি দেখতে পাচ্ছেন যা এটি ইঙ্গিত করে যে কোনও শেলটি যদি অন্তর্নির্মিত হয় বা যা কিছু
poz2k4444

46

cat is hashed (/bin/cat)ঠিক এর মতো cat is /bin/cat( এটি একটি বাহ্যিক প্রোগ্রাম )।

পার্থক্যটি হ'ল আপনি ইতিমধ্যে catএই অধিবেশনে দৌড়াদৌড়ি করেছেন, সুতরাং ব্যাশ ইতিমধ্যে এটি সন্ধান করেছে $PATHএবং ফলস্বরূপ অবস্থানটি একটি হ্যাশ টেবিলের মধ্যে সঞ্চিত করেছে যাতে এটি এই সেশনে এটি আবার দেখা উচিত নয়।

আপনার সেশনে হ্যাশ করা সমস্ত কমান্ড দেখতে, চালান hash

$ hash
hits    command
   2    /usr/bin/sleep
   3    /usr/bin/man

$ type sleep
sleep is hashed (/usr/bin/sleep)

$ type man
man is hashed (/usr/bin/man)

$ type ls
ls is /usr/bin/ls

$ type cat
cat is /usr/bin/cat

$ type echo
echo is a shell builtin

9
আসলে, আমার মতে এটিই আপনার উত্তরকে সম্বোধন করে একমাত্র উত্তর :)
আন্দ্রে চ্যালেলা

এই সত্য ^^^ এই উত্তরটি গ্রহণযোগ্য হওয়া উচিত।
লিনাক্সসিকিউরিটিফ্রেক

4

শেল বিল্টিনের তালিকাগুলির চেক করার আরেকটি উপায়: compgenযা ব্যবহার করে শেলটি বিল্টইন নিজেই!

নিম্নলিখিত কমান্ড সমস্ত শেল বিল্টিন কমান্ড তালিকাভুক্ত করে:

compgen -b

আপনি এর জন্য পরীক্ষা করতে পারবেন cat, echoমত greping দ্বারা: -

$ compgen -b | grep echo
echo
$ compgen -b | grep cat
$ 

আপনি compgen -b | grep catকোনও আউটপুট ছাড়াই রিটার্ন দেখতে পাচ্ছেন , মানে catশেল বিল্টিন নয়

সরবরাহিত দরকারী বিকল্পগুলির একটি তালিকা দেখুনcompgen


আপনি একে অপরের বিল্টিন কমান্ডটি ব্যবহার করতে পারেন: helpশেল-বিল্টিন প্রদর্শন করতে।

$ help help
help: help [-dms] [pattern ...]
    Display information about builtin commands.

আমি এই বিকল্পগুলির জন্য কোনও আনুষ্ঠানিক ডকুমেন্টেশন পাচ্ছি না, আপনি জানেন যে এটি কোথায় আছে?
র্যান্ডম 832

@ র্যান্ডম 832 আপনি কি বিকল্পগুলির বিষয়ে কথা বলছেন compgen?
পান্ড্য

হ্যাঁ, আমি বাশ ম্যানপেজে কিছুই খুঁজে পাইনি - বি বা অর্ধেক অন্যান্য বিকল্পের অর্থ কী। এটি পরে gnu.org/software/bash/manual/html_node/…
র্যান্ডম 832

@ Random832 চেষ্টা man bash | grep -e '-A action$' -A 32আপনি সম্ভবত মত আউটপুট পেতে এই । ( -Aসঠিকভাবে পরিচালনা করার পরে অঙ্ক বাড়ান / হ্রাস করুন )।
পান্ড্য

4

আপনি whereisযে কমান্ডটি আরও কার্যকর তা ব্যবহার করতে পারেন কারণ এটি ম্যানুয়ালটিতে কমান্ডটি ম্যানুয়াল পৃষ্ঠাগুলির লাইব্রেরি ইত্যাদির মতো দেখায় shows


-আমার খারাপ ইংরাজির জন্য আমাকে ক্ষমা করুন, কারণ আমি এখনও শিখছি এবং ব্যবহার করে এতটা ভাল না! ...
জোক সিনিয়র ওকে

2

অন্যরা ইতিমধ্যে এর সম্পর্কে উত্তর দিয়ে গেছে cat, আমি কেবল এই বিষয়টি দিয়ে ব্যাখ্যা করতে চাই echo। আপনি যদি টাইপের -aবিকল্পটি ব্যবহার করেন (সমস্ত মিলের তালিকা তৈরি করুন), আপনি দেখতে পাবেন যে echoএটি শেল বিল্টিন এবং বাহ্যিক প্রোগ্রাম উভয়ই :

$ type -a echo
echo is a shell builtin
echo is /bin/echo

দুজন একে অপরের থেকে সম্পূর্ণ স্বাধীন। typeকোনও বিকল্প ছাড়াই কেবল প্রথম মিলিত কমান্ডটি পাওয়া যাবে। সুতরাং, টাইপ fooআপনাকে দেখাবে যে আপনি চালনা করলে কি কার্যকর করা হবে foo। অন্যান্য বিকল্প থাকতে পারে তবে আপনি ব্যবহার না করলে সেগুলি প্রদর্শিত হবে না -a


2

যেহেতু একটি কমান্ড যেমন catএকটি বিল্টিন বা বাহ্যিক প্রোগ্রাম কিনা তা জানতে টাইপ ব্যবহার সম্পর্কে বেশ কয়েকটি ভাল উত্তর রয়েছে । আমি আরও সাধারণ পদ্ধতি গ্রহণ করতে যাচ্ছি। কিছু কমান্ড রয়েছে যা অবশ্যই বিল্টইন হতে হবে কারণ তারা বর্তমান শেলকে প্রভাবিত করে। তিন সর্বোত্তম উদাহরণ cd, execএবং exit। কিছু কমান্ড রয়েছে যা অবশ্যই বিল্টইন হবে না কারণ তাদের কার্যকারিতা এক্সিকিউট বা সিস্টেম কলগুলির আচরণের উপর নির্ভর করে। যেমন প্রোগ্রাম উদাহরণ অন্তর্ভুক্ত su, sudo, califeএবং super। অন্যান্য সমস্ত কমান্ড বিল্টিন বা বাহ্যিক প্রোগ্রাম হিসাবে নির্মিত যেতে পারে।catএই শ্রেণীর একটি দুর্দান্ত উদাহরণ প্রোগ্রাম কারণ এখানে শেল রয়েছে যা এতে বিল্টিন এবং শেলগুলি অন্তর্ভুক্ত করে না। এটি লক্ষণীয় যে এই শ্রেণীর অনেক কমান্ড যা বিল্টইন হিসাবে উপলব্ধ রয়েছে তা বাহ্যিক প্রোগ্রাম হিসাবেও উপলব্ধ।

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