Shell mặc định cho thiết bị đầu cuối là gì?


51

Giả sử, tôi đã mở một thiết bị đầu cuối và nhập / thực hiện một số lệnh shell.

Nhưng tôi đã không gọi rõ ràng Bash hoặc bất kỳ shell nào khác.

Vỏ nào được sử dụng theo mặc định?

Câu trả lời:


51

Dòng được chỉ định trên dòng của bạn trong /etc/passwd(nó là một :dòng riêng biệt và vỏ là dòng cuối cùng).

Ví dụ của tôi:

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

Đây là /bin/bash(mặc định Ubuntu)

Bạn cũng có thể sử dụng chsh:

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

Điều này nói với tôi vỏ của tôi là /bin/bashvà để tôi thay đổi nó.

Cuối cùng, echo $SHELLsẽ làm tương tự:

$ echo $SHELL
/bin/bash

nếu nó là bash, tại sao đôi khi nó được gọi một cách rõ ràng như sudo bash -c "netstat -an | grep LISTEN | grep -v ^ unix" ??
DrStrangeLove

Tôi nghĩ rằng đó là một lệnh xấu cá nhân - không ai trong số đó thậm chí yêu cầu root. Nếu nó đã làm , nó sẽ được viết tốt hơn như sudo netstat -an | grep LISTEN | grep -v ^unix. Tôi thấy không có lý do gì để gửi nó trong một subshell bash.
Caesium

2
@DrStrangeLove: Nếu có nhiều lệnh trong ống cần quyền root, thì sudo bash -c "..."sẽ đảm bảo rằng toàn bộ đường ống được thực thi bởi root.
Keith Thompson

Nếu bạn không biết lệnh nào yêu cầu root (và tại sao), bạn không nên chạy chúng. Mặt khác, tại sao tin tưởng bất kỳ lệnh / chương trình / tập lệnh nào nhiều hơn mức cần thiết. Nếu bạn không thể commandA | sudo commandB | commandC, bạn có thể thực hiện sudo idlần đầu tiên (chạy idlệnh như root, nhưng cũng có được mã thông báo " sử dụng sudo mà không cần mật khẩu " kéo dài trong (mặc định) 15 phút.
waltinator

2
Nếu bạn sử dụng chshthì bạn phải đăng xuất và đăng nhập lại để xem sự thay đổi này.
Neil Traft

17

GNU Bash là shell được sử dụng theo mặc định trong các thiết bị đầu cuối trên Ubuntu. Tuy nhiên, khi tập lệnh được thực thi khi khởi động hệ thống thì dash được sử dụng, vì đó là dash là / bin / sh.

Điều này được định nghĩa trong biến môi trường $ SHELL. Bạn có thể kiểm tra bằng cách gõ echo $SHELLvào thiết bị đầu cuối.


14

gõ như sau sẽ hiển thị shell mà thiết bị đầu cuối đã mở bằng:

echo $SHELL

Tuy nhiên, để tìm hiểu loại vỏ nào bạn hiện đang sử dụng (bạn có thể đã thay đổi nó)

ps -p $$

ví dụ: bạn sẽ thấy shell được bash trong ví dụ đầu ra

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

Một phương pháp khác là sử dụng

echo $0

điều này chỉ đơn giản sẽ trả về tên của shell hiện tại.


+1 cho đơn giảnecho $0
djthoms

Câu trả lời chính xác! Cảm ơn, vì một số lý do, echo $ SHELL không hoạt động (luôn luôn sử dụng cái đó) và hai lựa chọn thay thế của bạn đã hoạt động. Cảm ơn!
sói

3

Theo mặc định, đó là bash:

env | grep ^SHELL=

Trong hầu hết các trường hợp sẽ sản xuất

SHELL=/bin/bash

Không cần thiết. Nếu bạn tạo một người dùng mới useradd, nó sẽ mặc định sh. $ useradd -D|grep SHELL SHELL=/bin/sh.
Sparhawk

+1, bởi vì mặc dù câu trả lời được chọn yêu cầu nhập ít hơn, nhưng thật tuyệt khi có nhiều hơn một cách để làm điều gì đó.

2

Để có được đường dẫn tệp của shell hiện tại, người ta có thể sử dụng

readlink -f /proc/$$/exe

Một số đầu ra có thể là:

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