Tipps & Tricks: Einführung in die Android Shell - Nr. 2

Cynob

Cynob

Enthusiast
1.019
In unserem letzten Teil habe ich beschrieben, wie die Shell Befehle grundlegend aufbauen und wie man einem Befehl Optionen mitgeben kann, wenn dies gewünscht sein sollte. In diesem Artikel möchte ich einige Befehle vorstellen welche meistens recht nützlich sind und mehr oder weniger zur Grundausstattung einer Shell gehören.

Nach dem letzten Artikel wurde ich im Forum darauf hingewiesen das die Beispiele ein „permission denied“ ausgaben (das heißt: Zugriff verweigert). Dies liegt mitnichten an euren eigenen Künsten, sondern an der Android Version welche ihr gerade verwendet. Manche erlauben die Ansicht des root- Verzeichnisses andere wiederum nicht.
Um jetzt trotzdem weiterarbeiten zu können und das auch wirklich jeder mitmachen kann werde ich in Zukunft zwei Speicherorte verwenden welche wirklich jeder Benutzer angezeigt bekommen kann. Dazu will ich aber erst einmal erklären wie die Ordner und Dateistruktur von einem Android bzw. Linux Systems aufbaut.

Bei Windows ist man ja gewöhnt von C: aus sich durch die Ordner zu hangeln, bis man am gewünschten Objekt ankommt. Dazu werden die Sachen meist gebündelt abgelegt. Als Beispiel dazu: Wenn man ein Programm installiert wird ja unter „C:/Programm Files/“ ein Ordner mit dem Programmnamen angelegt und alles was zu dem Programm gehört dorthin kopiert.

Bei Android/Linux ist dies ein wenig anders – dort werden die Programmdaten dem Kontext nach abgelegt. Also je nach dem für was die Datei benötigt wird, kommt diese in den dafür geeigneten Ordner.
Zum Beispiel erstellt der Kernel von Android bei einem Systemstart einen Ordner mit dem Namen „sdcard“ im root Verzeichnis und bindet dorthin den internen Benutzerspeicher ein.

Wenn wir jetzt gerade kein „permission denied“ angezeigt bekommen würden könnten wir Ordner sehen wie z.B.:

„/system“ in welchem sich das eigentliche Android System befindet
„/data“ wo die Programme installiert werden (apk Dateien oder aus dem Playstore)
„/sdcard“ wie weiter oben schon beschrieben der interne Speicher

Nur um mal drei zu nennen. Dort steht natürlich viel mehr, nur würde es jetzt den Rahmen sprengen, jede Datei und Ordner aufzuführen. Interessant für uns sind für den Anfang: Der interne Speicher „/sdcard“ und der Programmordner von unserem Terminal Emulator.
Bedingt durch das Android System können wir zwar auf dem internen Speicher Dateien erstellen, verändern und löschen, aber wir können nur mit dem Terminal Emulator Dinge ausführen welche in dessen Programmordner liegen. Da der Pfad zum Terminal Emulator ein wenig lang und unübersichtlich ist beschränken wir uns auf den internen Speicher „/sdcard“

Um dorthin zu gelangen verwenden wir den Befehl „cd“
Der Aufbau des Befehls:

cd „Pfadangabe“

Wenn wir den Terminal Emulator starten sehen wir folgendes:

Code:
F5321:/ $

(Das F5321 heißt, wie im letzten Artikel beschrieben bei euch bestimmt anders.)

Nach dem : wird uns ja das / angezeigt und sagt uns das wir uns im root Verzeichnisses des Gerätes befinden. Wir sehen den Ordner zwar nicht aber wir können trotzdem dorthin gelangen, indem wir folgendes eingeben:

Code:
cd sdcard

Und die Eingabetaste drücken nicht vergessen.
Jetzt erscheint eine neue Zeile:

Code:
F5321:/ $ cd sdcard
F5321:/sdcard $

Das ":/sdcard" sagt uns jetzt das wir erfolgreich in den /sdcard Ordner gewechselt sind.
Zurück zum root Verzeichnis könnten wir mit folgenden Befehlen:

Code:
cd ../

und

Code:
cd /

Der Unterschied zwischen den zwei Punkten (also mit oder ohne) ist gewaltig.
Mit „cd ../“ sagt man: geh einen Ordner nach oben. Man kann das mehrfach anwenden: „../../“ würde zwei Ordnerebenen nach oben Richtung root Verzeichnis gehen.
Der Befehl „cd /“ ist absolut. Also die Pfadangabe sagt: gehe direkt zum „/“ root Verzeichnis.

In der Shell werden Pfadangaben prinzipiell so gehandhabt, dass wenn sie mit einem „/“ beginnen vom root Verzeichnis ausgehen und ohne führendes „/“ inkremental angesehen werden – also von da aus wo man sich gerade befindet.
Ein Beispiel: Egal wo wir uns im Dateisystem befinden, ein:

Code:
cd /sdcard

bringt uns immer zurück zum internen Speicher.
Wenn wir jetzt dort angekommen sind, wollen wir auch mal was machen.
Zuerst legen wir uns einen Ordner an in dem wir uns austoben können.

Dazu verwenden wir den Befehl „mkdir“
Dieser erstellt uns Ordner. Das Programm hat einige Optionen aber im Augenblick reicht es aus wenn es uns einfach nur einen Ordner mit dem Namen „test“ erstellt.

Code:
F5321:/sdcard $ mkdir test

Wenn eine neue Zeile erscheint hat alles funktioniert.
(Man kann bei einer Android oder Linux Shell davon ausgehen das wenn keine Fehlermeldung kommt und einfach eine neue Zeile das der ausgeführte Befehl mit Erfolg abgearbeitet wurde.)

Das funktioniert auch absolut, falls man sich irgendwo anders im Dateisystem befinden sollte.
Egal wo man sich befindet kann man mit:

Code:
mkdir /sdcard/test

genau den gleichen Ordner erstellen.
Ob der Ordner erstellt wurde, kann man sich ansehen mit:

Code:
F5321:/sdcard $ ls

wenn man sich im Ordner /sdcard befindet
oder mit:

Code:
F5321:/ $ ls sdcard

aus dem root Verzeichnis heraus.
Oder mit:

Code:
F5321:/ $ ls /sdcard

von überall im Verzeichnisbaum.
Die Pfadangabe anderer Befehle (wie z.B. „cd“) kann man genauso definieren wie oben beschrieben.
Um den „test“ Ordner zu betreten tippen wir ein:

Code:
F5321:/sdcard $ cd test

darauf wechselt die Eingabezeile zu:

Code:
F5321:/sdcard/test $

Wenn wir jetzt eine leere Datei erstellen wollten, könnten wir den Befehl „touch“ benutzen. Da dies aber recht langweilig wäre verwenden wir „echo“.

Fast schon obligatorisch:
Das „Hello world“:

Code:
F5321:/sdcard/test $ echo „Hello world“

Das Ergebnis sieht dann so aus:

Code:
F5321:/sdcard/test $ echo „Hello world“
Hello World
F5321:/sdcard/test $

Um jetzt die Ausgabe welche wir am Bildschirm sehen in eine Datei umzuleiten gibt es zwei Sonderzeichen.

> = Schreibt eine Datei neu. Wenn eine mit dem gleichen Namen existiert wird diese überschrieben.

>> = Hängt den Text in einer neuen Zeile in eine vorhandene Datei an. Falls diese noch nicht existieren sollte wird sie erstellt.

Also tippen wir:

Code:
F5321:/sdcard/test $ echo „Hello“ > testdatei

Da es in unserem Fall die Datei „testdatei“ noch nicht gibt, spielt es keine Rolle ob wir es mit > oder >> schreiben.
Nun haben wir eine Datei in welcher eine Zeile mit dem Begriff „Hello“ steht. Jetzt hängen wir eine neue Zeile an mit:

Code:
F5321:/sdcard/test $ echo „world“ >> testdatei

Unser Dokument sieht jetzt so aus:

Code:
Hello
world

Schöne Sache …. nur wie kann man die Datei jetzt lesen?

Dazu gibt es den Befehl „cat“
„cat“ steht im englischen für concatenate was aneinanderhängen bedeutet. Das Programm liest Dateien ein und gibt diese auf dem Bildschirm aus.
Um dies einmal zu testen tippen wir:

Code:
F5321:/sdcard/test $ cat testdatei

und bekommen als Antwort:

Code:
Hello
world
Jetzt wird einer vielleicht auf die Idee kommen das man damit ja auch Dateien kopieren könnte, indem man die Ausgabe mit > einfach in eine neue Datei umleitet. Das geht auch – aber nur bei Textdateien wie der unseren hier. Bei allem anderen wie Programm oder Archivdateien (.tar/.rar z.B.) würde nur Zeichenmüll abgespeichert werden.

Dafür gibt es den Befehl „cp“
Mit diesem kann man Dateien von A nach B kopieren: cp Quelldatei Zieldatei

Code:
F5321:/sdcard/test $ cp testdatei datei2

Wenn wir das eingeben haben und danach „ls“ eintippen können wir sehen das nun eine Kopie der testdatei mit dem Namen datei2 erstellt wurde.

Loswerden können wir unnötige Dateien mit „rm“ (remove = entfernen)
Mit diesem Befehl muss man ein wenig vorsichtig umgehen. Es kommt keine Abfrage ob man einen Ordner oder eine Datei wirklich löschen möchte!
Eine einzelne Datei können wir so löschen:

Code:
F5321:/sdcard/test $ rm datei2

„datei2“ ist hier der Name der Datei welche wir gerade mit cp erstellt haben.
Ganze Ordner lassen sich mit dem Optionskürzel „-r“ entfernen. Dazu bewegen wir uns zuerst in den /sdcard Ordner:

Code:
F5321:/sdcard/test $ cd /sdcard

und löschen unseren „test“ Ordner mit:

[/code]F5321:/sdcard $ rm -r test[/code]
und unser anfangs erstellter Ordner ist verschwunden.

Achtung! Würde man etwas eintippen wie: rm -r /sdcard wird wirklich ohne Nachfrage der komplette Inhalt eures Speichers gelöscht. Dann sind z.B. alle eure Bilder weg! Da liest man lieber dreimal Korrektur und überlegt sich genau, was man denn gerade löschen möchte, bevor man die Entertaste drückt.


So jetzt können wir Ordner und Dateien erstellen. Text in eine Datei schreiben, diese kopieren und löschen wenn wir möchten.

In meinem nächsten Artikel werden wir den Android Shell Emulator mit dem Schweizer Taschenmesser der Linuxwelt erweitern. Die „busybox“ beinhaltet viele kleine Helferlein welche normalerweise nicht bei einem Android System mit installiert sind. Mit einem anderen Shell-Interpreter runden wir die ganze Sache dann noch ab.


Diskussion zum Beitrag
(im Forum "Android OS Entwicklung / Customize")

Weitere Beiträge auf Android-Hilfe.de
LG: Neue Smartwatches Anfang Februar
Google Play: 90% des Umsatzes durch Spiele
Galaxy S7/S7 Edge: Nach Nougat Update Auflösung auf FHD gestellt
 

Anhänge

  • workshop_pic00.png
    workshop_pic00.png
    60,6 KB · Aufrufe: 1.561
Zuletzt bearbeitet von einem Moderator:
  • Danke
Reaktionen: stoeppy, Chroesy, Pharao373 und 2 andere
Moin Cynob,

ich habe ein paar kleinere Rechtschreibfehler verbessert und den Diskussionslink eingefügt. Sonst sieht das echt super aus!


Mfg Malte
 
  • Danke
Reaktionen: Nick Knight und Cynob

Ähnliche Themen

P-J-F
Antworten
0
Aufrufe
2.103
P-J-F
P-J-F
P-J-F
Antworten
0
Aufrufe
2.842
P-J-F
P-J-F
P-J-F
Antworten
0
Aufrufe
2.723
P-J-F
P-J-F
Zurück
Oben Unten