วิธีเพิ่มบรรทัดลงในไฟล์ที่มีสิทธิ์การเขียนรูทเท่านั้นและดำเนินการสคริปต์ต่อไป


9

ฉันพยายามเรียนรู้สคริปต์ทุบตี ฉันทำงานเกี่ยวกับปัญหาการปฏิบัติและ ณ จุดหนึ่งฉันต้องเพิ่มบรรทัดลงในไฟล์ที่ต้องrootได้รับอนุญาตในการเขียน

รหัสมีลักษณะดังนี้:

# some code
echo "add this line to the code" >> fileName
# some code

เป็นไปได้ไหมที่สคริปต์จะขอรหัสผ่านรูทตรวจสอบรหัสผ่านและการรับรองความถูกต้องที่ประสบความสำเร็จในการแก้ไขไฟล์? สคริปต์ควรกลับสู่โหมดผู้ใช้และดำเนินการคำสั่งต่อไป

คำตอบ:


13

มีเคล็ดลับในsudoหน้า man ซึ่งอธิบายวิธีทำสิ่งนี้ นี่คือหนึ่งซับของฉัน:

#!/usr/bin/bash
sudo sh -c "echo \"add this line to the code\" >> fileName"

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


2

su สามารถใช้ได้กับระบบยูนิกซ์ส่วนใหญ่และควรทำงาน:

su root -c 'echo "add this line to the code" >> fileName'

ซึ่งแตกต่างจากที่มีรหัสผ่านที่ดูเหมือนจะไม่ได้รับการเก็บไว้ชั่วคราวด้วยsudo su
Ryne Everett

@Ryne Everett: ฉันไม่คุ้นเคยกับ sudo แต่พฤติกรรมของ 'su' นั้นเป็นจริงตามที่สคริปต์ของ OP ต้องการ ส่วนใหญ่ฉันใช้ 'su' อีกวิธีหนึ่ง: เปลี่ยนจากรูทเป็นผู้ใช้รายอื่น ในกรณีนี้ไม่จำเป็นต้องใช้รหัสผ่านใด ๆ ทั้งสิ้น
miracle173

1

คุณสามารถใช้teeกับsudo:

echo "add this line to the code" | sudo tee -a filename > /dev/null

echoเอาท์พุท 's ถูกเปลี่ยนเส้นทางไปด้วย|( ท่อ ) sudo teeเพื่อ teeอ่านจากอินพุตมาตรฐานและเขียนไปยังเอาต์พุตมาตรฐานไฟล์ที่กำหนดในกรณีfilenameนี้ -a(หรือ--append) ทำให้teeผนวกไฟล์โดยไม่ได้ไฟล์จะถูกเขียนทับ ในฐานะที่teeเป็นรันด้วยsudoมันจะเปิดไฟล์ที่มีสิทธิ์ราก สุดท้าย> /dev/nullไม่ใส่teeเอาท์พุทของการส่งออกมาตรฐาน

ข้อดีอย่างหนึ่งของการใช้teeแทนการเริ่มต้นคำสั่งทั้งหมดรวมถึงการเปลี่ยนเส้นทางด้วยsu -cหรือsudo sh -cว่าคุณไม่จำเป็นต้องเปลี่ยนการอ้างอิงของคำสั่งเริ่มต้นในทางใดทางหนึ่ง (การอ้างอิงบรรทัดที่มีเครื่องหมายคำพูดอยู่แล้ว



-2

จะทำเคล็ดลับ:

ssh host "sudo su root -c 'echo "add this line to the code" >> /etc/hosts'"

ทำไมssh? คุณไม่จำเป็นต้องsuใช้sudoและไม่จำเป็นต้องระบุrootเนื่องจากเป็นค่าเริ่มต้น โดยรวมแล้วคำอธิบายอีกเล็กน้อยน่าจะดีเพราะ OP ต้องการเรียนรู้บางสิ่งและไม่ใช่แค่การแก้ปัญหา
Adaephon

ฉันคิดว่าคุณจะเจอปัญหากับคำพูดของคุณเป็นสองเท่า
miracle173
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.