Kommandozeileninterpreter
Ein Kommandozeileninterpreter ist ein Computer Programm, welches gewöhnliche Texteingaben abfängt und sie im Kontext eines Betriebssystems einer Programmier- oder einer Skriptsprache interpretiert. Die Eingabe ist grundsätzlich Zeilen-basiert. Die Mensch-Maschine-Interaktion findet allein durch die Ein- und Ausgabe von “Kommandozeilen” statt. Häufig angetroffene Bezeichnungen sind Konsole oder Shell, auch wenn letzteres technisch nicht korrekt ist.
Die default unix shell in OpenWrt ist der Busybox-fork der Debian Implementation der Almquist shell (siehe → Übersicht).
Start
Gegen Ende des Boot Prozesses wird der init daemon gestartet, das könnte init oder systemd oder upstart sein, OpenWrt benutzt zur Zeit procd
. Der Init-Daemon startet gemäß den Skripten im Verzeichnis /etc/rd.d
alle dort verzeichneten Programme, unter anderem auch die gewählte Shell. Sobald die Shell gestartet ist, läuft sie im Hintergrund und wartet auf Eingaben über die Tastatur und gibt auch ein mehr oder weniger buntes Bild auf dem Monitor aus.
Aber die allermeiste Hardware, auf denen OpenWrt installiert ist, hat weder Tastatur noch Grafikkarte. Wir können die Shell also nur mit Hilfe eines PCs ansprechen. Diesen verbinden wir entweder lokal über die Serielle Schnittstelle oder über das Netz über einen Ethernet Port mit dem embedded Gerät.
Netz
Um über das Netz auf die Shell zuzugreifen benötigen wir offensichtlich zwei weiteres Programme: eines, welches auf dem PC läuft und die auf dem PC gemachten Eingaben, einem üblichen Netzwerkprotokoll gehorchend, über das Netzwerk schickt, und ein zweites, welches auf dem OpenWrt-Gerät läuft und die Daten vom ersten empfängt und sie an die Shell weiterleitet. Das erste Programm wird Klient genannt, das zweite Server oder auch Daemon.
Netzwerkprotokolle der Wahl sind telnet und SSH. Beide folgen dem server ↔ client Schema. Als Server werden telnetd
für das Telnet Protokoll und dropbear
für das SSH Protokoll eingesetzt. Als Klienten können Sie PuTTY einsetzen, aber WinSCP ist auch empfehlenswert! Letzterer funktioniert mit dropbear
nicht ganz 100%ig, aber Konqueror mit fish://
tut wunderbar! Zum Nachlesen siehe FISH (Files transferred over shell protocol).
(OpenWrt beinhaltet auch einen SSH-client ssh
und einen telnet-client telnet
, für den Fall, dass man sich von OpenWrt aus, woanders einloggen möchte.)
Note: Bevor firstlogin durchgeführt worden ist, ist nur telnetd verfügbar, danach ausschließlich dropbear . |
Im Fall eines erfolgreichen Logins, wird dropbear
(LOGs generieren) und eine weitere Instanz der spezifizierten Shell aufrufen. Diese Shell gehört dem user und läuft mit seinen Rechten.
Konfiguration
In OpenWrt kann man z.B. in der Datei /etc/profile
Umgebungsvariable and Aliase setzen. Man muss das natürlich nicht tun, denn OpenWrt kommt bereits fertig konfiguriert. Man könnte:
- die Prompt-Sequenz verändern. Unter POSIX konformen Betriebssystemen wird das mittels der variable
PS1
erreicht, siehe →http://controlc.de/2010/03/12/bash-shell-einrichten/ - you change the content of existent variables and can define new ones
- etc.
Kopieren & Einfügen
Wenn man sich mit PuTTY verbunden hat, wird mit der Maus markierter Text automatisch in die Zwischenablage kopiert, die bekannte Tastenkombination [Strg]+[C] ist also nicht notwendig und funktioniert denn auch nicht! Anschließend kann man Inhalte aus der Zwischenablage mit [Strg]+[V] wo einfügen, etwa in einem offenen Firefox. Umgekehrt würde man auf die gewöhnliche Art und Weise Text kopieren, etwa mit [Strg]+[C] und anschließend durch einmaliges drücken der [Rechten Maustaste] in PuTTY einfügen.
Numpad in PuTTY und Vi
Damit das gescheit läuft, muss man in PuTTY in “Terminal” ⇒ “Features” gehen und “Disable application keypad mode” anwählen.
Befehle eingeben
- Für etwas Orientierung bezüglich der Verzeichnisstruktur, sollte der Artikel flash.layout sorgen.
Nach dem Login befindet man sich grundsätzlich in seinem $HOME Verzeichnis, das ist /root
für den Benutzer root
und wäre /home/tristan
für Benutzer tristan, usw. Befehle:
Command | Memorize | Description | |
---|---|---|---|
pwd | print working directory | Gibt das aktuelle Verzeichnis samt Pfad aus | |
cd | change directory | Wechselt in ein anderes Verzeichnis im Verzeichnisbaum cd .. , cd / , cd /etc/init.d , cd /tmp | |
ls | list | Gibt eine Liste mit den Dateien im aktuellen Verzeichnis aus, ls -l /etc | |
cat | concatenate | Gibt den Inhalt einer Datei aus: cat /etc/config/network , cat /tmp/dhcp.leases | |
cp | copy | erstellt eine Kopie der angegebenen Datei, cp network network.bak | |
mv | move | erstellt eine Kopie der angegebenen Datei und löscht das Original, mv /tmp/opkg-lists/snapshots /mnt/sda1/opkg/packages | |
df | disk free | Zeigt den verfügbaren Speicher an. Um mit der Ausgabe etwas anfangen zu können, lesen flash.layout | |
free | verfügbarer Arbeitsspeicher | ||
uptime | Vergangene Zeit seit dem letzten Reboot | ||
dmesg | Gibt den Inhalt des Kernel Ring Puffers aus | ||
logread | Gibt den Inhalt des Ringpuffers an, den syslogd benutzt | ||
cat /proc/version | |||
cat /proc/meminfo | detaillierte Arbeitsspeichernutzung | ||
cat /proc/cpuinfo | Informationen über die CPU | ||
cat /proc/mtd | |||
cat /proc/partitions | |||
cat /proc/net/nf_conntrack | |||
cat /proc/cmdline | |||
cat /proc/modules |
Es gibt eine Unmenge an befehlszeilen Befehlen mit einer Vielfalt an Optionen. Auf einer “vollen” Linux Distribution würden Sie man befehl
oder befehl --help
eingeben, um die manpage zu dem Befehl angezeigt zu bekommen. OpenWrt ist jedoch minimalistisch und beinhaltet kein man
. Im Bedarfsfall lesen Sie die man-Pages auf dem GNU/Linux host, auf dem Sie arbeiten, oder online: z.B. auf http://man.cx/. Man Pages befinden sich in einem steten Prozess in andere Sprachen übersetzt zu werden.
Tip
Im Firefox, können Sie sich keywords einrichten, um die Benutzung zu vereinfachen. Erstellen Sie ein neues Bookmark und setzen Sie http://man.cx/?page=%s
als Adresse sowie man
als Schlüsselwort ein.
Dateien bearbeiten
Um eine Datei zu bearbeiten benötigen Sie einen Editor, für Text-Dateien eigenen sich Texteditoren am besten
Der beinhaltete Standard Texteditor ist vi
. Bis man sich an vi gewöhnt, erscheint seine Bedienung weder intuitiv noch geschickt.
vi
hat zwei Modi: Befehlsmodus und Einfügemodus.- um in den Befehlsmodus zu wechseln, drücken Sie einmal die [Esc] (Escape Taste)
- um in den Einfügemodus zu wechseln, drücken Sie entweder die Taste [i] (für insert) oder die Taste [a] (für append)
vi
startet im Befehlsmodus
Vi starten
Sie starten vi indem Sie vi
oder vi /etc/config/network
oder vi firewall.user
eingeben.
Bearbeiten
Um die geladene Datei zu bearbeiten, müssen Sie im Einfügemodus sein. Drücken Sie [i] oder [a].
Vi beenden
Um vi zu beenden, müssen Sie im Befehlsmodus sein. Drücke Sie zuerst [Esc] und geben anschließend einen Befehl ein:
:w
um die Datei aus dem Arbeitsspeicher auf den Flash zu schreiben, das würde die alte Datei überschreiben.:q
um vi zu beenden, ohne zu speichern:wq!
um das überschreiben der alten Datei zu erzwingen und anschließend Vi zu beenden:%s/Muster1/Muster2/g
um Muster1 durch Muster2 in der ganzen Datei zu ersetzen
Vi konfigurieren
Vi kann im Befehlsmodus konfiguriert werden, indem gewissen Variablen gesetzt werden, z.B.:
:set ai
= automatische Zeileneinrückung EIN (default):set noai
= automatische Zeileneinrückung AUS
Alternative Texteditoren
Wenn Sie mit vi
nicht klarkommen, probieren Sie joe
, mg
, nano
, vim
, vim-full
oder zile
.
- und es sind möglicherweise noch weitere Texteditoren in den OpenWrt repos verfügbar
- wenn Sie sich über WinSCP/Konqueror einloggen, können Sie die Dateien natürlich von Editoren auf ihrem PC berarbeiten
Skriptsprache
Jeder Kommandozeileninterpreter versteht Skriptsprache.
Skripte ausführen
Um ein Skript auszuführen, machen Sie die Datei zuerst ausführbar: chmod 755 file-name
und rufen sie entweder mit dem Interpreter auf sh Dateiname
oder geben den ganzen Pfad ein /etc/firewall.user
wenn es nicht ausreicht, nur den Dateinahmen einzugeben.