การเพิ่มบรรทัดลงในไฟล์โฮสต์การขออนุญาตถูกปฏิเสธเมื่อใช้ sudo - Mac


14

ฉันกำลังพยายามเพิ่มบรรทัดลงในไฟล์โฮสต์บน Mac ของฉันโดยดำเนินการคำสั่งหนึ่งบรรทัดบนเทอร์มินัล

ฉันคิดว่าการใช้ sudo นั้นทำได้ง่าย แต่จะส่งกลับ "การปฏิเสธสิทธิ์" เมื่อฉันพยายามเพิ่มลง>>ในไฟล์ hosts แต่จะใช้งานได้หากฉันลองแทนที่>เนื้อหาของโฮสต์

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

sudo echo test > /etc/hosts
Password:
$ 

ระบบปฏิบัติการเป็นรุ่นล่าสุดแล้ว


เพียงใช้โปรแกรมแก้ไขข้อความ (เริ่มต้นด้วยsudo ) เพื่อแก้ไข/ etc / hosts ของคุณ
MrSmith42

1
ฉันต้องการสร้างสคริปต์ที่จะช่วยให้เรื่องนี้เป็นอัตโนมัติดังนั้นโปรแกรมแก้ไขข้อความจึงไม่ช่วยในกรณีนี้
มิ้นต์

คำตอบ:


17

นั่นเป็นเพราะechoถูกเรียกใช้เป็นรูท แต่เชลล์เป็นอันที่จริงทำการเปลี่ยนเส้นทาง คุณต้องวางไข่เปลือกใหม่เพื่อให้การทำงาน:

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

แก้ไข: ฉันไม่เห็นความจริงที่การ>เปลี่ยนเส้นทางทำงาน ฉันไม่สามารถอธิบายได้


ฉันรู้สึกว่ามันคุ้มค่าที่จะสังเกตเห็นโปรแกรมอรรถประโยชน์นี้teeเนื่องจากอนุญาตให้มีการเรียกใช้งาน subshell จากsudoและควรถูกบล็อกในสภาพแวดล้อมการผลิตส่วนใหญ่ด้วยเหตุผลด้านความปลอดภัย
Steve Buzonas

9

จากนั้นให้เรียกใช้ echo ผ่านการเปลี่ยนเส้นทางซึ่งจะเรียกใช้ในฐานะผู้ใช้ปัจจุบันของคุณไม่ใช่รูทตามที่ echo กำลังรันในตัวอย่างของคุณให้ใช้teeตามที่ Steve Buzonas แนะนำ

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

ตอนนี้ sudo ถูกนำไปใช้กับคำสั่ง tee '-a' ผนวกเข้ากับไฟล์

นี่จะส่งเอาต์พุตทีไปยังเอาต์พุตมาตรฐาน หากคุณไม่ต้องการเห็น 'ทดสอบ' ในเทอร์มินัลของคุณให้เพิ่ม: > /dev/nullที่ส่วนท้ายของบรรทัดนั้น


1

เพื่อให้แน่ใจว่ามีการสร้างบรรทัดใหม่ก่อนฉันใช้สิ่งนี้:

sudo -- sh -c "echo  \ \ >> /etc/hosts";sudo -- sh -c "echo 127.0.0.1  testdomain.com >> /etc/hosts"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.