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?


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

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.


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.


-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.


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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.