ইন্টারেক্টিভ লগইন এবং অ-ইন্টারেক্টিভ নন-লগইন শেলকে আলাদা করুন ti


25

আমি লগইন, নন-লগইন, ইন্টারেক্টিভ এবং অ-ইন্টারেক্টিভ এই চারটি শর্তকে আলাদা করার চেষ্টা করছি :

  • ইন্টারেক্টিভ - লগইন শেল
  • ইন্টারেক্টিভ - লগ-ইন শেল
  • অ-ইন্টারেক্টিভ - লগইন শেল
  • অ-ইন্টারেক্টিভ - লগ-ইন শেল

আমি যেমন
ইন্টারেক্টিভ বুঝতে পারি - নন লগইন শেল : সিস্টেমটি শুরু করুন, সিস্টেমে লগ ইন করুন এবং টার্মিনাল এবং
নন-ইন্টারেক্টিভ - লগইন শেলটি : সিস্টেমে টেলনেট এবং লগ ইন করুন

তবে ইন্টারেক্টিভ - লগইন শেল সম্পর্কে কী বলা যায়?
এটি কি সিস্টেমে লগ ইন করে, ভার্চুয়াল টার্মিনালটি খোলে এবং লগ ইন করে? এবং
অ-ইন্টারেক্টিভ - নন-লগইন শেল, এটি ক্রন্টবে স্বয়ংক্রিয় স্ক্রিপ্টটি চলছে?

উত্তর:


38

আপনি যে আসল ভুল ধারণাটি মনে করছেন তা হ'ল একটি অ ইন্টারেক্টিভ, লগইন শেলটি কী।

সংক্ষেপে (দেখুন এখানে আরো বিস্তারিত জানার জন্য), উদাহরণ:

  • ইন্টারেক্টিভ লগইন শেল: উদাহরণস্বরূপ, আপনি একটি রিমোট কম্পিউটারের মাধ্যমে লগইন করেন ssh। অন্যথা, আপনি আপনার স্থানীয় মেশিন (একটি TTY ড্রপ Ctrl+ + Alt+ + F1) এবং সেখানে লগ ইন করুন।

  • ইন্টারেক্টিভ অ-লগইন শেল: একটি নতুন টার্মিনাল খুলুন।

  • অ-ইন্টারেক্টিভ অ-লগইন শেল: একটি স্ক্রিপ্ট চালান। সমস্ত স্ক্রিপ্টগুলি তাদের নিজস্ব সাবশেলে চালিত হয় এবং এই শেলটি ইন্টারেক্টিভ নয়। এটি কেবল স্ক্রিপ্টটি কার্যকর করতে খোলে এবং স্ক্রিপ্ট শেষ হওয়ার সাথে সাথে এটি বন্ধ হয়ে যায়।

  • অ-ইন্টারেক্টিভ লগইন শেল: এটি অত্যন্ত বিরল, এবং এটির মুখোমুখি হওয়া আপনার পছন্দ নয়। একটি চালু করার এক উপায় echo command | ssh serversshকমান্ড ছাড়াই যখন চালু করা হয় ( যার sshপরিবর্তে এটি রিমোট শেলটিতে ssh commandচলবে command) এটি একটি লগইন শেল শুরু করে। যদি এর টিটিটি টিটি না stdinহয় sshতবে এটি একটি অ-ইন্টারেক্টিভ শেল শুরু করে। এই কারণেই echo command | ssh serverএকটি অ-ইন্টারেক্টিভ লগইন শেলটি চালু করবে। আপনি একটি দিয়ে শুরু করতে পারেন bash -l -c command

আপনি যদি এটির সাথে চারপাশে খেলতে চান তবে আপনি বিভিন্ন ধরণের শেল পরীক্ষা করে দেখতে পারেন:

  • এই শেলটি ইন্টারেক্টিভ কি?

    $-ভেরিয়েবলের বিষয়বস্তু পরীক্ষা করুন । ইন্টারেক্টিভ শেলগুলির জন্য, এতে অন্তর্ভুক্ত থাকবে i:

    ## Normal shell, just running a command in a terminal: interacive
    $ echo $-
    himBHs
    ## Non interactive shell
    $ bash -c 'echo $-'
    hBc
  • এটি কি লগইন শেল?

    এটি পরীক্ষা করার কোনও পোর্টেবল উপায় নেই তবে ব্যাশের জন্য, আপনি login_shellবিকল্পটি সেট করা আছে কিনা তা পরীক্ষা করতে পারেন :

    ## Normal shell, just running a command in a terminal: interacive
    $ shopt login_shell 
    login_shell     off
    ## Login shell; 
    $ ssh localhost
    $ shopt login_shell 
    login_shell     on

এই সমস্ত একসাথে রেখে, এখানে প্রতিটি সম্ভাব্য ধরণের শেল:

## Interactive, non-login shell. Regular terminal
$ echo $-; shopt login_shell
himBHs
login_shell     off

## Interactive login shell
$ bash -l
$ echo $-; shopt login_shell
himBHs
login_shell     on

## Non-interactive, non-login shell
$ bash -c 'echo $-; shopt login_shell'
hBc
login_shell     off

## Non-interactive login shell
$ echo 'echo $-; shopt login_shell' | ssh localhost
Pseudo-terminal will not be allocated because stdin is not a terminal.
hBs
login_shell     on

আমি পরিষ্কার করতে চাই যে 1) আমার জন্য গুইতে লগইন মানে সিস্টেম শুরু করা, সিস্টেমে লগইন করা এবং টার্মিনাল খুলুন 2) টেলনেট বা এসএসএস করা ইন্টারেক্টিভ লগইন শেল মানে আমি যে উদাহরণটি দিয়েছি non-interactive login shellতা ভুল।
ডেইজি

@ স্পষ্টীকরণের জন্য ডেইজি ধন্যবাদ; উত্তর সম্পাদিত।
টেরডন

ঠিক আছে এবং গুই অপ্রাসঙ্গিক, ইন্টারেক্টিভ নন-লগইন শেল: কেবল স্থানীয় বা দূরবর্তীভাবে টেলনেট বা এসএসএসের মাধ্যমে একটি নতুন টার্মিনাল খুলুন
ডেইজি

@ ডেইজি হ্যাঁ, ডান সম্পর্কে শোনাচ্ছে। তবে দয়া করে মুরুর উত্তরটি মনোযোগ সহকারে পড়ুন, কারণ এটি ব্যাখ্যা করে যে মূলত এটি শব্দার্থবিজ্ঞানের বিষয় এবং কেবল শেল দ্বারা স্টার্টআপ ফাইলগুলি কী পড়বে তা প্রভাবিত করে। এছাড়াও বিভিন্ন শেল প্রকারের আরও বিস্তৃত ওভারভিউয়ের জন্য এখানে দেখুন ।
টেরডন

অ-ইন্টারেক্টিভ লগইন শেলগুলি অসাধারণ নয়, উদাহরণস্বরূপ গিট এগুলি ব্যবহার করে, আইআইআরসি।
কোয়াজগার

6

মূলত, কোনও শেল লগইন হয় বা না, ইন্টারেক্টিভ বা সঠিক কোনও কারণে গুরুত্বপূর্ণ নয়:

আরম্ভের ফাইল এবং ডিফল্ট বিকল্প সেট শেল লগইন কিনা এবং ইন্টারেক্টিভ কিনা তা নির্ভর করে।

অনুরূপভাবে, কোনও শেল লগইন হয় কিনা বা ইন্টারেক্টিভ বা না ব্যবহৃত হয় তা সম্পূর্ণভাবে ব্যবহৃত অনুরোধের উপর নির্ভর করে - সঠিক আদেশের নাম এবং বিকল্পগুলি।

দুটি বৈশিষ্ট্য অন্যথায় অরথোগোনাল - শেলটি লগইন কিনা বা তা ইন্টারেক্টিভ কিনা তা নির্ধারণে তার কোনও প্রভাব নেই।

এর মধ্যে যদি কোনও সত্য হয় তবে ব্যাশ একটি লগইন শেল শুরু করে:

  • argv[0], কমান্ডের নাম হিসাবে এটি আহ্বান করা হয়েছিল, এর সাথে শুরু হয় -
  • -lঅপশন উল্লিখিত থাকলে

অনুরূপ, বাশ একটি ইন্টারেক্টিভ শেল শুরু করে যদি এগুলির মধ্যে কোনওটি সত্য হয়:

  • এটি কার্যকর করার জন্য কোনও ফাইল নির্দিষ্ট করা হয়নি (যেমন, কমান্ডটি ছিল না bash some/file) বা কমান্ডের স্ট্রিং চালানোর জন্য ( bash -c 'foo') প্রকৃত অবস্থাটি আরও জটিল, ম্যানুয়ালটি দেখুন)
  • -iঅপশন উল্লেখিত হয়েছিল

উল্লেখযোগ্যভাবে (এবং বিদ্বেষপূর্ণভাবে), পরবর্তীগুলি বোঝায় যে bash -ic 'foo'একটি ইন্টারেক্টিভ শেল শুরু করে।

সুতরাং নিম্নলিখিতটি একটি লগইন, ইন্টারেক্টিভ শেল শুরু করে, যদিও এটি সম্পর্কে যা কিছু ইন্টারেক্টিভ কিছুই নেই এবং আমন্ত্রণটির লগ ইন করার সাথে কিছুই করার ছিল না:

bash -lic true

কনসোল বা জিইউআইয়ের মাধ্যমে লগ ইন করা লগইন শেলটি শুরু করে (বা নাও হতে পারে) উপযুক্ত অনুরোধটি ব্যবহার করে লগইন প্রক্রিয়াটির পুরোপুরি প্রভাব।

শর্ত ও প্রভাবগুলি ব্যাশ ম্যানুয়াল, স্টার্টআপ ফাইলগুলির বিভাগে বিশদে বর্ণনা করা হয়েছে ।


বিভ্রান্তির একটি প্রধান উত্স হ'ল "লগইন" শেলটির আরও একটি সাধারণ অর্থ:

ব্যবহারকারীর লগইন শেলটি সেই ব্যবহারকারীর passwdপ্রবেশের (যা /etc/passwdএলডিএপি বা অন্য কোনও উত্স থেকে আসতে পারে ) সংজ্ঞায়িত শেল ।

loginপ্রোগ্রাম,, SSH, ইত্যাদি হিসেবে এই শেল শুরু লগইন অর্থে উত্তর বাকি বোঝানো শেল - একটি নেতৃস্থানীয় সঙ্গে -কমান্ড নামে, সাধারণত। আপনি যদি বিশেষ বিভ্রান্ত হতে চান, আপনি বলতে পারেন:

কিছু লগইন প্রক্রিয়া ব্যবহারকারীর লগইন শেলটি লগইন শেল হিসাবে শুরু করে।

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


3

লগইন শেল:

প্রথম প্রক্রিয়া যা আমাদের ব্যবহারকারী আইডির অধীনে কার্যকর হয় যখন আমরা কোনও সেশনে লগ ইন করি। লগইন প্রক্রিয়া শেলকে একটি কনভেনশন সহ লগইন শেল হিসাবে আচরণ করতে বলে: পাসিং আর্গুমেন্ট 0, যা সাধারণত শেলটির নাম, "-" অক্ষর প্রিপেন্ড করা থাকে

ইন্টারেক্টিভ শেল:

টিটিটিতে ব্যবহারকারী ইনপুট থেকে আদেশগুলি পড়ে Read অন্যান্য জিনিসের মধ্যে, এই জাতীয় শেল অ্যাক্টিভেশনে স্টার্টআপ ফাইলগুলি পড়ে, একটি প্রম্পট প্রদর্শন করে এবং ডিফল্টরূপে কাজ নিয়ন্ত্রণ সক্ষম করে। ব্যবহারকারী শেলের সাথে যোগাযোগ করতে পারে। স্ক্রিপ্ট চলমান একটি শেল সর্বদা একটি অ-ইন্টারেক্টিভ শেল।

সহজ ভাষায়: ইন্টারেক্টিভ শেলটির জন্য ব্যবহারকারীদের ইনপুট দরকার হয়, যখন অ-ইন্টারেক্টিভ শেলটি স্ক্রিপ্টগুলি দ্বারা চালিত হয় এবং ব্যবহারকারীর ইনপুটগুলির প্রয়োজন হয় না।


সুতরাং যে উদাহরণগুলি সঠিকভাবে দেওয়া হয়।
ডেইজি

হ্যাঁ ডেইজি আপনার সঠিক জায়গায়।
জর্জ উদোসেন

1
@ ডেইজি না! জিইউআই এর সাথে একেবারে করার কিছুই নেই। এটি কমান্ড লাইন শেলগুলি সম্পর্কে, গ্রাফিকাল শেলগুলি নয় (যা বিদ্যমান রয়েছে তবে এটি একটি ভিন্ন প্রাণী)।
টেরডন

1
@ জর্জি না, দুটি ভুল রয়েছে: জিইউআইয়ের মাধ্যমে লগইন কোনও লগইন শেল (বা অন্য কোনও প্রকারের প্রাসঙ্গিক শেল) শুরু করে না এবং টেলনেটের মাধ্যমে একটি রিমোট সিস্টেমে লগ ইন করার ফলে একটি টেলনেট শেল শুরু হয়, তবে এসএসএসের মাধ্যমে একটি ইন্টারেক্টিভ লগইন শুরু হয় শেল।
টেরডন

1
@ জর্জ আসলে, আমি সংশোধন করছি। কিছু জিইআইআই লগইন পরিচালক হয়ত পড়তে লগইন শেলটি শুরু করতে পারে .profile(আমি ভেবেছিলাম তারা কেবল .profileম্যানুয়ালি উত্স দেয় তবে আমি ভুল হতে পারি )।
টেরডন

0

আমি উল্লেখ করতে চাই, আপনি এর মাধ্যমে একটি ইন্টারেক্টিভ লগইন শেল শুরু করতে পারেন:

  1. কার্যকর করা sudo /bin/loginএবং আপনার শংসাপত্রগুলি টাইপ
  2. নির্বাহ exec -l /bin/bash
  3. নির্বাহ su -
  4. এবং উপরে বর্ণিত উত্তরগুলির মতো, এসএসএস ব্যবহার করে এবং একটি দূরবর্তী মেশিনে লগ ইন করুন

এছাড়াও, আপনি (ব্যাশ মধ্যে) পরীক্ষা করতে পারবেন যদি এটা শেল টাইপ করে লগইন হল echo $0এবং যদি একটি ড্যাশ দিয়ে আউটপুট শুরু -, তারপর এটি একটি লগইন শেল হয়।

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