É seguro abrir um arquivo que está sendo gravado por um script em execução?

20

Estou executando um script de shell que está gravando em um arquivo.
Esse script pode levar muito tempo para ser concluído e eu gostaria de monitorar a saída parcial em vez de aguardar a conclusão do script inteiro.

É seguro abrir (clique duas vezes) um arquivo que está sendo gravado pelo script?

Nenhum
fonte
4
Aquele. Além disso, se você souber de antemão, poderá canalizar a saída dos scripts pelo tee.
Hennes
11
Semi-relacionado é o comando tee: você pode encaminhar a saída para algum arquivo e para o terminal ao mesmo tempo: man7.org/linux/man-pages/man1/tee.1.html
Cheiron

Respostas:

42

A leitura do arquivo é segura, embora o clique duplo que você mencionou provavelmente abra o arquivo em algum editor que oferecerá uma opção para fazer alterações e salvá-las. Ocorrem erros de cliques, por isso recomendo comandos que nem permitem alterar o arquivo.

Estes são exemplos que funcionam no terminal; eles apenas lerão o arquivo:

cat file
less file
less +F file
tail -n 5 file
tail -f file
Kamil Maciorowski
fonte
4
Muitos editores de arquivos mais inteligentes avisam que o arquivo foi alterado e perguntam se você deseja recarregá-lo, mas editores burros podem não.
User1306322
5
@ user1306322 Isso ainda não é garantido como seguro. Só porque o arquivo está aberto para gravação não significa que ele esteja sendo gravado constantemente. Se nada foi escrito enquanto o editor estiver sendo executado, ele não notará. E como um editor pode escrever um novo arquivo e renomear por cima (porque os nomes são atômicos), o arquivo para o qual está sendo gravado será excluído. A saída gravada a partir desse ponto irá para um arquivo excluído.
Kasperd
13

Contanto que você não esteja escrevendo, tudo ficará bem.

No entanto, eu recomendaria usar

tail -f log_file

em outro terminal.

Este comando "segue" o arquivo log_filee grava o conteúdo recém-adicionado assim que for atualizado pelo script.

Iskustvo
fonte
1

Representante insuficiente para adicionar um comentário à resposta de Kamil Maciorowski:

Para alguns arquivos, você deseja tail -F fileque o seguinte continue por uma rotação. Assistindo syslog por exemplo.

studog
fonte
-1

Caso o script (ou a implementação da estrutura subjacente) esteja abrindo e fechando repetidamente o identificador de arquivo durante seu trabalho, ele poderá encontrar um erro de violação de compartilhamento no modo de gravação subsequente aberto pelos seguintes motivos:
1) O script pode solicitar a gravação acesso no modo exclusivo (excluindo acesso de leitura simultâneo); portanto, se o seu programa editor / visualizador de arquivos ainda estiver lendo apenas o arquivo, ele poderá causar uma falha no script de gravação.
2) Além disso, alguns editores / visualizadores de arquivos bloqueiam o arquivo por toda a duração em que o arquivo é aberto.

Em conclusão, existem possíveis problemas que dependem do programa que você está usando para visualizar o arquivo. E há possíveis problemas decorrentes da implementação (ou da estrutura subjacente) do script que grava no arquivo.

Roland Pihlakas
fonte
11
Pela minha experiência, isso é muito incomum no Linux (nota: eu sou um usuário doméstico). Eu sei que o problema existe no Windows, mas a questão está marcada como linux . Quais "editores / visualizadores" funcionam assim no Linux? Em que tipos de Linux os bloqueios são obrigatórios?
Kamil Maciorowski
@KamilMaciorowski Infelizmente, não tenho uma lista de avisos específica. Os bloqueios não são obrigatórios em nenhum lugar (nem no Windows), algumas pessoas apenas os usam. Estou apenas dizendo que esse problema é possível e, por favor, não use essa abordagem descuidadamente em situações críticas. Cabe ao OP decidir se isso se aplica ou se é importante. A mera existência da pergunta acima aumenta as chances de que esse fenômeno já tenha acontecido no OP. As respostas que alegam que nada pode acontecer também não fornecem muitas informações novas.
Roland Pihlakas
11
@RolandPihlakas Eu estou disposto a apostar autor deste resposta tenha experimentado isso -, mas unicamente no Windows. Portanto, é irrelevante para sistemas compatíveis com POSIX, como o Linux, nos quais o monitoramento de saída é rotineiro tail -fou less +Frotineiro.
Chromatix
@Chromatix Estou realmente confuso sobre a parte construtiva do seu raciocínio e não consigo ver que tipo de sugestão ou nova informação você está fornecendo aqui, além do seu ódio pessoal pelo Windows ... Você não respondeu aos pontos do meu comentário . . Por que você se importa com o que eu experimentei? Por favor, não seja pessoal.
Roland Pihlakas
@RolandPihlakas Porque sua resposta dá a impressão muito firme de que abrir um arquivo somente leitura é perigoso no Linux, quando na verdade não é. De fato, é sempre seguro ler um arquivo ao qual está sendo anexado, desde que você não assuma que "fim do arquivo" significa "fim do registro" ou "fim da linha". O único caso de falha é quando o aplicativo de gravação mantém um "bloqueio obrigatório", o que poucos aplicativos fazem (o bloqueio POSIX padrão é um "bloqueio de aviso") e que resulta em um erro bem definido sendo gerado. do que comportamento errático.
Chromatix