WinFuture-Forum.de: Der Einstieg In Die Shell - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Linux
Seite 1 von 1

Der Einstieg In Die Shell


#1 Mitglied ist offline   ph030 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.130
  • Beigetreten: 14. Juli 04
  • Reputation: 36
  • Geschlecht:unbekannt

geschrieben 14. Januar 2007 - 21:49

Da es hier bei WF desöfteren dazu kommt, dass die Shell als nicht mehr zeitgemäß oder gar überflüssig betitelt wird und ich die Vermutung habe, dass dies zum einen aus Unwissenheit und Faulheit sowie zum anderen aus falschen Vorstellungen ehemaliger Windowsuser resultiert, möchte ich einmal mit den gängisten Vorurteilen aufräumen und gleichzeitig den Willigen eine kleine Hilfe zum Einstieg liefern.

Ich werde versuchen, den folgenden Text möglichst einfach zu formulieren, damit ihn auch Menschen ohne Basiswissen verstehen können - sollte ich damit scheitern, dürft ihr natürlich gerne fragen.

Desweiteren ist mir durchaus bewußt, dass es bereits einige dieser Guides gibt, allerdings sind die meisten in englisch verfasst, was eventuell für den einen oder anderen eine Hürde darstellen kann. Zum anderen sind sie teilweise nicht aktuell oder nicht einfach genug, dennoch hoffe ich, dass jeder etwas hiervon für seinen weiteren Weg mitnehmen kann.

Dieser Guide baut auf der BASH auf, der momentan am weitest verbreiteten Shell - zumindest auf Linux-basierten Systemen.
Zumindest die zu vermittelnden Grundlagen lassen sich 1:1 auf andere Shells übertragen, wie z.b. die csh, ksh oder zsh, einige höhere Features sind jedoch nur in der BASH verfügbar.

Da das ganze recht ausführlich geworden ist (fast 6000 Wörter), wurde der Thread unterteilt in insgesammt 6 Sektionen

1. Grundlagen (dieser Post)
2. Ein-/Ausgabe, Lesen von Dateien
3. Filterung und Manipulation von Dateien, Arbeiten mit dem Dateisystem
4. Ein kleiner Einstieg in die Automatisierung und das Skripten
5. Die ultimative Macht
6. Ein Überblick Shell-basierter Proramme

Desweiteren gibt es einen Diskussions-Thread, der hier zu finden ist.

Danke an ShadowHunter für die Pinnung, das Verstecken und die Laberei während dem Schreiben.
Ebenfalls Danke an Breaker, für die grammatische Korrektur
.

Ich hoffe, für den einen oder anderen ist was dabei - schischa hat sich ja schon gefreut ;)

...viel Spaß.

__________________________________________________



Grundlagen

Zunächst einmal sollte man sich mit den wichtigsten Befehlen auseinandersetzen, um die Shell möglichst effektiv nutzen zu können. Ich werde hierbei nicht auf jede einzelne Option eines Befehls eingehen, denn zum einen sprengt das bei weitem den Rahmen dieses Guides und einige Optionen sind nunmal nicht
für Einsteiger - sie sind entweder zu kompliziert oder teilweise gefährlich. Wer zu einem bestimmten Befehl weitere Informationen wünscht, dem lege ich die jeweilige Manpage (von man=manual/Handbuch, page=Seite) ans Herz, welche sich auf der Shell jeweils durch
man $befehl
aufrufen lässt.

__________________________________________________



Die wichtigsten Befehle
Startet man eine Shell, so wird diese (unter X) in einem Terminal ausgeführt, wovon es diverse gibt, die allerdings keinen Einfluss auf die Shell an sich haben, sondern lediglich mehr oder weniger Komfort bzw. Features in der Bedienung liefern. Angefangen bei xterm, bis zur konsole von KDE, gibt es diverse Terminals - bei den meisten Distributionen findet sich ein entsprechender Link im Menü des Windowmanagers bzw. in der Shortcut-Leiste.

Einmal aufgerufen startet das Terminal und in ihm die Shell, welche uns normalerweise direkt in unser Home-Verzeichnis führt. So lange man nichts an den Einstellungen geändert hat, ist dies in aller Regel /home/$USER - wobei $USER der entsprechende Username ist.

Sobald die Shell aktiv ist, begrüßt uns ein Prompt, welcher meistens so aussieht
$USER@$HOST $VERZEICHNIS: $
. An dem Rechner, an dem ich gerade diesen Text verfasse, würde also der entsprechende Prompt so aussehen
ph030@ayaya ~/: $
.
Das Tilde-Zeichen (~) steht dabei für das Home-Verzeichnis des gerade aktiven Users, was in meinem Falle gleichbedeutend mit /home/ph030 ist.
Das Zeichen ist nicht unbedingt nötig, da es sich jedoch für sämtliche Befehle entsprechend nutzen läßt, kann einem das schonmal ordentlich Tipparbeit ersparen.
Das letzte String-Zeichen ($) im Prompt zeigt an, das wir als normaler User arbeiten, wohingegen das Zeichen zu einem Hash (#) werden würde, wenn wir uns als root einloggen bzw. zum root-Account wechseln.

_________________________________________________


ls

Nun da wir in unserem Home-Verzeichnis sind, könnte es uns interessieren, welche Dateien hier vorliegen - in diesem Zusammenhang verzichte ich erstmal auf die Nennung der Ordner, da unter Linux das Motto gilt: "Everything is a file" - "Alles ist eine Datei", ergo auch ein Ordner. Wirklich interessieren muss uns das allerdings nicht, deswegen werde ich im weiteren Verlauf von Dateien und Ordnern reden, damit der Leser den Überblick nicht verliert.

So, wir möchten also wissen, welche Dateien und Ordner sich unterhalb von ~ befinden. Dazu geben wir einfach den Befehl
ls
ein, welcher uns eine Liste der Dateien/Ordner ausgibt(ls ist die Abkürzung von listListe).
ph030@ayaya ~/: $ ls
test.txt hallo.pdf doll.mp3 downloads
Das bringt uns schoneinmal weiter, ist aber noch nicht zu aussagekräftig. Wenn wir näheres über die einzelnen Einträge wissen wollen, können wir den Befehl ls um den Parameter - eine Angabe, die die weiteren Optionen des Befehls angibt - um -l ergänzen (ein kleines "L"!). Dieser Parameter steht für long, also eine längere und damit ausführlichere Ausgabe.
ph030@ayaya ~/: $ ls -l
-rw-r--r--  1 ph030 users 155915  7. Jan 16:57 dorian.png
-rw-r--r--  1 ph030 users 155736  7. Jan 16:57 dorian-wp.png
drwx------ 19 ph030 users   8192 14. Jan 03:46 downloads
drwxr-xr-x  2 ph030 users	  1  5. Jan 02:54 exthdd

Das sagt uns schoneinmal wesentlich mehr. Zur Erläuterung von links nach rechts:
Das erste Zeichen zeigt an, um was für eine Art Datei es sich handelt. Dabei steht - für eine normale Datei und d für ein Verzeichnis(von d=directory). Desweiteren gibt es noch b und c, diese interessieren uns in diesem Guide jedoch nicht.
Darauf folgend kommen drei Blöcke a drei Zeichen, welche jeweils die Rechte zur Nutzung angeben. Der erste Block steht dabei für den Besitzer, der zweite für die Gruppe, in der der Besitzer ist und der dritte für den Rest der Welt.
Steht in einem solchen Block ein -, so bedeutet dies, das das entsprechende Recht nicht gesetzt ist. Von links nach rechts gibt es die drei Rechte r(lesen), w(schreiben) und x(ausführen).

Zugegeben, was die folgende Zahl angeht, bin ich mir nicht wirklich sicher, was sie bedeutet und bevor ich was falsches schreibe, lasse ich es lieber gleich - jedenfalls hat sie für uns erstmal keine wirkliche Bedeutung (wenn jemand weis, worum es sich handelt, möge er mir/uns das bitte mitteilen!).

Folgend auf die unbekannte Zahl kommt der Name des Besitzers der Datei - meistens ist dies gleichzeitig auch der Ersteller, dies muss jedoch nicht so sein!
Darauf folgend der Name der Gruppe, welche ebenfalls Zugriff auf die Datei hat. Abgesehen von ein paar Sonderfällen, handelt es sich hierbei in der Regel um eine der folgenden: users, wheel oder root.

Gefolgt von der Gruppe kommt die Größe der Datei in Bytes - wer hier lieber "vernünftig" lesbare Werte hätte, sollte als Parameter zusätzlich(!) noch -h angeben, was für "human readable" steht und die Zahl entsprechend in KB, MB oder GB wandelt - das Erstellungsdatum sowie letztendlich der richtige Name.

Natürlich ist mit ls auch eine Suche nach speziellen Mustern möglich, so lassen sich z.B. alle Dateien mit der Endung .mp3 finden und auflisten, indem wir einfach
ls *.mp3
eingeben. Abgesehen von dem Asterisk *, welches sämtliche möglichen Zeichen in jeder beliebigen Anzahl beschreibt, gäbe es z.B. auch das ?, welches für ein einzelnes Zeichen steht, wodurch sich durch die Eingabe von
ls h?llo.txt
z.B. die Dateien "hello.txt" und "hallo.txt" finden lassen, sowie natürlich jede weitere Datei, die auf das entsprechende Muster passt.

_________________________________________________


cd

Durch den obigen Einsatz von ls -l haben wir also meinen Download-Ordner "downloads" gefunden und möchten nun dorthin wechseln. Nichts einfacher als das. Wir geben einfach
cd downloads
ein und schon landen wir im entsprechenden Verzeichnis.
cd steht für change directory oder auf deutsch wechsele in das Verzeichnis.

cd hat drei sehr schöne Features, die uns einiges an Tipparbeit ersparen können, deswegen möchte ich sie mal nicht vorenthalten - desweiteren bin ich mir annähernd sicher, dass selbst einige Poweruser das dritte Feature noch nicht kennen.

1. Wir gehen davon aus, dass wir uns in /home/ph030/test/code/ befinden und möchten zurück nach /home/ph030/test/. Am einfachsten geht das durch die Eingabe von
cd ..
, welches immer eine Ebene nach oben springt, solange es möglich ist.

2. Wir gehen davon aus, wir befinden uns in /home/ph030/downloads/p2p/finished/toller_film/unterverzeichnis/ah/hier/liegt/die/datei/ und möchten zurück auf die Basisebene unseres Homeverzeichnisses, also nach /home/ph030.

Dafür gibt es nun mehrere Möglichkeiten:
-
cd ../../../../../../../../../../
nicht wirklich toll, oder?
-
cd ~
, na, wer erinnert sich noch an die oben vorgestellte Tilde? Dies ist auf jeden Fall schon besser, aber...
-
cd
...dies sind wieder zwei gesparte Zeichen und bringen den selben Effekt :unsure:

3. Wir gehen davon aus, wir befinden uns in /home/ph030/downloads/p2p/finished/toller_film/unterverzeichnis/ah/hier/liegt/die/datei/ und möchten mal kurz nach /usr/share/doc/$program-$version/files/html/index/pictures/frame/, ergo geben wir also den folgenden Befehl ein
cd /usr/share/doc/$program-$version/files/html/index/pictures/frame/
. Nachdem wir unsere Arbeit hier verrichtet haben, wollen wir wieder ins vorherige Verzeichnis zurück, sind allerdings zu faul,
cd /home/ph030/downloads/p2p/finished/toller_film/unterverzeichnis/ah/hier/liegt/die/datei/
einzugeben - verständlich. Die meisten graphischen Dateisystembrowser, wie z.B. Konqueror oder Nautilus haben einen "Zurück"-Knopf, welcher einen direkt zum zuletzt genutzten Verzeichnis bringt. Wenn ein solches Feature auf der Shell fehlen würde, wäre das doch mehr als tragisch, v.a. da viele der GUI-Browser ja direkt die Möglichkeiten der Shell nutzen und keine eigenen Befehle mitbringen. Ergo gibt es diesen Befehl natürlich auch in der Shell und er ist alles andere als kompliziert - ein einfaches
cd -
wechselt zwischen den beiden zuletzt genutzten Verzeichnissen hin und her :(

_________________________________________________


cp

cp kommt von copy oder auf deutsch kopieren.
Wie der Name schon sagt, kann man damit Dateien/Ordner schnell und einfach kopieren, z.B. so
cp test.txt downloads/test.txt
. Gleichzeitig kann man der neuen Datei natürlich auch einen neuen Namen verpassen, nämlich so
cp test.txt test2.txt
.
Beim kopieren von Ordnern sollte man den Parameter -r nicht vergessen, was für rekursiv steht. Ansonsten klappt es meistens nicht so, wie man es gerne hätte.
Desweiteren sind die Parameter -a, -i und -p zu erwähnen. Wobei -a (archive)alles angegebene kopiert, also auch den Ordner selbst und gleichzeitig die Rechte bei behält, -p (preserve) lediglich die Rechte beibehält und - i (interactive)[/-i] nachfragt, bevor eine Datei überschrieben wird.

Natürlich lassen sich auch hier wieder * und ? verwenden, wir sind ja bekanntlich faul ;)

_________________________________________________


mv

mv kommt von move, auf deutsch verschieben und macht, was der Name verspricht. Es verschiebt Dateien sowie Ordner von einem Ort zum anderen und/oder nennt Dateien/Ordner um.
mv test.txt downloads/test.txt
verschiebt die Datei in den Download-Ordner.
mv test.txt downloads/meintest.txt
verschiebt die Datei in den Download-Ordner und benennt sie gleichzeitig um.
Auch hier gibt es den von cp bekannten Parameter -i, welcher auch die selbe Bedeutung hat und natürlich funktionieren auch hier wieder * und ?.

* und ? funktionieren übrigens fast überall, weshalb ich diese im Folgenden nicht mehr erwähnen werde, es sei denn, ihr Vorkommen hat bei einem bestimmten Befehl eine andere Bedeutung.

_________________________________________________


rm

Irgendwann ist man einer Datei bestimmt mal überdrüssig oder braucht einfach wieder freien Platz auf der Platte, folglich bietet es sich also an, einfach ein paar unbenötigte Dinge zu löschen - was auf englisch übrigens to remove bedeutet und erklärt, woher die Abkürzung rm steht.
Wichtig zu erwähnen hierbei ist, dass rm normalerweise so funktioniert, wie löschen unter Windows. Es wird zwar nichts in einen Papierkorb verschoben, dennoch sind die Dateien wiederherstellbar - solange in der Zwischenzeit nichts neues in die entsprechende Stelle geschrieben wurde. Wer etwas sicher löschen möchte, sollte sich einmal an den Erzfeind unserer Lieblingsschildkröten wenden und seinen Namen etwas kürzen, dann wird man wohl bei shred landen ;)

rm bedient sich wie alle bisher vorgestellten Befehle, folglich führt der Aufruf von
rm test.txt
zu deren Löschung - oder besser, der Verweis im Dateisystem wird gelöscht. Auch hier gibt es wieder den Sicherheitsparameter -i - er existiert nicht umsonst, den falsche Bedienung von rm kann das System ganz schnell unbrauchbar machen - jedenfalls dann, wenn man als root unterwegs ist.

Es sollte übrigens angemerkt werden, dass ein als root ausgeführtes
 rm -rf /
nicht funktioniert, wie man es erwarten könnte, dennoch sollte man davon Abstand halten, es macht zwar nicht wirklich alles kaputt, aber immerhin soviel, dass man nur mit Trick17 an einer Neuinstallation vorbeikommt.
(Es gibt übrigens viel schönere Methoden, ein System unbrauchbar zu machen, aber bevor ich hier verantwortlich gemacht werde, dass ein System nicht mehr funktioniert, sage ich lieber mal nichts. Die Interessierten mögen sich an Google wenden, oder den Thread im Gentoo-Forum aufsuchen, wo diverse
Möglichkeiten genannt werden, wie man sich möglichst elegant ins Knie schiessen kann ;) )

Wo wir gerade bei -f sind, dieser Parameter steht für force. Er hat zwar nichts mit StarWars zu tun, trotzdem geht es um die Macht und da die Machthaber bekanntlich gerne nicht das machen, was das Volk eigentlich will, sollte man von diesem Parameter absehen, solange man sich nicht 100%ig sicher ist.

Um übrigens ganze Verzeichnisse, samt darin liegenden Dateien zu löschen, kann man den von cp bekannten Parameter -r verwenden, also z.B.
rm -r downloads
.

_________________________________________________


mkdir

Um Verzeichnisse zu löschen, sollte man natürlich erstmal ein paar Verzeichnisse anlegen. Der Engländer würde wohl sagen "let's make a directory", doch Linux-User sind bekanntlich faul, folglich ziehen wir diesen Satz einfach zu einem kurzen und prägnanten mkdir zusammen.
Nachdem wir also unser schönes Download-Verzeichnis gelöscht haben, fiel uns auf, dass es doch ein ziemliches Kuddelmuddel wäre, sämtliche Dateien direkt in ~ zu speichern - wir wollen also unseren Ordner wieder. Nichts leichter als das, ein
mkdir downloads
genügt. Wollen wir hingegen gleich eine Struktur aufbauen, also z.B. downloads/p2p/torrent haben, so müssen wir mkdir noch den Parameter -p übergeben - ansonsten gibt's eine Fehlermeldung. Der korrekte Aufruf sähe dann also so aus:
mkdir -p downloads/p2p/torrent


_________________________________________________


touch

touch ist ein etwas seltsamer Name und sagt nicht wirklich aus, was der Befehl eigentlich macht und obwohl einige ihn als überflüssig empfinden, hat er doch hin und wieder seine Daseinsberechtigung. touch ist das Gegenstück zu mkdir und erstellt Dateien - leere Dateien wohlgemerkt! (Gut, nebenbei kann man damit auch die letzte Zugriffszeit einer Datei manipulieren, aber das wird vom Standarduser wohl kaum gemacht.)
touch meinedatei.txt
legt uns also die genannte Datei im aktuellen Verzeichnis an.

_________________________________________________


Fazit der Grundlagen

Es behaupten ja gelegentlich einige Menschen, dass selbst die Grundbefehle schon viel zu kryptisch und kompliziert wären. Wenn man sich jedoch ansieht, woher der Name des Befehls kommt und was er bewirkt, kann man (denke ich) doch schon die Logik erkennen. Man könnte natürlich auch immer z.B. [i]removedirectory
schreiben, doch auf die Dauer ist das doch schon etwas ungeschickt und zu Zeiten von MS-DOS hat sich doch auch niemand beschwert ;)

Die simpelsten Möglichkeiten haben wir also schon gelernt, wir können Dateien und Verzeichnisse erstellen, löschen, verschieben und kopieren, womit mindestens 50% des alltäglichen PC-Gebrauchs wohl schon abgedeckt sein dürften.

Die Herren und Damen "Einsteiger" möchte ich ermutigen, das gelesene doch bitte auch einmal selbst auszuprobieren, zum einen bleiben die Befehle durch praxisnahe Übungen besser im Gedächtnis und zum anderen könnte ich sonst ja viel erzählen, aber es würde kaum jemand überprüfen - vielleicht hab ich ja auch irgendwo gelogen ;)
2

Anzeige



#2 Mitglied ist offline   ph030 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.130
  • Beigetreten: 14. Juli 04
  • Reputation: 36
  • Geschlecht:unbekannt

geschrieben 15. Januar 2007 - 01:38

Schön und gut, die Grundlagen sollten wir nun alle verstanden haben, aber bekanntlich arbeitet man ja auch mit Dateien oder schaut sich zumindest deren Inhalt an.

Zunächst sollten wir uns vielleicht mal mit den Ein- und Ausgabe-Möglichkeiten der Shell befassen, ohne diese wird es auf Dauer kompliziert und/oder unnötig zeitaufwendig.

&(&)

Das & (Kaufmanns-Und, gerne auch Ampersand genannt - Menschen, die gerne validen (X)HMTL-Code schreiben, dürften es kennen) ist einer der simpelsten Operatoren.

Nehmen wir an, wir setzen einen Befehl in der Shell ab, welcher ziemlich lange dauert - z.B. das umkodieren eines Videos - und möchten aber gerne mit der Shell weiterarbeiten, ohne ein neues Terminal zu öffnen, dann machen wir einfach das folgende
$befehl &
. Dieser Aufruf startet den Befehl und schickt ihn gleichzeitig in den Hintergrund (lediglich optisch, dies hat nichts mit Prioritäten zu tun!). Daraufhin wird uns die Shell eine PID ausgeben - PID ist die Process-ID - über die wir bei Bedarf auf den laufenden Task zugreifen können. Nachdem wir die PID bekommen haben, kommen wir zum Prompt zurück und können weiterarbeiten.

Zwei direkt aufeinander folgende &, also && verbinden zwei Befehle miteinander, jedoch wird der zweite nur dann ausgeführt, wenn der erste erfolgreich abgeschlossen wurde, ansonsten wird er ignoriert. Folglich passiert hier
mkdir test && cd test
das folgende: Zunächst wird das Verzeichnis "test" angelegt und dann dorthin gewechselt. Sollte das Verzeichnis jedoch a) bereits bestehen oder b) die erforderlichen Rechte fehlen, wird mkdir einen Fehler ausgeben und der zweite Befehl wird ignoriert.
Mit && läßt sich prinzipiell also eine beliebig lange Befehlskette eingeben und solange kein Fehler auftritt, werden alle Befehle in der gegebenen Folge abgearbeitet.

_________________________________________________


>(>)

Das Größerzeichen > leitet die Ausgabe eines Befehls um, meistens in eine Datei. Dies ist z.B. dann praktisch, wenn ein Befehl eine lange Fehlermeldung ausgibt und man diese nicht abschreiben möchte, um sie z.B. in einem Forum zu posten.
Als kleines Beispiel
mkdir schlumpf/hausen/schlaubis/haus
würde bei mir einen Fehler ausgeben, da schlumpf/hausen/schlaubis/ bei mir nicht existiert und ich den Parameter -p nicht angegeben habe.
mkdir schlumpf/hausen/schlaubis/haus > datei.txt
schreibt die Fehlermeldung
nicht auf den Bildschirm, sondern direkt in die datei.txt. Wichtig hierbei ist, dass die Datei überschrieben wird, wenn sie bereits existiert, ansonsten wird sie neu angelegt.
Wenn man die Fehlermeldung nun an eine Datei anhängen will, verwendet man statt > nun >>. Existiert die Datei noch nicht, wird sie angelegt, existiert sie hingegen schon, wird die Ausgabe ans Ende der Datei angehängt.

Für alle, die es interessiert, wenn man statt > nun 2&> angibt, werden ausschließlich Fehlermeldungen in die Datei geschrieben, normale Ausgaben erscheinen jedoch auf dem Bildschirm.

_________________________________________________


<(<)

Dies ist das Gegenteil zu >, dient also nicht zur Aus- sondern zur Eingabe. Da es jedoch von Einsteigern äußerst selten/garnicht genutzt wird, gehe ich hier nicht weiter darauf ein und verweise stattdessen auf
man bash
, jedoch sei gesagt, dass unbedarfte Nutzung nicht gerade positive
Konsequenzen haben kann - Vorsicht ist also angebracht.

_________________________________________________


|(|)

Die Pipe (|] wird verwendet, um die Ausgabe eines Befehls als Parameter eines weiteren Befehls zu nutzen, z.B.
cat sehrlangedatei.txt | less
.
Wie bei && hat eine Doppel-Pipe auch eine bestimmte Funktion, sie dient als oder. Folglich würde
rm datei1.txt || datei2.txt
bedeuten, "lösche datei1.txt und wenn das einen Fehler produziert, dann lösche datei2.txt, ansonsten nicht.".

_________________________________________________


cat

Wenn wir gerne wissen wollen, was in einer Datei steht, können wir sie uns mit Hilfe von cat ausgeben lassen. Zusammen mit oben gezeigtem > könnte man also cp ersetzen, wenn man
cat datei.txt > datei2.txt
ausführt.

_________________________________________________


less

less ist eine verbesserte Version von more, welches einige wahrscheinlich noch aus früheren Zeiten kennen. Es handelt sich dabei um einen so genannten Pager, der die Ausgabe einer Datei auf eine Bildschirmseite beschränkt und das Blättern ermöglicht. Stellen wir uns vor, wir würden eine Datei mit 1.000 Zeilen mittels cat ausgeben, diese würde so schnell an uns vorbeiziehen, das wir überhaupt nichts lesen könnten.
less sorgt nun dafür, dass wir die erste Bildschirmseite in Ruhe lesen und bei Bedarf weiterscrollen können - im Gegensatz zu more auch aufwärts.
Desweiteren hat less für einige Formate die Möglichkeit, diese zu parsen und entsprechend darzustellen, was durchaus sehr nützlich sein kann und wo wir gerade bei nützlich sind, man kann in less auch suchen. Dazu gibt man einfach einen / ein, dann den gewünschten Text und bestätigt mit Return. Sollte der gesuchte Text mehrmals im Dokument auftauchen, kann man mit n bzw. p vor und zürück zum nächsten Treffer springen.

_________________________________________________


echo

Nicht nur in den Bergen gibt es ein echo, nein auch in unserer Shell und im Gegensatz zur Natur, kann auch hier das Quaken einer Ente als Echo wiedergegeben werden. echo wird hauptsächlich in Shell-Skripten eingesetzt, um Statusmeldungen auszugeben, kann aber auch für andere Zwecke nützlich sein. Man gebe einfach mal
echo "irgendwie fällt mir grade nichts ein"
ein, um zu lesen, dass es dem Computer genauso geht.

_________________________________________________


``

Mit den beiden Backticks (auf der Tastatur das obere Zeichen neben ß/?) läßt sich die Ausgabe eines anderen Befehls im aktuellen Befehl nutzen, was meistens in Skripten vorkommt, aber auch im normalen Alltag nicht selten anzutreffen ist.
echo whoami
würde "whoami" ergeben, wohingegen
echo `whoami`
zunächst den Befehl whoami ausführen und dann das Ergebnis an echo übergeben würde, wodurch die Ausgabe in meinem Falle folglich "ph030" lauten würde.

_________________________________________________

Fazit

Ein- und Ausgabe von Dateien bereiten uns keine Probleme mehr und wir sind nun fähig, beliebig lange Ketten aus Aufträgen zu basteln, welche ohne eine weitere Interaktion selbst die komplexesten Aufgaben ausführen - als reiner Windowsuser könnte man da beleidigt schauen, aber welcher reine Windowsuser liest schon diesen Thread :unsure:
1

#3 Mitglied ist offline   ph030 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.130
  • Beigetreten: 14. Juli 04
  • Reputation: 36
  • Geschlecht:unbekannt

geschrieben 15. Januar 2007 - 01:40

Es ist ja schon sehr schön, wenn man Dateien lesen und deren Inhalt umlenken kann, wirklich erfüllend ist das aber noch nicht. Bis jetzt wüssten wir noch keinen effizienten Weg, um herauszufinden, ob eine Datei einen bestimmten Text enthält. Natürlich könnten wir uns die Datei mit less ansehen und dann mit der eingebauten Suche spielen, zum einen ist das aber umständlich und zum anderen geht das schlecht für mehrere Dateien auf einmal.

grep

Willkommen beim fröhlichen cat'n und grep'n. Wie man an diesem Satz schon merkt, handelt es sich hierbei um zwei Programme, die gerne als Duo fungieren und oft entsprechend genutzt werden.
grep ist ein kleines Programm welches einen gegebenen Text nach dem Vorkommen eines gegebenen Textes durchsucht und die entsprechenden Trefferstellen anzeigt bzw. diese auslässt, je nach Wunsch.
grep kann zum einen mit normalem Text umgehen, als auch mit RegularExpressions - bei letzterem handelt es sich grob gesagt um Muster, mehr Informationen findet man bei Wikipedia, da eine genaue Erläuterung den Rahmen doch erheblich sprengen würde - kurz RegEx.

Ein paar kurze Beispiele mit normalem Text.
Stellen wir uns vor, wir haben eine Datei mit folgendem Inhalt

Zitat

Hallo Horst
Hallo Peter
Hallo Xaver


Ein Aufruf von
cat datei.txt | grep "Hallo"
gibt sämtliche Zeilen aus, da das
Wort "Hallo" in jeder Zeile vorkommt.
cat datei.txt | grep "Peter"
gibt
lediglich die Zeile

Zitat

"Hallo Peter"
aus und
cat datei.txt | grep -v "Peter"
gibt

Zitat

Hallo Horst
Hallo Xaver
aus. Der Parameter -v sorgt also dafür, dass Zeilen, die einen Treffer enthalten, nicht ausgegeben werden.

Nehmen wir ein sehr schönes Beispiel. Es kommt bekanntlich oft vor, dass Menschen Probleme mit ihrem Kernel oder dem X-Server haben. Diese werden nun gebeten, die entsprechende Konfigurationsdatei zu posten, damit ihnen geholfen werden kann. Nun sind aber beide genannten Dateien extrem gut kommentiert, was zwar zur Bearbeitung sinnvoll ist, aber nicht zum reinen lesen - folglich sollte man solche Dateien ohne Kommentare posten, wenn man schnell geholfen bekommen möchte.

Machen wir uns dafür einfach das bisher gelernte zu nutzen:
cat /etc/X11/xorg.conf | grep -v "^#" > datei.txt
Hierbei wird die xorg.conf ausgelesen, mittels grep alle Zeilen die mit einer # beginnen(^ steht für den Zeilen-Anfang) herausgefiltert und was übrig bleibt wird in die datei.txt geschrieben - die Ursprungsdatei wird dabei nicht verändert, probiert es also ruhig mal aus.

_________________________________________________

sed

sed ist ein überaus mächtiges Programm zur Manipulation von Text, welchem zusammen mit awk ein ganzes, nicht gerade dünnes, Buch gewidmet wurde, weswegen ich hier lediglich ein kleines Beispiel geben werde - man bedenke, dieser Guide ist immer noch für Einsteiger.

Nehmen wir an, wir sind in einer Firma angestellt und kümmern uns dort um die EDV(kurz gesagt, dass folgende ist einfach unser Job). Eines Tages geht der Chef, nennen wir ihn Paul Schmidt, in Rente und übergibt das Geschäft an seinen Sohn, Robert Schmidt. Darauf hin müssen natürlich sämtliche Dokumente entsprechend geändert werden - also Paul durch Robert ersetzt. Die meisten ordentlichen Programme speichern ihre Vorlagen als reinen Text, XML-Struktur oder irgendetwas, was Menschen lesen können.
Gehen wir nun davon aus, dass wir weit über 100 Briefvorlagen, Visitenkarten, Mail-Signaturen und was auch sonst nicht noch alles haben, was alles geändert werden muss. Natürlich gibt es auch in Word gewisse Automatisierungstechniken, aber das lassen wir mal aussen vor.
Denken wir also mal drüber nach, wie lange wir (ist ja schließlich unser Job) bräuchten, um eine 3-Stellige Anzahl von Dateien von Hand zu bearbeiten, im schlimmsten Falle also noch mit dem Original-Program - z.B. Word, dann wäre das Datei öffnen, Eintrag suchen, ändern, speichern, nächste Datei...
Lange Rede kurzer Sinn, warum lassen wir das nicht einfach jemand anderes machen? Nein, nicht den Praktikanten, sondern ein Programm, welches darauf spezialisiert ist.
Es dürfte nun klar sein, dass wir hier von sed reden, so lautet schließlich die Kapitelüberschrift.

Nun, wir machen die Aufgabe erst einmal an einer einzelnen Datei, wie wir so etwas für mehrere Dateien machen, lernen wir später noch.

cat datei.txt

Zitat

Paul Schmidt, Sounsogasse 1, 45654 Irgendwo
Dies gilt es nun in Rober Schmidt umzuwandeln, der Rest bleibt jedoch gleich. Da wir jedoch noch Anfänger sind, schreiben wir die geänderten Daten zunächst in eine neue Datei, damit wir unser tun überprüfen können und im schlimmsten Fall ein Backup haben.

Der Aufruf
cat datei.txt | sed -e "s/Paul/Robert/g" > datei2.txt
erledigt das für uns.
Zur Erklärung, das s steht für substitue zu deutsch ersetze, gefolgt vom Ursprungs-Wert, dem neuen Wert und einem g, welches global bedeutet und jedes Vorkommen entsprechend ersetzt - ohne g würde nur der erste Treffer ersetzt. Wichtig sind hierbei die Slashes (/), sie trennen die einzelnen Teile untereinander ab, damit sed richtig interpretieren kann, was wir eigentlich wollen!

Natürlich versieht sed ebenfalls RegEx und eignet sich vorzüglich für sämtliche Aufgaben, wo Texte durch andere ersetzt werden sollen.

_________________________________________________

chmod

Dieser Befehl ändert die Rechte einer bzw. mehrerer Dateien und/oder Ordnern, auf Wunsch auch rekursiv. Angeben kann man die neuen Rechte entweder in Zahlen oder den bei ls bereits vorgestellten Buchstaben. Bei Letzterem entzieht ein vorangestelltes - die Rechte, wohingegen ein + die Rechte entsprechend setzt.
Eine sehr schöne Erklärung zum Thema findet sich bei Wikipedia, weshalb ich es nicht unbedingt für nötig erachte, dieses hier noch genauer zu erläutern - ein kleines Beispiel folgt sowieso noch in einem weiteren Kapitel.

_________________________________________________

chown

chown ändert den Besitzer einer Datei bzw. eines Ordners, was zum Beispiel dann sinnvoll sein kann, wenn man Daten von einer NTFS-Partition kopiert und diese normalerweise nur als root lesen kann.

Der Befehl ist im Prinzip recht simpel und wie folgt aufgebaut
chown [-R] $USER:$GRUPPE $DATEI/$ORDNER]
. Wie so oft steht -R auch hier für rekursiv und ist optional. Wenn man eine Datei an sich selbst oder andere, nicht root-User, überträgt, ist als $GRUPPE in der aller Regel users einzutragen.

_________________________________________________

(u)mount

Möchte man Daten auf ein (virtuelles) Gerät schreiben, muss dieses eingehängt werden, normalerweise in einen Ordner bzw. Loop-Device. Hierfür ist der Befehl mount vorhanden, welcher sich in der Regel ganz einfach formulieren lässt
mount $WAS $WOHIN
, zum Beispiel meinen DVD-Brenner
mount /dev/hdc /mnt/dvd
.
mount ist bis zu einem gewissen grad intelligent und findet meistens selbst heraus, um welchen Dateisystem-Typ es sich handelt. Sollte dieses einmal nicht funktionieren, gibt mount einen entsprechenden Hinweis aus. Nun gibt man den Befehl noch einmal ein und hängt als Parameter -t $FS an, also z.B. -t reiserfs.
Um ein Dateisystem wieder auszuhängen, nutzt man einfach umount, genauer
umount $ZIEL
. Allerdings funktioniert das nur, wenn kein einziges Programm mehr auf den Mountpunkt zugreift, was auch auf die Shell zu trifft, in der man sich gerade befindet - ein sehr beliebter Anfängerfehler.
Wichtig ist, dass man niemals ein USB-Gerät abzieht, bevor man es nicht ausgehängt hat, da es sonst zu Schäden am Dateisystem und folglich auch den Daten kommen kann!

Wer öfter das selbe Gerät an den selben Ort mounted, sollte sich einmal
man mount && man fstab
ansehen :unsure:

_________________________________________________


Fazit

Schon steht auch der Manipulation von Daten nichts mehr im Wege. Fast alles läßt sich mit den genannten Beispielen erledigen, jedenfalls aus Sicht eines Einsteigers - dennoch, immer genau schauen, was man eigentlich eingibt, wir sind zwar noch nicht root, aber die eigene Musiksammlung oder ähnliches liegen einem bestimmt am Herzen :(
1

#4 Mitglied ist offline   ph030 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.130
  • Beigetreten: 14. Juli 04
  • Reputation: 36
  • Geschlecht:unbekannt

geschrieben 15. Januar 2007 - 01:41

Einiges nützliches haben wir uns ja schon angesehen, gleichzeitig wurde aber auch nur die Oberfläche des nützlichen angekratzt. Folglich wollen wir uns jetzt etwas mehr dem widmen, wofür die Arbeit in der Shell gerne benutzt wird - nämlich der Automatisierung bzw. dem Skripten.

Wir machen hier jetzt nichts, was überaus kompliziert wäre, schließlich soll das ja ein Guide für Einsteiger sein und ab einem gewissen Komplexitätslevel sollte man sowieo eher auf Perl, Ruby oder dergleichen umsteigen.

Zunächst einmal sollte man vielleicht erklären, was man gemeinhin unter einem Skript versteht. Ein Skript ist hierbei nichts anderes, als eine gewisse Reihenfolge von Befehlen, welche miteinander verknüpft sind und eventuell auf vom User angegebene Variablen zurückgreifen können.
Gründe, um Skripte einzusetzen, gibt es mehrere. Zum einen kann man damit oft wiederkehrende Vorgänge weitgehend automatisieren und zum anderen mal schnell etwas für den Einmalgebrauch schreiben.

Wenn man eine Befehlsfolge regelmäßig braucht, lohnt es sich, dafür ein kleines Skript anzulegen, wobei dies eine einfache Textdatei ist, in die die Befehle geschrieben werden.

Prinzipiell lässt sich so eine Datei mit jedem Text-Werkzeug erstellen und bearbeiten, man sollte aber eher auf Programme wie OO.o Writer und Abiword verzichten und statt dessen einen reinen Texteditor verwenden - z.B. (g)vim, emacs, kate oder gedit. Der größte Vorteil liegt im Syntax-Highlightning, man sieht also sehr schnell, wenn man mal einen Fehler gemacht hat. Abgesehen davon bieten viele Editoren Automatismen, die das Bearbeiten/Erstellen vereinfachen oder beschleunigen.

Da wir uns hier lediglich auf BASH-Skripte beziehen, sei zunächst gesagt, dass die allererste Zeile eines BASH-Skripts mit
#!/bin/bash
beginnen sollte.

Darauf folgend werden die Befehle genauso geschrieben, wie man sie auch in die Shell eintippen würde. Wenn man etwas kommentieren möchte, z.B. um sich zu notieren, was ein Befehl macht, stellt man der entsprechenden Zeile einfach ein # an den Anfang.

Als klitzekleines Beispiel erstellen wir ein Skript, welches den User nach seinem Namen fragt und ihn dann begrüßt(das übliche "Hello World!" wäre zu einfach :unsure: )

#!/bin/bash
# wir fragen den User
echo "wie heisst du denn?"
# wir lesen seine angabe
read name
# und nun noch hallo sagen
echo "hallo $name"


Wie oben genannt, sind die Zeilen, die mit einer # beginnen Kommentare. Zunächst geben wir per echo die Aufforderung an den User, uns seinen Namen zu nennen. Daraufhin gibt er ihn auf der Tastatur ein und bestätigt mit Return, was von read gelesen und in der Variable name gespeichert wird. Zum Schluss geben wir via echo die Begrüßung aus. Das $ ist hier wichtig, um der BASH zu sagen, sie soll den Wert von der Variablen name ausgeben.

Um dieses Mini-Skript nun zu testen, speichern wir es unter einem beliebigen Namen ab, z.B. skript1.sh. Eine Dateiendung ist hierbei völlig irrelevant, erleichtert aber dem User zu erkennen, worum es sich bei der Datei handelt.

Damit wir die Datei ausführen können, müssen wir ihr noch das entsprechende Attribut zuweisen, was ein Aufruf von
chmod +x skript1.sh
erledigt. Nun können wir es starten, durch die Eingabe von
./skript1.sh
testen.

Soweit, so gut, es funktioniert(sollte es jedenfalls :( ). Nun wollen wir einmal einen One-Liner anschauen.

Wir stellen uns vor, wir befinden uns in einem Verzeichnis, mit 100ten von verschiedenen Dateien und wollen nun sämtliche PDFs jeweils zippen - also nicht alle in eines, sondern ein Zip pro PDF(zugegeben, der Sinn ist fraglich, aber mir fällt spontan kein besseres Beispiel ein).

Der entsprechende Befehl würde wie folgt aussehen
for file in *.pdf; do zip -9 "$file".zip "$file"; done
und würde aus "datei.pdf" "datei.pdf.zip" machen.

Das Wörtchen for signalisiert, dass hier eine Schleife beginnt. file ist der Name der Variablen, die wir im Verlauf der Schleife benutzen möchten und in *.pdf gibt uns die Parameter für die Schleife, wobei bei jedem Schleifendurchlauf der nächste, noch nicht genutzte Parameter - in diesem Falle also ein Dateiname - eingesetzt wird.
Das Semikolon markiert das Ende der Schleifenbedingung und ist essenziell - ohne funktioniert das Konstrukt nicht!
do kennzeichnet den Beginn des Schleifenblocks. Darauf folgend kommen die Befehle, welche untereinander verknüpft werden können (mit &&||>>, etc) und durch Semikolons getrennt werden.
Um das Ende der Schleife zu markieren, kommt ; done zum Einsatz - auch dieses darf man nicht weglassen.

Das obige ist nur eine extrem kurze Einführung in einige Prinzipien, womit sich aber schon sehr viele täglichen Aufgaben lösen lassen. Da dies nur ein Einsteiger-Guide ist, führe ich das hier nicht weiter aus, sondern verweise die interessierten an den Advanced BASH Scripting Guide oder seine nächste Buchhandlung/Bibliothek.

__________________________________________________


cron

cron ist ein Dienst, welcher zu bestimmten Zeiten vom User definierte Aktionen ausführen kann, also ähnlich wie der Task-Planer unter Windows. Einen entsprechenden Daemon - also ein Programm, was sich um die cron-Einträge kümmert - findet man auf so ziemlich jeder Linux-Installation, meistens ist dieser auch per Default aktiviert.

Prinzipiell kann cron jeden Task ausführen, darunter folglich auch unsere eigenen Skripte - sehr nützlich für Backups, Systemupdates, Mail-Versand oder was auch immer einem noch einfällt.
Um einen sogenannten cronjob, also einen geplanten Task, anzulegen, sollte man sich zunächst die manpage von crontab mittels
man crontab
durchlesen und dann per
crontab -e
erstellen.

__________________________________________________


Fazit

Wieder haben wir einiges gelernt. Wir können nun mehrere Dateien in einem Rutsch verarbeiten und unser System zeitgenau steuern - alles vollkommen nach unseren Wünschen, eigentlich kann man damit doch zufrieden sein, oder etwa nicht?
1

#5 Mitglied ist offline   ph030 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.130
  • Beigetreten: 14. Juli 04
  • Reputation: 36
  • Geschlecht:unbekannt

geschrieben 15. Januar 2007 - 01:42

Welcome to the Boss-Level

Auf unserem Weg hierher haben wir zwar schon einiges an nützlichen Waffen für den Alltag gesammelt, die mächtigste von allen, die BFG sozusagen, steht aber noch aus und genau wie im Spiel ist es auch hier, wer nicht damit umgehen kann, zerballert sich eher selbst, als dass er seine Aufgabe erfüllen kann. Folglich sollte man stets ein paar Medipacks bereit halten oder in unserem Falle ein Backup, Wissen und ein wachsames Auge.

Um es noch ein letztes Mal in aller Deutlichkeit zu sagen:
root = Gott, es gibt nichts, was einen aufhält und noch weniger, was einen vor ungeschick, Müdigkeit, mangelnder Erfahrung oder noch schlimmer, purer Dummheit schützt.
Wer sein System zerballert, hat es in 99% der Fälle aus Dummheit getan und verdient eigentlich absolut keine Hilfe sondern höchstens ein hämisches Grinsen.


_________________________________________________

su

Durch die Eingabe von su wechselt man den User und damit auch den Kontext.

Standardmäßig wechselt man damit zu root, kann aber durch Eingabe von
su horst[/u] auch zum User "horst" wechseln - sofern man das Password kennt.

Auf die genannte Art root werden kann nur, wer sich in der Gruppe [i]wheel[/i] befindet - ob das der Fall ist, kann man durch Eingabe von [code]groups
erfahren.

Zurück zu seiner eigenen Session kommt man durch die Eingabe von
exit
bzw. durch drücken von Strg+D - man sollte dies schnellstmöglich tun und v.a. niemals den Rechner verlassen, solange eine root-Shell geöffnet ist!

Der Parameter -p sorgt dafür, dass man im aktuellen Pfad bleibt, ansonsten wechselt man in das ~ des neuen Users.

Wenn man, wie das meistens so ist, nur einen einzigen Befehl als root absetzen möchte, übergibt man su einfach den Parameter [-i]-c[/i] gefolgt von dem Befehl - sollte der Befehl Leerzeichen enthalten, muss der Befehl in "" eingeschlossen sein.

_________________________________________________

sudo

sudo ermöglicht es ebenfalls, Befehle als root oder anderer User abzusetzen, auf Wunsch auch ohne Password.
Es sei hiermit angemerkt, dass eine falsche Konfiguration von sudo äußerst gefährlich ist und bei einem entsprechenden Exploit auch remote ausgenutzt werden kann. Deshalb sollte man sudo ausschließlich auf die nötigen Befehle beschränken, möglichst auch noch die möglichen Optionen.

Ein möglicher Aufruf sähe wie folgt aus
sudo mount /mnt/dvd
. Dies erfordert zum einen einen Eintrag in der /etc/fstab und zum anderen die Konfiguration von sudo.

Auf Grund der Gefahren und der Komplexität, werde ich hier nicht weiter auf sudo eingehen und rate dringend das lesen der entsprechenden Manpage oder zumindest der Konfigurationsdatei an.

_________________________________________________

dmesg

Kurz und knapp, der Befehl dmesg liefert Einblicke in das Logfile des Kernels, damit lassen sich sehr gut eventuelle Probleme feststellen, was übrigens auch als normaler User funktioniert.

_________________________________________________

Fazit

Nun haben wir sie also, die ultimative Macht. Bitte handelt damit nicht wie Georg Dabbeljuh, sondern geht vernünftig damit um. Wenn ihr euch nicht sicher seid, nutzt eine Suchmaschine oder Wikis und versucht eure Fragen zu klären - sollte sich wider Erwarten keine Lösung finden lassen, stellt eine Frage in einem passendem(!) Forum und zwar bevor(!) ihr etwas kaputt macht.
1

#6 Mitglied ist offline   ph030 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.130
  • Beigetreten: 14. Juli 04
  • Reputation: 36
  • Geschlecht:unbekannt

geschrieben 15. Januar 2007 - 07:26

Nun da wir mit der Shell schon etwas vertrauter sind, stehen die Chancen wahrscheinlich
nicht schlecht, dass wir sie lieben gelernt haben und möglichst viel auf einfache Weise
ohne - zu einem großen Teil überflüssige und unnötig komplizierte - GUIs zurückzugreifen.

Vorab sei gesagt, es ist annähernd jede Aufgabe in der Shell zu lösen, für welche man
normalerweise eine GUI verwendet, lediglich der Aufwand variiert und ja, auch Bilder
zeichnen ist möglich - sofern man einen Texteditor bedienen und das SVG-Format auswendig
kann ;)

Ich stelle im folgenden meine(!) Favoriten vor und nenne, soweit möglich, Alternativen -
man möge mir eine gewisse Färbung also bitte verzeihen.

Dateimanagement

Abgesehen von den reinen Shell-Befehlen ala ls, cp, mv, etc gibt es natürlich auch
richtige Dateisystem-Browser allerdings natürlich im Textmodus.
Das wohl bekannteste Beispiel ist der Midnight Commander, oder kurz mc, bei
dem man schon am Namen erkennen kann, dass es sich um einen Klon des sehr bekannten Norton
Commanders handelt - ein vom Prinzip gleiches Programm unter Windows wäre etwa der Total
Commander.
Das Prinzip ist simpel, man hat ein zweigeteiltes Fenster, in dem auf jeder Seite ein
Verzeichnis angezeigt werden kann. Navigiert wird einfach mit der Tastatur bzw. sofern der
Support im Programm vom Distributor eingebaut wurde, auch mit der Maus. Aktionen, wie z.B.
das Kopieren einer Datei, werden einfach per Tastatur-Shortcut bzw. Maus ausgeführt, wobei
sich die Kombinationen frei belegen lassen - wie sich das auch gehört ;)
Direkt eingebaut ist ein (relativ) simpler Editor, die Möglichkeit auf Remote-Filesysteme
zuzugreifen, eine Mini-Shell und noch vieles mehr - ein ideales Spielzeug für alle
Lebenslagen ;)

_________________________________________________


Editoren

Wenn man keine Texte eingeben könnte, bräuchte man auch keinen Computer, ergo muss ein
Editor schon sein und wenn seine einzige Aufgabe darin bestehen würde, ein leeres Textfeld
zu präsentieren.

Die zwei bekanntesten und gleichzeitig mächtigsten Editoren sind vi(m) und emacs - wobei
"Editoren" eigentlich eine extreme Untertreibung ist, denn beide stellen so viele
Schnittstellen bereit, dass man mit ihnen so ziemlich alles machen kann. Angefangen vom
Dateimanager, über einen Mail-Client oder IRC/IM-Client, bis hin zum Mediaplayer - nichts
ist unmöglich.
Von mir bekommt vim den Vorzug, was aber unter anderem auch daran liegt, dass es der erste
mächtige Editor war, mit dem ich in der Linux-Welt konfrontiert worden bin. vim ist
prinzipiell eigentlich leicht zu lernen, aber sehr schwer zu meistern und ich bin mir fast
sicher, dass nicht einmal mehr die Autoren wirklich alle Funktionen ohne nachschlagen in
der Dokumentation aufzählen oder gar nutzen können.
Sowohl vim als auch emacs gibt es übrigens auch als GUI-Variante, wer also einen richtig
guten Editor möchte und trotzdem gelegentlich gerne klickt, der kann diese ohne Probleme
und große Umgewöhnung gerne nutzen.

Eine leichter zu erlernende Alternative wären z.B. nano, mehr oder weniger die
"notepad.exe" unter Linux. Sehr einfach, dennoch funktional und genanntem Notepad um
Meilen vorraus. Vielleicht die beste Alternative für Einsteiger.

_________________________________________________

Mail-Client

Definitiv ist hier mutt oder besser Fork muttng die beste Wahl, wenn es um
möglichst große Flexibilität und Leistung geht.

Mutt ist als Mail-Client dass, was FVWM als Windowmanager ist. Es gibt nichts, was
nicht geht, aber der Weg dorthin ist bisweilen doch sehr steinig.
Mutt bietet vollen Support für PGP/GPG, S/MIME, MIME-Types, UTF8 und so ziemlich alles,
was man braucht.

Allerdings muss man noch dazu sagen, Mutt ist lediglich zum Anzeigen lokaler Mail gedacht
- gut, POP3 und IMAP werden auch unterstützt, wenn man lieber direkt darauf zugreifen
möchte - das perfekte Gespann besteht aber aus Mutt und zusätzlich (z.B.) fetchmail und
(z.b.) procmail, wobei fetchmail die Mails einsammelt, zum filtern(Spam, Sortieren,etc) an
procmail weiterleitet und diese dann von Mutt angezeigt werden.

Alle, denen die Konfiguration von Mutt zu kompliziert erscheint, lege ich eine Suche bei
Grml ans Herz, diese Jungs haben ein Skript erstellt,
welches die wichtigsten Parameter abfragt und Mutt so direkt benutzbar macht.

_________________________________________________

Webbrowser

Wie findet man Hilfe, wenn der X-Server nicht mehr läuft oder wie surft man durch's Web,
ohne von Werbung erschlagen zu werden? Das dazu noch richtig schnell und komfortabel?

Richtig, mit einem Textbrowser.

elinks ist hier mein Favorit - schnell, flexibel und gut konfigurierbar.

Weitere Alternativen wären links, welcher sogar einen graphischen Modus hat,
lynx oder auch w3m. Jeder hat, wie das nunmal so ist, seine Vor- und Nachteile - diese
herauszufinden und einen Favoriten zu bestimmen, obliegt dem User.

_________________________________________________

IRC-Client

irssi for the win kann ich nur sagen - jedenfalls wenn man mich fragt.
Schlank, flexibel und es macht genau das, wozu es gedacht ist. Alleine schon die
offizielle Homepage bietet eine Unmenge an Themes und Skripten, da sollte jeder etwas
finden - das perfekte Duo ist übrigens irssi+bitlbee(aber darauf kommen wir
gleich noch :)

Natürlich gibt es auch hier zahlreiche Alternativen, bekannte sind z.B. BitchX und
epic.

_________________________________________________

Instant Message

bitlbee trägt hier ganz klar meine persönliche Krone.

Es ist kein Client im eigentlichen Sinne, sondern ein Gateway zwischen den Welten. Es
erlaubt das Chatten via einem IRC-Client - darum meine Anspielung oben. Folglich braucht
man für sämtliche Kommunikation nur noch ein einzelnes Fenster.
Die größten Netzwerke bzw. deren Protokolle werden alle unterstützt - wenn auch teilweise
nicht alle Features. Es stellt also kein Problem dar, mit Leuten aus den Netzen von
Jabber, MSN, Yahoo! oder AOL/ICQ zu reden. Selbiges geht natürlich auch mit einem reinen
Jabber-Client, doch das würde wieder ein Fenster mehr bedeuten.

Alternativen gibt es viel zu viele, um sie hier aufzuführen, für jedes Protokoll
mindestens zwei Stück - bitlbee hingegen ist einzigartig und erledigt in einem kleinen
Programm alles, was die Kommunikationsbedürfnisse angeht.

_________________________________________________

P2P

Sind wir treue Fans des Esels, dann greifen wir zu amule, bevorzugen wir
Bittorrent, dann ist rtorrent der Kandidat der Wahl. Natürlich gibt es auch noch
Clients für die Gnutella und FastTrack-Netze.
giFT bedient schon die meisten Netze, doch wer bequem in allen Netzen wandern und
dabei möglichst wenig Programme laufen lassen will, kommt über kurz oder lang nicht an
mldonkey vorbei. Auch wenn der Name anderes suggerieren mag, dieser Client
unterstützt nicht nur das eDonkey und Kademlia-Netz, nein auch mit Bittorrent, Gnutella
und FastTrack kann er umgehen - ein ideales Spielzeug für die Downloadkiste also ;)

_________________________________________________


MediaPlayer

Wer der Meinung ist, ein MediaPlayer muss eine GUI haben, um gut zu sein oder sich gut
bedienen zu lassen, der möge sich nochmal sein HIFI-Rack im Wohnzimmer anschauen...

Meiner Meinung nach das Nonplusultra, wenn es um den reinen Musikgenuss geht, ist
eindeutig mpd - ein Daemon, der die Musik auch dann noch spielt, wenn man
ausgelogt ist oder der X-Server die biege macht. Das meiner Meinung nach ideale Frontend
hierfür ist ncmpc - so einfach zu bedienen und doch so funktional.

Gut, wir sprachen grade von Musik, das kann der folgende Kandidat natürlich auch und um
ehrlich zu sein, es dürfte so ziemlich kein verbreitetes Format geben, welches
mplayer nicht abspielen kann und mehr brauch man eigentlich nicht zu sagen.

_________________________________________________

Office

Warum einen Brief in OO.o Writer schreiben, wenn vim unser Editor der Wahl ist? Zusammen
mit der latex-suite schreiben sich ruckzuck die schönsten Dokumente und spätestens bei der
Diplomarbeit wird es sich lohnen, wenn man sich einmal ein paar Minuten Zeit genommen und
sich mit (La)TeX vertraut gemacht hat - v.a. dann, wenn man einen Studiengang wählt, in
dem Mathe Pflichtfach ist.

Präsentationen? Also wirklich, wer kann diesen verhunzten PowerPoint-Mist noch sehen bzw.
wer glaubt, dass man mit einer solchen Präsentation erfolg hat? Wenn hierauf jemand mit
"ich" antwortet, möge er bitte mal nach Powerpoint-Karaoke googlen, danke.
Ernsthaft, ein normales Dokument reicht auch für solche Zwecke in aller Regel aus. PDF
wäre ein Kandidat. Wenn man unbedingt Bilder braucht, erstellt man diese in (z.B.) gimp,
importiert sie in ein TeX-Document und exportiert das ganze als PDF - voila.

Tabellenkalkulation? Wieviele Leute nutzen Excel wirklich als Tabellenkalkulation und
nicht als verkappte Datenbank? Letztere sollten sich eher mal mit SQL befassen oder wenn
es recht simple Aufgaben sind, vielleicht auch mit CSV-Dateien und einem kleinen Parser.

Wer wirklich Spreadsheeds brauch, kann sich ja zunächst ersteinmal die entsprechenden
Skripte für vim oder emacs anschauen - die allermeisten dürfte das schon befriedigen.

_________________________________________________

CD/DVD

Warum soll man sich eine GUI installieren, wenn diese doch sowieso auf Brenn-Tools aus der
Shell zurükgreifen? Dann kann man doch gleich a) diese Tools nutzen oder b) ein
Shell-Frontend verwenden - wie z.B. bashburn. Je nach Task und Programm stehen
diese Tools ihren GUI-Kollegen in nichts nach und teilweise überbieten sie sie sogar bei
weitem.

_________________________________________________

Videos bearbeiten

transcode - das Schweizer Messer unter den Videotools. Nicht nur, dass die meisten
GUIs darauf zurückgreifen, weil es extrem mächtig ist, nein, es ist sogar einfach zu
bedienen und lässt sich sogar als Anfänger so leicht skripten, dass man mal ruckzuck mit
einem einzigen Befehl die ganze Videosammlung konvertiert - gut, dass "ruckzuck" bezieht
sich natürlich auf den Befehl, dass die Arbeit an sich nicht innerhalb von Sekunden geht,
sollte wohl klar sein.

Einfaches Beispiel, wir setzen mal schnell zwei Dateien zu einer zusammen
avimerge
-o fertig.avi -i teil1.avi teil2.avi
- ein bisschen warten und das war es schon.
Für die, die jetzt transcode suchen, avimerge ist Teil des transcode-Paketes.

Neben transcode gibt es noch viele weitere Spezialtools, wie z.B. tovid, mit dem
sich Inhalte DVD-konform erstellen lassen. Jedes dieser Tools erledigt (in der Regel) eine
Aufgabe und das mehr als ordentlich - da können sich einige GUIs mehr als nur eine Scheibe
von abschneiden. Wenn man dann noch bedenkt, was wir über && gelernt haben, ist es kein
Problem mehr, mit einem Befehl die ganze Videosammlung in DVDs zu konvertieren - wer das
Glück hat, eine von diesen lustigen Brennmaschinen zu besitzen, kann sie auch der Reihe
nach direkt brennen - wie immer, das Limit ist da, wo der eigene Horizont erscheint.

_________________________________________________

FTP-Transfer

Bekanntlich kommt es ja oft vor, dass man lokal eine Menge Dateien erstellt und diese dann
auf (s)einem WebSpace veröffentlichen will. Warum also das ganze nicht skripten? Z.B. ein
Mini-Skript, welches einen Screenshot anfertigt, das Bild hochlädt und die URL
zurückliefert? Ist meiner Meinung nach doch alle mal bequemer, als das selbst zu tun.

Ein schöner Kandidat hierfür ist ncftp, welches neben dem eigentlichen Programm
auch gleich noch ncftpput und ncftpget mitbringt, bei denen man schon vom
Namen her erahnen kann, um was es sich dreht.

Zeit gesteuerte Backups via cron auf einen FTP-Server sind somit kein Problem mehr -
anders herum natürlich genauso, wenn jemand regelmäßig etwas neues auf seinem FTP
veröffentlicht(was auch immer ;) )

_________________________________________________

News

RSS- und Atom-Feeds sind heutzutage sehr beliebt - ich kann zwar nicht wirklich sagen
warum, denn meistens bekommt man ja nur eine Headline und muss trotzdem auf die
entsprechende Seite(oder man schreibt sich einen guten Parser ;) ), aber da es Leute gibt,
die diese Feeds mögen/brauchen, gibt es natürlich auch die entsprechenden Programmme.
snownews ist zum Beispiel ein solches - und genau wie die meisten
Konsolenprogramme, sehr einfach in der Handhabung.

Wer jetzt eher an Usenet gedacht hat, der geht natürlich auch nicht leer aus. Zum einen
unterstützt der bereits vorgestellte Mutt natürlich auch NNTP und zum anderen gibt es auch
hier wieder eine große Auswahl - einer der bekanntesten und besten Clients ist
wahrscheinlich slrn.

_________________________________________________

Fazit

Man sieht, es gibt für annähernd jeden Task das entsprechende Programm, meistens sogar
eine riesengroße Anzahl von Programmen, die alle das selbe erledigen. Niemand wird
gezwungen, Shell-Programme zu nutzen, doch meiner Meinung nach sollte man sich zumindest
einmal damit auseinander setzen - auch als Otto-Normal-User - die Chance, dass man etwas
gutes verpasst, ist einfach zu groß.

Wo wir gerade bei "Verpassen" sind, ein Schmankerl gibt's natürlich noch zum Schluss ;)

_________________________________________________

You tried it once and ever since, you could'n live without it

Ladies and Gentlemen, please welcome...

screen

Um Sinn und Zweck des Programms einmal kurz wieder zu geben, zitiere ich mal aus dem
Kommentar des Gentoo-ebuilds zu screen:

Zitat

Screen is a full-screen window manager that multiplexes a physical terminal between
several processes


So, das sollte nun eigentlich jeder verstanden haben...oder doch nicht?

Was ein X-Windowmanager ist, sollten eigentlich alle wissen. Ein Programm, was sich um die
Anordnung und Bedienung der Fenster auf einem X-Server kümmert - Beispiele wären Metacity
von Gnome, kwin von KDE, xfwm von XFCE, {Black|Flux|Open}box, etc. pp.

Nun, kurz gesagt, screen ist das selbe, nur in einer Shell. Damit ist es nicht nur möglich
X (im Sinne von Anzahl!) Programme in einem einzigen Terminal zu starten und jederzeit
darauf zu zugreifen, nein wir können damit auch jedes Programm mehr oder weniger zu einem
Daemon machen.

Einfaches Beispiel, ich starte mutt und irssi in screen in einem Terminal, schließe das
Terminal und logge mich aus, fahre zur Uni/Arbeit/$Bekannter/etc, öffne dort eine Shell,
logge mich via SSH auf meinem Rechner zu Hause ein, reaktiviere Screen und habe wieder
Zugriff auf meine Programme - dabei ist es vollkommen egal, von welcher Maschine aus ich
mich einlogge, sei dies ein Mac bei einem Freund, der Windowsrechner in einem
Internet-Cafe, PDA/Mobiltelefon/PSP/NDS oder ganz was anderes - einzig eine
Internetverbindung und ein SSH-Client müssen zur Verfügung stehen.

Screen lässt sich kaum beschreiben, aber sehr gut und für vieles nutzen und wer es noch
nicht ausprobiert hat, hat definitiv was verpasst (nicht wahr @ mutze ;) ).
1

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0