Onde a opção -i no sed armazena as linhas correspondentes a uma expressão regular?

1

Estou tentando liberar espaço no hd do meu servidor, então estou combinando datas antigas em um arquivo de log com sed e está diminuindo, mas minha partição raiz agora usa 98% do espaço em vez de 91% que estava usando antes de invocar o sed. Eu fiz isso sed -i '/^Jan/ d' file.log e meu arquivo de log diminuir de 6G para 400M. Estou usando find / -size +1G tentando pesquisar um arquivo temporal ou algo assim, mas não está combinando com novos arquivos. Editar: eu fiz echo -n > file.log para evitar uma falha de serviço, mas é temporal porque o problema permanece

    
por altmas5 06.02.2012 / 14:53

2 respostas

3

A opção --in-place para sed não pode realmente editar um arquivo no lugar, então ele realmente faz o equivalente a:

if sed ... input > /tmp/output$$ ; then
    mv /tmp/output$$ input
else
    rm /tmp/output$$
fi

, o que significa que antes do comando mv você pode duplicar (ou pior) o tamanho do arquivo de entrada no disco. Quando os sistemas de arquivos chegam quase cheios, eles se tornam terrivelmente menos eficientes.

Parece que o maior problema é que você está simplesmente sem espaço em disco ou você tem / var / log e / tmp montado na mesma partição que / e se / está em uma partição pequena, você irá sobrecarregá-lo agora e na próxima semana e na semana seguinte, etc.

Veja mount e df /tmp e df /var/log para ver como seu disco está configurado. Você precisa:

  1. corrija a montagem do disco
  2. obtenha um disco maior
  3. veja em logrotate
  4. pare de registrar muito
  5. ou alguma combinação dos itens acima
por 06.02.2012 / 16:00
2

A execução do strace no sed -i deve deixar bem claro onde ele está colocando os arquivos temporários. Mas a coisa mais fácil de fazer é não usar -i. Redirecione a saída para um arquivo em uma partição em que você tenha espaço.

    
por 06.02.2012 / 16:20