ฉันจะใช้คำสั่งกับ sudo โดยไม่เปลี่ยนเจ้าของไฟล์ได้อย่างไร


12

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

ตัวอย่างไฟล์ archivos35.sh มาจาก Apache แต่ฉันใช้ sed (กับ usr admin sudo)

$ ls -l
-rwxr-xrw-. 1 apache apache 181 Aug 5 11:56 archivos35.sh

ผู้ใช้adminกับ sudo ---

sudo sed -i s/old/new/g archivos35.sh

แต่การทำคำสั่งนั้นด้วย sudo จะเปลี่ยนเจ้าของไฟล์

$ ls -l
-rwxr-xrw-. 1 admin apache 181 Aug 5 11:56 archivos35.sh

ฉันจะหลีกเลี่ยงการใช้คำสั่งกับ sudo เพื่อเปลี่ยนเจ้าของไฟล์ได้อย่างไร? ฉันแค่ต้องการเปลี่ยนแปลงไฟล์โดยไม่ต้องดัดแปลงเจ้าของไฟล์


เหตุใดสคริปต์ของคุณจึงสามารถเขียนได้ทั่วโลก
Jim L.

โดยไม่ได้ตั้งใจฉันตั้งค่าด้วย 756 ฉันไม่ควร
Dok Gus

คำตอบ:


29

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

sudo -iu apache sed -i 's/old/new/g' archivos35.sh

ที่จะเรียกใช้คำสั่งเป็นผู้ใช้sedapache


2

คุณไม่ได้เปลี่ยนความเป็นเจ้าของไฟล์จริงๆ แต่เป็นการลบไฟล์เก่าและสร้างไฟล์ใหม่ เมื่อคุณทำไฟล์ใหม่จะถูกสร้างขึ้นโดย uid ของผู้สร้าง เพื่อหลีกเลี่ยงปัญหานี้คุณต้องแก้ไขไฟล์ให้เข้าที่ แก้ไขโดยใช้เครื่องมือแก้ไขข้อความที่บันทึกโดยเขียนทับไฟล์ต้นฉบับ หรือเรียกใช้คำสั่ง sed ของคุณด้วยเอาต์พุตไปยังไฟล์ temp แล้วคัดลอกไฟล์ temp ไปยังไฟล์ต้นฉบับ


1
คุณอาจคิดว่า-iตัวเลือก aka --in-placeจริง ๆ แล้วจะปรับเปลี่ยนในสถานที่ ...
23499

Whit คำตอบ @teldon ฉันจัดการเพื่อทำสิ่งที่ฉันต้องการ ด้วย sed ฉันแก้ไขสถานที่โดยไม่ต้องเปิดไฟล์
Dok Gus

1
@JShorthouse คุณคิด แต่อย่างน้อยก็ไม่ใช่ทุกที่
Kyle Jones

3
@JShorthouse ส่วนใหญ่ที่เรียกว่า 'in-place' edit ไม่ได้พวกเขาส่วนใหญ่เปลี่ยนไฟล์ชั่วคราวแล้ว mv มันไปเหนือต้นฉบับ (และนั่นรวมถึงส่วนใหญ่, ถ้าไม่ทั้งหมด, implementations ของ sed. และ perl. และโปรแกรมอื่น ๆ ส่วนใหญ่ พร้อมตัวเลือก "แก้ไขในสถานที่") หากคุณต้องการแก้ไขในสถานที่จริงใช้โปรแกรมแก้ไขข้อความสคริปต์เหมือนedหรือexหรือ/vi vim
cas

1
แม้แต่เครื่องมือแก้ไขข้อความบางตัวก็ใช้วิธี temp + rename เมื่อทำการเขียนไฟล์ซึ่งไม่ปลอดภัยในกรณีที่เกิดความผิดพลาดขณะเขียน เช่น Emacs ทำสิ่งนี้ตามค่าเริ่มต้น แต่คุณสามารถเขียนทับด้วยการกำหนดค่า
Barmar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.