Apakah aman untuk membuka file yang sedang ditulis oleh skrip yang berjalan?

20

Saya menjalankan skrip shell yang menulis ke file.
Script ini mungkin membutuhkan waktu lama untuk diselesaikan dan saya ingin memantau output parsial daripada menunggu seluruh script selesai.

Apakah aman untuk membuka (mengklik dua kali) file yang sedang ditulis oleh skrip?

Tidak ada
sumber
4
Bahwa. Juga jika Anda tahu sebelumnya Anda bisa mem-pipe output skrip dengan tee.
Hennes
1
Setengah terkait adalah perintah tee: Anda dapat meneruskan output ke beberapa file dan ke terminal pada saat yang bersamaan: man7.org/linux/man-pages/man1/tee.1.html
Cheiron

Jawaban:

42

Membaca file itu aman, meskipun mengklik dua kali yang Anda sebutkan mungkin akan membuka file di beberapa editor yang akan menawarkan Anda opsi untuk membuat perubahan dan menyimpannya. Missclicks terjadi, jadi saya merekomendasikan perintah yang bahkan tidak akan membiarkan Anda mengubah file.

Ini adalah contoh yang bekerja di terminal; mereka hanya akan membaca file:

cat file
less file
less +F file
tail -n 5 file
tail -f file
Kamil Maciorowski
sumber
4
Banyak editor file yang lebih cerdas akan memperingatkan Anda bahwa file telah diubah dan bertanya apakah Anda ingin memuatnya kembali, tetapi editor bodoh mungkin tidak.
user1306322
5
@ user1306322 Itu masih belum dijamin aman. Juts karena file ini terbuka untuk ditulis tidak berarti file itu ditulis secara konstan. Jika tidak ada yang ditulis saat editor telah berjalan, ia tidak akan melihat. Dan karena editor dapat menulis file baru dan mengganti nama di atas (karena nama adalah atomik), file yang sedang ditulis untuk kemudian akan dihapus. Output yang ditulis dari titik itu dan seterusnya akan pergi ke file yang dihapus.
kasperd
13

Selama Anda tidak menulis untuk itu, itu tidak apa-apa.

Namun, saya akan merekomendasikan menggunakan

tail -f log_file

di terminal lain.

Perintah ini akan "mengikuti" file log_filedan menulis konten yang baru ditambahkan segera setelah diperbarui oleh skrip.

Iskustvo
sumber
1

Tidak cukup perwakilan untuk menambahkan komentar pada jawaban Kamil Maciorowski:

Untuk beberapa file, Anda ingin tail -F fileagar yang berikut ini berlanjut melalui rotasi. Menonton syslog misalnya.

pelajar
sumber
-1

Jika skrip (atau implementasi kerangka kerja yang mendasarinya) berulang kali membuka dan menutup pegangan file selama pekerjaannya, skrip tersebut mungkin mengalami kesalahan pelanggaran berbagi dalam mode penulisan berikutnya yang terbuka karena alasan berikut:
1) Skrip dapat meminta penulisan akses dalam mode eksklusif (tidak termasuk akses baca bersamaan), jadi jika program editor file / pemirsa Anda bahkan hanya membaca file, itu dapat memicu kesalahan dalam skrip penulisan.
2) Selain itu, beberapa editor / pemirsa file mengunci file selama seluruh durasi file dibuka.

Sebagai kesimpulan, ada beberapa masalah yang mungkin bergantung pada program yang Anda gunakan untuk melihat file. Dan ada kemungkinan masalah yang timbul dari implementasi (atau kerangka kerja yang mendasari) dari skrip yang menulis ke file.

Roland Pihlakas
sumber
1
Dari pengalaman saya ini sangat tidak umum di Linux (catatan: Saya pengguna rumahan). Saya tahu masalah memang ada di Windows, pertanyaannya adalah tagged linux . Apa "editor / pemirsa" bekerja seperti ini di Linux? Dalam rasa apa Linux merupakan kunci yang wajib?
Kamil Maciorowski
@KamilMaciorowski Sayangnya, saya tidak punya daftar peringatan khusus. Kunci tidak wajib ada di mana saja (tidak juga di Windows), beberapa orang hanya menggunakannya. Saya hanya mengatakan bahwa masalah seperti itu mungkin terjadi dan tolong jangan menggunakan pendekatan ini dengan ceroboh dalam situasi kritis misi. Terserah OP untuk memutuskan apakah ini berlaku atau penting. Keberadaan semata-mata dari pertanyaan di atas menimbulkan peluang bahwa fenomena semacam itu telah terjadi pada OP. Jawaban mengklaim bahwa tidak ada yang bisa terjadi, tidak memberikan banyak informasi baru juga.
Roland Pihlakas
1
@RolandPihlakas Saya berani bertaruh penulis jawaban ini telah mengalaminya - tetapi hanya pada Windows. Jadi itu tidak relevan dengan sistem yang mendukung POSIX seperti Linux, yang memantau keluaran melalui tail -fatau less +Frutin.
Chromatix
@Chromatix Aku benar-benar bingung tentang konstruktif bagian dari penalaran dan gagal untuk melihat jenis saran atau informasi baru yang Anda berikan di sini, selain kebencian pribadi Anda untuk Windows ... Anda tidak menjawab poin dalam komentar saya sama sekali . Mengapa Anda peduli dengan apa yang saya alami? Tolong jangan pribadi.
Roland Pihlakas
@RolandPihlakas Karena jawaban Anda memberi kesan tegas bahwa membuka file read-only berbahaya di Linux, padahal sebenarnya tidak. Bahkan, selalu aman untuk membaca file yang ditambahkan, asalkan Anda tidak menganggap bahwa "akhir file" berarti "akhir catatan" atau "ujung baris". Satu-satunya kasus ketika itu akan gagal adalah ketika aplikasi menulis memegang "kunci wajib" yang sangat sedikit aplikasi lakukan (kunci POSIX standar adalah "kunci penasehat") dan yang akan menghasilkan kesalahan yang jelas yang diangkat, bukan dari perilaku yang tidak menentu.
Chromatix