Thay đổi vỏ sudo su


11

Bất cứ khi nào tôi chạy sudo sutừ bình thường zsh(sử dụng khung oh-my-zsh ), tôi buộc phải sử dụng shell Bourne cũ ( sh) theo mặc định (rõ ràng, đây là hành vi tiêu chuẩn trên hầu hết các hệ thống giống như * nix). Nếu tôi chạy zshtừ bên trong shsau khi chạy sudo su, tôi nhận được vỏ Z, nhưng không có sự cải tiến từ oh-my-zsh.

Có cách nào để thay đổi vỏ sudo sura mắt zsh? Nếu vậy, có thể zshsử dụng ví dụ khởi chạy đó oh-my-zshkhông?

Tôi đang sử dụng OS X 10.8.4.

Câu trả lời:


19

Một cách khác để thực thi shell tương tác là superuser sudo -s, sử dụng $SHELLlàm shell.

Như các bình luận trong câu trả lời khác đã đề cập, su -s /path/to/zshkhông hoạt động trong OS X.

OS X không hỗ trợ thay đổi shell đăng nhập /etc/passwd, nhưng bạn có thể sử dụng 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/shkhông phải là vỏ Bourne nữa trên hầu hết các nền tảng. Đây là phiên bản bash tương thích POSIX trong OS X và dash trong Ubuntu.


Đây là những gì tôi sẽ nghĩ câu hỏi muốn. Đó chắc chắn là những gì làm việc cho tôi; cảm ơn bạn rất nhiều! chỉnh sửa tôi thấy những gì anh ấy muốn bây giờ - Tôi không nghĩ đây là những gì anh ấy muốn, vì vậy tôi không thể đánh giá cao nó cho câu hỏi này, nhưng tôi nghĩ dù sao bạn cũng xứng đáng nhận huy chương. Bạn đã có câu trả lời cho câu hỏi của tôi !
Wyatt8740

4

Từ sutrang chủ, có hai cách bạn có thể thực hiện điều này.


Phương pháp đầu tiên chỉ đơn giản là sử dụng cờ -shoặc --shell(giả sử bạn đang sử dụng HĐH dựa trên * NIX với phiên bản suhỗ trợ đối số này), theo sau là đường dẫn đến trình bao bạn chọn. Nếu shell thông qua không thể được tìm thấy, sutrở lại phương thức sau và không thành công, sẽ cố gắng gọi /bin/sh.

Ví dụ: bạn có thể buộc sukhởi chạy zsh(giả sử nó tồn tại /bin/zsh) như:

sudo su --shell /bin/zsh

Phương pháp thứ hai là sửa đổi shell mặc định được chỉ định cho rootngười dùng ( hãy cẩn thận! ). Điều này có thể được thực hiện bằng cách chỉnh sửa tệp /etc/passwdvà thay đổi vỏ được chỉ định cho rootngười dùng. Để xem shell nào được chỉ định theo mặc định, bạn có thể chạy lệnh sau (giả sử siêu người dùng là root):

sudo grep root /etc/passwd 

Lệnh sẽ xuất ra một cái gì đó như root:x:0:0:root:/root:/bin/bash. Bạn chỉ có thể thay đổi /bin/bash(hoặc bất cứ điều gì được đặt trong hệ thống của bạn) để trỏ đến zshthay thế.


3
Như mọi khi, hãy cẩn thận về việc thay đổi vỏ của root. Bạn không muốn ở chế độ một người dùng và có một vỏ gốc cần / usr khi nó bị hỏng. Khi cho thuê, đảm bảo vỏ mới của bạn không có nhiều phụ thuộc hệ thống tệp hơn so với vỏ bạn đang thay thế
Rich Homolka

Chạy sudo su -s /bin/zsh(hoặc sử dụng --shell) trả về su: illegal option -- s. Tôi đang dùng OS X 10.8.4; OS X có nhận lệnh khác không?
Jules

@JulesMazur đầu ra của cat /etc/shellscái gì? Về mặt kỹ thuật, chỉ các shell được cho phép trong tệp đó sẽ được khởi chạy, mặc dù sutrang này nói rằng điều này không quan trọng nếu suđược gọi bằng root: S
Đột phá

cat /etc/shellstrả về /bin/zshnhư một vỏ chấp nhận được.
Jules

2
@JulesMazur hãy nhớ luôn luôn bao gồm hệ điều hành của bạn để tránh loại nhầm lẫn này.
terdon

1

Một cách sạch hơn cũng sẽ bảo vệ hệ thống của bạn trong trường hợp vỏ tùy chỉnh của bạn bị nổ tung là tạo một .profile trong thư mục chính của root w /:

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

Chỉ cần thay đổi đường dẫn đến shell bạn muốn thay vì bash.


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.