bash
Useless Use of Cat Award
Mitlerweile bin ich ja über mehrere Hinweise gestoßen, dass es manche Menschen einfach nicht vertragen eine *sinnlose* cat Anweisung in einem Shellscript zu sehen. Der ganze Hintergrund der Geschichte wird ja z.B. hier http://partmaps.org/era/unix/award.html zusammengefasst.
Ich denke aber, dass auch ein Konstrukt wie "cat /var/log/messages | grep <Asudruck>" durchaus seine Berechtigung hat. Will ich etwa das Logfile von gestern sehen wird daraus deutlich einfacher ein "zcat /var/log/messages | grep <Asudruck>" oder "bzcat /var/log/messages | grep <Asudruck>" auf der nächsten Maschine daraus. Und das kann wohl der grep alleine noch nicht…
rfuser
Viele kennen den schönen Befehl "fuser" auf der Konsole. Ein extrem nützlicher Befehl um rauszufinden, ob sich noch eine Datei von einem (oder mehreren) Prozess(en) im Zugriff befindet.
Das ist dann besonders nützlich, wenn etwa ein umount fehlschlägt, weil noch eine Datei im eingehängten Dateisystem geöffnet ist.
Gerade bei Dateisystemen, gibt es allerdings ein paar recht unangenehme Eigenschaften: Verzeichnisse und Leerzeichen in Dateinamen
In beiden Fällen hilft mir ab sofort das rfuser Kommando etwas weiter. Damit erfahre ich von den geöffneten Dateien, wenn sich diese in Unterordnern befindent:
alias rfuser="find -print0 | xargs -0 -i fuser "{}""
Diese Zeile trägt man sich am besten unter /etc/bash.bashrc.local ein, oder auch in das Profil eines einzelnen Benutzers.
Getestet wurde die ganze Sache von mir unter openSuSE 10.3!
Anregungen, Wünsche und Beschwerden dazu bitte wie immer da lassen!
Die Primzahlensuche ist eine Geschichte voller Missverständnisse
Ein Bekannter von mir sollte ein Programm zum Primzahlen berechnen schreiben, ist aber hoffnungslos daran gescheitert. Hier nur ein kurzer Hack, der in wenigen Minuten im vi auf der shell entstand und bei weitem nicht perfekt ist. Aber der Code darf jetzt ins Netz bevor das Programm endgültig von meiner Platte verschwindet!
#include <stdio.h> int is_prim(int); int main() { int i; for(i=0;i<10000;i++) { is_prim(i); } return 0; } int is_prim(int zahl) { int i; int prim=0; for(i=(zahl-1);i>=2;i--) { if((zahl%i)==0) { prim++; } else { } } if(prim==0) { printf("%d ist primn",zahl); } else { } return 0; }
Hier wären natürlich noch jede Menge Optimierungen möglich. So würde die Berechnung der Werte bis zur Wurzel der Obergrenze ja schon ausreichen, oder man könnte noch vielfache von vorhandenen Zahlen vorher aussieben.