Giriş ve giriş olmayan kabukları nedir?


78

Giriş olmayan .bashrckabuk ayarlarının dosyaya gireceği ve giriş kabuk ayarlarının dosyaya gireceği söylenir .profile.

Giriş ve giriş dışı mermilerden kastedilen ne?

Lütfen mümkün olduğunca teknik jargon kullanmadan açıklayınız.

Yanıtlar:


83

Basit ifadeyle:

  • Bir kabuk veya terminal açarsanız (veya birine geçerseniz), sizden bir uyarı vermeden önce oturum açmanızı (Kullanıcı Adı? Şifre?) İsterseniz, bu bir giriş kabuğudır.
  • Değilse ( gnome-terminali gibi ) ve hemen kullanmanıza izin veriyorsa, bu giriş olmayan bir kabuktur.

Normal bir Ubuntu Desktop kullanıcısıysanız, tek giriş kabuğu sizin ... masaüstünüzdür (girmek için bir şifre girin, doğru;)? Teknik olarak bir GUI başlatan bir giriş kabuğu, ancak bu jargonun içine giriyor. Ve evet, içindeki ayarları okuyacak.profile

Siz (normal bir kullanıcı) muhtemelen bir giriş kabuğu gibi görünen bir giriş kabuğu göreceğiniz tek zaman masaüstünüzle ilgili bir sorun yaşıyorsanız ve Ctrl+ Alt+ F1kısayoluyla sanal bir terminale geçiyor olmanızdır .


Bir giriş kabuğu olması için diğer genel durumlar şunlardır:

  • bilgisayarınıza uzaktan erişerek ssh(veya yerel olarak bağlanarak ssh localhost)
  • bir ilk giriş kabuğunu simüle ederek bash -l(veya sh -l)
  • rootile ilk giriş kabuğu taklitsudo -i
    • veya başka bir kullanıcı olmayansudo -u username -iroot
  • Başka olmayan olarak kimlik doğrulaması rootile kullanıcı (ve onların şifre)su - username
  • sudo loginkullanıcıyı değiştirmek için komutu kullanma

Eclipse IDE'mi terminalden başlatırsam, beklendiği gibi açılır, ancak Eclipse simgesine tıklayarak açmaya çalışırsam, Java konumunu tanıyamaz (aksi takdirde Java için PATH .profile dosyasında ayarlanmadıysa). Bu, Eclipse simgesine tıklamak bir giriş kabuğu gerektirdiği anlamına gelir, neden?
DUKE

2
@ DUKE, Hayır, bir masaüstü / GUI kullanırken sadece komut satırı-yalnızca bir konsol sistemi kullanırken ortam değişkenlerinin farklı ayarlanması gerektiği anlamına gelir . PATH'nizi vb. İçine yerleştirin ~/.pam_environment(sadece değişkenler, orada bash komutu yoktur!), Oturumu kapatın, oturum açın ve masaüstünde hem de gnome-terminalinde sihirli bir şekilde görünen her şeyi izleyin!
ish

1
Ssh ile giriş yapmak bir giriş kabuğu gerektirmez. Bu yüklemez /etc/profile, /etc/profile.dya ~/.profile.
xuhdev

Bu soruya bakınız .
xuhdev

@ xuhdev ssh ile giriş yapmak bir giriş kabuğu çağırır ve / etc / profile, /etc/profile.d ve ~ / .bash_profile dosyasını yükler.
MichaelZ

9

“Teknik jargon” olmadan doğru cevabın verilebileceğini sanmıyorum . Bu soru Google’da “giriş kabuğu nedir” sorgusu için ilk açılan soru olduğundan, aşağıda daha doğru bir cevap veriyorum:

Giriş kabuğu, sadece bir giriş kabuğu olduğu söylenen bir kabuktur. O mu değil kabuk anlatıyor sizi kaydeder genellikle uygulama bir giriş kabuğu olmaya başlattı olsa, giriş aldıktan sonra açılan kabuk anlamına gelir. Kabuğa bir giriş yapması gerektiğini söylemenin aşağıdaki yolları vardır:

  1. Çalıştığını -lveya --loginbildiğini varsayarak argümanı çalıştırıyor (bilmediğim kabukları tanımıyorum -l, ancak --loginyalnızca birkaç mermi tarafından destekleniyorum).
  2. argv[0]Ayarlanmış olan koşu -{some_string}bandı (yani, normal argv[0]veya başka bir dizginin hazırlandığı HYPHEN-MINUS ile ). Bu su ne ssh ve geçerli: su sadece ile çalıştırılabilir çalışır -suolarak argv[0](Merhaba herkes düşünmeye argv[0]anda çalışan yürütülebilir adı ile bir ilgisi vardır), ssh ile zsh çalışır -zshkullanıcı belirledi zaman /bin/zshonun kabuk olarak.

Kabuğun mantığının kesinlikle size bir şifre sorması veya başka bir yetkilendirme prosedürü gerçekleştirmesi ile hiçbir ilgisi yoktur. Ssh veya login gibi bazı programlar (veya urxvt gibi bazı terminal emülatörleri) argv[0], HYPHEN-MINUS ile başlayan, kabuklarını kullanan bir giriş programıdır . Bazı su veya sudo (veya zsh: bkz. -PRECOMMAND MODİFTERLER in bölümünde açıklanan ön komut değiştiricisine bakınız man zshmisc) bunu varsayılan olarak yapmaz, ancak söylenebilir. Bazıları, argümanını (ie bash -l) kullanarak saba bir giriş yapmayı söyleyen tek seçeneğe sahiptir : ssh komut argümanıyla (ssh'ın uzak uçta neyin çalıştırılacağını açıkça söyler).

Genellikle ilk (ekleyerek örneğin kabuk giriş biri olacak belirlemek ve ikinci uygulaması bir giriş kabuğu başlatacak olup olmadığını belirlemek için bazı testler yapmak için kabuk çağırmak için kullanılan programın belgelerine başvurun daha iyidir echoiçin .profile).


İkinci seçenekle ilgileniyorum: argh [0] ifadesini bash çağırmadan önce (veya sonra) nasıl değiştirebilirim? Komut satırından yapılabilir mi?
VeryHardCoder 23.03

@VeryHardCoder Bu, komutu çalıştırmak için kullandığınız uygulamaya bağlıdır. C kodunda doğrudan temin yoluyla yapılır argv[0]birine exec*doğal ve kaçınılmaz fonksiyonları,: Eğer her zaman tedarik hem argv[0] aslında komutunu kullanarak çalıştırılacak yolunu ve exec*hiç yok istesen de işlevleri argv[0]komut çalıştırmak farklı olmasını. Diğer diller kendi yollarını sunar. Özellikle bash kullanılmasına izin veriyor exec -a new_argv0 bash, ancak bu, elbette, şu anda çalışan kabuğu değiştirdiğiniz herhangi bir şeyle değiştirecek exec, bu nedenle (exec -a -zsh zsh)
subshell

Tamam anladım! Aslında, daha basit bir şekilde bile yapılabilir: (exec -l bash) ...
VeryHardCoder 24.06

1
İkisi arasındaki fonksiyonel fark nedir? Bu sadece bir boolean bayrağı mı?
Alexey,

@Alexey Ana fonksiyonel fark, başlangıçta kullanılan bir dizi yapılandırma dosyasıdır . $0ve belki başka bir şey de (değişken, ayar vb.) kabuğun mantığının konfigürasyon dosyasında algılanabileceği şekilde ayarlanmıştır, ancak bunu gerçekten kim saptadı ki herhangi bir fark yaratacak mı? Tüm bildiğim bu.
ZyX
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.