Kategorieauswahl

Script

Linux und Swap

So lange Linux im RAM arbeiten kann sind auch virtuelle Computer z.B. mit VMware super schnell im Vergleich zu Hyper-V. Sobald allerdings geswappt werden muss kann es zu einer echten Geduldsprobe werden. Eine komprimierte RAM-Disk kann dabei auf Mehrkernsystemen weiter helfen. Alle nachfolgenden Schritte sollten Sie als Benutzer root durchführen.

Installieren Sie dazu zunächst das Paket compcache, falls es noch nicht auf Ihrem PC ist. Bei Ubuntu ist es meistens schon mit an Bord, während bei SuSE (zum installieren auf der Kommandozeile zypper in compcache eintippen) dies in der Regel fehlt.

Jetzt müssen wir nur noch irgendwelche Befehle finden um das Ganze auch nutzen zu können. Die Linux Cracks mögen meine etwas unkonventionelle Beschreibung bitte verzeihen und Verbesserungsvorschläge unterbreiten. Ich habe im Internet keine besseren Anleitungen gefunden. In meinem System sind 4 Kerne und 4 GB RAM. Daher zwacke ich max. 512 MB für RAMdisks ab. Hat man mehrere Kerne sollte für jeden Kerne eine eigene RAMdisk angelegt werden, damit die Kerne sich nicht um den Zugriff auf das Swapdevice prügeln. Mein Vorschlag an dieser Stelle ist, tragen Sie die folgenden Zeilen in Ihre /etc/init.d/boot.local Datei ein:

modprobe ramzswap num_devices=4        # um das Kernelmodul zu laden und ihm klar zu machen, dass 4 Swapdrives angelegt werden
rzscontrol /dev/ramzswap0 -i -d 128000   # legt 128KB für die 1. RAM-Disk zur Seite
rzscontrol /dev/ramzswap1 -i -d 128000   # legt noch einmal 128KB für die 2. RAM-Disk zur Seite
rzscontrol /dev/ramzswap2 -i -d 128000   # …und so weiter…
rzscontrol /dev/ramzswap3 -i -d 128000   # bis ich schliesslich mein 512 MB zusammen habe.
swapon -p -1 /dev/ramzswap0   # hier nachfolgend werden nun die vorbereiteten RAMdisks als Swapdevices mit gleicher Priorität zugewiesen
swapon -p -1 /dev/ramzswap1
swapon -p -1 /dev/ramzswap2
swapon -p -1 /dev/ramzswap3   # bis hier hin.
swapon -p -100 /dev/sda6   # der schaltet noch die Festplattenreserve dazu, wenn mal alle Stricke reissen. Allerdings mit einer Priorität von -100. Das hat zur Folge, dass er erst die RAMdisks verwendet und erst 2. rangig die Festplatte.

Wenn Sie 8 Kerne haben legen Sie eben 8 RAM Disks an und bei mehr Speicher nehmen Sie entsprechend ein Vielfaches des hier angegebenen RAM. Mehr als 15% des RAM-Speichers würde ich aber nicht zuordnen. Sollten Sie Ihre CPUs aber sowieso schon am Anschlag fahren, wird dieser Tipp leider nicht weiterhelfen, da bleibt nur mehr RAM-Speicher einzubauen.

Viel Spaß und Erfolg mit Ihrem schnelleren System!

Bestimmte Dateien unter Linux mit Abfrage kopieren

Will man nur bestimmte Dateien unter Linux kopieren kann man sich über den find Befehl helfen:

find . -name „*.jpg“ -exec cp ‚{}‘ /Zielverzeichnis \;

Der Punkt nach find bedeutet, dass er das aktuelle Verzeichnis durchsuchen soll. Mit -name „*.jpg“ grenzt er die Dateien auf die Dateinamenerweiterung jpg ein (also Bilder). Nach was man alles filtern kann verrät „man find“. Das hier alles aufzulisten würde den Rahmen dieses kurzen Artiekls sprengen. Durch -exec cp ‚{}‘ wird das was er durch den Filter gefunden hat in das Zielverzeichnis kopiert. Ergänzt man das Ganze noch um ein -ok fragt er bei jeder Datei einzeln nach, ob die auch kopiert werden soll (kann bei 500 Bildern eher störend wirken ;-).

find . -name „*.jpg“ -ok -exec cp ‚{}‘ /Zielverzeichnis \;

Debugger

Einen Debugger für Windows auf Assemblerebene gibt es unter http://www.ollydbg.de/. Hiermit kann man laufenden Code analysieren.

Batchscript kommuniziert mit Zwischenablage

Für die Kommunikation eines Batchscripts mit der Zwischenablage gibt es das Programm „clip“ (Bestandteil von Windows). Den Inhalt einer Textdatei bekommt man diesem Kommando:

clip < Textdatei.txt

in die Zwischenablage. Die Ausgabe eines Befehls in die Zwischenablage zu bringen ist ähnlich einfach:

Syntax: Befehl > clip

Beispiel: dir > clip

Das Beispiel bringt den Inhalt (als Text) des aktuellen Verzeichnisses in die Zwischenablage.

/dev/null unter Windows

Wenn Sie mit der Windows Eingabeaufforderung die Ausgabe in den „Papierkorb“ umleiten möchten geht das wie folgt:

ping host >nul

In einem Batch-Script wird das genauso gemacht bei einem Doskey-Makro hingegen empfiehlt sich diese Schreibweise:

doskey wait=ping localhost -n $1 ^>nul

Tippt man nun „wait 5“ ein, wird 5 x hintereinander localhost angepingt, ohne das die Ausgabe des Ping am Bildschirm erscheint.

Bei der Powershell gibt es eine Variable namens $null die denselben Zweck erfüllt.

Powershell Script mit Adminberechtigungen ausführen

Wie sich ein Powershellscript Adminberechtigungen „besorgt“:

$id=[System.Security.Principal.WindowsIdentity]::GetCurrent()
$principal=New-Object System.Security.Principal.WindowsPrincipal($id)
if(!$principal.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)) {
 $powershell=[System.Diagnostics.Process]::GetCurrentProcess()
 $psi=New-Object System.Diagnostics.ProcessStartInfo $powershell.Path
 $script=$MyInvocation.MyCommand.Path
 $prm=$script
 foreach($a in $args) {
  $prm+=' '+$a
 }
 $psi.Arguments=$prm
 $psi.Verb="runas"
 [System.Diagnostics.Process]::Start($psi) | Out-Null
 return;
}
# Ab hier folgt das eigentlich Script das Adminrechte braucht