Etkileşimli olmayan giriş kabukları var mı?


14

Etkileşimli / etkileşimli olmayan ve giriş / giriş yapma olmayan kabuklar arasındaki farkın ne olduğunu biliyorum, ancak uygulamada bir komut dosyasında olduğu gibi bir şey olmadığı sürece etkileşimli olmayan bir giriş kabuğu olmayacak gibi /bin/bash --login some-script.shgörünüyor (ve hatta öyle görünüyor) biraz tuhaf). Bu doğru mu yoksa daha yaygın mı?


7
telnet towel.blinkenlights.nletkileşimli olmayan bir giriş kabuğu için ;-)
Martin Tournoij

1
Bu soru, bu daha uzun cevap içinde kısaca cevaplanmaktadır .
Joker

@CaptainMan: Cevaplara baktığımızda, "etkileşimli" nin oldukça farklı anlamlarına odaklanan iki tane var. Bunun ışığında, soruyu sorduğunuzda hangi anlamı kullandığınızı açıklamak için cevabınızı biraz genişletebilirsiniz?
cjs

Yanıtlar:


10

Bash'in giriş sayfası ile giriş yapmayan ve etkileşimli ve etkileşimli olmayan Bash mermileri hakkında, man sayfanın Çağırma bölümünde açıklandığı gibi bahsettiğinizi varsayıyorum . (Bu, James Youngman'ınpasswd(5) dosyada "kabuk" (veya kullanıcı komutu yorumlayıcısı) olarak kullanılan herhangi bir keyfi komutun cevabındaki yorumdan ve bu programın kullanıcı girişini kabul edip etmediğinden farklıdır ; /usr/sbin/nologinAçıkçası , kabul etmeyin. )

O doğru /bin/bash --login some-script.sholmayan bir etkileşimli giriş Bash çağırmayı üretecek ve bu belki de patolojik bir örnektir. Olmayan bir etkileşimli giriş kabuğu üretir gerçekten garip belki nadir fakat bir vakada vardır: ssh somehost < some-file. Burada sshdBash'i argv[0]set ile başlatacak -bashçünkü çalıştırması için bir komut verilmemiş, Bash'in kendisini bir giriş kabuğu olarak görmesine neden oluyor, ancak stdin bir terminale bağlı olmadığı için Bash kendisini interaktif moda ayarlamayacak ( $-içermeyecek i) .

(Şahsen, bu durum , yukarıdaki gibi ssh somehost somecommandyeni bir giriş olmasına rağmen "giriş kabuğu" olarak kabul edilmeyen sohbetten çok daha makul görünüyor somehost.)

Son zamanlarda uzun zaman önce yapmam gereken şeyi yaptım ve Bash modlarının bir tablosunu ve hangi init dosyalarının çalıştırıldığını bir araya getirdim . Eğer kafa karıştırıcı buluyorsanız, en azından ben de bunu yapın. Bu, asıl amaçlarının ne zaman .bashrcyürütüldüğüne ilişkin kurallarla ne olduğunu gizemli bir hale getiriyor .


1

Yeni kurulan bir sisteme göre çoğu giriş kabuğu etkileşimli değildir, aslında:

$ 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

Açıkça /bin/bashve /bin/shgeleneksel kabuklardır ve etkileşimlidirler. Ancak bu listedeki diğer tüm öğeler etkileşimli değildir. Listeyi okuyorsanız ve bunlardan birinin ne yaptığını bilmiyorsanız, sadece manuel sayfasına bakabilirsiniz (örneğin man nologinveya ile man sync).

Komut aslında ne yapar

Kaptan Adam'ın gönderi geçmişine baktığımda, Unix ile oldukça deneyimsiz olduklarını görüyorum. Yani belki de yorumdaki soru, cevabın üst kısmındaki komut satırıyla ilgili değil, sadece çıktı ile ilgili değildir. Bu soru için konu dışı olmasına rağmen komut satırını da açıklayacağım.

Komut bir Unix ardışık düzenidir . Bir boru hattı, bir komut zinciridir - soldan sağa okursunuz - burada ilk komutun çıktısı ikincinin girişi olur, ikincisinin çıktısı üçüncü olanın girişi olur ve bu şekilde devam eder. boru hattının sonu. Son işlemin çıkışı terminalde gösterilir (yönlendirilmedikçe). Daha fazla bilgi için kabuk boru hatlarındaki Wikipedia girişine bakın .

Bir boru hattının ne yaptığını anlamıyorsanız, neler olduğunu görmek için basitçe bölümler halinde çalıştırabilirsiniz. Kullanılan komutların (burada awk, sortve uniq) el kitabını da okuyabilirsiniz . Aslında bunu şimdi yapmalısınız. Bekleyeceğim.

Boru hattının aşamalarını aşamalı olarak çalıştıralım (bunu kendi Unix sisteminizde güvenle yapabilirsiniz):

~$ 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 ... ]

Yukarıdaki çıktı /etc/passwddosyadan yedinci alanın içeriğidir . Bu, sisteme herkesin giriş kabuğunun ne olduğunu söyleyen (düz metin dosyası) veritabanıdır. Hakkında daha fazla bilgi edinmek için /etc/passwdsadece okuyun (dünya tarafından okunabilir) ve bunun için manuel sayfaya bakın (man 5 passwd).

Bu nedenle, tüm listeyi okurken popüler öğelerin ne olduğu hakkında bir fikir edinebilirsiniz, ancak bu soruya cevap vermek için iyi bir format değildir, çünkü soru gerçekten etkileşimli olmayan kabukların ne kadar olduğuyla ilgiliydi. Onları sayalım. Bunu yapmanın en basit yolu, önce öğeleri sıralamaktır:

~$ 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 ... ]

Programı uniqbize sadece benzersiz öğeleri göstermek için kullanabiliriz :

~ $ awk -F: '{print $ 7}' </ etc / passwd | sıralama | uniq | sed -e 's / ^ / /' / bin / bash / bin / false / bin / sh / bin / sync / usr / sbin / nologin

Ama bekle, faydası yok, her birinden kaç tane vardı? Soralım uniq(adam sayfasını okuyun!):

~$ 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

Elbette cevabın tepesinde gördüğümüz çıktı bu. Girdileri sırayla görmek için tekrar sıralayalım:

~$ 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

Bekleyin, bu doğru olamaz, 17 23'ten 1 ve 5'ten önce gelir. Sorun şu ki, sözcükler sözlüksel olarak sıralanıyor . sortOnları sayısal olarak ve ters sırada sıralamayı isteyelim :

~$ 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

Bence bu orijinal cevaptaki her şeyi açıklıyor. Bu komutların ne yaptığının ayrıntılarından hala emin değilseniz, manuel sayfaları okuyabilirsiniz. Neler olup bittiğini hala bilmiyorsanız, Unix ve Linux'u açıklayan bir kitap (çevrimiçi veya kağıt üzerinde) okuyarak başlamak daha iyi olabilir.


Biraz daha açıklayabilir misiniz lütfen? Okuduğumu takip ettiğimden emin değilim.
Kaptan Adam

olan /bin/syncbir kabuk? herhangi bir yarar bir kabuk olduğunu?
eloone

@eloone "kabuk" için iki (belki üç) anlam vardır. Birincisi, şifre veritabanında oturum açma kabuğu olarak yapılandırılmış programlardır. Bu, "etkileşimli olmayan giriş kabuğu" ifadesinin amaçladığı kelimenin anlamıdır. Diğer bir anlam da "Unix sisteminde günlük etkileşimli çalışmalar için uygun bir REPL" dir. Bunlar etkileşimlidir. Bununla birlikte, REPL bağlamında kullanılabilen programların çoğu, bir tür komut dosyası dili için tercüman olarak etkileşimli olmayan kullanımı da desteklemektedir ("kabuk komut dosyası" neredeyse evrensel olarak "Bourne-aile-kabuk komut dosyası" anlamına gelir).
James Youngman

2
Farklı bir soruya cevap veriyorsunuz. Sadece mevcut mermileri listeliyorsunuz ve bazılarının asla etkileşimli olmayacağına işaret ediyorsunuz. OP'nin etkileşimli olmayan bir giriş kabuğunun vahşi doğada karşılaşıp karşılaşmadığını sorduğuna inanıyorum. Etkileşimli olabilen mermiler olsun , örneğin bash, hiç etkileşimli olmayan giriş mermileri başlattı . Başka bir deyişle, burada bir "giriş kabuğu", "Bir kullanıcının varsayılan giriş kabuğu" anlamına gelmez, bu başlatıldı bir kabuk anlamına bir giriş kabuğu olarak . Bkz. Unix.stackexchange.com/a/46856/22222
terdon

1
Ya da belki, posterin bash --loginsoruya açıkça yazdığı göz önüne alındığında, özellikle seçenek kümesi basholmayan süreçleri soruyor i. (Bunlar , Bash kılavuzunun İNOVOCATION bölümünde ssh somehost < script.shbelirtilen duyularda "giriş, etkileşimli olmayan" bir kabuk olacaktır .)
cjs
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.