Je suis au courant de trois méthodes pour supprimer toutes les entrées d'un fichier.
Elles sont
>filename
touch filename
filename < /dev/null
Sur ces trois-là, j'abuse >filename
le plus car cela nécessite le moins de frappes.
Cependant, j'aimerais savoir quelle est la plus efficace des trois méthodes (s'il existe des méthodes plus efficaces) en ce qui concerne les gros fichiers journaux et les petits fichiers.
En outre, comment les trois codes fonctionnent-ils et suppriment-ils le contenu?
shell-script
files
debal
la source
la source
truncate -s 0 filename
?Réponses:
En réalité, le second formulaire
touch filename
ne supprime rien du fichier. Il crée uniquement un fichier vide s'il n'en existait pas ou met à jour la date de dernière modification d'un fichier existant.Et le troisième
filename < /dev/null
essaie de lancer le nom de fichier avec/dev/null
comme entrée.cp /dev/null filename
travaux.En ce qui concerne l'efficacité, la plus efficace serait
truncate -s 0 filename
; voir ici: http://linux.die.net/man/1/truncate .Sinon,
cp /dev/null filename
ou> filename
sont les deux bien. Ils ouvrent et ensuite ferment le fichier en utilisant le paramètre truncate-on-open.cp
ouvre également/dev/null
, ce qui le rend légèrement plus lent.D'autre part, cela
truncate
serait probablement plus lent que> filename
lorsqu'il est exécuté à partir d'un script, car l'exécution de la commande tronquer nécessite que le système ouvre le fichier exécutable, le charge et l'exécute.la source
truncate
c'est le plus efficace?> filename
méthodes doivent appeler.truncate(2)
ne fait pas ça.touch filename
, l'inode restera-t-il le même (à condition qu'il y ait déjà eu un fichier)?ls -i
Une autre option pourrait être:
De la page de manuel de
echo
:la source
Il existe une commande intégrée ":", disponible dans sh, csh, bash et d'autres peut-être, qui peut être facilement utilisée avec l'opérateur de sortie redirigeant
>
tronquant un fichier:Ce que j’aime, c’est qu’il n’a pas besoin de commandes externes comme "echo", etc.
Un gros avantage de tronquer des fichiers au lieu de les supprimer / les recréer est qu’il
tail -f filename
n’est pas nécessaire de le rouvrir pour exécuter des applications fonctionnant avec ce fichier (par exemple, une personne ou un logiciel de surveillance, ...). Ils peuvent simplement continuer à utiliser le filedescriptor et obtenir toutes les nouvelles données.la source
man bash
décrit le:
shell intégré comme n'ayant aucun effet.>
vers le fichier, qui le crée s’il n’existe pas et, s’il existe, vous le tronquez à zéro. Mieux dit: vous utilisez le:
pour ne rien faire, et vous utilisez pour ne rien>
rediriger vers un fichier et le tronquer.> file
est suffisant pour tronquer un fichier. Vous n'avez besoin d'aucune commande, juste de l'opérateur de redirection.> filename
ne fonctionnera pas. par exemple, en zsh. mais: > filename
fonctionne encore.> myfile
mais par exemple, les erreurs csh avec: Commande null invalide.