Ein Prozess blockiert das Aushängen eines Datenträger (II) – fuser

Symbolisiertes Terminal

Im ersten Teil wurden Prozesse identifiziert die das Aushängen eines Datenträgers verhindern aber wir haben immer noch keinen Zustand in dem ein Datenträger ausgehängt werden kann. Natürlich kann man ein z.B. evtl. offenes Office-Dokument abspeichern und das Officeprogramm beenden und das empfiehlt sich auch wenn man keinen Datenverlust riskieren möchte. Aber man kann auch die Prozesse hart beenden wenn kein Datenverlust droht. So ein Beispiel wäre z.B. wenn xpdf das Aushängen verhindert.:

# lsof +f -- /media/max/4335-1CEA/
lsof: WARNING: can't stat() fuse.portal file system /run/user/1000/doc
Output information may be incomplete.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
xpdf.real 23765 max cwd DIR 8,32 16384 12180 /media/max/4335-1CEA/Download
xpdf.real 23765 max 4r REG 8,32 3262888 12533 /media/max/4335-1CEA/Download/FujiFilm F20 Bedienungsanleitung

Hier ist eine PDF-Datei von xpdf geöffnet.

Ein verwandter Befehl zu lsof ist fuser. fuser kann Prozesse identifizieren die Dateien, Verzeichnisse und Sockets verwenden. Ein einfacher Aufruf würde z.B. zu so einer Ausgabe führen:

# fuser /media/max/4335-1CEA/
/media/max/4335-1CEA: 13159c 24928c 24943c

Weiterlesen

Ein Prozess blockiert das Aushängen eines Datenträger (I) – lsof

Symbolisiertes Terminal

Viele kennen das Problem, gerade bei USB-Speichergeräten, dass ein Programm oder Prozess das Aushängen eines Datenträgers verhindert denn nur ein Gerät was nicht in Benutzung ist kann auch ausgehängt werden. Dabei ist egal ob ein Dokument oder Datei offen ist oder ob man wie im anschließenden Fall nur das Verzeichnis in das es eingehängt wurde offen hat:

# umount /dev/sdb
umount: /media/max/4335-1CEA: target is busy.

Wie ermittelt man nun den Übeltäter? Dabei können wir umständlich alle offenen Programme durchgehen oder als elegantere Variante den Befehl lsof nutzten. Wie bei allen ls-Befehlen wie lsusb, lspci oder ls steht „ls“ für list und das of steht für „open file“.

Der einfachste Aufruf wäre lsof <Gerätedatei>:

# lsof /dev/sdb
lsof: WARNING: can't stat() fuse.portal file system /run/user/1000/doc
Output information may be incomplete.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 2157 max cwd DIR 8,16 16384 1 /media/max/4335-1CEA
bash 13159 root cwd DIR 8,16 16384 1 /media/max/4335-1CEA
lsof 14979 root cwd DIR 8,16 16384 1 /media/max/4335-1CEA
lsof 14980 root cwd DIR 8,16 16384 1 /media/max/4335-1CEA

Weiterlesen

vi und vim – eine Kommandoreferenz

Logo von vim

Unter Unix und unixoiden Betriebssystemen, zu denen auch Linux gehört, ist es oftmals nötig Textdateien zu editieren denn die Konfigurationsdateien z.B. sind, im Gegensatz zu Windows, meistens einfache Textdateien im ASCII-Format. Daher gibt es unter diesen Betriebssystemen einen ganzen Zoo an Editoren. Einer der meist genutzten Editoren ist vi bzw. seine Erweiterung vim. Der Grund ist das vi ein Editor für die Konsole ist und damit auch zu gebrauchen ist wenn die grafische Oberfläche nicht starten will aber auch seine sehr mächtigen Werkzeuge. Ein weiterer Grund ist, dass vi auf jedem POSIX-System installiert ist was in Rettungssituationen einfach notwendig ist den Editor bedienen zu können.

vi ist ein recht alter Editor der entwickelt wurde bevor es grafische Oberflächen gab und kann daher komplett mit der Tastatur bedient werden. Für Neulinge ist etwas ungewohnt, dass vi verschiedene Modi kennt. Auf vielen Linux-Distributionen ist vi ein symbolischer Link auf vim, also den verbesserten vi-Editor (vim steht für vi-improved), und es wird daher beim Aufruf von vi in Wirklichkeit vim gestartet.

Weiterlesen

IP-Blacklist aus dem Internet per Script an iptables übergeben

Schild Zugang für Unbefugte verboten

Angriffe eines Serverdienstes ist ein lästiges Übel für einen Serverbetreiber. Diese erfolgen vermutlich durch Scripte von gekaperten Servern. Bei einem sicher konfigurierten System können diese Angriffe keinen Schaden anrichten aber sie tauchen zu Haufen in der Serverlogs auf. Es gibt Listen im Internet wo solche lästigen IP-Adressen aufgeführt sind. Mir ist aufgefallen, dass unter https://www.redim.de eine recht brauchbare Liste, die täglich aktualisiert wird, existiert die normalerweise auch meine lästigsten Kandidaten enthalten. Nun wird dort vorgeschlagen die Liste in die .htaccess-Datei zu kopieren und darüber Websites zu schützen. Leider hat dies mehrere Nachteile.

  1. Nur Websites aber nicht andere Dienste wie Email, FTP oder SSH werden geschützt.
  2. Bei dem Betreiben von mehreren Websites muss diese Liste mehrfach eingepflegt werden.
  3. Die vorgeschlagene Variante über .htaccess muss händig aktualisiert werden oder man muss ein Script dafür schreiben.

Irgendwie hat mir das nicht wirklich zugesagt und Linux bringt mit iptables ja schon ein universelles Werkzeug mit um IP-Adressen zu blocken. Um Ports muss man sich da nicht kümmern da kaum zu erwarten ist, das von einer bösartigen IP-Adresse sinnvolle Anfragen kommen.

Mit diesen Überlegungen habe ich beschlossen ein Script zu schreiben was das alles automatisiert:

Weiterlesen

Der unbekannte Befehl – Die Konsole für Dummies (Teil II)

Symbolisiertes Terminal

Im ersten Teil habe ich den grundsätzlichen Umgang mit  Befehlen und den Umgang mit Vorder- und Hintergrundprozessen geschildert. In diesem Teil soll es um die Hilfeseiten, der Vervollständigung in der Shell und der Shell-History, die Umgebungsvariable PATH, der Ausgabe von Programmen gehen und deren Umlenkungen in andere Programme und Dateien gehen. Als Letztes wird noch die Funktion von Alias und eine Reihe Bash-Shortcuts beschrieben. Der dritte Teil dieser Serie wird dann eine Reihe grundlegender Shellbefehle gehen die für einen Linuxbenutzer irgendwann essentiell sind.

Hilfeseiten

Jedes komplexere System braucht Hilfeseiten um bedienbar zu bleiben. So hat auch die Shell eine Hilfesystem. Der Aufruf einer Hilfeseite erfolgt mit dem Befehl man und daher auch der gebräuchliche Name für diese Seiten: „Manpages“. Praktisch jedes Programm für die Konsole hat eine oder mehrere dieser Seiten. Je nach Komplexität werden diese thematisch aufgeteilt. Folgende Aufzählung zeigt die thematische Unterteilung auf. Nicht jede dieser Seiten muss jedoch auch existieren.

  • Benutzerkommandos (1)
  • Systemaufruf (2)
  • Funktionen der Programmiersprache C (3)
  • Dateiformate (4)
  • Konfigurationsdateien (5)
  • Spiele (6)
  • Diverses (7)
  • Kommandos zur Systemadministration (8)
  • Kernelfunktionen (9)
  • Neue Kommandos (n)

Weiterlesen

Der unbekannte Befehl – Die Konsole für Dummies (Teil I)

Symbolisiertes Terminal

Heute einmal eine andere Form von „Der unbekannte Befehl“ denn ich habe festgestellt, dass ich zwar hier Befehle behandele die mehr oder minder exotisch sind aber hier noch niemals was zu der ein paar Handvollen die man ständig braucht geschrieben habe. Daher nun eine Abhandlung zu den gängigen Befehlen die man in der Konsole ständig nutzt.

Einleitung

Man braucht hier vor allem Dateioperationen wie das Auflisten von Verzeichnissen oder das Anzeigen und Bearbeiten von Dateiinhalten aber auch das Ändern von Dateirechte und vieles mehr. Hier unterscheidet sich Linux zunächst einmal wenig von der Eingabeaufforderung von (MS-)DOS, Windows, CPM oder sonstige Konsolen. Die größten Unterschiede sind die Bezeichnung der Befehle und die grundlegende Bedeutung der Konsole. Während z.B. unter Windows die Eingabeaufforderung meist nur noch von Systemadministratoren benutzt wird hat sie unter Linux eine deutlich höhere Bedeutung. Das liegt zum Einen daran, dass Linuxbenutzer oft Computer-affinier sind aber vor allem auch daran, dass die Konsole deutlich mächtiger ist als es eine GUI sein kann.

Weiterlesen

Benchmark vom lokalen Netz in Linux-Netzwerken

Stilisierte Erde mit verschiedenen Verbindungen

Wenn man eine neue Netzwerkkarte eingebaut oder neues Netzwerkkabel verlegt hat so möchte man doch gerne wissen, wie gut die Performance der Netzwerkverbindung ist. In einem früheren Beitrag habe ich beschrieben wie man einen Benchmarktest über das Internet macht. Internetverbindungen und lokale Netzwerkverbindungen unterscheiden sich jedoch gravierend denn i.d.R. spielen bei der Internetverbindung viele Faktoren eine Rolle – Geschwindigkeit der beteiligten Router, Geschwindigkeit der Verbindung zur Gegenstelle, Auslastung des angefragten Servers usw. Im LAN wird die Geschwindigkeit nur durch den Switch und den beteiligten Netzwerkschnittstellen bestimmt. In diesem Beitrag beschränke ich mich auf das Benchmarking im LAN und auf ein reines Linux-Netzwerk. Windows benutze ich schon seit Jahren nicht mehr und da fehlt mir mittlerweile der aktuelle Stand der Technik.

Weiterlesen

Der unbekannte Befehl – „umask“ der Maskierer

Symbolisiertes Terminal

umask führt eigentlich sehr zu unrecht ein Schattendasein auf den meisten Rechnern denn umask ist ein Sicherheitsfeature was die Rechteverwaltung des Filesystems bestimmt. umask bestimmt wo und wann welche Besitzer- bzw Gruppenrechte gesetzt werden.

Bekanntlich hat unter Linux/Unix jede Datei einen Besitzer und gehört zu einer Gruppe. Unter Debian ist häufig für einen Benutzer auch der Name als Gruppe gesetzt. So gehört der Benutzer max dann der Gruppe max an. Weitere Gruppen wie floppy oder cdrom oder games können folgen. Jeder Benutzer der weder der Besitzer einer Datei ist noch der Gruppe angehört der gehört im Rechtesystem zu other.

Die wichtigsten Rechte werden in jeweils drei Bit beschrieben:

$ ls -l .bashrc
-rw-r--r-- 1 max max 3667 Jul 10 18:00 .bashrc
$ ls -ld .
drwxr-xr-x 77 max max 12288 Aug 25 23:02 .

Dabei symbolisiert die Ausgabe rwxrwxrwx die Rechte für den Besitzer, Gruppe und other (also alle anderen) und dahinter dann den Besitzer und die Gruppe zu der die Datei oder das Verzeichnis (Verzeichnisse sind unter Linux/Unix eigentlich auch nur eine besondere Art Datei) gehört.

Weiterlesen

Der unbekannte Befehl – „tee“ das T-Stück

Symbolisiertes Terminal

tee ist ein Befehl der praktisch nie alleinstehend benutzt wird sondern immer in Kombination mit anderen Befehlen und einer Pipe. Der Name tee leitet sich tatsächlich aus dem T-Stück bei Rohren ab. Normalerweise kennt Linux/Unix einen stdin, stdout und stderr als drei Kanäle. stdin ist der Eingabekanal, stdout der Ausgabekanal und stderr der Fehlerkanal. Im Zusammenhang mit tee spielt das eine wichtige Rolle denn tee ist sozusagen ein T-Stück für die Ausgabekanäle stdout und stderr. Normalerweise liest ein Befehl über den stdin ein und gibt über die beiden Ausgabekanäle aus welche oft der Bildschirm ist. Durch eine Pipe | kann die Ausgabe an weitere Befehle umgeleitet werden. So wird z.B. oft eine unübersichtliche Anzeige von ls an den Pager more weitergeleitete:

$ ls | more

und man erhält eine bildschirmseitenabhängige Ausgabe. Wenn man zwei Ausgabekanäle bedienen möchte dann kommt tee ins Spiel.

Weiterlesen

Der unbekannte Befehl – „patch“ das Flickwerk

Symbolisiertes Terminal

patch ist ein Befehl der sicher von den wenigsten Benutzern benutzt wird denn normalerweise übernimmt das Einspielen der Paketbetreuer der Distribution und man installiert das bereits kompilierte Paket. Mit Hilfe von Patches werden Programmversionen oder Sicherheitspatches eingespielt. Jedoch sind auch alle möglichen anderen Szenarien denkbar. Der Vorteil einer Patchdatei ist, sie ist für Menschen lesbar da es eine reine ASCII-Datei ist, sie ist sehr viel kleiner als ein neues Programmpaket und der Patch lässt sich rückgängig machen. Patchdateien besitzen oft die Dateiendung .diff oder .patch. patch ist gewissermaßen das Gegenstück zum Befehl diff.

Weiterlesen

kais-universum.de