L'utilità del fusore in Linux è uno strumento potente. Come suggerisce il nome, fornisce informazioni sull'utente del file o sul processo che sta attualmente utilizzando il file o la directory.
Ma la funzionalità del fusore non si limita solo a fornire informazioni sul processo. L'articolo spiega come utilizzare l'utilità fusore con 5 esempi pratici.
1. Chi utilizza un file o una directory?
Questo è l'uso di base del comando fusore. cioè per identificare quali processi stanno usando un particolare file o directory.
$ fuser . ./: 3965c 4175c 4281c 4334c 4337c
Nell'esempio precedente abbiamo utilizzato l'utilità fusore per trovare tutti i processi utilizzando la directory corrente './' .
Vediamo che l'output è costituito dagli ID di processo dei processi che utilizzano il fusore, ma tutti i PID sono seguiti da un carattere 'c'. Indica il tipo di accesso. Il tipo di accesso può essere uno qualsiasi dei seguenti:
- c directory corrente
- e eseguibile in esecuzione
- f apri il file. f viene omesso nella modalità di visualizzazione predefinita
- F apri il file per la scrittura. F viene omesso nella modalità di visualizzazione predefinita
- r directory principale
- m file mappato o libreria condivisa
Quindi 'c' nell'output significherebbe che questi processi stanno usando questa directory come directory corrente.
Utilizzare l'opzione -v per visualizzare informazioni dettagliate nell'output:
$ fuser -v ./ USER PID ACCESS COMMAND ./: himanshu 3965 ..c.. bash himanshu 4175 ..c.. gedit himanshu 4281 ..c.. bash himanshu 4334 ..c.. socket_serv himanshu 4337 ..c.. bash
Quindi vediamo sopra che l'esecuzione di fuser nella directory corrente fornisce le informazioni su tutti i processi che utilizzano questa directory.
2. fusore su un eseguibile
socket_serv è un programma C eseguibile che è un server TCP in ascolto su una porta particolare.
$ ./socket_serv
Quando esegui fuser su questo eseguibile, vedrai quanto segue:
$ fuser -v socket_serv USER PID ACCESS COMMAND socket_serv: himanshu 4334 ...e. socket_serv
Lo specificatore di accesso in questo esempio è "e". È diverso dallo specificatore di accesso che abbiamo visto negli esempi precedenti. Indica che il file è un eseguibile.
3. Verifica i processi che utilizzano socket TCP/UDP
Usando il fusore possiamo anche controllare i processi usando i socket TCP/UDP. Poiché l'eseguibile del programma C di esempio socket_serv sopra indicato è in esecuzione sulla porta TCP 5000, utilizziamo l'utilità fusore su questo socket.
$ fuser -v -n tcp 5000 USER PID ACCESS COMMAND 5000/tcp: himanshu 4334 F.... socket_serv
Quindi vediamo che il fusore fornisce tutte le informazioni dettagliate sul processo in esecuzione sulla porta TCP 5000.
Oltre agli esempi precedenti, possiamo utilizzare il flag '-m' con questa utilità per visualizzare i processi utilizzando un file system montato come un'unità USB.
4. Elimina i processi che utilizzano un particolare programma
Finora abbiamo appreso che fuser fornisce informazioni sui processi utilizzando file, directory, socket ecc. Ma la potenza di questa utility non si limita a fornire solo informazioni. Puoi anche terminare i processi utilizzando questa utilità.
Abbiamo visto che un server TCP è in esecuzione sul sistema che sta accedendo al file binario "socket_serv". Ora, proviamo a terminare il processo usando questo file binario usando il fusore.
$ fuser -v -k socket_serv USER PID ACCESS COMMAND socket_serv: himanshu 4334 ...e. socket_serv
Nota che abbiamo usato il flag '-k' per terminare il processo usando il file 'socket_serv'. Vediamo sull'altro terminale dove era in esecuzione il server.
$ ./socket_serv Killed
Ti abbiamo già spiegato come uccidere un processo usando 4 metodi diversi. Ora conosci un altro metodo per terminare un processo.
5. Termina interattivamente i processi utilizzando il fusore
Nell'esempio precedente abbiamo visto che il flag '-k' viene utilizzato quando vogliamo terminare i processi utilizzando un file particolare ma per evitare l'uccisione accidentale di processi, esiste un'altra opzione '-i'. Se utilizziamo questa opzione, 'fuser' verrà eseguito in modalità interattiva e chiederà prima di terminare il processo. Vedi l'esempio qui sotto.
$ fuser -v -k -i socket_serv USER PID ACCESS COMMAND socket_serv: himanshu 5643 ...e. socket_serv Kill process 5643 ? (y/N) y
Quindi vediamo che usando "-k" e "-i" possiamo uccidere selettivamente i processi usando un particolare file.
Ora, questo è un uso molto potente del comando "fusore".
Supponiamo di voler eliminare un file con forza ma è utilizzato da molti processi, quindi i processi non ti permetteranno di eliminare il file. In tal caso, puoi utilizzare l'utilità fusore per terminare tutti i processi (o processi selezionati) che utilizzano quel file.
$ fuser -v -k -i ./ USER PID ACCESS COMMAND ./: himanshu 3965 ..c.. bash himanshu 4175 ..c.. gedit himanshu 4281 ..c.. bash himanshu 4334 ..c.. socket_serv himanshu 4337 ..c.. bash Kill process 3965 ? (y/N) y Kill process 4175 ? (y/N) y Kill process 4281 ? (y/N) y Kill process 4334 ? (y/N) y Kill process 4337 ? (y/N) y
Nota che l'uso di '-k' invia un segnale SIGKILL ai processi che utilizzano quel particolare file. Possiamo usare l'opzione -SIGNAL per inviare qualsiasi altro segnale. L'elenco dei segnali supportati dal fusore è dato da:
$ fuser -l HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS UNUSED
Ad esempio, quanto segue invia SIGHUP invece di SIGKILL, quando usi l'opzione -k.
$ fuser -v -k -HUP -i ./