Lệnh 'sudo -s' làm gì và được sử dụng như thế nào trong ví dụ này?


8

Tôi có nghi ngờ sau đây. Trong một hướng dẫn liên quan đến cài đặt phần mềm mà tôi đang theo dõi nói rằng tôi phải thực thi các lệnh sau (Tôi đang thực hiện nó trong một vỏ ssh , vì vậy danh sách các bước này kết thúc bằng exitlệnh):

sudo -s
apt-get update
apt-get install -y build-essential libtool libcurl4-openssl-dev libncurses5-dev libudev-dev autoconf automake screen
exit

Nghi ngờ của tôi là:

Chính xác thì -stham số làm gì sau sudolệnh?

Tìm kiếm trên web tôi thấy rằng:

‑S [lệnh] Tùy chọn ‑s (shell) chạy shell được chỉ định bởi biến môi trường SHELL nếu nó được đặt hoặc shell như được chỉ định trong cơ sở dữ liệu mật khẩu. Nếu một lệnh được chỉ định, nó sẽ được chuyển đến shell để thực thi thông qua tùy chọn ‑c của shell. Nếu không có lệnh nào được chỉ định, shell tương tác được thực thi

Dường như với tôi rằng sudo -slệnh thực thi sử dụng biến môi trường của shell.

Nhưng điều này không rõ ràng đối với tôi: trong trường hợp này lệnh được thực thi với biến môi trường là gì? (nó chỉ thực thi sudo -svà không sudo -s [command]).

Câu trả lời:


7

Câu trả lời đơn giản là nó cung cấp cho bạn một vỏ gốc. Đó là những gì nó đang được sử dụng cho ở đây. Có một tốt so sánh kỹ thuật giữa su, sudo -i, sudo -ssudo sucác phương pháp trên Unix.SE nhưng đó là thực sự không liên quan ở đây. Các mã có thể đã sử dụng bất kỳ và sẽ làm việc.

Các nugget giúp đỡ có nghĩa là một vài điều:

  • Đó là tìm kiếm một lệnh trong $SHELLbiến môi trường. Nếu bạn chạy echo $SHELLcó thể bạn sẽ thấy /bin/bash. Điều đó có nghĩa là bạn sẽ có được một ví dụ gốc của Bash. Tôi chắc chắn nếu bạn ở trong zshđó có nghĩa là bạn có được một bản gốc của zsh.

  • Nếu $SHELLtrống, nó rơi trở lại vỏ mặc định được xác định /etc/passwdcho người dùng đó.

  • Nếu bạn cung cấp một lệnh (ví dụ sudo -s whoami), nó thực sự đang chạy:sudo /bin/bash -c "whoami"

  • Nếu bạn không truyền lệnh, nó sẽ không chuyển -cđối số để bạn chỉ cần có vỏ tương tác.

Tôi đã sử dụng cụm từ "root" nhiều lần. Theo mặc định sudo là tất cả về việc chạy mọi thứ như root nhưng sudo(và su) có thể chạy mọi thứ như những người dùng khác (nếu bạn có quyền làm như vậy). Tôi chỉ nói điều này cho các giáo viên, những người sẽ khóc thét rằng sudo -s -u $USERhọ không cho họ một cái vỏ gốc như tôi đã hứa -sở trên.


Và theo ý kiến khiêm tốn nhất của tôi , thật ngu ngốc khi trở thành root chỉ bằng hai lệnh, chưa kể rằng nó có thể khiến người dùng vô tình chạy các lệnh tiếp theo dưới dạng root. Nếu bạn muốn hoặc cần chạy một cái gì đó với quyền root, chỉ cần mở lệnh bằng sudo:

sudo apt-get update
sudo apt-get install -y build-essential libtool libcurl4-openssl-dev libncurses5-dev libudev-dev autoconf automake screen

Tôi không chắc chắn về bất kỳ hướng dẫn nào đề xuất lấy shell gốc, ngoại trừ trong trường hợp bạn có các khối lệnh để chạy ... Và thậm chí sau đó, còn có kịch bản.


Giải thích hoàn hảo. Bây giờ tất cả đã rõ ràng hơn. Một nghi ngờ cuối cùng. Nếu tôi đăng ký lại sudo cho tất cả các lệnh trước tôi sẽ nhận được kết quả cuối cùng giống nhau? Là sự thật hay tôi đang thiếu một cái gì đó?
AndreaNobili

@Oli bạn đúng 100% về Zsh, "sudo -s" đăng nhập vào trình bao "root" dưới dạng "root" chứ không phải Super User.
RCF

@AndreaNobili Vâng, đó là những gì sudothường được dùng cho; chạy một lệnh với quyền root mà không cần phải đăng nhập thủ công bằng root.
Oli

FYI Tôi đã đăng một câu trả lời dưới đây của bạn và tôi nhận sudo -sđược rất khác nhau vì kiến ​​thức hạn chế của tôi và tình cờ xảy ra trong tình huống. Tuy nhiên, bạn có thể muốn đọc câu trả lời "khiêm tốn" của tôi và có thể làm mới câu trả lời 1/2 thập kỷ của bạn.
WinEunuuchs2Unix 4/12/19

0

sudo -ssẽ chạy một lệnh trong thư mục hiện tại giống như một người dùng thông thường. Ví dụ:

rick@alien:~/askubuntu$ suspendtime
Nov 12 14:06:27 to Nov 12 17:22:21 lasting 11,754 seconds
Nov 12 22:23:37 to Nov 13 04:24:37 lasting 21,660 seconds
(... SNIP ...)
Dec 02 21:58:49 to Dec 03 04:20:52 lasting 22,923 seconds
Dec 03 05:52:43 to Dec 03 16:37:44 lasting 38,701 seconds

Linux uptime 1,859,356 seconds (21 days, 12 hours, 29 minutes, 16 seconds)
45 Suspends 1,173,341 seconds (13 days, 13 hours, 55 minutes, 41 seconds)
Real uptime 686,015 seconds (7 days, 22 hours, 33 minutes, 35 seconds)

rick@alien:~/askubuntu$ sudo suspendtime
sudo: suspendtime: command not found

rick@alien:~/askubuntu$ sudo -H suspendtime
sudo: suspendtime: command not found

rick@alien:~/askubuntu$ sudo -s suspendtime
Nov 12 14:06:27 to Nov 12 17:22:21 lasting 11,754 seconds
(...SNIP...)
Dec 03 05:52:43 to Dec 03 16:37:44 lasting 38,701 seconds

Linux uptime 1,859,431 seconds (21 days, 12 hours, 30 minutes, 31 seconds)
45 Suspends 1,173,341 seconds (13 days, 13 hours, 55 minutes, 41 seconds)
Real uptime 686,090 seconds (7 days, 22 hours, 34 minutes, 50 seconds)

Tất nhiên sử dụng -sthay vì tiền tố lệnh với ./có thể không tiết kiệm thời gian.

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.