Linux: grep Magie

Geht es Euch auch so auf den Senkel, das, wenn man grep benutzt um in minifizierten Dateien etwas zu suchen, die ganze Datei ausgegeben wird, weil grep als Ergebnis die ganze (eine) Zeile ausgibt?

Ich präsentiere: Das Ende vom Minifizierungsergebnis

Für alle Linux Neulinge, mit grep kann man Dateien, meistens Text, aber nicht notwendigerweise, nach Suchbegriffen durchsuchen. Beispiel:

# grep ErrorLog /etc/httpd/sites/vhosts
ErrorLog logs/error_log
ErrorLog logs/error_log
ErrorLog logs/error_log
ErrorLog logs/error_log
#

Man sieht, das in der Datei vhosts 4x der Begriff ErrorLog in vier verschiedenen Zeilen vorkommt. So weit, so gut.

Was aber, wenn es nur eine einzige Zeile in dem zu durchsuchenden Textblock/Datei gibt?

Damit Ihr das nachvollziehen könnt, hier eine kurze Anweisung:

# wget „https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js“
–2020-04-14 22:57:08– https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js
Auflösen des Hostnamens ajax.googleapis.com (ajax.googleapis.com)… 2a00:1450:4007:811::200a, 216.58.204.138
Verbindungsaufbau zu ajax.googleapis.com (ajax.googleapis.com)|2a00:1450:4007:811::200a|:443 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 200 OK
Länge: nicht spezifiziert [text/javascript]
Wird in »jquery.min.js« gespeichert.

jquery.min.js [ <=> ] 90,92K –.-KB/s in 0,07s

2020-04-14 22:57:08 (1,33 MB/s) – »jquery.min.js« gespeichert [93100]

Das Ergebnis des obigen Befehls ist eine Datei in Eurem Verzeichnis, die „jquery.min.js“ heißt. Schaut Sie Euch mit einem Texteditor an und Ihr werdet sofort verstehen um was es geht.

Suchen wir darin etwas, sagen wir das Wort „function“, was in einer Javascriptdatei häufig vorkommen sollte, erhalten wir lediglich die Zahl „3“ als Ausgabe:

# grep -c function jquery.min.js
3
#

Das liegt daran, daß es in der ganzen Datei nur 3 „Zeilen“ gibt, in denen das Wort vorkommt. Bisschen wenig für JQuery, dem Javascriptframework oder? Schauen wir mal:

# grep function jquery.min.js

Wie man sehen kann, kommt das Wort „function“ da deutlich mehr als dreimal vor und es wird einem praktisch die gesamte Datei ausgegeben, statt nur anzuzeigen, was um den Suchbegriff drumrum ist, wie das bei einer zeilenbasierten Formatierung ( siehe erstes Beispiel ) der Fall wäre. Mit anderen Worten: Je nachdem wie groß die minifizierte Datei ist die man durchsucht, desto mehr völlig unnötigen Zeichensalat bekommt man als Ergebnis, was einem nicht weiterhilft.

Bis jetzt!

Jetzt sagen wir mal grep, daß es nur die Zeichen um das Suchergebnis herum ausgeben soll:

# N=10; grep -roP „.{0,$N}function.{0,$N}“ jquery.min.js
(function(e,t){var
=f.trim,x=function(e,t){retu
-z])/gi,H=function(e,t){retu
Case()},q=function(e){(a.add
ady())},_=function(){a.addEv
or:x,init:function(e,n,r){va
0,toArray:function(){return
his)},get:function(e){return

und siehe da, es werden viel, viele, sehr viele Treffer vom Wort „function“ ausgegeben, jede mit „Kontext“ darum.

Das funktioniert so

„N=10;“ setzt vor dem grep Befehl die Variable N auf 10, was am Ende meint „+- N Zeichen um den Suchbegriff“
„grep -roP“ sucht (-r) rekursiv, (-o) zeige nur den Suchbegriff an und (-P) benutze Reguläre-Suchausdrücke von Perl.
„.{0,$N}function.{0,$N}“  meint jetzt: 0-Nx beliebige Zeichen + „function“ + 0-Nx beliebige Zeichen

Also bekommen wir die obige Ausgabe, weil neben dem was wir suchen vorn und hinten noch maximal 10 beliebige Zeichen zum Suchbegriff zählen. Wer dem jetzt nicht folgen kann, aber interessiert ist, sollte nach „Reguläre Ausdrücke“ googeln und eifrig studieren. Reguläre Ausdrücke, auch Regex genannt, sind eine mächtige Sprache zur Musterformulierung.

Damit können wir jetzt beliebige minifizierte Dateien nach sinnvollem Kram durchsuchen, ohne unsinnig viel Müll zu bekommen.

Security Update: Firefox 75 ist da

Da hatten wir quasi gestern erst die Meldung, daß wir uns 74.0.1 updaten müßten und schon müssen wir auf Firefox 75.0 updaten, weil auch in der 74.0.1 ein Sicherheitsloch von der Größe New Yorks klafft 🙁

Security Update: Firefox 75 installieren

Hier könnt Ihr Euch vorab die Firefox Versionen für Eurer Fedora ziehen:

https://kojipkgs.fedoraproject.org//packages/firefox/75.0/1.fc30/x86_64/firefox-75.0-1.fc30.x86_64.rpm

https://kojipkgs.fedoraproject.org//packages/firefox/75.0/1.fc31/x86_64/firefox-75.0-1.fc31.x86_64.rpm

https://kojipkgs.fedoraproject.org//packages/firefox/75.0/1.fc32/x86_64/firefox-75.0-1.fc32.x86_64.rpm

Die Installation ist dann ganz einfach, wenn Ihr mit der Konsole im Downloadverzeichnis seid:

sudo dnf update ./firefox-75*rpm

Ein Doppelklick per Dateiexplorer geht natürlich auch, dann öffnet sich die Softwareverwaltung und fragt Euch nach dem Rootpasswort und schon wird es auch so installiert.

Der erste Eindruck ist leider „AAAAARGGGS!“ weil die Adressleiste wird jetzt abartig groß! Das sieht so dämlich aus!

Linux: 190GB RAM erwünscht ..

Da heißt es immer, Linux wäre so Ressourcenschonend .. mu har har har..auf dem Papier, ok 🙂

190 GB RAM erwünscht

Vorhin glitschte bei mir kurz die TOP Anzeige durch, da fielen mir folgende Angaben auf:

3294 marius 20 0 9,9g 1,0g 53144 S 0,7 6,7 2:18.47 java
2767 marius 20 0 3658568 703720 157848 S 1,3 4,3 8:02.93 thunderbird
4718 marius 20 0 3611796 622464 245956 R 2,7 3,8 41:28.36 firefox
3061 marius 20 0 5029712 561352 140764 S 0,3 3,4 36:38.85 skypeforlinux
2636 marius 20 0 1404048 516784 55476 S 0,0 3,2 0:48.15 gnome-software
2577 marius 20 0 3878152 293020 103852 S 0,0 1,8 8:53.58 cinnamon
6285 marius 20 0 2848784 275648 178572 S 0,0 1,7 1:06.03 Web Content
1713 gdm 20 0 2882496 222756 105604 S 0,0 1,4 0:11.92 gnome-shell
4961 marius 20 0 2721516 222324 147568 S 0,3 1,4 1:35.18 Web Content
2601 marius 20 0 98,4g 201364 73168 S 0,0 1,2 0:22.12 liferea
9771 marius 20 0 2612880 192700 127616 S 0,0 1,2 0:23.12 Web Content
10910 marius 20 0 2607960 187556 129964 S 3,3 1,1 0:19.45 Web Content
4900 marius 20 0 2627124 185064 106852 S 0,0 1,1 1:11.14 WebExtensions
2998 marius 20 0 935120 177228 90376 S 0,0 1,1 1:38.35 skypeforlinux
11932 marius 20 0 2581276 174744 129216 S 0,0 1,1 0:13.21 Web Content
4833 marius 20 0 2688600 172948 117520 S 0,0 1,1 1:31.50 Web Content
2603 marius 20 0 2899340 167280 99908 S 0,3 1,0 1:18.97 skypeforlinux
2090 root 20 0 431540 157632 127032 S 0,3 1,0 10:22.48 Xorg
2418 marius 9 -11 2493616 104560 16004 S 1,3 0,6 25:37.16 pulseaudio
3151 marius 20 0 82,4g 98896 77908 S 2,7 0,6 8:23.59 WebKitWebProces

rechnet man das zusammen, gehen alleine diese drei Prozesse davon aus, daß sie zusammen 190GB brauchen werden. Tun sie natürlich nicht 🙂 Zum Glück, weil das Mainboard nur maximal 32 GB könnte 😉

Wieder „Zum Glück“ sind dies nur die virtuelle Speicherblöcke. Denkbar wäre allerdings, daß ein manipulierter RSS Server, Liferea erkennt und einfach GBweise RSS Daten an den Prozess schickt, bis das System zu Tode geswappt wurde.

Für Liferea schauen wir mal in die pmem Tabelle rein:

15655: /usr/bin/liferea –gapplication-service
000055cbe8e92000 112K r—- liferea
000055cbe8eae000 284K r-x– liferea
000055cbe8ef5000 144K r—- liferea
000055cbe8f1a000 16K r—- liferea
000055cbe8f1e000 4K rw— liferea
000055cbe8f1f000 4K rw— [ anon ]
000055cbe99bf000 110760K rw— [ anon ]
00007f8800000000 33554432K rw— [ anon ]
00007f9000000000 33554432K —– [ anon ]
00007f9800000000 16777216K rw— [ anon ]
00007fa23c000000 132K rw— [ anon ]
… 2 Kilometer mehr an Speicherblöcken entfernt..

33G+33G+16G = 82G

Die rechtlichen 16 GB möchte er dann doch für den „Rest“ verbraucht wissen .. naja.. Ich geh mal davon aus, daß der Entwickler K mit M verwechselt hat und eigentlich 100 MB Ram haben wollte, was für LifeRea auch 99M zuviel gewesen wären 😉 Ich erwähne das eigentlich nur, weil das nicht erst seit gestern so ist: I wish

Wieso allerdings der WebKit Prozess da auch 82.4GB Ram haben wollte, entzieht sich mir jetzt. Die anderen WebKitProzesse waren mit viel weniger zufrieden.