অ ইন্টারেক্টিভ লগইন শেল আছে?


14

আমি জানি কি ইন্টারেক্টিভ / অ মিথস্ক্রিয় এবং লগইন / অ লগইন শাঁস মধ্যে পার্থক্য আছে, কিন্তু মনে হচ্ছে বাস্তবে তাহলে আর কখনোই হতে যাচ্ছে মত নন-ইন্টারেক্টিভ লগইন যদি না আপনি ভালো কিছু আছে শেল /bin/bash --login some-script.shএকটি লিপিতে (এবং এমনকি মনে হচ্ছে যে অদ্ভুত) এটি সঠিক বা এগুলি আরও সাধারণ?


7
telnet towel.blinkenlights.nlলগইন শেলের জন্য যা অ-ইন্টারেক্টিভ ;-)
মার্টিন টর্নয়েজ


@ ক্যাপিটেনম্যান: উত্তরগুলি খুঁজছেন, আমাদের দুটি আছে যা "ইন্টারেক্টিভ" এর একেবারে পৃথক অর্থের উপর দৃষ্টি নিবদ্ধ করে। এর আলোকে আপনি যখন নিজের প্রশ্নটি জিজ্ঞাসা করেছিলেন তখন আপনি কোন অর্থটি ব্যবহার করছেন তা বোঝাতে আপনার উত্তরটি কিছুটা প্রসারিত করতে পারেন?
সিজেএস

উত্তর:


10

আমি ধরে নিয়েছি আপনি ম্যানপেজের আমন্ত্রণ বিভাগে বর্ণিত বনাম বনাম নন-লগইন এবং ইন্টারেক্টিভ বনাম অ ইন্টারেক্টিভ বনাম নন-ইন্টারেক্টিভ বাশ শেল সম্পর্কে বাশের ধারণার কথা বলছেন ume ( ফাইলটিতে "শেল" (বা ইউজার কমান্ড ইন্টারপ্রেটার) হিসাবে ব্যবহৃত যেকোন স্বেচ্ছাসেবক কমান্ডের জেমস ইয়ংম্যানের জবাবের ব্যাখ্যা থেকে এটি আলাদা passwd(5)এবং এই প্রোগ্রামটি ব্যবহারকারী ইনপুট গ্রহণ করে কিনা তাও কিছু; যেমন /usr/sbin/nologin, স্পষ্টতই তা গ্রহণ করে না। )

আপনি সঠিক যে /bin/bash --login some-script.shএকটি ইন্টারঅ্যাক্টিভ লগইন ব্যাশের অনুরোধ উত্পন্ন করবে এবং এটি সম্ভবত একটি প্যাথলজিকাল উদাহরণ। সেখানে এক ক্ষেত্রে, সম্ভবত বিরল না কিন্তু সত্যিই অদ্ভুত, যে একটি নন-ইন্টারেক্টিভ লগ-ইন শেল উত্পাদন করে হল: ssh somehost < some-file। এখানে sshdবাশ argv[0]সেট সেট করে শুরু হবে -bashকারণ এটি চালানোর জন্য কোনও আদেশ দেওয়া হয়নি, কারণ ব্যাশ নিজেকে লগইন শেল হিসাবে বিবেচনা করবে, কিন্তু, স্টিডিন কোনও টার্মিনালের সাথে সংযুক্ত না থাকায় বাশ নিজেকে ইন্টারেক্টিভ মোডে সেট $-করবে না (এতে থাকবে না i) ।

(ব্যক্তিগতভাবে, কেসটি কনভার্সের চেয়ে অনেক বেশি যুক্তিসঙ্গত বলে মনে হয় ssh somehost somecommand, যা "লগইন শেল" হিসাবে বিবেচিত হয় না যদিও এটি somehostউপরের মতো ঠিক নতুন লগইন করে ।)

আমি অনেক আগে আমার যা করা উচিত ছিল তা করেছি এবং বাশের মোডগুলির একটি টেবিল একসাথে রেখেছি এবং কোন init ফাইলগুলি চালিত হচ্ছে । যদি আপনি এটি বিভ্রান্তিকর হয়ে উঠছেন তবে অন্তত আমিও এটির প্রতি মনোযোগ দিন। এটি .bashrcকখনই মৃত্যুদন্ড কার্যকর করা হয় সে সম্পর্কে নিয়মগুলির সাথে তাদের মূল লক্ষ্যটি ছিল তা আমার কাছে তুষ্ট করে ।


1

নতুন ইনস্টল হওয়া সিস্টেমে গণনা অনুসারে বেশিরভাগ লগইন শেলগুলি অ-ইন্টারেক্টিভ হয়, প্রকৃতপক্ষে:

$ awk -F:  '{print $7}' <  /etc/passwd | sort | uniq -c
  5 /bin/bash
 23 /bin/false
  1 /bin/sh
  1 /bin/sync
 17 /usr/sbin/nologin

স্পষ্টত /bin/bashএবং /bin/shtraditionalতিহ্যবাহী শাঁস এবং সেগুলি ইন্টারেক্টিভ। তবে সেই তালিকার অন্যান্য সমস্ত আইটেম অ-ইন্টারেক্টিভ। আপনি যদি তালিকাটি পড়ছেন এবং তাদের মধ্যে একটি কী জানেন না তবে আপনি কেবল তার ম্যানুয়াল পৃষ্ঠাটি সন্ধান করতে পারেন (উদাহরণস্বরূপ man nologinবা সহ man sync)।

কমান্ডটি আসলে কী করে

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

কমান্ডটি ইউনিক্স পাইপলাইন । একটি পাইপলাইন হ'ল কমান্ডগুলির একটি শৃঙ্খল - আপনি এটি বাম থেকে ডানে পড়েন - যেখানে প্রথম কমান্ডের আউটপুট দ্বিতীয়টির ইনপুট হয়ে যায়, দ্বিতীয়টির আউটপুট তৃতীয়টির ইনপুট হয়ে যায় এবং ততক্ষণ পাইপলাইন শেষ। শেষ প্রক্রিয়াটির আউটপুট টার্মিনালে প্রদর্শিত হবে (যদি না এটি পুনঃনির্দেশিত হয়)। শেল পাইপলাইনে উইকিপিডিয়া এন্ট্রি দেখুন আরও তথ্যের জন্য।

পাইপলাইন কী করছে তা যদি আপনি বুঝতে না পারেন তবে কী হচ্ছে তা দেখতে আপনি খালি খণ্ডগুলিতে এটি চালাতে পারেন। আপনি যে কমান্ড ব্যবহার করা হচ্ছে তার জন্য ম্যানুয়াল পৃষ্ঠাটি পড়তে পারেন (এখানে awk, sortএবং uniq)। আসলে, আপনার এখন এটি করা উচিত। আমি অপেক্ষা করব.

আসুন পাইপলাইনটির পর্যায়গুলি ক্রমবর্ধমানভাবে চালানো যাক (আপনি নিজের ইউনিক্স সিস্টেমে নিরাপদে এটি করতে পারেন):

~$ awk -F:  '{print $7}' <  /etc/passwd | sed -e 's/^/    /'
/bin/bash
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/bin/sync
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/usr/sbin/nologin
[ ... and so on, I've left the rest out ... ]

উপরের আউটপুটটি কেবল /etc/passwdফাইলটি থেকে সপ্তম ক্ষেত্রের বিষয়বস্তু । এটি (ফ্ল্যাট-টেক্সট-ফাইল) ডাটাবেস যা প্রত্যেকের লগইন শেলটি সিস্টেমকে বলে tells আপনি যদি এটি সম্পর্কে আরও সন্ধান করতে চান তবে এটি /etc/passwdপড়ুন (এটি বিশ্ব-পঠনযোগ্য) এবং এর জন্য ম্যানুয়াল পৃষ্ঠাটি দেখুন (man 5 passwd)

সুতরাং সেখানে পুরো তালিকাটি পড়ে আপনি জনপ্রিয় আইটেমগুলি কী তা ধারণা পেতে পারেন তবে এই প্রশ্নের উত্তরের জন্য এটি একটি ভাল ফর্ম্যাট নয় কারণ প্রশ্নটি সাধারণভাবে অ-ইন্টারেক্টিভ শেলগুলি কীভাবে তা সম্পর্কে ছিল। আসুন তাদের গণনা করা যাক। এটি করার সহজ উপায় হ'ল প্রথমে আইটেমগুলি বাছাই করা:

~$ awk -F:  '{print $7}' <  /etc/passwd | sort
/bin/bash
/bin/bash
/bin/bash
/bin/bash
/bin/bash
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
[ ... and so on, I've left the rest out ... ]

আমরা uniqআমাদের কেবল অনন্য আইটেমগুলি দেখানোর জন্য প্রোগ্রামটি ব্যবহার করতে পারি :

। k awk -F: '{মুদ্রণ {7}' </ ইত্যাদি / পাসডাব্লুড | সাজানো | uniq | সেড-ই 'এস / ^ / /' / বিন / বাশ / বিন / মিথ্যা / বিন / শ / বিন / সিঙ্ক / ইউএসআর / এসবিন / নোলোগিন

তবে অপেক্ষা করুন, এটির কোনও ব্যবহার নেই, সেখানে প্রত্যেকে কতজন ছিলেন? আসুন জিজ্ঞাসা করি uniq(ম্যান পেজটি পড়ুন!):

~$ awk -F:  '{print $7}' <  /etc/passwd | sort | uniq -c
      5 /bin/bash
     23 /bin/false
      1 /bin/sh
      1 /bin/sync
     17 /usr/sbin/nologin

অবশ্যই আউটপুটটি আমরা উত্তরের উপরে দেখেছি অবশ্যই। ক্রমগুলি এন্ট্রিগুলি দেখতে এটি আবার বাছাই করুন:

~$ awk -F:  '{print $7}' <  /etc/passwd | sort | uniq -c | sort
     17 /usr/sbin/nologin
      1 /bin/sh
      1 /bin/sync
     23 /bin/false
      5 /bin/bash

অপেক্ষা করুন, যে হতে পারে না ঠিক আছে, 17 আসে সামনে 1 এবং 5 23 পরে সমস্যা হল আইটেম সাজানো হচ্ছে lexicographically । আসুন sortতাদের সংখ্যাসূচকভাবে এবং বিপরীত ক্রমে সাজানোর জন্য জিজ্ঞাসা করুন:

~$ awk -F:  '{print $7}' <  /etc/passwd | sort | uniq -c | sort -n -r
     23 /bin/false
     17 /usr/sbin/nologin
      5 /bin/bash
      1 /bin/sync
      1 /bin/sh

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


আপনি আরও কিছু ব্যাখ্যা করতে পারেন দয়া করে? আমি নিশ্চিত না আমি যা পড়ছি তা অনুসরণ করি।
ক্যাপ্টেন ম্যান

হয় /bin/syncএকটি শেল? তাহলে কোন ইউটিলিটি শেল?
ইলুন

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

2
আপনি অন্য একটি প্রশ্নের উত্তর দিচ্ছেন বলে মনে হচ্ছে। আপনি কেবল উপলভ্য শেলগুলি তালিকাবদ্ধ করছেন এবং উল্লেখ করছেন যে কিছু কখনও ইন্টারেক্টিভ হবে না। আমি বিশ্বাস করি যে ওপি জিজ্ঞাসা করছে যে কোনও অ-ইন্টারেক্টিভ লগইন শেলটি বন্যের মধ্যে কখনও সম্মুখীন হয়েছে কিনা। সুতরাং শেলগুলি যে ইন্টারেক্টিভ হতে পারে, উদাহরণস্বরূপ ব্যাশ করুন, অ-ইন্টারেক্টিভ লগইন শেলগুলি কখনও চালু করুন । অন্য কথায়, এখানে "লগইন শেল" এর অর্থ "ব্যবহারকারীর ডিফল্ট লগইন শেল" নয়, এর অর্থ একটি শেল যা লগইন শেল হিসাবে চালু হয়েছে । দেখুন unix.stackexchange.com/a/46856/22222
terdon

1
অথবা সম্ভবত, পোস্টারটি স্পষ্টভাবে bash --loginপ্রশ্নটিতে লেখার কারণে, তিনি বিশেষত এমন bashপ্রক্রিয়াগুলি সম্পর্কে জিজ্ঞাসা করছেন যা iবিকল্প সেট নেই। (এগুলি যেমন কমান্ডগুলি থেকে উদ্ভূত হয় ssh somehost < script.sh; এটি বাশ ম্যানপেজের ইনভোকেশন বিভাগে নির্দিষ্ট ইন্দ্রিয়গুলিতে "লগইন, অ-ইন্টারেক্টিভ" শেল হবে ))
সিজেএস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.