Introduction
La commande fuser
sous Solaris est très pratique pour retrouver si il existe
des process qui accèdent à un répertoire ou à un fichier.
Exemple dans cet article : l’étude des process qui accèdent au fichier sybase_exploit.log qui a explosé le quota d’une zone ZFS Solaris
sybase@SRVUNXFR> fuser -fu sybase_exploit.log
sybase_exploit.log: 21363o(sybase) 21362o(sybase) 17003o(sybase) 14722o(sybase) 14721o(sybase) 14720o(sybase) 14719o(sybase) 14428o(sybase) 14378o(sybase) 14332o(sybase) 14311o(sybase) ...
Pour obtenir uniquement la liste des ID des process (PID) sans aucun
formatage de la commande fuser
, renvoyer la sortie STDERR vers /dev/null
:
sybase@SRVUNXFR > fuser sybase_exploit.log 2> /dev/null
24061 24060 17003 14722 14721 14720 14719 14718 14717 14716 14662 14625 14624 14623 14622 14586 14581
Lorsque la liste des process est négligeable, le programme correspondant à
un process ID (PID) peut être retrouvé manuellement avec la commande ps
qui
liste les process :
sybase@SRVUNXFR> ps -ef | grep 14428
sybase 14428 1 0 14:51:01 pts/1 0:00 /Software/sybase/sybase-15.0.3-64b/ASE-15_0/bin/backupserver -SDTH_U1_BCK -e/So
En revanche l’opération manuelle devient très fastidieuse lorsque le nombre
de process est élevé dans le résultat de la commande fuser
.
Avant de se lancer dans le développement d’un script shell, 2 astuces très pratiques et à retenir sont proposées dans cet article :
- Combiner
fuser
etps
en une seule ligne de commandes afin de lister tous les programmes qui accèdent à un répertoire ou à un fichier. - Lancer la commande
kill
en masse avecfuser
pour tuer tous les programmes qui accèdent à un répertoire ou à un fichier.
Retrouver les programmes qui accèdent à un fichier ou à un répertoire en une seule ligne de commande avec ps et fuser
Une simple ligne de commande combinant les commandes ps
et fuser
affiche
instantanément les programmes qui accèdent à un fichier (sybase_exploit.log
dans l’exemple ci-dessous) :
ps -o pid,args -p "$(fuser sybase_exploit.log 2>/dev/null)"
PID COMMAND 14247 /Software/sybase/sybase-15.0.3-64b/ASE-15_0/bin/dataserver -sDAS_U1_ASE -d/DAS/ 14279 /Software/sybase/sybase-15.0.3-64b/ASE-15_0/bin/dataserver -sDTH_U1_ASE -d/DTH/ 14311 /Software/sybase/sybase-15.0.3-64b/ASE-15_0/bin/dataserver -sMIP_U1_ASE -d/MIP/ 14332 /Software/sybase/sybase-15.0.3-64b/ASE-15_0/bin/dataserver -sSMA_U1_ASE -d/sma/ 17003 /bin/ksh dba/bin/update_statistics.ksh -D SMA_U1_ASE -Mindex 24060 isql -Usa -D smartco -SSMA_U1_ASE -i/Software/sybase/dba/scratch/upstat.SMA_U1_ 24061 grep -v ^Password:
L’option -p
de la commande ps
accepte en paramètre une liste de process PID.
Cette liste de process est le résultat de la commande fuser
en supprimant la
sortie STDERR vers /dev/null
.
Tuer massivement avec la commande fuser et l’option kill les programmes qui accèdent à un fichier ou à un répertoire
Voici un exemple avec 2 process qui accèdent au fichier spa.log :
ps -o pid,args -p "$(fuser spa.log 2>/dev/null)"
PID COMMAND 25507 isql -Usa -ospa.log 25554 isql -Usa -ospa.log
À utiliser avec précaution et en connaissance de cause, la commande fuser
avec l’option -k
tue en une seule ligne de commande les process accédant au
fichier spa.log sans devoir lancer unitairement la commande kill
:
|
|