Terminal için varsayılan kabuk nedir?


51

Diyelim ki bir terminal açtım ve bazı kabuk komutları girdim / yürüttüm.

Ama açıkça Bash'i veya başka bir kabuğu çağırmadım.

Hangi kabuk varsayılan olarak kullanıldı?

Yanıtlar:


51

Satırınızda belirtilen satır /etc/passwd( :ayrılmış satır ve kabuk son satırdır).

Mesela benimki:

chris:x:1000:1000:Chris,,,:/home/chris:/bin/bash

İşte /bin/bash(Ubuntu varsayılanı)

Ayrıca şunları da kullanabilirsiniz chsh:

$ chsh
Password: 
Changing the login shell for chris
Enter the new value, or press ENTER for the default
        Login Shell [/bin/bash]:

Bu bana benim kabuğum olduğunu /bin/bashve değiştirmeme izin verdiğini söylüyor.

Sonunda, echo $SHELLaynısını yapacağız:

$ echo $SHELL
/bin/bash

eğer bash ise, neden bazen açıkça sudo bash -c "netstat -an | grep LISTEN | grep -v ^ unix" ?? gibi çağrılır?
DrStrangeLove

Bence kişisel olarak kötü bir komut - bunların hiçbiri kök gerektirmiyor. O Eğer yaptığımız , daha iyi olarak yazılabilir olur sudo netstat -an | grep LISTEN | grep -v ^unix. Bunu bir bash subshell içine yerleştirmek için bir sebep görmüyorum.
Sezyum

2
@DrStrangeLove: Boruda birden fazla komut kök izinlerine ihtiyaç duyuyorsa sudo bash -c "...", tüm borunun kök tarafından çalıştırılmasını sağlar.
Keith Thompson,

Hangi komutların root gerektirdiğini bilmiyorsanız (ve neden), bunları çalıştırmamalısınız. Aksi halde, neden herhangi bir komut / program / komut dosyasına gerekenden daha fazla güvenin. Bunu yapamazsanız commandA | sudo commandB | commandC, sudo idilkini yapabilirsiniz ( idkomutu çalıştırır root, ancak aynı zamanda 15 dakika süren (varsayılan) 15 dakika süren bir " parola olmadan sudo kullan " belirteci de alır.
waltinator

2
Eğer kullanırsanız chsho zaman sen çıkış yapıp tekrar giriş gerekir bu değişikliği görmek için.
Neil Traft

17

GNU Bash, Ubuntu'daki terminallerde varsayılan olarak kullanılan kabuktur. Ancak betikler sistem önyüklemesinde yürütüldüğünde, tire / bin / sh olan çizgi kullanılır.

Bu $ SHELL çevre değişkeninde tanımlanmıştır. echo $SHELLTerminalde yazarak kontrol edebilirsiniz .


14

aşağıdakini yazmak, terminalin hangi kabuğu açtığını gösterecektir:

echo $SHELL

Ancak, şu anda hangi kabukta olduğunuzu öğrenmek için (onu değiştirmiş olabilirsiniz)

ps -p $$

Örneğin, kabuğun örnek çıktıda bash olduğunu göreceksiniz

  PID TTY          TIME CMD
 3500 pts/0    00:00:01 bash

Başka bir yöntem kullanmaktır

echo $0

bu sadece geçerli kabuğun adını döndürür.


Sadelik için +1echo $0
djthoms

Mükemmel cevap! Teşekkürler, nedense echo $ SHELL işe yaramadı (her zaman birini kullandı) ve iki alternatifiniz işe yaradı. Teşekkürler!
wolfdawn

3

Varsayılan olarak bu bash:

env | grep ^SHELL=

Çoğu durumda üretecek

SHELL=/bin/bash

Şart değil. İle yeni bir kullanıcı oluşturursanız useradd, varsayılan olarak sh. $ useradd -D|grep SHELL SHELL=/bin/sh.
Sparhawk

+1, çünkü seçilen cevap daha az yazmaya ihtiyaç duysa da, bir şeyi yapmanın birden fazla yolu olması her zaman güzeldir.

2

Yürürlükteki kabuk çalıştırılabilir dosya yolunu kullanmak için

readlink -f /proc/$$/exe

Bazı olası çıktılar:

  • /bin/bash
  • /usr/bin/bash
  • /usr/bin/zsh
  • /home/stan/.linuxbrew/Cellar/zsh/5.2/bin/zsh
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.