lsof – list open files

lsof kann ein sehr mächtiges Tool zur Überwachung und Analyse des Systems sein.

lsof /Pfad/Datei

Informationen über die Verwendung der angegebenen Datei

lsof /dev/cdrom

Informationen über die Verwendung von z.B. dem CD-ROM-Laufwerk

lsof +D /home/benutzername

Informationen über die Verwendung von Dateien z.B. des Home-Verzeichnisses des Anwenders

lsof +p

Liefert die Informationen welche PID welche Datei benutzt

lsof +c

Liefert die Informationen welcher Prozess welche Datei benutzt

lsof +u

Liefert die Informationen welcher Anwender welche Datei benutzt

lsof +i

Liefert die Informationen welcher Netzwerkdienst von welchem Anwender, PID usw. benutzt wird

lsof +L1

Liefert die Informationen über bereits gelöschte Dateien

lsof -a

logische UND-Verknüpfung von Optionen; dies macht immer dann Sinn, wenn lsof mit zwei Optionen aufgerufen wird und beide angewendet werden sollen, da per Voreinstellung immer eine ODER-Verknüpfung angewendet wird.

z.B.:

sudo lsof -a -i -u www-data

Es werden alle Netzwerkports (=Netzwerkdateien) angezeigt, die vom Nutzer “www-data” offen gehalten werden.

[weitere Beispiel]

alternativ kann man sich auch folgenden Befehl anschauen

fuser -v /verzeichnis

mit diesem kannst du dir anzeigen lassen, welcher Benutzer, welche Datei momentan, in einen bestimmten Verzeichnis geöffnet hat…

Alternativ kann man das Programm auch per GUI bedienen -> Glsof-Filemonitor

Link:
sourceforge.net/projects/glsof/files/

find – Video

PS: um den locate-Index zu akualisieren brauchst du nur folgenden Befehl -> sudo updatedb

Streameditor – sed

Dies ist kein Texteditor im klassischen Sinne, da dieser die ursprüngliche Datei gar nicht verändert, das Ergebnis der Bearbeitung wird auf der Standardausgabe zur Verfügung gestellt, kann jedoch auch in eine Datei umgeleitet werden.

Aufruf:

… | sed 'sed-Anweisung' | …
… | sed –e 'sed-Anweisung’ –e `sed-Anweisung' | …
… | sed –f 'sed-Anweisungsdatei' | …

Wie diese Anweisungen aufgebaut sind, werde ich nun erklären.

Dabei ist zu beachten, dass sed einige Zeichen als Sonderzeichen ansieht und falls man diese als „normale“ Zeichen verwenden möchte, mittels Backslash („“) auskommentieren muss.

* -> das davor stehende Zeichen kommt nicht oder beliebig oft vor

. -> genau ein beliebiges Zeichen

^ -> am Zeilenanfang

$ -> am Zeilenende

[Zeichenliste] -> genau ein Zeichen, aber nur aus der Liste/Bereich

z.B.:
[0-9] -> 0 1 2 3 4 5 6 7 8 9
[a-c] -> a b c
[A-Z] -> A B C D E F G … u.s.w.
[A-Za-z] -> A a B b C c D d E e F f G g … u.s.w

[^Zeichenliste] -> genau ein Zeichen, aber keines aus der Liste/Bereich

Text ersetzen:

… | sed 's/File/Datei/g' | …

diese Anweisung ersetzt das Wort „File“ durch „Datei“

g -> (Global Flag) ersetzt nicht nur das erste Vorkommen von „File“ in einer Zeile, sondern durchsucht die ganze Zeile

s -> weißt sed an Text zu ersetzten, man könnte dies als Funktion von sed ansehen

Falls man dies jedoch nicht auf die komplette Datei anwenden möchte, kann man sed Anweisen, dies nur auf einen bestimmten Bereich anzuwenden.

… | sed –n '1,$p' | …

gibt alles von der ersten bis zur letzten Zeile aus

… | sed –n  '1,5!p' | …

gibt alles außer die ersten fünf Zeilen aus

n -> Pufferinhalt vom Arbeitsspeicher wird nicht mit ausgegeben, also nur der verarbeitete Teil wird dargestellt

$ -> letzte Zeile

! -> negiert die Ausgabe

Kommen wir zum ersten praktischen Beispiel.

cat /etc/passwd | sed  –n '/bash$/p'

gibt nur die Zeilen aus der angegebenen Datei aus, welche als Start-Shell die bash eingetragen haben

Die größten dpkg-Pakete auf Ubuntu/Debian ermitteln

Folgendermaßen findest du heraus, welche bereits installierten Pakete am meisten Festplattenplatz verbrauchen:

dpkg-query --show --showformat='${Package;-50}t${Installed-Size}n' | sort -k 2 -n | grep -v deinstall | awk '{printf "%.3f MB t %sn", $2/(1024), $1}'

Wikipedia in der Shell

Wer schnell etwas über z.B. DDR2 Speicher wissen möchte, braucht dafür nicht unbedingt einen Browser. ;-)

Installation:

sudo aptitude install wikipedia2text

Konfiguration:

wer den entsprechenden Artikel auf Wikipedia auf deutsch lesen möchte muss noch einen Parameter angeben.

wikipedia2text -l de DDR2 | less

ggf. kann man diese Parameter in der ~/.bashrc einfügen, sodass man diesen nicht immer wieder eintragen muss…

alias wikipedia2text='wikipedia2text -l de'

… oder man erstellt in der bashrc einen kleinen Funktionsaufruf.

wiki()
{
    wikipedia2text -l de $1 | less
}

gpm – nutze die Maus in der Konsole

gpm (=General Purpose Mouse Interface) ist ein Systemdienst, welcher die Nutzung des Mauszeigers in der Systemkonsole ermöglicht. – Ubuntu-Wiki

Install:

aptitude install gpm

Nun kannst du die Maus in der Konsole benutzen um z.B. den Midnight Commander oder aptitude zu steuern. Man kann nun zudem wie in X gewohnt kopieren und markieren.

HTML-Umlaute korrigieren

Mit dem folgendem Befehl kann man in allen “html”-Dokumente, im aktuellen Verzeichnis (+ Unterverzeichnissen) die HTML-Umlaute korrigieren lassen.

find . -iname "*.html" -exec sed -i 's/[äöüÄÜÖ]/\&¨/g;y/äöüÄÖÜ/aouAOU/;' {} \;
find . -iname "*.html" -exec sed -i 's/ß/\&szlig\;/g' {} \;

weiter “find”-Beispiele findest du hier:
suckup.de/linux/find-linux/

HowTo – aktualisiere die Ubuntu-ISO

zsync ist ein File-Transfer-Programm, ähnlich wie rsync. Es ist für die Verteilung von Dateien über Internet optimiert, so soll eine Datei auf einem Server, zu Tausenden Client verteilt werden können.

Install:

sudo aptitude install zsync

Wir können dies nun nutzen, um unsere Ubuntu-ISO auf die neueste Stand zu aktualisieren. Zum Beispiel, wenn du zuvor Ubuntu 9.10 (Karmica Koala) als “Alpha 6” heruntergeladen hast, kannst du mit dem folgendem Befehl auf die aktuelle Beta-Version upgraden.

Beispiel:

zsync -i karmic-desktop-i386.iso http://releases.ubuntu.com/karmic/ubuntu-9.10-beta-desktop-i386.iso.zsync

[gefunden auf Unix-lab]

aptitude & dpkg

Das dpkg-Programm war Anfangs dafür gedacht, dass man seine installierten Pakete verwalten kann. Doch man brauchte auch noch ein Programm welches schnell, praktisch und effizient im Umgang mit Pakete ist, so sollte es Pakete installieren, dessen Abhängigkeiten automatisch behandeln und ihre Konfigurationsdateien während des Aktualisierens berücksichtigen, genau für diesen Zweck wurde dann APT (Advanced Packaging Tool) entwickelt.

dpkg:

dpkg -l

z.B.:

dpkg -l | awk '{print $2}'

-> zeigt alle installierten Pakete an
(zeigt nur die installierten Paket-Namen an)

dpkg -l "*"

-> zeigt aller verfügbaren Pakete an

dpkg -l irgendwas

-> zeigt alle Pakete an in dessen Namen “irgendwas” vorkommt

dpkg -p paket

-> anzeigen von Informationen (z.B. Beschreibung, Größe, Version…) von installierten Paketen an

dpkg -i programm.deb

-> lokales Paket installieren

dpkg -r paket

-> (–remove) Paket deinstallieren (Konfiguration wird beibehalten)

dpkg -p paket

-> (–purge) Paket deinstallieren (auch die Konfiguration)

dpkg -S irgendwas

z.B.:

dpkg -S `which ls`

-> zeigt alle installierten Dateien und dazugehörige Pakete zu dem Suchbegriff “irgendwas” an
(zeigt das Paket an, zu dem das Programm “ls” gehört)

dpkg -L paket

-> zeigt die zugehörigen Dateien zu einem installierten Paket an

dpkg-reconfigure paket

-> konfiguriert ein Paket neu

dpkg-statoverride --update --add

-> überschreibt die Rechte für die eine Datei, auch nach einem Update

z.B.:

dpkg-statoverride --update --add nagios www-data 660 /var/lib/icinga/rw/icinga.cmd

-> chown nagios:www-data && chmod 660 – wird nach Updates auf die angegebene Datei durchgeführt

dpkg-statoverride --remove

-> setzt die Rechte einer Datei wieder auf den Standard zurück

dpkg-statoverride --list

-> zeigt die veränderten Dateien an

 

aptitude:

aptitude update

-> Update von allen Einträgen in /etc/apt/sources.list

aptitude upgrade

-> Upgrade, wenn ein Paket veraltet ist

aptitude install paket

-> Installiert das Paket “paket” und ggf. dessen Abhängigkeiten

aptitude remove paket

-> Paket deinstallieren (Konfiguration wird beibehalten)

aptitude purge paket

-> Paket deinstallieren (auch die Konfiguration)

aptitude search irgendwas

-> Sucht in allen Beschreibungen und Paket-Namen nach “irgendwas”

aptitude show paket

-> anzeigen von Informationen (z.B. Beschreibung, Größe, Version…)

aptitude -t

-> führt aptitude mit einem bestimmten Repository aus (Repository -> /etc/apt/sources.list)
z.B.:

aptitude -t etch-backports -V install clamav clamav-daemon clamav-freshclam

Grafischer-Modus in der Konsole:

aptitude

F10 : Zeigt das Menü an

(Info: Wenn du die Konsole auf deinem Desktop öffnest, kannst du auch mit der Maus auf das Menü klicken)

q : Ende oder Zurück (quit)

u : Update die Paket Liste (sourcres.list)

/ : Suche nach einem Paket

n : Noch mal nach dem selben suchen (next)

f : “new packages” verwerfen

Wenn du dein gesuchtes Paket nun gefunden hast:

+ : Markiert das Paket zum installieren oder updaten
: Markiert das Paket zum deinstallieren
_ : Markiert ein Paket zum purging (siehe oben)
: : Bricht alle Aktionen für ein Paket ab
b : Zeigt Abhängigkeitsprobleme an
! : Versucht Abhängigkeitsprobleme zu lösen
. : um zu versuchen die Abhängigkeiten anders aufzulösen
U : Markiert alle vorhanden Upgrades zum installieren

Wenn du nun mit deiner Auswahl zufrieden bist:

g : Zum zustimmen und zur Übersicht gehen (an dieser Stelle löst aptitude die Abhängigkeiten automatisch auf), dort musst du mit wiederholten “g” diese Übersicht bestätigen. Fertig.

Tipp: RegEx für aptitude

Man kann auch via RegEx suchen (sowohl in der “GUI” aus auch auf der Kommandozeile) z.B.: ^ack-grep$

Erlaubte RegEx: “.” – “+”, “”, “(“, “)”, “|”, “[“, “]”, “^”, “$”, “?”

 

Quellen:
https://www.debian.org/doc/manuals/debian-reference/ch02.de.html
http://wiki.ubuntuusers.de/dpkg
http://wiki.ubuntuusers.de/apt/apt-get
http://wiki.ubuntuusers.de/aptitude

wildcards in der shell

Wildcards sind eine Shell-Funktion, mit der Kommandozeile viel mächtiger als alle GUI-Datei-Manager macht. – Wiki

Hier ist eine Liste der am häufigsten verwendeten Platzhalter in der bash:

* -> Kein oder mehr Zeichen
? -> genau ein Zeichen
[bcde] -> genau eines dieser Zeichen (“b” bis “e”)
[ae] -> genau ein Zeichen aus dem angegebenen Bereich (“a” bis “e”)
[!abcde] -> jedes Zeichen, das nicht aufgeführt ist
[!ae] -> alle Zeichen, die nicht im angegebenen Bereich sind
{debian,linux} -> genau ein ganzes Wort von den angegebenen Wörtern

Beispiele:

Löscht jede Datei in dem aktuellen Verzeichnis, außer die die mit einem “.” beginnen:

rm *

verschiebt alle HTML-Dateien, die das Wort “linux” in ihrem Dateinamen haben, in dem Unterverzeichnis “neues_verzeichnis”:

mv *linux*.html neues_verzeichnis/

zeigt alle Dateien an, im aktuellen Verzeichnis an, die mit “d” beginnen und auf “.txt” enden:

ls d*.txt

löscht alle Dateien, deren Namen “junk.” gefolgt von genau drei beliebigen Zeichen ist:

rm junk.???

zeigt eine Liste aller Dateien oder Verzeichnisse an, deren Namen “sda” oder “hda” mit genau einer darauf folgenden Ziffer ist:

ls [sh]da[0-9]

zeigt eine Liste aller Dateien oder Verzeichnisse an, deren Namen “hda” mit genau zwei darauf folgenden Ziffer ist:

ls hda[0-9][0-9]

alle Dateien oder Verzeichnisse werden angezeigt, deren Namen entweder mit “hd” oder “sd” gefolgt von einem einzelnen Zeichen zwischen “a” und “c”:

ls {hd,sd}[ac]

kopiert alle Dateien, die mit einem Großbuchstaben beginnen, in das Verzeichnis dir2

cp [AZ]* dir2

löscht alle Dateien, die nicht auf “c”, “e”, “h” oder “g” enden:

rm *[!cehg]