UbuntuUserDays
Artikel in Arbeit
Dieser Artikel wird momentan von Ryuno-Ki erstellt. Als Fertigstellungsdatum wurde der 31.03.12 angegeben.
Achtung: Insbesondere heißt das, dass dieser Artikel noch nicht fertig ist und dass wichtige Teile fehlen, oder sogar falsch sein können. Bitte diesen Artikel nicht als Anleitung für Problemlösungen benutzen!
Die Ubuntu User Days 🇬🇧 sollen Anwendern einen Stand in Ubuntu erleichtern.
14./15. Januar 2012¶
In diesem Abschnitt soll der dazugehörige Log 🇬🇧 teilweise übersetzt werden.
Firewall-Grundlagen¶
Hinweis:
Die Originale finden sich unter Firewall-Grundlagen 🇬🇧 von the_hydra, gehalten gegen 17:00 Uhr (MEZ).
Okay, Leute, Zeit, ein wenig über Firewalls zu reden.
Zunächst einmal, Firewalls sind keine flammenden Klötze, sondern der Name eines Abwehrmechanismus. Wovor soll sich geschützt werden? Vor unerwünschtem Netzwerk-Verkehr.
Stell dir eine Firewall wie Soldaten vor, die eine Staatsgrenze bewachen. Sie werden Leuten, die einen echten Pass oder ein Visum oder was auch immer haben, durchlassen und den Rest verwerfen.
Frage: Stimmt es, dass Ubuntu mit einer vorkonfigurierten Firewall ausgeliefert wird?¶
Ja, das stimmt. Aber sie muss noch aktiviert werden durch Verwenden des ufw-Paketes. Wir werden später darauf zurückkommen.
Frage: Worin besteht der Unterschied zwischen der Firewall meines Routers und der meines Laptops?¶
Es gibt keinen. Firewall beschreibt den Mechanismus und nicht die Hardware. Alles, was Netzwerk-Verkehr filtern kann, sei es Software, Hardware oder beides, wird als Firewall aufgefasst.
Frage: Wie filtere ich einen Port in Ubuntu 11.10? Bitte für Anfänger verständlich erklären¶
Genau das soll hier erklärt werden. Zu Anfang muss das ufw-Paket installiert werden:
ufw
Befehl zum Installieren der Pakete:
sudo apt-get install ufw
Oder mit apturl installieren, Link: apt://ufw
sudo aptitude install ufw
ufw steht dabei für unkomplizierte Firewall. So ganz stimmt das aber nicht. Nachdem es installiert ist, muss es noch aktiviert werden:
sudo ufw enable
Das ist wichtig, denn ohne Aktivierung, wird es nicht laufen und auch nicht mit deinem *buntu gestartet.
Als Back-End wird ufw durch sogenannte iptables ermöglicht. Genau genommen gibt es also zwei Möglichkeiten, eine Firewall aufzubauen: Entweder durch das Verwenden von ufw oder gerade durch das Verwenden von iptables-Regeln. Es gibt daneben noch ein Programm namens gufw, welches ein grafisches Front-End für ufw darstellt.
Frage: Worin besteht denn dann der Unterschied zwischen ufw und iptables?¶
Okay, für die folgenden Beispiel nehmen wir einfach einmal an, dass du deinen Laptop mit der IP 10.1.2.3
schützen willst. Dein Laptop verbindet sich mit dem Internet über irgendeine Art von ADSL. Sagen wir, du hast einen lokalen Apache (ein Webserver), aber du möchtest nicht, dass sich irgendjemand aus dem Internet einwählt, weil du ihn nur für das lokale Testen verwendest.
Zum Ablehnen:
sudo ufw reject 80
reject beschreibt die Aktion und 80 den Port. Stell dir einen Port wie eine Hausnummer vor.
Hier ist eine Kurz-Übersicht für Portnummern: 80
= HTTP, 25
= SMTP, 110
= POP3. Das dürfte das häufigste sein, was du brauchst.
Auf der anderen Seite möchtest du vielleicht, dass Leute sich aus dem Internet mit deinem Apache verbinden können:
sudo ufw allow 80
Frage: MUSS ich ufw konfigurieren?¶
Ja, die Beispiele oben sind nur der Anfang. Falls du es zu schwierig findest, dir den Port zu merken, dann kannst du auch den Namen anstatt der Nummer verwenden.
Überprüfe dabei immer mit:
sudo ufw status
um sicherzugehen, ob die neue Regel angenommen wurde oder nicht.
Frage: Wie spezifiziere ich ein- und ausgehenden Verkehr?¶
Interessante Frage. Der obige Befehl ufw allow 80
funktioniert in beide Richtungen: für ein- und für ausgehenden Verkehr. Was wirklich benötigt wird, ist ein Filter für den Eingang - zumindest vom Standpunkt des Laptops aus. Also bedeutet "eingehend" hier, dass Daten (Pakets) aus dem Internet zu deinem Laptop eingehen. Ausgehend ist demnach genau andersherum.
Zurück zum Kommando:
sudo ufw allow in 80
in steht hierbei für incoming (eingehend), während out für outgoing (ausgehend) bedeutet. Ich vergaß zu erwähnen, dass standardmäßig ufw allen eingehenden Verkehr blockiert - natürlich ausgenommen denen, die in Beziehung zum ursprünglichen Ansinnen stehen, z.B. den Verkehr von deinem Webbrowser. Daneben erlaubt ufw alles von deinem Laptop zum Internet.
Frage: Gibt es so etwas wie Profile für ufw, so dass ich verschiedene Regeln - wie "Daheim" oder "Universität" - festlegen kann, um mit wenigen Befehlen verschiedene Ports und Protokolle zu erlauben oder zu blockieren?¶
Das Handbuch von ufw (man ufw
) erwähnt etwas wie Anwendungsprofile, aber das hab ich bisher nie gebraucht. Ich schätze, du wirst dich durch das Handbuch wühlen müssen.
Andererseits kannst du deine ufw-Kommandos in ein Shellskript packen. Beginne dabei mit:
sudo ufw reset
Danach ergänze die von dir benötigten Kommandos. Dann kannst du verschiedene Filterregeln verwenden, indem du das passende Skript ausführst.
Frage: Gibt es ein Log für ufw?¶
Ja, gibt es. Allerdings musst du
sudo ufw logging on
ausführen, um es zu aktivieren. Das Log wird dann nach /var/log/messages geschrieben und beinhaltet
[UFW BLOCK] Zeichenkette
Es werden Quell-IP-Adresse/Port, Ziel-IP-Adresse/Port und andere TCP-relevante Informationen gespeichert. Aber oftmals wirst du nur die ersten vier Angaben brauchen.
Frage: Können ufw-Kommandos in Skripte geschrieben werden? So dass ich sagen könnte: "Verbinde dich per SSH mit meinem Router und führe das Skript aus, um diesen oder jenen Port zu öffnen oder zu schließen"¶
Sofern dein Router ein *buntu ist, ja. Nehmen wir also an, du hättest ufw.sh
als ausführbar markiert. Um sicher zu gehen, dass du von Null anfängst, um danach einkommende Daten auf Port 80 zu filtern, führe folgende Kommandos in deinem Skript aus:
sudo ufw reset sudo ufw deny in 80
Übrigens gibt es deny
und es gibt reject
. deny verhält sich, wie wenn du einen Anruf nicht entgegennimmst, während reject in etwa so ist, als wenn du Tischtennis spielen würdest und den Ball zurück zu deinem Gegenüber schmetterest.
Frage: Gibt es eine grafische Oberfläche für ufw?¶
Ja, gufw zum Beispiel. Aber um ehrlich zu sein, verwende lieber iptables, auch wenn es altmodisch ist.
Frage: Nehmen wir an, wir setzen allen ausgehenden Verkehr auf "off" - und ich installiere ein neues Programm, welches Zugang zur Außenwelt benötigt. Wie finde ich heraus, welchen Port das Programm wirklich braucht und wie öffne ich ihn - und nur ihn?¶
Interessante Frage. Du benötigst dafür ein Schnüffel-Programm wie Wireshark - oder sein Kommandozeilen-Pendant tcpdump oder tshark. Grundsätzlich musst du dann Wireshark starten und es deinen Netzwerkinterface "bschnüffeln" lassen. Danach starte deine Anwendung.
Bald darauf wird Verkehr fließen und Wireshark wird es mitbekommen. Dann kannst du ihn beobachten und den Zielport ausfindig machen. Das Tolle an Wireshark ist, dass es größere Netzwerkprotokolle versteht, so dass du nicht viel Ärger mit dem Entziffern haben wirst.
Frage: Ist es möglich, Konfigurationen zu speichern und wiederherzustellen?¶
Falls du das Speichern der aktuellen Regeln meinst, dann wird das automatisch erledigt. Wenn du also
ufw disable
eingibst, wird die Firewall deaktiviert, aber deine Regeln werden gespeichert, so dass sie beim nächsten Aktivieren mit
ufw enable
alle wieder verfügbar sind.
ufw reset
löscht sie und setzt ufw auf den Werkszustand zurück.
Frage: Kann ich nicht den ufw-Log verwenden, um herauszufinden, welcher Port verwendet wird (davon ausgehend, dass ausgehender Verkehr zugelassen ist) und später die Firewall dahingehend ändere, dass der ganze ausgehende Verkehr bis auf die benötigten Ports gesperrt wird?¶
Soweit ich weiß, lockiert ufw nur abgelehnte oder zurückgewiesene Pakete (d.h. jene mit deny oder reject). In diesem Falle würdest du keinen Unterschied bemerken, wenn der ganze ausgehende Verkehr (standardmäßig) erlaubt wird. Besser wäre es, den ausgehenden Verkehr zu stoppen (was wirklich mutig ist) und dann zu sehen, was benötigt wird:
sudo ufw default reject outgoing
Frage; Ich würde gerne meine Konfiguration sichern, bevor ich einige Änderungen vornehme. Danach muss ich s wiederherstellen. Ist das möglich, ohne alles zurückzusetzen?¶
Interessant. Wenn du --force reset
verwendest, siehst du, dass sie irgendwo gespeichert werden. Dann musst du genauer hinsehen ...
Frage: Nehmen wir an, du hast einen Webserver. Ist es empfohlen, auch alle ausgehenden Ports zu blockieren, die du nicht verwendest, wie es bei den eingehenden der Fall ist?¶
Normalerweise blockst du standardmäßig allen eingehenden Verkehr. Denn ausgehend bedeutet aus der Sicht des Webservers, dass du Antworten blockierst. Aber wenn du über das Internet redest mit seinem öffentlichen Inhalt, dann wird es schwer, eine Filterung vorzunehmen, sofern man nicht genau weiß, was eigentlich gefiltert werden soll.
Du kannst aber etwas verwenden wie:
sudo ufw deny proto tcp from 222.111.333.44 to 10.1.2.3 port 80
so dass die IP Adresse 222.111.333.44
deinen Webserver nicht behindern kann.
Frage: Was ist die bestmögliche ufw-Konfiguration für normale Anwender?¶
Die Standardeinstellung ist schon toll. Ich mein, einfach
ufw enable
ohne irgendwelche weiteren Regeln. Das blockiert dann eingehenden Verkehr und erlaubt ausgehenden. Daneben bewertet es die Grenzen für bestimmte Protokolle wie ping, also in etwa:
Blockiere eingehenden Verkehr, es sei denn, er steht in Beziehung zu ausgehendem (wie Verkehr von deinem Webbrowser).
Frage: Aber ich dachte, dass ich beispielsweise nur die ausgehenden Ports 80, 443 und 22 erlauben soll, um die Sicherheit zu erhöhen?¶
Möglicherweise verbessert das die Sicherheit, aber wenn, dann nicht viel. Normalerweise machen wir uns mehr Gedanken über den eingehenden Verkehr, denn dort sitzen die Probleme.
Grundlagen in der Kommandozeile¶
Hinweis:
Die Originale finden sich unter Grundlagen in der Kommandozeile 🇬🇧 von tonyyarusso um etwa 03:00 Uhr (MEZ).
In diesem Abschnitt sollen Neulinge in die Kommandozeile (CLI) eingeführt werden. Für die Erfahreneren werden hoffentlich auch noch ein oder zwei Dinge erwähnt werden.
Grundsätzliches¶
Zunächst also: Was ist eine Kommandozeile? Grundsätzlich ist es ein eigenständiger Weg, mit deinem Computer zu interagieren, eine Reihe von Programmen sind dabei - vergleichbar mit ihren graphischen Gegenstücken, wenn du GNOME-Sachen, OpenOffice, Metacity, Nautilus, Firefox und so weiter zusammennimmst. Eines der ersten Dinge, mit denen du in Berührung kommen wirst, wird Shell genannt; das ist nur ein Programm, welches dir andere Kommandozeilenprogramme bereitstellt, dir einige grundlegende Kommunikation mit dem System ermöglicht und dir manchmal noch einige handliche Zusatzfunktionen an die Hand gibt.
In Ubuntu ist die Standardshell die Bash. Diese wird verwendet, wenn du dich interaktiv anmeldest; für Systemskripte hingegen wird die Dash verwendet. Daneben gibt es noch andere wie csh, ksh, Fish und Dutzende weitere. Für unsere Zwecke werden wir jetzt aber nicht die Unterschiede behandeln; du solltest nur zu Kenntnis nehmen, dass es Alternativen gibt.
Um Zugriff auf eine Shell zu bekommen, gibt es drei Möglichkeiten:
Wenn du dich gerade in einer Desktopumgebung befindest, klick dich durch das Menü. In GNOME findest du sie unter "Anwendungen → Zubehör → Terminal". Bei KDE und XFCE heißt sie Konsole oder xterm.
Du kannst auch Strg + Alt + F1 drücken, um die gesamte grafische Umgebung zu verlassen (inklusive dieser Zeilen). Zurück kommst du dann mit Strg + Alt + F7 .
Um auf ein entferntes System über Netzwerk zugreifen zu können, kannst du ein Werkzeug namens SSH verwenden. Das könnte dann in etwa so aussehen:
ssh benutzername@hostname
. Z.B.
tony@tonyyarusso.com
.
Sowie die Shell gestartet wurde, wirst du einen Prompt sehen. Der sieht z.B. so aus:
anthony@sudbuty:-$
Hierbei ist anthony
der Benutzername, sudbury
der Hostname, -
das aktuelle Arbeitsverzeichnis und $
der Indikator für die Benutzerrechte. ~
(Tilde) ist dabei ein Kürzel für dein Heimatverzeichnis, wie es in /etc/passwd definiert ist. Hier wäre es /home/anthony. Der letzte Buchstabe $
verrät, dass du als normaler Benutzer angemeldet bist; #
bedeutet hingegen root-Rechte zu besitzen, also als Administrator angemeldet zu sein.
Wenn wir gerade schon dabei sind ... normalerweise meldest du dich in Ubuntu nicht als root an, sondern verwendest stattdessen sudo. Verwende also
sudo befehl
, um befehl
als root auszuführen. Du kannst
sudo -i
oder
sudo -s
verwenden, um einen Shell-Prompt mit erweiterten Rechten zu erhalten.
Konzept von Kommandos¶
Damit kommen wir auch schon zum Konzept von Kommandos. Vorher noch eine kleine Anmerkung zur Terminologie. Die meisten Kommandos haben verschiedene Optionen (oder Weichen), die normalerweise mit -
oder --
(für Kurz. oder Langform der Option) angegeben werden und sich das Argument anschließt. So ist beim Befehl
ls -lah /home
das ls
das Kommando, -lah
sind in Wirklichkeit drei Optionen (-l -a -h
) und /home
ist das Argument (hier: das aufzuführende Verzeichnis).
Um herauszufinden, welche Optionen für einen bestimmten Befehl unterstützt werden (und jeder Menge anderer Informationen zur Anwendung), kannst du auch in das Handbuch (engl. manual) werfen:
man befehl
. Hier würde
man ls
Informationen zur Benutzung des Befehls anzeigen. Du kannst es mit q
abbrechen, wenn du fertig bist und zur Shell zurückkehren.
Nachdem wir das geklärt haben, schauen wir einmal, was wir damit anstellen können. Die erste Frage ist: Wo befinde ich mich gerade?
Navigation im Dateisystem¶
Dateisysteme sind komplex und es passiert schnell, dass man das aktuelle Verzeichnis vergisst. Der Befehl pwd
(print working directory = zeige Arbeitsverzeichnis) zeigt es. Normalerweise ist es dein Heimatverzeichnis:, wenn du gerade ein Terminal geöffnet hast. Ein Beispiel:
anthony@sudbury:~$ pwd /home/anthony
Um in ein anderes Verzeichnis zu wechseln, verwende cd
(DOS Benutzern sollte das vertraut sein).
anthony@sudbury:~$ cd /var anthony@sudbury:/var$ pwd /var
Wie du siehst, dass mir nicht nur der pwd
-Befehl verrät, wo ich mich gerade befinde, sondern auch der Prompt. Das kommt daher, weil der Prompt ein dynamisches, konfigurierbares Ding ist. Während ich es normalerweise bei den Standardeinstellungen lasse (die sind schon recht ausgewogen), ist es auch möglich, andere Informationen einzubauen wie die aktuelle Zeit. Details finden sich hier: Bash and Bash Prompts 🇬🇧
Jetzt. da ich mich in /var aufhalte, wüsste ich gerne, was sich da drin befindet. Wie mach ich das? Mit den oben bereits erwähnten ls
-Befehl. Er gibt eine Liste der Einträge im aktuellen Verzeichnis zurück - oder in dem als Argument übergebenen Verzeichnis:
anthony@sudbury:/var$ ls 02:15 backups cache crash games lib local lock log mail opt run spool tmp 02:16 anthony@sudbury:/var$ ls /boot 02:16 abi-2.6.32-37-generic memtest86+.bin 02:16 config-2.6.32-37-generic System.map-2.6.32-37-generic 02:16 grub vmcoreinfo-2.6.32-37-generic 02:16 initrd.img-2.6.32-37-generic vmlinuz-2.6.32-37-generic 02:16 lost+found
Schauen wir, was passiert, wenn wir Weichen hinzufügen:
anthony@sudbury:/var$ ls -lah 02:16 total 52K 02:16 drwxr-xr-x 15 root root 4.0K 2011-01-27 00:31 . drwxr-xr-x 24 root root 4.0K 2012-01-12 02:13 .. drwxr-xr-x 2 root root 4.0K 2012-01-12 02:46 backups drwxr-xr-x 19 root root 4.0K 2011-02-26 02:45 cache drwxrwxrwt 2 root root 4.0K 2010-04-13 15:52 crash drwxr-xr-x 2 root root 4.0K 2011-01-27 00:31 games drwxr-xr-x 68 root root 4.0K 2011-05-30 21:37 lib drwxrwsr-x 2 root staff 4.0K 2010-07-29 02:42 local drwxrwxrwt 3 root root 60 2012-01-14 07:41 lock drwxr-xr-x 15 root root 4.0K 2012-01-14 07:41 log drwxrwsr-x 2 root mail 4.0K 2011-07-15 23:20 mail drwxr-xr-x 2 root root 4.0K 2011-01-27 00:18 opt drwxr-xr-x 18 root root 640 2012-01-12 02:14 run drwxr-xr-x 8 root root 4.0K 2011-01-27 00:27 spool drwxrwxrwt 2 root root 4.0K 2012-01-12 02:16 tmp
Wie du sehen kannst, verändern die Optionen das Verhalten des Befehls. Hier verwende ich -l
für eine ausführliche Liste, -a
, um verstecke Ordner (jene, die mit einem Punkt anfangen) anzuzeigen und -h
, um die Ordnergröße lesbarer zu gestalten (4k statt 4096). Die ausführliche Liste zeigt eine Menge nützlicher Informationen über Ordner:
Die erste Spalte beschreibt die Rechte: Jedes rwx
steht für die Lese- (read), Schreib- (write) und Ausführungs-/Wechsel- (eXecute)-Berechtigung des Besitzers, der Gruppe und aller anderen.
Die zweite Spalte führt die Anzahl der Links auf, über die du dir im Allgemeinen keine Gedanken machen musst.
Die dritte gibt den Besitzer des Ordners an.
Die vierte benennt die Gruppe. Das sind Leute, welche nicht unbedingt die Besitzer sein müssen, aber einige Extrarechte gewährt bekommen. Zum Beispiel könntest du deinen Mitarbeitern die Lese-Rechte geben, aber ihnen nicht erlauben, etwas zu verändern, während alle anderen von vornherein geblockt werden.
Zum Schluss kommen die Ordnergröße, das Datum der letzten Änderung und der Ordnername. Verzeichnis werden aus technischen Gründen immer mit 4K
angegeben.
Versteckte Ordner und Dateien beginnen immer mit einem Punkt. Wenn du zum Beispiel dein Heimatverzeichnis anschaust, findest du einen Haufen von Einstellungen wie beispielsweise ~/.gnome2
und ~/mozilla
.
Frage an die Leser: Wer kann erklären, wer oder was staff ist?¶
In unserem Zusammenhang ist staff eine Gruppe von Benutzern. Nennen wir sie Bob, Alice und Mary. Eine Gruppe ermöglicht es dir, sie zusammenzufassen, um Berechtigungen angenehmer zu vergeben. Du findest die Definitionen von Gruppen in /etc/group und kannst neue Anlegen oder Verändern durch adduser
und addgroup
.
Manipulation von Dateien¶
Jetzt ist das Auflisten von Daten ja schön und gut, aber wie verschieb ich sie? Wie benenne ich sie um, lösche sie und so weiter?
Wenn du eine Datei von A nach B verschieben willst, kannst du cp
mit Angabe der Quelle A und des Ziels B als Argumente verwenden. Etwa so:
cp meineDatei /var/www
Verschiebt also meineDatei vom aktuellen Verzeichnis nach /var/www
.
Wenn du bei der Gelegenheit auch gleich den Namen ändern möchtest, füge ihn als Name am Ende an:
cp meineDatei /var/www/oeffentlicheDatei
Um eine Datei zu verschieben, d.h. zu kopieren, aber das Original zu entfernen, verwende mv
statt cp
. Interessanterweise werden so auch Dateien umbenannt, es gibt also keinen eigenen Befehl dafür. Soweit es das Dateisystem betrifft, wird die alte Datei mit der alten Bezeichnung an einen neuen Ort verschoben, weil Bezeichnungen wie Orte aufgefasst werden:
mv IMG_3089.JPG Sue_am_Strand.jpg
Um eine Datei zu löschen, verwende rm
(remove, entfernen):
rm Sue_am_Strand
Hinweis:
Du kannst eine neue, leere Datei mit touch
erstellen oder den Zeitstempel der letzten Änderung einer bestehenden Datei ändern.
Frage: Und wenn ich einen Ordner löschen will?¶
Dafür wird ein ähnlicher Befehl wie für Dateien verwendet. Er heißt rmdir
(Remove Directory = Lösche Ordner). Auf der anderen Seite wird ein Ordner mit mkdir
(Make Directory = Erstelle Ordner) erzeugt. Verschieben und Kopieren geht mit cp
und mv
, sofern der Schalter -r
(rekursiv) gesetzt wird. Um dem Löschen von Ordnern mit Inhalt (z.B. Dateien)aus Versehen vorzubeugen, wird rmdir
standardmäßig solche nicht ohne Weiteres löschen (auch wenn es dafür einen Schalter gibt); ebenso bei rm
. Was auch interessant ist, sind Verweise. Das kannst du dir aber mit man ln
selber anlesen.
Editieren von Dateien¶
Nun, wie schaut es mit dem Editieren von Dateien aus, statt sie nur herumzuschieben? Dazu gibt es jede Menge Möglichkeiten, weswegen wir uns nur auf die Grundlagen beschränken werden.
Um eine Textdatei anzeigen zu lassen, verwende einfach
cat meinedatei
Du kannst auf diesem Wege sogar mehrere Dateien zusammen anzeigen zu lassen mit
cat datei1 datei2 datei3
Das klappt besonders gut, wenn die Dateien klein sind oder du einen Terminal Emulator verwendest, der Scrollen unterstützt. Andernfalls wirst du vielleicht so etwas wie einen "Pager" benutzen wollen. Die bekanntesten sind less oder more. Damit kannst du über die Pfeiltasten ↑ und ↓ durch die Datei navigieren (auch wenn es daneben noch weitere gibt).
Falls du nicht die ganze Datei einsehen willst, sondern nur einen Teil, kannst du auf head oder tail zurückgreifen. Standardmäßig werden dabei nur die ersten (bei head
) oder die letzen (bei tail
) zehn Zeilen berücksichtigt, was sich über eine Option aber anpassen lässt. So zeigt
tail -25 meinedatei
die letzten 25 Zeilen von meinedatei
an.
Um Dateien zu bearbeiten, können Editoren wie Nano (sehr leicht und damit für Anfänger prädestiniert) oder Emacs bzw. vi verwendet werden, wobei die letzten etwas schwerer zu erlernen sind.
nano meinedatei
öffnet meinedatei
in einem rudimentären Texteditor, so dass auf diesem Wege .-Dateien (wie .bashrc
) oder Konfigurationsdateien unter /etc bearbeitet werden können. Zum Speichern wird
Strg +
O und zum Beenden
Strg +
X verwendet. Die Kürzel finden sich aber auch am Fußende des Editors mit
^ anstelle von
Strg .
Um nach gezielten Inhalten in einer Datei zu suchen, kann grep verwendet werden, welches reguläre Ausdrücke unterstützt (sofern bekannt):
grep zusuchendesmuster meinedatei
Zum Durchsuchen der eigenen Website in dieser Stunde kann daher folgender Befehl verwendet werden:
grep 2012:20:[0-9]{2}:[0-9]{2}\ -0600 /var/log/apache2/access.log
Ein weiteres witziges Werkzeug ist sed, welches einzelne Teile von Zeichenketten ersetzen kann, ohne die Datei vorher mit Nano öffnen zu müssen. So können beispielsweise nach jeder neuen Installation des Betriebssystems die .deb-Einträge in /etc/apt/sources.list schnell durch lokale Paketspiegeldateien anstelle der öffentlichen Archive ersetzt werden.
Frage: Wie wähle ich bestimmte Dateien in einem Verzeichnis aus?¶
Das geschieht entweder händisch durch Angaben der Dateien oder über Shell-"Wildcards" (= Platzhalter). So löscht der folgende Befehl alle .jpeg-Dateien:
rm *.jpg *.JPG *.jpeg *.JPEG
Genauer gesagt, steht dort: Lösche alles, was auf den angegebenen Dateiendungen passt (da * auf alles zutrifft).
Frage: Wie vergebe ich Rechte für meine Ordner?¶
Genauso wie bei Dateien: Mit chown veränderst du den Besitzer und die Gruppe und mit chmod den Modus, das heißt die Rechte. Diese können entweder mit Zahlen oder mit Buchstaben spezifiziert werden. Fangen wir mit den Buchstaben an und kümmern uns um das andere Format später.
Um also der "staff"-Gruppe Lese- und Schreibrechte an einedatei
zu geben, verwendest du also:
chown anthony:staff einedatei chmod g+rw somefile
Dabei wurden der Besitzer anthony
und die Gruppe staff
durch einen Doppelpunkt getrennt. g+
bedeutet "füge für die Gruppe hinzu" und rw
steht für "lesen (read) und schreiben (write)". Um Rechte für alle zu vergeben, verwende ugo+
oder a+
(a
für "alle", oder lang für "user" (u
, Benutzer), "group" (g
, Gruppe) und "other" (o
, alle anderen). Mit -R
lässt sich wieder alles rekursiv unter dem Ordnernamen mit erfassen.
Ein paar andere Sachen noch, bevor wir aufhören müssen:
Thema Paketverwaltung¶
Selbstverständlich können Programme über die Kommandozeile hinzugefügt und entfernt werden. Um etwas zu finden, wird dabei
apt-cache search
verwendet, wobei wir hier ein anderes Format haben: apt-cache als Kommando und search
als Arbeitsmodus - welches sich im Grunde wie eine Weiche verhält. Daher wird
apt-cache search jabber
eine Reihe vom Paketen auflisten, die in Zusammenhang mit der Kommunikationssoftware Jabber stehen. Wenn etwas darunter ist, was dir gefällt (z.B. ejabber
), kannst du es mit
apt-get install ejabberd
installieren. Software wird durch
apt-get remove paketname
wieder entfernt. Ebenso können bereits installierte Pakete aufgelistet werden. Am einfachsten geschieht dies durch
dpkg -l
(ohne weitere Argumente).
Jetzt noch ein paar Dinge, die dir helfen, einiges an Zeit einzusparen.
Navigation in der Befehls-History¶
Mit
↑ und
↓ kannst du frühere Kommandos durchsuchen und dann mit
← und
→ in der Zeile navigieren, um Abschnitte zu löschen oder neu zu schreiben, ohne dabei die ganze Zeile neu eintippen zu müssen. Du kannst aber auch den Befehl history verwenden, um eine Auflistung alter Befehle mit Nummer davor zu erhalten. Um den letzten Befehl zu wiederholen, reicht ein !!
(zwei Ausrufezeichen). Um den Befehl Nummer 28 in history erneut aufzurufen, tippe !28
(AusrufezeichenNummer) in die Kommandozeile.
Alias¶
Oft benutzte Befehle können durch Aliase abgekürzt werden. Ein beliebter Alias ist
alias ll='ls -lah'
Anschließend kann ls -lah
auch durch ll
aufgerufen werden - allerdings nur, bis die Shell geschlossen wird. Um es dauerhaft zu speichern, ist ein Eintrag in ~/.bashrc notwendig.
Ausgabenumleitungen¶
Jetzt zu einem Schlüsselelement der Textverarbeitung: Pipen und Umleiten.
Mit einer Pipe |
kann die Standard-Ausgabe eines Befehls direkt in die Standard-Eingabe eines anderen Befehls umgeleitet werden. Dadurch kann diese "Kette" gemeinsam verwendet werden.
So kann beispielsweise der Authorisierungslog nach Fehlversuchen durchsucht werden, wobei die eigene IP ausgeblendet wird und sich stattdessen nur auf Login-Versuche des root-Kontos konzentriert wird, indem Folgendes eingetippt wird:
sudo tail -f /var/log/auth.log | grep Failed | grep -v 71.34.0.139 | grep root
Umleitungen ermöglichen dir das Schreiben der Ausgabe eines Befehls in eine Datei. So würde durch Eingabe des Befehls
sudo tail -f /var/log/auth.log | grep Failed | grep -v 71.34.0.139 | grep root > root_auth_failures
eine Datei root_auth_failures erzeugt werden, in der missglückte Anmeldeversuche auf das root-Konto eingetragen werden, sowie sie auftauchen. Normalerweise überschreibt >
dabei die Datei. Falls der Inhalt an den bestehenden Inhalt angehängt werden soll, muss >>
stattdessen verwendet werden.
Ein letztes.
Abmelden und weitere Kommandozeilenbefehle¶
Sowie du mit deiner Arbeit in der Shell fertig bist, tippe exit
oder drücke
Strg +
D , um dich auszuloggen. Um neuzustarten, reicht ein sudo reboot
; herunterfahren ist ein wenig umständlicher: shutdown -h now
, wobei -h
für "halt", also Anhalten und now
für "unverzüglich". Mit shutdown
lassen sich noch mehr Dinge anstellen, wie das Einstellen des Herunterfahren in einer Stunde ab jetzt.
Weitere Text-Kommandos, die wir übersprungen haben, kannst du dir im Handbuch selber anschauen: { screen, ping, nl, sort, wc, tee, uniq, netstat,irssi, mutt, w3c, top, free, ps, kill, find}
Kurzer Einblick in die Möglichkeiten von Shell-Skripten¶
Um dir einen kurzen Einblick in die Möglichkeiten von Shell-Skripten zu gewähren, betrachte folgendes Beispiel:
for person in $(cat staff | sort | uniq); do mail -a "From: Tony Yarusso <tonyyarusso@ubuntu.com>" -a "Content-type: text/html; charset=UTF-8" -s "Wirf doch einen Blick in meine User Days Klasse!" -b $person "" < message.html ; done
Dieser Befehl liest E-Mail-Adressen aus einer Datei, prüft und entfernt gegebenenfalls Duplikate und sendet eine HTML-formatierte E-Mail an jeden dieser Personen. Cool, oder?
Apropos¶
Zum Schluss sei noch erwähnt, dass mit apropos
nach Befehlen gesucht werden kann, deren Handbücher etwas erwähnen. So lässt sich mit
apropos mail
nach Anleitungen zum Versenden von Nachrichten suchen - allerdings nur bereits installierte. Neue lassen sich, wie erwähnt, mit apt-cache search
suchen.
Danke für's Kommen und viel Spaß beim Gebrauch der Kommandozeile!