การเปิดไฟล์ที่เขียนโดยสคริปต์ทำงานนั้นปลอดภัยหรือไม่


20

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

จะปลอดภัยไหมที่จะเปิด (ดับเบิลคลิก) ไฟล์ที่เขียนด้วยสคริปต์?


4
ที่. นอกจากนี้หากคุณรู้ล่วงหน้าคุณสามารถเพียงแค่ไพพ์เอาต์พุตสคริปต์แม้ว่าที
Hennes

1
กึ่งที่เกี่ยวข้องคือคอมมานโดที: คุณสามารถส่งออกไปยังไฟล์บางไฟล์และไปยังสถานีในเวลาเดียวกัน: man7.org/linux/man-pages/man1/tee.1.html
Cheiron

คำตอบ:


42

การอ่านไฟล์นั้นปลอดภัยแม้ว่าการคลิกสองครั้งที่คุณกล่าวถึงอาจเป็นการเปิดไฟล์ในตัวแก้ไขบางตัวที่จะเสนอตัวเลือกให้คุณทำการเปลี่ยนแปลงและบันทึก Missclicks เกิดขึ้นดังนั้นฉันขอแนะนำคำสั่งที่ไม่ยอมให้คุณเปลี่ยนไฟล์

เหล่านี้เป็นตัวอย่างที่ทำงานใน terminal; พวกเขาจะอ่านไฟล์เท่านั้น:

cat file
less file
less +F file
tail -n 5 file
tail -f file

4
เครื่องมือแก้ไขไฟล์ที่ชาญฉลาดจำนวนมากจะเตือนคุณว่ามีการเปลี่ยนแปลงไฟล์และถามว่าคุณต้องการโหลดซ้ำหรือไม่ แต่เครื่องมือแก้ไขโง่อาจไม่
user1306322

5
@ user1306322 นั่นยังไม่รับประกันว่าจะปลอดภัย Juts เพราะไฟล์นั้นเปิดสำหรับการเขียนไม่ได้หมายความว่ามันจะถูกเขียนไปอย่างต่อเนื่อง หากไม่มีสิ่งใดถูกเขียนในขณะที่เครื่องมือแก้ไขทำงานอยู่มันจะไม่สังเกตเห็น และเนื่องจากตัวแก้ไขอาจเขียนไฟล์ใหม่และเปลี่ยนชื่อที่ด้านบน (เนื่องจากการเปลี่ยนชื่อเป็นอะตอมมิก) ไฟล์ที่ถูกเขียนไปจะถูกลบไปแล้ว เอาต์พุตที่เขียนจากจุดนั้นเป็นต้นไปจะไปยังไฟล์ที่ถูกลบ
kasperd

13

ตราบใดที่คุณไม่ได้เขียนมันก็ควรจะโอเค

อย่างไรก็ตามฉันขอแนะนำให้ใช้

tail -f log_file

ในเทอร์มินัลอื่น

คำสั่งนี้จะ "ติดตาม" ไฟล์log_fileและเขียนเนื้อหาที่เพิ่มเข้ามาใหม่ทันทีที่สคริปต์ได้รับการอัพเดต


1

ตัวแทนไม่เพียงพอที่จะเพิ่มความคิดเห็นในคำตอบของ Kamil Maciorowski:

สำหรับไฟล์บางไฟล์ที่คุณต้องการtail -F fileเพื่อให้สิ่งต่อไปนี้หมุนต่อไป ดู syslog ตัวอย่างเช่น


-1

ในกรณีที่สคริปต์ (หรือการใช้เฟรมเวิร์กพื้นฐาน) ซ้ำ ๆ เปิดและปิดการจัดการไฟล์ในระหว่างการทำงานมันอาจพบข้อผิดพลาดการละเมิดการแบ่งปันในโหมดการเขียนที่ตามมาเปิดด้วยเหตุผลดังต่อไปนี้:
1) สคริปต์อาจร้องขอการเขียน การเข้าถึงในโหมดเอกสิทธิ์ (ยกเว้นการเข้าถึงการอ่านพร้อมกัน) ดังนั้นหากโปรแกรมแก้ไขไฟล์ / โปรแกรมดูไฟล์ของคุณเป็นเพียงการอ่านไฟล์ก็อาจทำให้เกิดข้อผิดพลาดในสคริปต์การเขียน
2) นอกจากนี้ตัวแก้ไขไฟล์ / วิวเวอร์บางตัวจะล็อกไฟล์ตลอดระยะเวลาที่เปิดไฟล์

โดยสรุปมีปัญหาที่เป็นไปได้ที่ขึ้นอยู่กับโปรแกรมที่คุณใช้ในการดูไฟล์ และมีปัญหาที่อาจเกิดขึ้นจากการใช้งาน (หรือเฟรมเวิร์กพื้นฐาน) ของสคริปต์ที่เขียนไปยังไฟล์


1
จากประสบการณ์ของฉันนี่เป็นเรื่องแปลกมากใน Linux (หมายเหตุ: ฉันเป็นผู้ใช้ตามบ้าน) ฉันรู้ว่าปัญหานี้มีอยู่ใน Windows คำถามนี้จะติดแท็กlinuxไว้ "บรรณาธิการ / ผู้ดู" ทำงานอะไรใน Linux การบังคับใช้ลีนุกซ์รสชาติใดบ้าง?
Kamil Maciorowski

@ KamilMaciorowski น่าเสียดายที่ฉันไม่มีรายการเตือนที่เฉพาะเจาะจง ล็อคไม่ได้บังคับที่ใดก็ได้ (ไม่ได้อยู่ภายใต้ Windows) บางคนก็ใช้มัน ฉันแค่บอกว่าปัญหาดังกล่าวเป็นไปได้และโปรดอย่าใช้วิธีนี้อย่างประมาทในภารกิจที่สำคัญยิ่ง มันขึ้นอยู่กับ OP เพื่อตัดสินใจว่าสิ่งนี้มีผลหรือไม่หรือมีความสำคัญ การมีอยู่ของคำถามข้างต้นเพียงเพิ่มโอกาสที่ปรากฏการณ์ดังกล่าวได้เกิดขึ้นแล้วสำหรับ OP คำตอบที่อ้างว่าไม่มีสิ่งใดเกิดขึ้นให้ข้อมูลใหม่ไม่มากเช่นกัน
Roland Pihlakas

1
@RolandPihlakas ฉันยินดีที่จะเดิมพันผู้เขียนคำตอบนี้มีประสบการณ์ - แต่เฉพาะใน Windows ดังนั้นจึงไม่เกี่ยวข้องกับระบบที่เข้ากันได้กับ POSIX เช่น Linux ซึ่งการตรวจสอบผลลัพธ์ผ่านทางtail -fหรือless +Fเป็นกิจวัตร
Chromatix

@ Chromatix ฉันสับสนจริงๆเกี่ยวกับส่วนที่สร้างสรรค์ของการให้เหตุผลของคุณและไม่เห็นว่าคุณกำลังให้คำแนะนำหรือข้อมูลใหม่ประเภทใดนอกเหนือจากความเกลียดชังส่วนตัวสำหรับ Windows ... คุณไม่ได้ตอบคะแนนในความคิดเห็นของฉันเลย . ทำไมคุณถึงสนใจสิ่งที่ฉันมีประสบการณ์ กรุณาอย่าได้รับส่วนบุคคล
Roland Pihlakas

@RolandPihlakas เพราะคำตอบของคุณให้ความประทับใจอย่างมากว่าการเปิดไฟล์แบบอ่านอย่างเดียวนั้นมีอันตรายบน Linux เมื่อมันไม่ใช่ ที่จริงแล้วมันปลอดภัยเสมอที่จะอ่านไฟล์ที่ต่อท้ายตราบใดที่คุณไม่คิดว่า "end of file" หมายถึง "end of record" หรือ "end of line" กรณีเดียวที่จะล้มเหลวคือเมื่อแอปพลิเคชันการเขียนมี "การล็อกบังคับ" ซึ่งมีแอปพลิเคชั่นน้อยมากที่ทำ (ล็อก POSIX มาตรฐานคือ "ล็อคคำแนะนำ") และจะส่งผลให้เกิดข้อผิดพลาดที่ชัดเจน กว่าพฤติกรรมที่ผิดปกติ
Chromatix
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.