แสดงผลลัพธ์ของโปรแกรมเป็นไฟล์ใน Linux


9

ฉันรู้ว่าเราสามารถใช้รูปแบบด้านล่างเพื่อเปลี่ยนเส้นทางหน้าจอไปยังไฟล์:

$ your_program > /tmp/output.txt

อย่างไรก็ตามเมื่อฉันใช้คำสั่งด้านล่างคำว่า"-bash: /home/user/errors.txt: การอนุญาตถูกปฏิเสธ"

sudo tail /var/log/apache2/error.log > ~/errors.txt

ฉันขอทราบวิธีทำให้ผลงานนี้ได้ผลหรือไม่? ไม่พบ ~ / errors.txt ฉันต้องสร้างไฟล์ txt ก่อนหรือไม่ก่อนใช้คำสั่ง redirect


1
จะเกิดอะไรขึ้นถ้าคุณพิมพ์echo hi > ~/errors.txt? เป็น/home/userไดเรกทอรีบ้านของคุณถูกต้อง (หรือไม่ทุบตีอย่างใดทำให้เกิดความสับสนเกี่ยวกับการที่ไดเรกทอรีบ้านของคุณ)?
cjm

เป็นuserผู้ใช้ที่รันคำสั่งหรือไม่?
ผู้ใช้ที่ไม่รู้จัก

ใช่ผู้ใช้คือผู้ใช้ที่รันคำสั่ง
Xianlin

sudoนี่คือการทำงานปกติ sudoไม่อนุญาตการเปลี่ยนเส้นทาง มีหลายวิธีที่ผู้คนจะสามารถใช้สิ่งนี้เพื่อทำสิ่งที่ไม่ได้อยู่ในsudoers.confไฟล์ เป็นอีกทางเลือกหนึ่งที่คุณสามารถเรียกใช้sudo bash -c "tail /var/log/apache2/error.log > ~/errors.txt"เพื่อลบส่วนท้ายของ error.log ไปยังไฟล์ในไฟล์ dir ที่บ้านของคุณ
ทิมเคนเนดี

คำตอบ:


17

ด้านหลังท่อ sudo ไม่ทำงาน ฉันไม่รู้ว่าทำไมคุณไม่สามารถเขียนถึงบ้านของคุณ - บางทีไฟล์เป็นของรูท?

 sudo tail /var/log/apache2/error.log | sudo tee ~/errors.txt

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


ใช่มันใช้งานได้ ...
Xianlin

สำหรับปัญหาเกี่ยวกับการอนุญาตอาจเป็น $ HOME ที่ติดตั้ง NFS พร้อมกับ rootquash หรือไม่
Ansgar Esztermann

$ HOME ไม่ได้ติดตั้ง NFS
Xianlin

6

เมื่อคุณเขียนsudo somecommand > ~/errors.txtเปลือกที่โทรsudo(และทำงานตามที่คุณ) ~/errors.txtเป็นหนึ่งในการแสดงเปลี่ยนเส้นทางและการเปิด ดูเปลี่ยนทิศไปยังแฟ้มคุณไม่ได้มีสิทธิ์ในการเขียน โดยปกติปัญหาในกรณีนี้คือคุณต้องการให้รูทเขียนไฟล์ ดูคำถามที่เชื่อมโยงเพื่อดูวิธีการทำเช่นนี้

นี่มันแปลกที่คุณไม่สามารถเขียนไฟล์ในโฮมไดเร็กตอรี่ของคุณได้ โอกาสที่คุณเคยบันทึกเอาท์พุทบางอย่างเป็นรู/home/user/errors.txtทและตอนนี้ไฟล์นั้นมีอยู่และเป็นของรูท ลบไฟล์ (คุณสามารถทำได้ตราบใดที่คุณมีสิทธิ์ในการเขียน/home/userและจากนั้นคุณจะสามารถสร้างเป็นผู้ใช้ของคุณ

rm ~/errors.txt
sudo tail /var/log/apache2/error.log > ~/errors.txt

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


ฉันลองลบ '/home/user/errors.txt' และใช้คำสั่งด้านบนของคุณ มันใช้งานไม่ได้ แต่ห้ามไม่ให้ฉันเขียนไปที่โฮมไดเร็กตอรี่ อย่างไรก็ตามฉันเดาว่าลิงก์ที่คุณให้สามารถใช้เป็นโซลูชันของฉันได้ มันเหมือนกับคำตอบแรกในโพสต์นี้ อย่างไรก็ตามคุณได้ให้คำอธิบายโดยละเอียดเกี่ยวกับการเปลี่ยนเส้นทาง stdout ไปยังไฟล์และฉันขอขอบคุณสำหรับสิ่งนั้น
Xianlin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.