Vous recherchez les plus grands parmi les fichiers ouverts par tous les processus. lsof
a déjà les fichiers ouverts avec leurs tailles. Il peut s'agir de passer les bons paramètres à lsof
et de traitement de la sortie.
Vous pouvez utiliser le -F
Option de lsof
_ Pour obtenir sortie presque sans ambiguïté qui est serviable à une seule douleur modérée . La sortie est ambiguë car lsof
réécrit les nouvelles lignes de noms dans les noms de fichier à \n
.
La sortie lsof
consiste en un seul champ par ligne. Le premier caractère de chaque nom indique le type de champ et le reste de la ligne est la valeur du champ. Les champs sont: p
= pid (uniquement pour le premier descripteur dans un processus donné), f
= descripteur, t
= type (REG
pour régulier Les fichiers, le seul type qui a une taille), s
= taille (uniquement si disponible), n
= nom. Le code AWK ci-dessous recueille les entrées qui ont une taille et impriment la taille et le nom du fichier. Le reste des pipelines trie la sortie et conserve l'entrée avec la plus grande taille.
lsof -Fnst | awk '
{ field = substr($0,1,1); sub(/^./,""); }
field == "p" { pid = $0; }
field == "t" { if ($0 == "REG") size = 0; else next; }
field == "s" { size = $0; }
field == "n" && size != 0 { print size, $0; }
' | sort -k1n -u | tail -n42 | sed 's/^[0-9]* //'
Vous pouvez faire ce qui suit
lsof | grep REG | awk '{ print $1,$7,$9 }' | sort -t ' ' -k 2 -V
Utilisation de l'AWK, vous filtrez la sortie pour inclure la commande, la taille et le nom de fichier et triez-la en fonction de la 2e colonne, qui est la taille. - t Spécifie le délimiteur, - V Trier "naturellement" - SO 1, 2, 10 seront triés de cette façon au lieu de 1, 10, 2.-k est la clé du tri (la colonne que vous souhaitez trier par)