Mengapa saya tidak dapat mengganti shell dengan perintah chsh?

12

Saya belajar perintah baru, setidaknya saya pikir, karena perintah ini:, chshtidak berperilaku seperti yang dijelaskan.

Itu digambarkan bekerja seperti ini:

  1. cat /etc/shells untuk mengetahui, shell mana yang dipasang, sehingga Anda dapat memilih di antara mereka.
  2. lakukan echo $SHELLuntuk mengetahui, shell mana yang Anda gunakan.
  3. pilih salah satu dari kerang dan ketik chsh -s /path/to/shell
  4. masukkan kata sandi dan verifikasi dengan echo $SHELL, bahwa Anda berada di shell baru.

Saya telah melakukan ini dan saya tidak mendapatkan pesan kesalahan saat memasukkan kata sandi, tetapi saya masih berada di shell yang sama.

% echo $SHELL
/bin/bash
% cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
% chsh -s /bin/sh
Password: 
% echo $SHELL
/bin/bash
sharkant
sumber
5
Anda harus keluar dan masuk lagi terlebih dahulu.
Rui F Ribeiro
7
Tolong jangan memposting gambar teks terminal. Itu dapat disalin dan ditempelkan ke badan pertanyaan Anda, dan benar-benar tidak perlu mengirim gambar, kecuali jika Anda menunjukkan kesalahan grafis atau sesuatu yang serupa.
Sergiy Kolodyazhnyy
Saya mengedit posting saya, menghapus gambar dan menempelkan teks sebagai gantinya, tetapi gambar kembali pada malam hari.
sharkant
@sharkant Sepertinya ada orang yang mengedit dalam antrian ulasan dan disetujui, yang mengedit posting Anda setelah faktanya. Saya pikir sistem edit SE tidak akan menimpa suntingan baru dengan yang lama, tapi heh, siapa yang tahu?
Zan Lynx

Jawaban:

19

Logout dan log in lagi.

The chshperintah akan memperbarui /etc/passwdfile, namun itu tidak mengubah arus shell maupun nilai dari $SHELLvariabel dalam shell saat ini (tidak memiliki cara untuk melakukan itu). Inilah alasan Anda perlu masuk lagi; Anda harus memulai sesi login baru agar perubahan berlaku.

Kusalananda
sumber
Saya tidak mengerti apa itu shell login dan bagaimana saya tahu jika saya di shell login atau sejenis shell tidak login. Bagaimana cara memulai sesi login baru?
sharkant
1
@sharkant Intinya adalah bahwa informasi yang Anda ubah di /etc/passwdtidak dibaca sampai Anda masuk lain kali. Anda harus keluar sepenuhnya, dan masuk lagi agar perubahan diterapkan. Jika Anda gagal melakukan ini, maka me-reboot mesin juga akan berfungsi.
Kusalananda
1
Saya pikir saya mengerti Anda saat ini: jadi perintah chsh -s / path / to / shell tidak langsung mengubah shell saya, tetapi ia mengubah entri di dalam / etc / passwd yang akan berpengaruh ketika saya memulai shell?
sharkant
@sharkant Itulah cara kerjanya! Saya senang saya akhirnya mengerti Anda kesalahpahaman. Saya akan memperbarui jawabannya.
Kusalananda
1

Menggunakan perintah utilitas usermod bekerja dalam kasus saya. Berjalan di ubuntu 18.04.

  1. Pertama, periksa nilai saat ini

grep nameofuser /etc/passwd

  1. ubahlah

sudo usermod --shell /bin/bash nameofuser

  1. Verifikasi itu

grep nameofuser /etc/passwd

sandip
sumber