Das Fuser-Dienstprogramm in Linux ist ein leistungsstarkes Tool. Wie der Name schon sagt, gibt es Informationen über den Dateibenutzer oder den Prozess, der gerade die Datei oder das Verzeichnis verwendet.
Die Fixierfunktion beschränkt sich jedoch nicht nur auf die Bereitstellung von Informationen über den Prozess. Der Artikel erläutert die Verwendung des Fixierer-Dienstprogramms anhand von 5 praktischen Beispielen.
1. Wer verwendet eine Datei oder ein Verzeichnis?
Dies ist die grundlegende Verwendung des Fixierbefehls. d.h. um zu identifizieren, welche Prozesse eine bestimmte Datei oder ein bestimmtes Verzeichnis verwenden.
$ fuser . ./: 3965c 4175c 4281c 4334c 4337c
Im obigen Beispiel haben wir das Fuser-Dienstprogramm verwendet, um alle Prozesse zu finden, die das aktuelle Verzeichnis „./“ .
verwendenWir sehen, dass die Ausgabe aus Prozess-IDs der Prozesse besteht, die Fixierer verwenden, aber allen PIDs folgt ein Zeichen „c“. Dies zeigt die Art des Zugriffs an. Der Zugriffstyp kann einer der folgenden sein:
- c aktuelles Verzeichnis
- e ausgeführte ausführbare Datei
- f Datei öffnen. f wird im Standardanzeigemodus weggelassen
- F Datei zum Schreiben öffnen. F wird im Standardanzeigemodus weggelassen
- r Stammverzeichnis
- m Mmap-Datei oder gemeinsam genutzte Bibliothek
„c“ in der Ausgabe würde also bedeuten, dass diese Prozesse dieses Verzeichnis als ihr aktuelles Verzeichnis verwenden.
Verwenden Sie die Option -v, um detaillierte Informationen in der Ausgabe anzuzeigen:
$ 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
Wir sehen also oben, dass das Ausführen von fuser im aktuellen Verzeichnis Informationen über alle Prozesse liefert, die dieses Verzeichnis verwenden.
2. fuser auf einer ausführbaren Datei
socket_serv ist ein ausführbares C-Programm, das ein TCP-Server ist, der auf einem bestimmten Port lauscht.
$ ./socket_serv
Wenn Sie fuser auf dieser ausführbaren Datei ausführen, sehen Sie Folgendes:
$ fuser -v socket_serv USER PID ACCESS COMMAND socket_serv: himanshu 4334 ...e. socket_serv
Der Zugriffsbezeichner in diesem Beispiel ist „e“. Es unterscheidet sich von dem Zugriffsbezeichner, den wir in den obigen Beispielen gesehen haben. Es vermittelt, dass die Datei eine ausführbare Datei ist.
3. Prozesse mit TCP/UDP-Sockets prüfen
Unter Verwendung von fuser können wir auch die Prozesse überprüfen, die TCP/UDP-Sockets verwenden. Da die oben angegebene ausführbare Beispiel-C-Programmdatei socket_serv auf TCP-Port 5000 ausgeführt wird, können wir das Fuser-Dienstprogramm auf diesem Socket verwenden.
$ fuser -v -n tcp 5000 USER PID ACCESS COMMAND 5000/tcp: himanshu 4334 F.... socket_serv
Wir sehen also, dass der Fuser alle detaillierten Informationen über den Prozess liefert, der auf TCP-Port 5000 läuft.
Abgesehen von den obigen Beispielen können wir mit diesem Dienstprogramm das Flag „-m“ verwenden, um Prozesse anzuzeigen, die ein gemountetes Dateisystem wie ein USB-Laufwerk verwenden.
4. Prozesse beenden, die ein bestimmtes Programm verwenden
Bis jetzt haben wir gelernt, dass fuser Informationen über die Prozesse bereitstellt, die Dateien, Verzeichnisse, Sockets usw. verwenden. Die Leistungsfähigkeit dieses Dienstprogramms beschränkt sich jedoch nicht nur auf die Bereitstellung von Informationen. Sie können mit diesem Dienstprogramm auch Prozesse beenden.
Wir haben gesehen, dass auf dem System ein TCP-Server läuft, der auf die Binärdatei ‚socket_serv‘ zugreift. Lassen Sie uns nun versuchen, den Prozess mithilfe dieser Binärdatei mithilfe von fuser zu beenden.
$ fuser -v -k socket_serv USER PID ACCESS COMMAND socket_serv: himanshu 4334 ...e. socket_serv
Beachten Sie, dass wir das Flag „-k“ verwendet haben, um den Prozess mit der Datei „socket_serv“ zu beenden. Lassen Sie uns auf dem anderen Terminal sehen, wo der Server lief.
$ ./socket_serv Killed
Wir haben Ihnen bereits erklärt, wie Sie einen Prozess mit 4 verschiedenen Methoden beenden können. Jetzt kennen Sie eine weitere Methode, um einen Prozess zu beenden.
5. Beenden Sie Prozesse interaktiv mit dem Fixierer
Im obigen Beispiel haben wir gesehen, dass das Flag „-k“ verwendet wird, wenn wir die Prozesse mit einer bestimmten Datei beenden möchten, aber um das versehentliche Beenden von Prozessen zu vermeiden, gibt es eine andere Option „-i“. Wenn wir diese Option verwenden, wird „Fuser“ im interaktiven Modus ausgeführt und fragt, bevor der Prozess beendet wird. Siehe das Beispiel unten.
$ fuser -v -k -i socket_serv USER PID ACCESS COMMAND socket_serv: himanshu 5643 ...e. socket_serv Kill process 5643 ? (y/N) y
Wir sehen also, dass wir mit „-k“ und „-i“ Prozesse mit einer bestimmten Datei selektiv beenden können.
Nun, dies ist eine sehr mächtige Anwendung des Befehls „fuser“.
Angenommen, Sie möchten eine Datei zwangsweise löschen, aber sie wird von vielen Prozessen verwendet, dann lassen die Prozesse Sie die Datei nicht löschen. In diesem Fall können Sie das Fuser-Dienstprogramm verwenden, um alle Prozesse (oder ausgewählte Prozesse) zu beenden, die diese Datei verwenden.
$ 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
Beachten Sie, dass die Verwendung von „-k“ ein SIGKILL-Signal an die Prozesse sendet, die diese bestimmte Datei verwenden. Wir können die Option -SIGNAL verwenden, um jedes andere Signal zu senden. Die Liste der vom Fixierer unterstützten Signale ist gegeben durch:
$ 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
Folgendes sendet beispielsweise SIGHUP statt SIGKILL, wenn Sie die Option -k verwenden.
$ fuser -v -k -HUP -i ./