GNU/Linux >> Tutoriels Linux >  >> Linux

Supprimer les N premières lignes d'un fichier journal actif

Je pense que cette tâche peut être réalisée avec sed

sed -i '1,10d' myfile

supprimerait les lignes de 1 à 10 du fichier.

Je pense que tout le monde devrait au moins jeter un coup d'œil à ces doublures sed 1.

Notez que cela ne fonctionne pas pour les fichiers journaux qui sont activement ajoutés par une application (comme indiqué dans la question).

sed -i créera un nouveau fichier et "supprimera" le fichier dans lequel l'écriture est en cours. La plupart des applications continueront à écrire des enregistrements de journal dans le fichier journal supprimé et continueront à remplir l'espace disque. Le nouveau fichier journal tronqué ne sera pas ajouté. Cela ne cessera que lorsque l'application est redémarrée ou est autrement signalée pour fermer et rouvrir ses fichiers journaux. À ce stade, il y aura un écart (enregistrements de journal manquants) dans le nouveau fichier journal s'il y a eu une activité consignable entre l'utilisation de sed et le redémarrage de l'application.

Un moyen sûr de le faire serait d'arrêter l'application, d'utiliser sed pour tronquer le journal, puis de redémarrer l'application. Cette approche peut être inacceptable pour certains services (par exemple, un serveur Web avec des exigences élevées en matière de débit et de continuité de service)


Non, les systèmes d'exploitation comme Linux, et ses systèmes de fichiers, ne prévoient pas la suppression de données dès le début d'un fichier. En d'autres termes, le point de départ du stockage d'un fichier est fixe.

La suppression de lignes depuis le début d'un fichier s'effectue généralement en écrivant les données restantes dans un nouveau fichier et en supprimant les anciennes. Si un programme a l'ancien fichier ouvert en écriture, la suppression de ce fichier est reportée jusqu'à ce que l'application ferme le fichier.

Comme l'ont noté les commentateurs, pour les raisons données dans ma phrase précédente, vous devez généralement coordonner l'élagage du fichier journal avec les programmes qui écrivent les journaux. La manière exacte de procéder dépend des programmes. Certains programmes fermeront et rouvriront leurs fichiers journaux lorsque vous leur enverrez un signal (par exemple HUP) et cela peut être utilisé pour empêcher l'écriture d'enregistrements de journal dans un fichier journal "supprimé", sans interrompre le service.

Il existe de nombreux utilitaires disponibles pour gérer la taille des fichiers journaux, par exemple logrotate

Certains programmes ont leurs propres utilitaires. Par exemple, le serveur Web Apache inclut un utilitaire rotatelogs.


Non. Une solution à ce problème générique de croissance des fichiers journaux est la rotation des journaux. Cela implique le déplacement régulier (tous les soirs ou toutes les semaines, généralement) d'un fichier journal existant vers un autre nom de fichier et un nouveau départ avec un fichier journal vide. Après un certain temps, les anciens fichiers journaux sont jetés.

Voir :http://www-uxsup.csx.cam.ac.uk/~jw35/courses/apache/html/x1670.htm


Linux
  1. Comment supprimer les lignes en double dans un fichier texte ?

  2. Comment supprimer les lignes vides d'un fichier (y compris les tabulations et les espaces) ?

  3. Concaténer des lignes en fonction du premier caractère de la ligne suivante ?

  4. Script Bash pour supprimer le fichier le plus ancien d'un dossier ?

  5. Comment supprimer le Bom d'un fichier UTF-8 ?

Comment supprimer le mot de passe d'un fichier PDF sous Linux

Comment supprimer des lignes d'un fichier à l'aide de la commande Sed

Comment supprimer les caractères (^M) d'un fichier sous Linux

Tirer au hasard un certain nombre de lignes à partir d'un fichier de données ?

7 Exemples de commandes Linux Uniq pour supprimer les lignes en double d'un fichier

Comment supprimer les lignes qui apparaissent sur le fichier B d'un autre fichier A ?