Nếu tôi chạy một lệnh.
sudo some-command && some-other-command
Là lệnh thứ hai đang được chạy với ưu tiên sudo
cũng?
Nếu tôi chạy một lệnh.
sudo some-command && some-other-command
Là lệnh thứ hai đang được chạy với ưu tiên sudo
cũng?
Câu trả lời:
TL; DR: KHÔNG
Lệnh đầu tiên là
sudo some-command
Lệnh thứ hai là
some-other-command
Lệnh sudo
nhận lệnh sau và thực thi nó với các đặc quyền nâng cao. Các &&
Tuy nhiên, không thuộc về một lệnh và được giải thích bằng vỏ, trước khi thực hiện lệnh đầu tiên. Nó báo bash để thực hiện lệnh đầu tiên và thành công lệnh thứ hai.
Vì vậy, sudo
không biết về && some-other command
. Khi quá trình nâng cao kết thúc, bash lấy giá trị trả về của nó và sau đó thực thi lệnh khác, một lần nữa không biết đến lệnh đầu tiên.
Điều này có thể được chứng minh dễ dàng:
$ sudo whoami && whoami
root
username
Để đạt được những gì bạn muốn, bạn có thể bắt đầu bash nâng cao và để nó thực thi cả hai lệnh:
$ sudo bash -c 'whoami && whoami'
root
root
Vì vậy, bây giờ, cả hai lệnh được thực thi với quyền root, vì toàn bộ quá trình được mô tả ở trên được thực thi trong một quy trình nâng cao, tức là phiên bash bắt đầu với lệnh này, ngay lập tức thoát ra sau khi kết thúc. Tuy nhiên, cả hai whoami
không biết đến sự tồn tại của nhau.
Điều này không phù hợp với bất kỳ mục đích nào nhưng đối với cuộc biểu tình này, cách đơn giản hơn là làm
sudo some-command && sudo some-other-command
Không. Một số ví dụ thực hiện điều này là:
sudo some-command && sudo some-other-command
sudo sh -c "some-command && some-other-command"
hoặc nếu bạn muốn các lệnh lồng, bạn thậm chí có thể làm:
sudo bash <<"EOF"
some-command
some-other-command
sudo bash <<"EOF2"
some-command2
some-other-command2
EOF2
EOF
$ sudo -s -- whoami && whoami
choroot
username
sudo -s -- "whoami && whoami"
dường như đưa ra lệnh không được tìm thấy, ít nhiều giống như lệnh "whoami && whoami"
. Làm cách nào để sử dụng cấu trúc này với &&? Tôi thấy rằng sudo -s cd ..
không có lỗi như trái ngược với sudo cd ..
.
sudo bash <<"EOF"
! Cảm ơn! :-)
Không, hoặc bạn phải viết sudo hai lần, hoặc làm một cái gì đó như
sudo bash -c 'foo && bar'
&&
có nghĩa là lệnh bên phải (thứ hai) sẽ chỉ chạy nếu lệnh lest side (thứ nhất) thành công tức là mã thoát $?
là 0
.
Hai lệnh khác nhau và sẽ chạy trong môi trường riêng của chúng, vì vậy lệnh thứ hai sẽ không chạy có sudo
đặc quyền.
Điều này sẽ làm cho bạn rõ ràng:
$ sudo whoami && whoami
root
foobar
KHÔNG, và những điều sau đây đã từng rất phổ biến.
sudo reboot && exit
Mọi người nên làm điều này ít nhất một lần
sudo apt-get update && sudo apt-get upgrade
Vì vậy, nó là một câu hỏi phỏng vấn "chuột mickey" tuyệt vời.
Điều này dễ dàng được kiểm tra đến mức câu hỏi có thể bị nghi ngờ đối với bài tập đệm stat.
Trên dòng lệnh, khi bạn thấy
$ command one && command two
mục đích thông thường là thực thi lệnh theo sau && chỉ khi lệnh đầu tiên thành công.
hoàn toàn không, đây chỉ là việc viết hai lệnh liên tiếp, điều này && không cung cấp thêm đặc quyền nào cho lệnh. Nó chỉ là một người ngăn cách .
Để chứng minh rằng chúng ta hãy lấy một ví dụ.
touch fileA fileB
Tôi đã tạo hai tệp fileA và fileB. Bây giờ tôi sẽ chạy lệnh
sudo chown test:test fileA && chown test:test fileB
Tôi đang thay đổi người dùng và chủ sở hữu nhóm của các tệp này thành kiểm tra tên người dùng và nhóm. Bây giờ lệnh đầu tiên sẽ chạy trong khi còn lệnh kia thì sao?
Đầu ra là:
chown: changing ownership of `fileB': Operation not permitted
Vì vậy, lệnh không chạy vì nó cần sudo
và mặc dù chúng ta có thể kết luận rằng && không phải là lệnh thay thế thứ haisudo
whoami
ví dụ.