Чи безпечно відкривати файл, який записується запущеним сценарієм?


20

Я запускаю скрипт оболонки, який записується у файл.
Цей сценарій може зайняти багато часу, і я хотів би стежити за частковим результатом, а не чекати, коли весь сценарій закінчиться.

Чи безпечно відкрити (подвійне клацання) файл, який пише сценарій?


4
Це. Крім того, якщо ви знаєте заздалегідь, ви можете просто передати сценарій вихід через tee.
Геннес

1
Semi родинного трійника коммандос: ви можете направити висновок в якій - то файл і термінал одночасно: man7.org/linux/man-pages/man1/tee.1.html
Cheiron

Відповіді:


42

Читання файлів є безпечним, хоча подвійне клацання згаданого вами, ймовірно, відкриє файл у якомусь редакторі, який запропонує вам можливість внести зміни та зберегти їх. Трапляються пропуски, тому я рекомендую команди, які навіть не дозволять вам змінити файл.

Це приклади, які працюють в терміналі; вони прочитають файл лише:

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

4
Багато розумніших редакторів файлів попередить вас, що файл було змінено, і запитають, чи хочете ви його перезавантажити, але німі редактори можуть цього не зробити.
user1306322

5
@ user1306322 Це все одно не гарантується в безпеці. Виконується через те, що файл відкритий для запису, не означає, що він записується постійно. Якщо нічого не було написано під час роботи редактора, він не помітить. А оскільки редактор може написати новий файл і перейменувати зверху (оскільки перейменування є атомними), файл, який записується, буде видалено. Вихід, записаний з цього моменту, піде у видалений файл.
kasperd

13

Поки ви до цього не пишете, це повинно бути добре.

Однак я б рекомендував використовувати

tail -f log_file

в іншому терміналі.

Ця команда "слідкує" за файлом log_fileі запише щойно доданий вміст, як тільки він буде оновлений сценарієм.


1

Не вистачає представника, щоб додати коментар до відповіді Каміля Маціоровського:

Для деяких файлів вам потрібно, tail -F fileщоб наступне продовжувалося через обертання. Наприклад, перегляд системного журналу.


-1

Якщо сценарій (або основна реалізація основи) під час його роботи неодноразово відкриває та закриває ручку файлу, у наступному режимі запису може виникнути помилка порушення спільного доступу з наступних причин:
1) Сценарій може вимагати запису доступ в ексклюзивному режимі (виключаючи одночасний доступ для читання), тому якщо ваш редактор файлів / програма перегляду файлів ще лише читає файл, це може спричинити помилку в сценарії запису.
2) Крім того, деякі редактори файлів / глядачі блокують файл протягом усього часу, коли він відкритий.

На закінчення можливі проблеми, які залежать від програми, яку ви використовуєте для перегляду файлу. І можливі проблеми, що виникають внаслідок реалізації (або основної основи) сценарію, який записується у файл.


1
З мого досвіду це дуже рідко в Linux (зверніть увагу: я домашній користувач). Я знаю, що проблема існує в Windows, але питання позначене linux . Які "редактори / глядачі" працюють так у Linux? У яких ароматах Linux є замки обов'язковими?
Каміль Маціоровський

@KamilMaciorowski На жаль, у мене немає конкретного списку попереджень. Блокування ніде не є обов'язковими (як і під Windows), деякі люди просто ними користуються. Я лише кажу, що така проблема можлива, і, будь ласка, не використовуйте цей підхід недбало в критичних ситуаціях. Оперативна задача вирішує, застосовується це чи важливо. Саме існування вищезазначеного питання викликає шанси на те, що таке явище вже відбулося для ОП. Відповіді, які стверджують, що нічого не могло статися, також не дають багато нового.
Roland Pihlakas

1
@RolandPihlakas Я готовий посперечатися , автор цієї відповіді в уже випробував це , - але тільки на Windows. Тож це не має відношення до POSIX-сумісних систем, таких як Linux, на яких моніторинг виводиться через tail -fабо less +Fє звичайним.
Хроматикс

@Chromatix Я дійсно плутають про конструктивної частини ваших міркувань і не побачити , які пропозиції або нову інформацію, яку ви тут забезпечуючи, крім вашої особистої ненависті до Windows ... Ви не відповіли на пункти в моєму коментарі на всіх . Чому тебе хвилює те, що я пережив? Будь ласка, не будьте особистими.
Роланд Піхлакас

@RolandPihlakas Оскільки ваша відповідь створює дуже міцне враження, що відкриття файлу лише для читання небезпечно для Linux, коли його насправді немає. Насправді читати файл, до якого додається, завжди безпечно, доки ви не вважаєте, що "кінець файлу" означає "кінець запису" або "кінець рядка". Єдиний випадок, коли він вийде з ладу , коли програма для запису містить "обов'язковий замок", який робить дуже мало додатків (стандартний блокування POSIX є "дорадчим блокуванням"), і це призведе до підвищення чітко визначеної помилки, а не ніж хаотична поведінка.
Хроматикс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.