Czy bezpiecznie jest otworzyć plik zapisywany przez działający skrypt?

20

Używam skryptu powłoki, który zapisuje do pliku.
Skrypt ten może zająć dużo czasu i chciałbym monitorować częściowe dane wyjściowe, zamiast czekać na zakończenie całego skryptu.

Czy bezpiecznie jest otworzyć (podwójnie kliknąć) plik zapisywany przez skrypt?

Żaden
źródło
4
Że. Również, jeśli wiesz wcześniej, możesz po prostu przesłać dane wyjściowe skryptów przez tee.
Hennes
1
Częściowo powiązane to komando tee: możesz przesłać dane wyjściowe do jakiegoś pliku i terminala w tym samym czasie: man7.org/linux/man-pages/man1/tee.1.html
Cheiron

Odpowiedzi:

42

Czytanie pliku jest bezpieczne, chociaż dwukrotne kliknięcie, o którym wspomniałeś, prawdopodobnie otworzy plik w jakimś edytorze, który zaoferuje ci możliwość wprowadzenia zmian i zapisania ich. Zdarzają się missclicks, więc polecam polecenia, które nawet nie pozwolą ci zmienić pliku.

Są to przykłady, które działają w terminalu; będą czytać tylko plik:

cat file
less file
less +F file
tail -n 5 file
tail -f file
Kamil Maciorowski
źródło
4
Wiele inteligentniejszych edytorów plików ostrzeże cię, że plik został zmieniony i zapyta, czy chcesz go ponownie załadować, ale głupi edytorzy mogą tego nie zrobić.
user1306322
5
@ user1306322 Nadal nie jest to bezpieczne. Po prostu dlatego, że plik jest otwarty do zapisu, nie oznacza, że ​​jest on ciągle zapisywany. Jeśli nic nie zostało napisane podczas działania edytora, nie zauważy. A ponieważ edytor może napisać nowy plik i zmienić jego nazwę na wierzchu (ponieważ nazwy są atomowe), zapisywany plik zostanie wówczas usunięty. Dane wyjściowe zapisane od tego momentu trafią do usuniętego pliku.
kasperd
13

Dopóki nie piszesz do niego, powinno być w porządku.

Jednak polecam korzystanie

tail -f log_file

w innym terminalu.

To polecenie „podąży” za plikiem log_filei zapisze nowo dodaną treść, gdy tylko zostanie zaktualizowana przez skrypt.

Iskustvo
źródło
1

Za mało przedstawicieli, aby dodać komentarz do odpowiedzi Kamila Maciorowskiego:

W przypadku niektórych plików konieczne będzie, tail -F fileaby następujące czynności były kontynuowane przez obrót. Na przykład oglądanie syslog.

studog
źródło
-1

Jeśli skrypt (lub podstawowa implementacja frameworka) wielokrotnie otwiera i zamyka uchwyt pliku podczas pracy, może napotkać błąd naruszenia zasad udostępniania w otwartym trybie zapisu z następujących powodów:
1) Skrypt może zażądać zapisu dostęp w trybie wyłączności (z wyłączeniem równoczesnego dostępu do odczytu), więc jeśli Twój edytor plików / program przeglądający jeszcze tylko czyta plik, może to spowodować błąd w skrypcie zapisu.
2) Dodatkowo, niektórzy edytorzy / przeglądający pliki blokują plik na cały czas jego otwarcia.

Podsumowując, istnieją możliwe problemy, które zależą od programu używanego do przeglądania pliku. Możliwe są problemy wynikające z implementacji (lub bazowej struktury) skryptu zapisującego do pliku.

Roland Pihlakas
źródło
1
Z mojego doświadczenia wynika, że ​​jest to bardzo rzadkie w Linuksie (uwaga: jestem użytkownikiem domowym). Wiem, że problem występuje w systemie Windows, ale pytanie jest oznaczone linuksem . Jakie „edytory / przeglądarki” działają w ten sposób w systemie Linux? W jakich odmianach Linuksa blokady są obowiązkowe?
Kamil Maciorowski
@KamilMaciorowski Niestety nie mam konkretnej listy ostrzeżeń. Zamki nigdzie nie są obowiązkowe (nie są też pod Windows), niektóre osoby po prostu z nich korzystają. Mówię tylko, że taki problem jest możliwy i proszę nie używaj tego podejścia beztrosko w sytuacjach krytycznych dla misji. Od PO zależy, czy ma to zastosowanie, czy jest ważne. Samo istnienie powyższego pytania podnosi prawdopodobieństwo, że takie zjawisko już się wydarzyło w PO. Odpowiedzi twierdzące, że nic się nie może wydarzyć, nie dostarczają też nowych informacji.
Roland Pihlakas
1
@RolandPihlakas Jestem skłonny założyć się, że autor tej odpowiedzi tego doświadczył - ale tylko w systemie Windows. Nie ma więc znaczenia dla systemów zgodnych z POSIX, takich jak Linux, w których monitorowanie odbywa się za pośrednictwem tail -flub less +Fjest rutyną.
Chromatix,
@Chromatix Jestem naprawdę mylić o konstruktywną część swojego rozumowania i nie zobaczyć, jakie sugestie lub nowe informacje ty zapewniając tutaj, oprócz osobistej nienawiści dla Windows ... Nie odpowiedziałeś na punkty w moim komentarzu na wszystko . Dlaczego obchodzi Cię to, czego doświadczyłem? Proszę, nie bądź osobisty.
Roland Pihlakas,
@RolandPihlakas Ponieważ twoja odpowiedź daje bardzo mocne wrażenie, że otwarcie pliku tylko do odczytu jest niebezpieczne w systemie Linux, kiedy tak naprawdę nie jest. W rzeczywistości zawsze można bezpiecznie odczytać plik, do którego jest dołączany, o ile nie zakładasz, że „koniec pliku” oznacza „koniec zapisu” lub „koniec wiersza”. Jedyny przypadek, w którym się nie powiedzie, to sytuacja, w której aplikacja do pisania posiada „blokadę obowiązkową”, co robi bardzo niewiele aplikacji (standardowa blokada POSIX to „blokada doradcza”) i która spowoduje zgłoszenie dobrze zdefiniowanego błędu niż nieprawidłowe zachowanie.
Chromatix,