Sudo su kabuğunu değiştirme


13

sudo suNormalden zsh( oh-my-zsh çerçevesini kullanan) ne zaman çalıştırsam , shvarsayılan olarak eski Bourne kabuğunu ( ) kullanmak zorunda kalıyorum (açıkçası; bu çoğu * nix benzeri sistemlerde standart davranıştır). Koşarsam zshiçinden shçalıştırdıktan sonra sudo su, ben Z kabuğuna olsun ama oh-my-zsh gelen gelişmeler olmadan.

Kabuk sudo sulansmanlarını değiştirmenin herhangi bir yolu var mı zsh? Eğer öyleyse, bu zshlansman örneğini de kullanmak mümkün müdür oh-my-zsh?

OS X 10.8.4 kullanıyorum.

Yanıtlar:


21

Süper kullanıcı olarak etkileşimli bir kabuk çalıştırmanın başka bir yolu da kabuk olarak sudo -skullanılır $SHELL.

Bahsedilen diğer cevaptaki yorumların su -s /path/to/zshOS X'te çalışmadığı gibi.

OS X, giriş kabuklarının değiştirilmesini de desteklemez /etc/passwd, ancak şunları kullanabilirsiniz dscl:

$ dscl . -read /Users/root UserShell
/bin/sh
$ sudo dscl . -change /Users/root UserShell /bin/sh /bin/zsh
$ dscl . -read /Users/root UserShell
/bin/zsh
$ sudo su
My-iMac# echo $0
zsh
My-iMac# exit
$ sudo dscl . -change /Users/root UserShell /bin/zsh /bin/sh
$ 

/bin/shartık çoğu platformda Bourne kabuğu değil. Bu bir olan POSIX uyumlu Bash sürümü Ubuntu OS X ve çizgi.


Sorunun istediğini düşünürdüm. Benim için kesinlikle işe yaradı; çok teşekkür ederim! edit i şimdi ne istediğini görüyorum - bu onun istediğini sanmıyorum, bu yüzden bu soru için oldukça oy kullanamıyorum, ama yine de bir madalyayı hak ettiğini düşünüyorum. Sen cevabını vardı benim soru!
Wyatt8740

4

Gönderen suman, bunu başarmak için iki yol vardır.


İlk yöntem, -sveya --shellişaretini ( subu bağımsız değişkeni destekleyen bir sürümü olan * NIX tabanlı bir işletim sistemi kullandığınızı varsayarak ) ve ardından seçtiğiniz kabuğa giden yolu kullanmaktır. Geçirilen kabuk bulunamazsa, suaşağıdaki yönteme geri döner ve bu başarısız olursa çağırmaya çalışır /bin/sh.

Örneğin, şu suşekilde başlatmaya zorlayabilirsiniz zsh(içinde bulunduğunu varsayarak /bin/zsh):

sudo su --shell /bin/zsh

İkinci yöntem, rootkullanıcı için belirtilen varsayılan kabuğu değiştirmektir ( dikkatli olun! ). Bu, dosyayı düzenleyerek /etc/passwdve rootkullanıcı için belirtilen kabuğu değiştirerek yapılabilir . Varsayılan olarak hangi kabuğun belirtildiğini görmek için aşağıdaki komutu çalıştırabilirsiniz (süper kullanıcının kök olduğunu varsayarak):

sudo grep root /etc/passwd 

Komut benzer bir çıktı vermelidir root:x:0:0:root:/root:/bin/bash. Bunun yerine /bin/bash(veya sisteminizde ayarlanan her şeyi) işaret edecek şekilde değiştirebilirsiniz zsh.


3
Her zaman olduğu gibi, kök kabuğunu değiştirirken dikkatli olun. Tek kullanıcı modunda olmak istemezsiniz ve bozulduğunda / usr'a ihtiyaç duyan bir kök kabuğuna sahip olursunuz. Yeni kabuğunuzda, değiştirdiğiniz
dosyadan

Çalıştırmak sudo su -s /bin/zsh(veya kullanmak --shell) döndürür su: illegal option -- s. OS X 10.8.4 kullanıyorum; OS X farklı bir komut alıyor mu?
Jules

@JulesMazur çıktı cat /etc/shellsnedir? Teknik olarak sadece bu dosyada izin verilen mermiler başlatılacak, ancak sumanpage bunun sukök tarafından çağrılıp çağrılmadığı önemli olmadığını söylüyor : S
Atılım

cat /etc/shells/bin/zshkabul edilebilir bir kabuk olarak döner .
Jules

2
@JulesMazur lütfen bu tür karışıklıkları önlemek için işletim sisteminizi her zaman dahil etmeyi unutmayın.
terdon

1

Özel kabuğunuzun patlaması durumunda da sisteminizi koruyacak daha temiz bir yol, root'un ana dizininde w / .profile oluşturmaktır:

if [ -x /opt/local/bin/bash ]; then
    SHELL=/opt/local/bin/bash
    export SHELL
    exec /opt/local/bin/bash
else
    echo /opt/local/bin/bash not found using default shell of $SHELL
fi

Sadece bash yerine istediğiniz kabuğun yolunu değiştirin.


0

Aşağıdakilerle kolayca yapılabilir chpass:

$ sudo chpass -s /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.