Estou executando um aplicativo que grava no log.txt. O aplicativo foi atualizado para uma nova versão, tornando os plugins suportados não mais compatíveis. Isso força uma quantidade enorme de erros no log.txt e parece não suportar a gravação em um arquivo de log diferente.
Como posso gravá-los em um log diferente?
Eu considerei substituir log.txt por um link físico (o aplicativo não pode dizer a diferença, certo?) Ou um link físico que aponta para / dev / null. Quais são as minhas opções?
chmod -w log.txt
?Respostas:
Isso copia seu dispositivo nulo com os números dev principais e secundários corretos para
log.txt
que você tenha outronull
.Os dispositivos não são conhecidos pelo nome no kernel, mas pelo número maior e menor. Como não sei qual sistema operacional você possui, achei conveniente apenas copiar os números de onde já sabemos. Se você fizer isso com os números maiores e menores errados, provavelmente criaria outro dispositivo, talvez um disco ou outra coisa para a qual não queira gravar.
fonte
sudo
(ou é executado como usuário root). Por favor, explique (em sua resposta) o que você quer dizer com "os números dev maiores e menores"./dev/null
, conforme usado em seu comando. E acho que ajudaria futuros leitores a anotar na sua resposta quesudo
é necessário.cp -a /dev/null log.txt
os comentários e os meus comentários?sudo
para executar este comando, a menos que você acontecer a ser executado como usuárioroot
(que é geralmente desencorajado). Usarsudo
(ou executar comoroot
) para criar um link físico (esta resposta) ou um link simbólico (resposta de @ V.Michel) pode ser a solução certa, afinal, se o arquivo precisar ser colocado em um local no qual qualquer conta de usuário possa gravar, mas o ponto é: observe esse requisito explicitamente.mknod
. Observe que os comentários geralmente recebem pouca atenção; portanto, alguém que lê apenas a pergunta e sua resposta pode ficar confusa (como eu era; observe também que a maioria das pessoas nunca é exposta a conceitos como números de dispositivos maiores e menores).Você pode criar um link simbólico para / dev / null e não precisa ser root:
fonte
ls -l log.txt
isso mostraria que é um link simbólico para / dev / null, em vez de confiar em saber que, por exemplo, "1, 3" é algo significativo.As outras respostas aqui provavelmente funcionarão. Em particular, a solução de link simbólico provavelmente será a solução mais fácil. Eu ofereço isso principalmente por completude.
As soluções que involem
mknod
(oucp -a
) se tornam problemáticas se o sistema de arquivos que contém o arquivo não suportar dispositivos (por exemplo, foi montado com anodev
opção, por exemplo). E, é claro, links físicos entre sistemas de arquivos simplesmente não funcionam.Uma alternativa para links físicos ou criação de novos nós de dispositivos é usar montagens de ligação, que permitem montar um arquivo ou diretório de uma parte da árvore do sistema de arquivos em outra. Então, por exemplo, você pode executar:
Isso funciona como um link físico, mas:
Para um exemplo completo:
fonte
nodev
sistema de arquivos.Depende criticamente de COMO o aplicativo lida com o log.txt.
Se o aplicativo apenas abrir o arquivo existente e gravá-lo, como descrito em outras respostas, você pode vinculá-lo a / dev / null, vinculá-lo a outro lugar, vinculá-lo em outro lugar (embora os hardlinks não possam ser um sistema de arquivos cruzado, então não há ' Para isso, crie uma cópia do nó do dispositivo / dev / null, etc.
OTOH se o aplicativo excluir e recriar log.txt, nada disso funcionará. Você poderia ligar o diretório inteiro em outro lugar para redirecionar as gravações para um sistema de arquivos diferente, mas é só isso e você teria que lidar com outras coisas no diretório.
Eu acho que se você realmente quisesse, poderia criar um sistema de arquivos de sobreposição personalizado que passasse pela maioria das operações, descartando qualquer tentativa de criar um arquivo chamado log.txt.
fonte
chattr +i log.txt
pela primeira vez e o aplicativo não excluirá mais o arquivo.Bem, um método pouco gracioso com pipe nomeado:
você quase pode fazer qualquer coisa com o log despejado, como filtrar ou enviar nc .
fonte
cat
processo for interrompido ou travado, o programa de login será interrompido quando o tubo estiver cheio.Considere tornar o arquivo um dispositivo nulo real. Um arquivo "log.txt" criado com o mknod, com o tipo de arquivo correto e os mesmos números menores e maiores, atuará como um dispositivo nulo porque é.
fonte