Monday, February 06, 2006

Bashing Teil 2 - Dateien zeilenweise einlesen

Viele stoßen schnell darauf über mehrere Segmente iterieren zu wollen z.B.:


for i in `ls -1 --color="none"`
do
echo -n $i
test -d "$i" && echo -n " ist ein verzeichnis..."
echo
done


Das funktioniert auch soweit kein Leerzeichen oder ein anderes Whitespace in dem Dateinamen der
Ausgabe von "ls" vorhanden ist (Die Ausgabe von ls, ist wie eine Datei - es könnte hier auch z.B.
"ls -1 --color="none>/tmp/ls_ausgabe.txt;cat /tmp/ls_ausgabe.txt" stehen.

#wenn man es also "sicherer" haben will, sollte man den IFS zuvor richtig setzen:

IFS_SIK=$IFS #originalen IFS sichern
IFS=$'\n'


#folgender Befehl zeigt den Inhalt von IFS an:

set|grep IFS


#Danach sollte/muss man den alten IFS wieder setzen, damit nachfolgende Anweisungen korrekt #funktionieren:

IFS=$OLD_IFS

Thursday, February 02, 2006

wol + wlan = wow oder wowl?

Hallo,

lieber Reisender :). Manch einer hat vielleicht schonmal was von wol (wake on lan) gehört. Schöner ist es es aber, wenn man einen Rechner, z.B. seinen Server per Funk (WLAN) aufwecken könnte. Gesagt und getan, hier die Info, wie WOW mit der SUSE Linux 10.0 funktioniert.


  • wol rpm-paket installieren
  • damit auch das etherpaket seinen weg findet muss man die Routen ins eigentliche Netz setzen:
    linux:~ # route add -net 10.2.0.0 netmask 255.255.255.255 dev wlan0
    linux:~ # route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.2.0.0 dev wlan0
  • danach kann man mit:
    linux:~ # wol 00:30:05:3B:AC:8F
    den entfernten Rechner aufwecken.


Have a lot of fun!

Thursday, January 26, 2006

Bashing Teil 1 - Parameter auswerten

Hi,

hier mal ein nettes script, wie mann argumenteparsen kann - wenn man die
Übergabeparameter eines scriptes bearbeiten will, dann muss man einfach $*
anstatt $# nehmen und die "local" anweisung wegnehmen.


---snip---
function test {
local VER=""
local HELP=""
local USAGE=""

local IFS_OLD=$IFS



#parse all args
while [ $# != 0 ]
do
case "x$1" in

"x--version")
VER="v";shift;;
"x--help")
HELP="h";shift;;
"x--usage")
USAGE="u";shift;;
"x--")
ENDARGS="--"
shift
break # end reading args - now are files
;;
x--*)
echo "$1: undefined option!" >&2
rm_end 1; return $?
;;

x-*)

local OPTIONS=""

for (( i=0 ; $i < ${#1} ; i=$i+1 ))
do
OPTIONS=$OPTIONS$' '${1:$i:1}
done

IFS=$' '
for i in `echo $OPTIONS`
do

case "x$i" in

"xv")
RM_VER="v";continue;;
"xh")
RM_HELP="h";continue;;
"xu")
RM_USAGE="u";continue;;

"xf")
RM_FORCE="f";continue;;
"x-")
continue;; #overread this
"xr")
RM_RECURSIVE="r";continue;;
"xR")
RM_RECURSIVE="r";continue;;
"xd")
RM_DIRECTORY="d";continue;;

x*)
#don't handle options
echo "-$i; undefined option" >&2;
rm_end 1; return $?;;
esac
done
shift;;

x*)
break
;;

esac
done

IFS=$IFS_OLD

#handle version
if [ "x$VER" == "xv" ] ; then
echo "rm function 0.1"
rm_end 0; return $?
fi
---snap---

Tuesday, November 29, 2005

Schon wieder nen Befehl vergessen?

Da sich der Mensch nunmal nicht alles so einfach merken kann, muss er sich zu helfen wissen.

Wenn Sie sich auch nicht jeden Befehl merken wollen, oder auch mal nachschauen wollen, was man so für Befehle vor nem halben Jahr eingetippt hat, kann die Bash-History ein Anfang sein.

Die Bash-History ist normal auf maximal 1000 Zeilen beschränkt, das kann man aber ganz leicht ändern:
echo "export HISTSIZE=30000" >> ~/.bashrc.local

Ab diesem Zeitpunkt ist für jede neu gestartete bash die History bis zu 30000 Kommandos lang.

Falls Sie noch nicht wissen wie man auf die History zugreifen kann:

1. Sie können mit den Cursor-Tasten (auf/ab) in der history Befehl für Befehl blättern
2. Sie können auch anfangen den gesuchten Befehl zu schreiben und dann mit den <bild> nur die Befehle durchblättern, die so anfangen.
3. <strg>+<r> ein Muster eingeben, bis der passende Befehl erscheint.</r></strg></bild>

squid hängt nach dem Start von ppp

Vorwort

Wenn man squid als localen Proxy verwenden will kann es vorkommen, dass dieser nur nach einem 'rcsquid reload' Webseiten abholt, da er die neue ppp Verbindung nicht mitbekommt.

Abhilfe kann man schaffen, indem man ein Script, nachdem die ppp-Verbindung aufgebaut ist, startet und damit den Squid reloaded.

---file-content---/etc/ppp/ip-up.d/squid---
#!/bin/sh
/usr/sbin/rcsquid reload
logger squid reloaded $(date)
---end-file-content---

Hav a nice day!

Saturday, November 19, 2005

Linux Swap - Programme im swap obwohl noch genug Arbeitsspeicher frei ist?

Vorwort

Dies hilft nicht immer, speziell bei komplexeren Anwendungen, wie Datenbanken (DB2) gibt es Prozesse, die sich in den "swap" auslagern obwohl man an vielen Schrauben gedreht hat. Für die normalen Heimanwender, speziell wenn man einen etwas betagteren Rechne hat ist diese Einstellmöglichkeit doch hilfreich. Zumindest geht es mir oft so, wenn ich programmiere bzw. im Buch stöbere, dass Programme in den Swap ausgelagert werden, obwohl ich sie (aus meiner Sicht) doch noch benutze.

Swap(files)
Wieviele Swapbereiche eingerichtet sind und von welchen Typ sie sind kann man mit Hilfe
folgenden Befehlsermittelt:
---snip---
linux:~ # swapon -s
Filename Type Size Used Priority
/dev/hda11 partition 522072 0 -1
---snap---

Sie können z.B auch einen Swapbereich in eine Datei (hier ca. 200MB) erstellen:

Die Datei können sie wie folgt anlegen:
dd if=/dev/zero of=/swapfile bs=4096 count=50000

Mit "mkswap /swapfile" krichten Sie die Datei als Swapbereich ein.

Zuguterletzt können Sie mit "swapon /swapfile" das Swapfile aktivieren.
(mit -p können Sie hier die priority, also in welchen swapbereich zuerst geswapt wird angeben)

Damit das ganze auch nach einem Neustart wieder da ist müssen Sie das in "/etc/fstab"
eintragen:

---snip---
/dev/hda11 swap swap priority=60,defaults 0 0
---snap---


Wie Sie nun das Swapverhalten zwischen mehreren Swapbereichen einstellen wissen Sie nun. Wie Sie das generelle Swapverhalten einstellen sehen Sie hier:

in "/proc/sys/vm/swappiness" können Sie den Prozentualen Wert hinterlegen wie stark geswapt werden soll. Der Default ist hier meist "60".
Private setze ich diesen Wert lieber auf "10" - quasi nur swappen, wenn der speicher recht knapp wird.

Den Wert können Sie wie folgt ändern:
echo -n "10" >/proc/sys/vm/swappiness

IPAQ 38XX mit einem Linuxrechner über usb verbinden

Hi,

da ich das mal früher schön geschrieben habe, hier nur der link zu den Infos:

http://www.linuxcove.com/cave/connect-ipaq-linux.php

http://sourceforge.net/mailarchive/forum.php?forum_id=1226
&max_rows=25&style=nested&viewmonth=200207

have a lot of fun.

Linux - Vodafone Zwangskomprimierung abschalten

Vorwort

Warum denken Provider sie müssten die User bevormunden und Tatsachen verschweigen? Von wegen, dass man die Komprimierung nur über das Dashboard abstellen kann. Naja, die Techniker wollten meine Info wie das unter Linux geht nicht...

unter windows geht das ebenfalls nur mit einem Proxy - ein Proxy ist ein Dienst, der alle internetanfragen entgegennimmt und ins internet weiterleitet - dabei kann er Inhalte cachen oder verbieten etc. - genauso funzt die Komprimierung über einen Proxy.

Was macht der Proxy? Nachdem Bilder, wenn m
an sie ein zweite Mal mit + im Browser lädt ohne Komprimierung dargestellt werden - muss der Proxy
dieses verhalten nachahmen.

Und was genau? Der Browser senden dann Requestheader mit, die dem angefragten Serverdienst mitteilen, dass er keine gepufferten/gecached Daten haben will - sondern nur frisch vom eigentlichen Server. Folgende Zeilen in der Section header_access und in der Section header_replace in der squid.conf eingetragen ermöglichen dies:

---/etc/squid/squid.conf---
header_access Pragma deny all
header_access Cache-Control deny all

header_replace Pragma no-cache
header_replace Cache-Control no-cache
---end---

Thursday, November 10, 2005

Linux: Internet Einwahl via bluetooth/UMTS Handy

Vorwort
Manch einer wird sich jetzt fragen, warum man in der Zeit von DSL-Breitbandanbindungen Internet via UMTS zulegen will - meine Intention war einen relativ schnellen und flexibeln Internetzugang zu haben.

Erste Überlegungen
Das braucht man dazu:
  • Handy
  • Bluetooth Dongle
  • UMTS SIM-Karte
benutzte Tools
  • hcitool
  • sdptool
  • rfcomm
  • kbluetoothd
  • YaST2
  • screen
Einrichten Schritt 1

Zuerst ist es wichtig einen Bluetooth-Dongle anzustecken. Hier gäbe es die Möglichkeit (soweit vorhanden) über den SD-Steckkartenplatz besser aber über USB - warum einige SD-Kartenleser sind nicht so gut unterstützt. Wird der USB-Dongle erkannt und richtig konfiguriert kann man auch gleich unter KDE im kbluetoothd eine Meldung sehen. Ein einfacher Klick genügt um ein Fenster mit den aktuell erreichbaren Bluetooth-Geräten zu öffnen.

Einrichten Schritt 2


Ist Ihr Handy nicht in der Liste über prüfen Sie, ob es "sichtbar" ist und bluetooth eingeschaltet ist - Wenn ein Freund mit seinem bluetoothfähigen Handy ihnen Bilder etc. schicken kann sollte es auch in kbluetoothd zu sehen sein - falls nicht einfach das Fenster schließen und wieder erneut öffnen.

Einrichten Schritt 3

Um das Handy als Modem nutzen zu können müssen wir nun folgende Konfigurationsdateien anlegen/ändern:
  • /etc/bluetooth/pin
  • /etc/bluetooth/rfcomm.conf
in die pin-Datei schreiben sie einfach die PIN, die beim Verbinden mit dem Handy benötigt wird:
root@host> echo "1221" >/etc/bluetooth/pin

In /etc/bluetooth/rfcomm.conf müssen wir schon etwas mehr eintragen:
---snip---
#
# RFCOMM configuration file.
#
# $Id: rfcomm.conf,v 1.1 2002/10/07 05:58:18 maxk Exp $
#

rfcomm0 {
# Automatically bind the device at startup
bind yes;

# Bluetooth address of the device
device 00:0F:DE:8C:F7:09;

# RFCOMM channel for the connection
channel 1;

# Description of the connection
comment "Sony Ericcson v800";
}
---snap---

bind yes - bedeutet, dass beim Start vom Bluetooth-Deamon das Device gleich angelegt wird.
device - die Geräte-id können Sie mit Hilfe von "hcitool" herausbekommen, bzw. über kbluetoothd.

---snip---
linux:~ # hcitool scan
Scanning ...
00:0E:07:83:BE:29 v800
---snap---
channel 1 - hier kommt es nun auf das Handy an. Normalerweise sollte ein "sdptool browse" eine Liste ausspucken, der man es entnehmen kann:

---snip---
linux:~ # sdptool browse
Inquiring ...
Browsing 00:0E:07:83:BE:29 ...
Service Name: Dial-up Networking
Service RecHandle: 0x10000
Service Class ID List:
"Dialup Networking" (0x1103)
"Generic Networking" (0x1201)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 1
Profile Descriptor List:
"Dialup Networking" (0x1103)
Version: 0x0100
...
---snap---

Jetzt können wir schonmal den Daemon start:
root@host> rcbluetooth start

Danach sollte folgende Datei angelegt worden sein:
---schnip---
linux:~ # ls -la /dev/rfcomm*
crw-rw---- 1 root root 216, 0 Nov 11 19:31 /dev/rfcomm0
---schnapp---

Nun wie es bei bluetooth üblich ist müssen die Geräte, bevor sie miteinannder kommunizieren können ein "Pairing" machen.

um das zu initialisieren, einfach mal einen screen auf dieses device ansetzen:
screen /dev/rfcomm0
Wenn si den screen gestartet haben sollte erstmal keine Meldung kommen. falls Sie eine Meldung, wie "no controlling PTY" bekommen liegt es wahrscheinlich daran, dass das Device nicht richtig initialisiert worden ist. (den Screnn können Sie mit folgender Tastenkombination wieder schließen: <strg>+<a>+<k>)


(Falls das nicht geht, mal mit "cat /dev/rfcomm0" probieren.)

Bei der PIN-Eingabe müssen Sie schnell sein, da nach wenigen Sekunden sich die Fenster wieder schließen. Wenn die PIN-Eingabe erfolgreich war und keine Fehlermeldung zu sehen war können Sie schonmal probieren das Bluetooth-Handy als Modem zu nutzen. Geben Sie dazu einfach in den offenen screen (falls nicht einfach dn obigen Befehl absetzen) AT + ein. (den Screnn können Sie mit folgender Tastenkombination wieder schließen: <strg>+<a>+<k>)

Ist dies geschafft, können Sie in YaST2 das Modem vorkonfigurieren (manuelle anpassung nötig).

Einrichten Schritt 4

Im yast können sie nun wie gewohnt das Modem einrichten - geben sie aber als Device bzw. "Modemgerät" "/dev/rfcomm0" an und drücken Sie dann auf details.

Baudrate auf 921600

init1 = ATZ
init2 = AT &FE1 +CMEE=1
init3 = AT +CGDCONT=1,"IP","web.vodafone.de"
und benutzergesteuert [x] auswählen.

Die Konfigurationsdatei die Yast erstellt sollte dann wie folgt aussehen:
---/etc/sysconfig/network/ifcfg----
BOOTPROTO='none'
DIALCOMMAND='ATDT'
DIALPREFIX=''
DIALPREFIXREGEX=''
INIT1='ATZ'
INIT2='AT &FE1 +CMEE=1'
INIT3='AT +CGDCONT=1,"IP","web.vodafone.de"'
INIT8='ATM0'
INIT9='ATX3'
MODEM_DEVICE='/dev/rfcomm0'
NAME='umts via bluethooth'
PPPD_OPTIONS=''
PROVIDER='provider0'
SPEED='921600'
STARTMODE='manual'
UNIQUE=''
USERCONTROL='yes'
---end---

Danach müssen sie einen "eigenen Provider" einstellen:
als Nummer kan bei Sony Ericcson v800 "*99***1#" angeben. Für andere
modelle bitte im internet nach Infos suchen.
Die Provider Datei sollte wie folgt aussehen:
---/etc/sysconfig/network/providers/provider0---
ASKPASSWORD='no'
AUTODNS='yes'
DEMAND='no'
DSLSUPPORTED='no'
IDLETIME='1800'
ISDNSUPPORTED='no'
MODEMSUPPORTED='yes'
MODIFYDNS='yes'
PASSWORD='freedom'
PHONE='*99***1#'
PROVIDER='vodafone umts/gprs'
STUPIDMODE='no'
USERNAME='freedom'
---end---

Das sollte es gewese sein ;) jetzt können Sie über kinternet sich einwählen.