Thêm một dòng vào tệp máy chủ, bị từ chối cấp phép khi sử dụng sudo - Mac


12

Tôi đang cố gắng thêm một dòng vào tệp máy chủ trên máy Mac của mình bằng cách thực hiện lệnh một dòng trên thiết bị đầu cuối.

Tôi nghĩ rằng điều này sẽ dễ dàng khi sử dụng sudo, nhưng nó trả về "quyền bị từ chối" khi tôi cố gắng thêm >> vào tập tin máy chủ, nhưng nó hoạt động nếu tôi thử thay thế > các nội dung máy chủ.

sudo echo test >> /etc/hosts
-bash: /etc/hosts: Permission denied
$

sudo echo test > /etc/hosts
Password:
$ 

Hệ điều hành được cập nhật.


chỉ cần sử dụng trình soạn thảo văn bản (bắt đầu bằng sudo ) để sửa đổi / etc / host
MrSmith42

1
Tôi muốn tạo một tập lệnh sẽ giúp tự động hóa việc này, vì vậy trình soạn thảo văn bản sẽ không giúp ích trong trường hợp này.
Mint

Câu trả lời:


15

Đó là bởi vì echo đang được chạy như root, nhưng shell là cái thực sự thực hiện chuyển hướng. Bạn cần sinh ra một lớp vỏ mới để nó hoạt động:

sudo -- sh -c "echo test >> /etc/hosts"

Chỉnh sửa: Tôi đã không nhìn thấy thực tế rằng > chuyển hướng công trình; Tôi không thể giải thích điều đó.


Tôi cảm thấy đáng chú ý các tiện ích tee bởi vì cho phép thực thi subshell từ sudo đang và nên bị chặn trong hầu hết các môi trường sản xuất vì lý do bảo mật.
Steve Buzonas

9

Thay vào đó, hãy chạy echo thông qua một chuyển hướng sẽ được chạy như người dùng hiện tại của bạn, chứ không phải root vì echo đang được chạy trong ví dụ của bạn, hãy sử dụng phát bóng như Steve Buzonas đề nghị

 echo 'test' | sudo tee -a /etc/hosts

Sudo hiện được áp dụng cho lệnh tee. '-A' sẽ thêm vào tệp

Điều này cũng sẽ xuất tee đến đầu ra tiêu chuẩn. Nếu bạn không muốn xem 'thử nghiệm' trong thiết bị đầu cuối của mình, hãy thêm: > /dev/null đến cuối dòng đó.


1

Để đảm bảo rằng một dòng mới đã được tạo trước tiên, tôi đã sử dụng:

sudo -- sh -c "echo  \ \ >> /etc/hosts";sudo -- sh -c "echo 127.0.0.1  testdomain.com >> /etc/hosts"
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.