Tại sao tôi không thể thay đổi shell bằng lệnh chsh?


12

Tôi đã học được một lệnh mới, ít nhất là tôi nghĩ, bởi vì lệnh này : chsh, không hoạt động như mô tả.

Nó được mô tả để làm việc như thế này:

  1. cat /etc/shells để biết, shell nào được cài đặt, vì vậy bạn có thể chọn trong số chúng.
  2. làm gì echo $SHELLđể biết, bạn đang sử dụng shell nào.
  3. chọn một trong các vỏ và loại chsh -s /path/to/shell
  4. nhập mật khẩu và xác minh với echo $SHELL, rằng bạn đang ở trong một vỏ mới.

Tôi đã làm điều này và tôi không nhận được thông báo lỗi khi nhập mật khẩu, nhưng tôi vẫn ở trong cùng một vỏ.

% 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

5
Bạn phải đăng xuất và đăng nhập lại trước.
Rui F Ribeiro

7
Xin vui lòng không đăng hình ảnh của văn bản thiết bị đầu cuối. Nó có thể được sao chép và dán vào phần thân câu hỏi của bạn và thực sự không cần phải đăng ảnh, trừ khi bạn đang hiển thị một trục trặc đồ họa hoặc một cái gì đó tương tự.
Sergiy Kolodyazhnyy


Tôi đã chỉnh sửa bài đăng của mình, xóa hình ảnh và dán văn bản thay vào đó, nhưng hình ảnh đã trở lại qua đêm.
cá mập

@sharkant Có vẻ như ai đó đã chỉnh sửa trong hàng đánh giá và nó đã được phê duyệt, điều này đã chỉnh sửa bài đăng của bạn sau khi thực tế. Tôi nghĩ hệ thống chỉnh sửa SE sẽ ghi đè lên một bản chỉnh sửa mới với một bản chỉnh sửa cũ, nhưng heh, ai biết?
Zan Lynx

Câu trả lời:


19

Đăng xuất và đăng nhập lại.

Các chshlệnh sẽ cập nhật các /etc/passwdtập tin, nhưng nó không làm thay đổi hiện tại vỏ lẫn giá trị của các $SHELLbiến trong vỏ hiện tại (nó không có cách nào làm điều đó). Đây là lý do bạn cần đăng nhập lại; bạn phải bắt đầu một phiên đăng nhập mới để thay đổi có hiệu lực.


Tôi không hiểu shell đăng nhập là gì và làm thế nào để tôi biết nếu tôi đang ở trong vỏ đăng nhập hoặc một loại vỏ không đăng nhập. Làm thế nào để tôi bắt đầu một phiên đăng nhập mới?
cá mập

1
@sharkant Điểm chính là thông tin mà bạn đã thay đổi /etc/passwdkhông được đọc cho đến khi bạn đăng nhập vào lần tiếp theo. Bạn sẽ phải đăng xuất hoàn toàn và đăng nhập lại để thay đổi có hiệu lực. Nếu bạn thất bại trong việc này, thì khởi động lại máy cũng sẽ hoạt động.
Kusalananda

1
Tôi nghĩ rằng tôi hiểu bạn lần này: vì vậy lệnh chsh -s / path / to / shell không thay đổi ngay lập tức shell tôi đang ở, nhưng nó thay đổi một mục bên trong / etc / passwd sẽ có hiệu lực khi tôi khởi động shell?
cá mập

@sharkant Đó chính xác là cách nó hoạt động! Tôi hạnh phúc cuối cùng tôi đã hiểu bạn quan niệm sai lầm. Tôi sẽ cập nhật câu trả lời.
Kusalananda

1

Sử dụng lệnh usermod tiện ích làm việc trong trường hợp của tôi. Chạy trên Ubuntu 18.04.

  1. Đầu tiên, kiểm tra giá trị hiện tại

grep nameofuser /etc/passwd

  1. thay đổi nó

sudo usermod --shell /bin/bash nameofuser

  1. Xác minh điều đó

grep nameofuser /etc/passwd

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.