J'exécute une application qui écrit dans log.txt. L'application a été mise à jour vers une nouvelle version, ce qui rend les plug-ins pris en charge plus compatibles. Il force une énorme quantité d'erreurs dans log.txt et ne semble pas prendre en charge l'écriture dans un fichier journal différent.
Comment puis-je les écrire dans un autre journal?
J'ai envisagé de remplacer log.txt par un lien dur (l'application ne peut pas faire la différence, n'est-ce pas?) Ou un lien dur qui pointe vers / dev / null. Quelles sont mes options?
chmod -w log.txt
?Réponses:
Cela copie votre appareil nul avec les bons numéros de développement majeurs et mineurs afin
log.txt
que vous en ayez un autrenull
.Les périphériques ne sont pas du tout connus par leur nom dans le noyau, mais plutôt par leur nombre majeur et mineur. Étant donné que je ne sais pas quel système d'exploitation vous avez, j'ai trouvé pratique de simplement copier les numéros d'où nous savons déjà qu'ils sont. Si vous le faites avec les mauvais nombres majeurs et mineurs, vous auriez probablement créé un autre périphérique, peut-être un disque ou autre chose sur lequel vous ne voulez pas écrire.
la source
sudo
(ou s'exécute en tant qu'utilisateur root). Veuillez expliquer (dans votre réponse) ce que vous entendez par "les bons nombres de développeurs majeurs et mineurs"./dev/null
, tel qu'il est utilisé dans votre commande. Et, je pense que cela aiderait les futurs lecteurs à noter dans votre réponse ce quisudo
est nécessaire.cp -a /dev/null log.txt
mes commentaires?sudo
d'effectuer cette commande, à moins que vous arrive d'être en cours d' exécution en tant qu'utilisateurroot
( ce qui est généralement déconseillée). Utilisersudo
(ou exécuter en tant queroot
) pour créer un lien dur (cette réponse) ou un lien symbolique (la réponse de @ V.Michel) peut être la bonne solution après tout, si le fichier doit être placé dans un emplacement où n'importe quel compte d'utilisateur peut écrire, mais le point est: notez cette exigence explicitement.mknod
. Notez que les commentaires reçoivent généralement peu d'attention, donc quelqu'un qui ne lit que la question et votre réponse peut être confus (comme moi; notez également que la plupart des gens ne sont jamais exposés à des concepts tels que les numéros de périphérique majeurs et mineurs).Vous pouvez créer un lien symbolique vers / dev / null et vous n'avez pas besoin d'être root:
la source
ls -l log.txt
cela montrerait qu'il s'agit d'un lien symbolique vers / dev / null, plutôt que de se fier à savoir que, par exemple, "1, 3" est en quelque sorte significatif.Les autres réponses ici fonctionneront probablement. En particulier, la solution de lien symbolique sera probablement la solution la plus simple. J'offre cela principalement pour être complet.
Les solutions impliquant
mknod
(oucp -a
) deviennent problématiques si le système de fichiers contenant le fichier ne prend pas en charge les périphériques (par exemple, il a été monté avec l'nodev
option, par exemple). Et bien sûr, les liens durs entre les systèmes de fichiers ne fonctionneront tout simplement pas.Une alternative aux liens durs ou à la création de nouveaux nœuds de périphériques consiste à utiliser des montures de liaison, qui vous permettent de monter un fichier ou un répertoire d'une partie de votre arborescence de systèmes de fichiers sur une autre. Ainsi, par exemple, vous pouvez exécuter:
Cela ressemble beaucoup à un lien dur, mais:
Pour un exemple complet:
la source
nodev
système de fichiers.Cela dépend de façon critique de la façon dont l'application gère log.txt.
Si l'application ouvre simplement le fichier existant et y écrit, comme décrit dans d'autres réponses, vous pouvez le lier symboliquement à / dev / null, le lier ailleurs, le lier ailleurs (bien que les liens ne puissent pas être un système de fichiers croisé, il n'y a donc pas de ' t beaucoup de point dans cela) créer une copie du nœud de périphérique / dev / null là etc.
OTOH si l'application supprime et recrée log.txt, rien de tout cela ne fonctionnera. Vous pouvez créer un lien symbolique vers le répertoire entier ailleurs pour rediriger les écritures vers un système de fichiers différent, mais c'est à ce sujet et vous devrez traiter d'autres choses dans le répertoire.
Je suppose que si vous le vouliez vraiment, vous pourriez créer un système de fichiers de superposition personnalisé qui a passé la plupart des opérations tout en rejetant toutes les tentatives de création d'un fichier appelé log.txt.
la source
chattr +i log.txt
la première fois et l'application ne supprimera plus le fichier.Eh bien, une méthode ingrate avec un tube nommé:
vous pouvez presque tout faire avec le journal sauvegardé, comme filtrer ou envoyer via nc .
la source
cat
processus est tué ou plante, le programme de connexion se bloque lorsque le tuyau est plein.Envisagez de faire du fichier un périphérique nul réel. Un fichier "log.txt" créé avec mknod, avec le bon type de fichier et les mêmes nombres mineurs et majeurs, agira comme un périphérique nul car il l'est.
la source