Linux-Tipps
Ja, ich benutze Linux und ich bin glücklich damit! aber auf dieser Seite soll weniger erklärt werden, was Linux
ist und warum man es benutzen solle.
Nein, ich will hier eher Dinge (Befehle, Funktionen) beschreiben, auf die ich während dem Arbeiten mit SuSE Linux
gestoßen bin und die ich mir nie merken konnte und deswegen hier Aufschreibe, bzw. an denen andere auch
interessiert sein könnten.
Falls jemand Anmerkungen zu den Befehlen hier hat, kann er mich gerne per Mail erreichen!
Ersetzen in Dateien
Mit dem folgenden Befehl kann man ein oder mehrere Worte in bestimmten Dateien durch andere ersetzen.
(Achtung: ich bin mir nicht sicher, ob der Text Zeilenumbrüche enthalten darf... Und es geht nur mit der bash, denke ich.)
Dort, wo vontext steht, muss der Text hin, der ersetzt werden soll und wo
nachtext steht, gehört der neue Text hin. Mit
*.html, oder etwas anderem, kann man angeben, in welchen Dateien ersetzt werden soll.
Der Befehl sucht, so wie er unten steht, nur im aktuellen Verzeichnis, da -maxdepth 1
angegeben wurde. Falls er rekursiv in allen Verzeichnissen suchen soll, dann lässt mal den Text einfach weg und
wenn man nur bis zu einer bestimmten Tiefe in die Verzeichnisse hinabsteigen will, dann whlt man statt 1
eine andere Zahl.
(Hinweis: der Zeilenumbruch bei IFS=' ist absolut wichtig,
den darf man beim Kopieren aus dem Browserfenster hinaus nicht vergessen!
von='vontext'; nach='nachtext'; filetype='*.html'; OLDIFS=$IFS; IFS='
' ; files=`find . -maxdepth 1 -type f -name "$filetype"`; for f in $files;do cp $f $f.bak; g="$f.mettytmp"; echo "Searching in $f ..."; cat "$f" | sed "s/$von/$nach/" > "$g" && mv "$g" "$f"; rm -f *.mettytmp; done; IFS=$OLDIFS;
Selberkompilieren von Programmen
Von Zeit zu Zeit kann es vorkommen, dass man ein Programm als .tar.gz Datei
bekommt. Nach dem Entpacken des Archivs muss man dann das Programm selbst kompilieren.
Das geht in der Regel mit den Befehlen
./configure, make und make install
(bitte auf einer Konsole mit dem entpacken Verzeichnis als aktuelles Verzeichnis eintippen und nur den letzten Befehl als root ausführen!).
Das ist schön und gut und wenn die Software gescheit geschrieben ist, dann sollte es auch keine Probleme geben.
Doch es gibt zwei Nachteile: erstens haben viele Programme keine Uninstall-Funktion (falls sie eine hätten, so sollte
man sie übrigens mit make uninstall im Quelltextverzeichnis aufrufen können)
und zweitens wird ein so installiertes Programm nicht in die RPM-Datenbank eingetragen
und ist daher z.B. nicht im Yast sichtbar.
Eine bessere Lösung ist daher, checkinstall statt dem make install
Befehl zu verwenden. Am Ende von checkinstall steht auf der Konsole das Verzeichnis
und der Dateiname, unter dem das erzeugte RPM-Paket abgelegt wurde. Dies
lässt sich dann ganz normal mit rpm auf der Konsole oder durch klicken auf die
Datei im Konqueror installieren.
In der untenstehenden Kommandozeile hab ich noch die Befehle zu einem einzigen Kombiniert
und verwende su -c, damit nur der letzte Befehl aus root ausgeführt wird:
./configure && make && su -c "checkinstall"
Grafische Programme und su
Gelegentlich muss man auf einer Konsole, auf der man gerade arbeitet, kurz root werden. In der Regel verwendet man dafür su (substitute user, oder so). Dies hat aber den Nachteil,dass man damit i.d.R. keine grafischen Programme ausführen kann. Unter neueren SuSE Versionen gibt es den Befehl sux, mit dem man dan auch grafische Programme (z.B. yast, etc.) starten kann.
Dateinamen bei Backups
Bei manchen Tätigkeiten (z.B. Programmieren) will ich am liebsten bei (fast) jedem Schritt ein Backup machen.
Da ich aber natürlich faul bin, will ich das ganze mit einem Befehl erledingen, aber gleichzeitig
nicht jedesmal einen neuen Dateinamen per Hand auswählen.
Der folgende Befehl besitzt einen Zähler (COUNT) und testet, ob
eine Backupdatei (Name besteht aus prefix, Datum und laufender Nummer,
z.B. prefix-31.12.04_1.tar.bz2) schon existiert.
wird dieser Zähler erhöht und wieder getestet. Dies geht so lange, bis ein Dateiname gefunden wurde, der noch nicht
existiert. Danach wird der tar Befehl mit den zu sichernden Dateien
(file1 file2 ... aufgerufen und die Backupdatei ein Verzeichnis höher
(wegen ../) angelegt.
NAME="prefix"; COUNT=0; FNAME=$NAME-`date +%d.%m.%y`_$COUNT.tar.bz2; while test -e $FNAME; do let COUNT++;
FNAME=$NAME-`date +%d.%m.%y`_$COUNT.tar.bz2; done; tar -cjvf ../$FNAME file1 file2 ...
Bilder umwandeln
Mir ist leider kein grafisches Programm bekannt, mit dem ich schnell ein Verzeichnis mit Bilddateien von einem
in ein anderes Dateiformat umwandeln kann. Daher bin ich auf das Konsolenprogramm convert
gestossen, das Teil des ImageMagick Pakets ist.
Dieses Programm kann ziemlich vieles, was auch grafische Bildbearbeitungen können -- nur halt an der Kommandozeile.
Die interessantesten Funktionen dürften zum einen das Umwandeln von Bildformaten und zum anderen das
Ändern der Auflösung von Bildern sein (ein interessanter Artikel, der weitere Funktionen von ImageMagick erklärt, ist hier zu finden). Was convert nocht alles kann, sieht man,
wenn man in der Kommandozeile man convert tippt.
Der folgende Befehl wandelt z.B. alle .tif Datien in .jpg
Dateien um:
for f in *.tif; do g=`basename $f .tif`; convert $f $g.jpg; done;


Linux