Shell

Aus Android Wiki

Die Shell ist die Verbindungsschnittstelle zwischen dem Benutzer und dem Smartphone. Diese Schnittstelle kann dabei in Form einer text-basierten Kommandozeile (CLI - CommandLineInterface) oder einer grafischen Benutzeroberfläche (GUI - GraphicalUserInterface) auftreten. Umgangssprachlich wird die Shell allerdings als Synonym für eine text-basierte Eingabemaske (Kommandozeile) verwendet. Auch im Bereich Android (sowie in diesem Artikel) wird die Shell oft als solches Synonym verwendet.

Funktion[Bearbeiten | Quelltext bearbeiten]

Die Shell ist eine auf Kommandozeilenebene funktionierende Schnittstelle, die es einem Nutzer ermöglicht, mit einem Computersystem, bspw. Android, zu interagieren. Theoretisch lassen sich über die Shell alle Funktionen eines Android-Smartphones ausführen, wobei es bei vielen durch die fehlende grafische Oberfläche aufwendiger als mit der GUI sein kann. Auszuführende Aktionen, bspw. das Anzeigen eines Ordnerinhaltes, werden hierbei in eine text-basierte Eingabemaske als Befehle eingegeben und von einem Kommandozeileninterpreter ausgeführt.

Aufruf der Shell[Bearbeiten | Quelltext bearbeiten]

Die Shell ist bei Android allgegenwärtig. Der Benutzer interagiert mit ihr dabei meist nicht direkt, sondern indirekt mit einer App oder einer grafischen Oberfläche. Um trotzdem shell-Befehle direkt ausführen zu können, gibt es zwei Möglichkeiten:

  • eine App, die die shell-Befehle ausführt (z.B.: Terminal Emulator Play Store), ähnlich dem cmd in Windows
  • mit den adb-Tools

mit einer App[Bearbeiten | Quelltext bearbeiten]

Die einfachere Variante ist es, die shell direkt auf dem Android-Smartphone zu nutzen. Dazu gibt es diverse Apps, die die eingegebenen Befehle direkt in der Shell ausführt und die Ergebnisse wiedergibt. Die App kann dabei noch einzelne Komfortfunktionen wie das farbige Hervorheben oder das Speichern oft verwendeter Befehle unterstützen. Eine Installation ist i.d.R. über einen App-Store, bspw. dem Google Play Store oder auch F-Droid, möglich, sodass sich der Aufwand nicht von dem für die Installation anderer Apps unterscheidet.

mit den ADB-Tools[Bearbeiten | Quelltext bearbeiten]

Hauptartikel: Android_Debug_Bridge

Eine andere Variante ist das Aufrufen der Shell mit Hilfe der ADB-Tools. Hierfür ist ein PC von Nöten, an dem das Smartphone mit dem mitgelieferten USB-Kabel angeschlossen werden kann. Außerdem werden noch die USB-Treiber benötigt.

Um eine neue shell-Sitzung zu starten, stellt man mit dem Befehl adb devices zunächst sicher, das ein Android Smartphone erkannt wurde. Danach kann die Sitzung mit folgendem Befehl gestartet werden:

adb shell

Danach erscheint in dem cmd-Fenster entweder ein "$"-Zeichen (für nicht gerootete Geräte), oder eine "#" (für gerootete Geräte). Alle Befehle werden nun direkt auf dem Smartphone ausgeführt.

Befehle[Bearbeiten | Quelltext bearbeiten]

Auch die Shell basiert im groben auf der von Linux, sodass die Handhabung ähnlich und in vielen Fällen identisch ist. Trotz allem sind einige Befehle entweder gar nicht, oder nur in beschränkter Weise verfügbar. Grundsätzlich lassen sich alle Programme aus den bin-Verzeichnissen /system/bin und /system/xbin ausführen (hier werden bspw. auch neue ausführbare Programme, wie der su-Binary, installiert). Zusätzlich lassen sich auch shell-Sripts erstellen, die, ähnlich wie die Stapelverarbeitungsdateien von Windows (Batch), eine Befehlsreihenfolge ausführen und eine gewisse Logik (bspw. if/else) erlauben.

Häufig verwendete Befehle sind zum Beispiel:

Befehl Funktion
ls zeigt den Inhalt des aktuell ausgewählten Verzeichnisses an
cd Wechselt in das angegebene Verzeichnis (wie Windows)
rm Löscht die Datei im ausgewählten Verzeichnis
mkdir Erstellt ein neues Verzeichnis

Diese Befehle sind lediglich zum Verwalten von Dateien. Eine Referenz für vorhandene Kommandos gab es bislang hier.

Da diese Quelle leider nicht mehr verfügbar ist, veröffentlichen wir den Inhalt unverbindlich hier[1]:

akmd: no response, system hangs up using connectbot v1.7.1, logged in as local
$ am [subcommand] [options]
 
   start an Activity: am start [-D] [-W] <INTENT>
       -D: enable debugging
       -W: wait for launch to complete
 
   start a Service: am startservice <INTENT>
 
   send a broadcast Intent: am broadcast <INTENT>
 
   start an Instrumentation: am instrument [flags] <COMPONENT>
       -r: print raw results (otherwise decode REPORT_KEY_STREAMRESULT)
       -e <NAME> <VALUE>: set argument <NAME> to <VALUE>
       -p <FILE>: write profiling data to <FILE>
       -w: wait for instrumentation to finish before returning
 
   start profiling: am profile <PROCESS> start <FILE>
   stop profiling: am profile <PROCESS> stop
 
   <INTENT> specifications include these flags:
       [-a <ACTION>] [-d <DATA_URI>] [-t <MIME_TYPE>]
       [-c <CATEGORY> [-c <CATEGORY>] ...]
       [-e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE> ...]
       [--esn <EXTRA_KEY> ...]
       [--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> ...]
       [-e|--ei <EXTRA_KEY> <EXTRA_INT_VALUE> ...]
       [-n <COMPONENT>] [-f <FLAGS>]
       [--grant-read-uri-permission] [--grant-write-uri-permission]
       [--debug-log-resolution]
       [--activity-brought-to-front] [--activity-clear-top]
       [--activity-clear-when-task-reset] [--activity-exclude-from-recents]
       [--activity-launched-from-history] [--activity-multiple-task]
       [--activity-no-animation] [--activity-no-history]
       [--activity-no-user-action] [--activity-previous-is-top]
       [--activity-reorder-to-front] [--activity-reset-task-if-needed]
       [--activity-single-top]
       [--receiver-registered-only] [--receiver-replace-pending]
       [<URI>]
app_process
cat
$ chmod <MODE> <FILE>
$ cmp Usage: cmp [-b] [-l] [-n count] file1 file2
dalvikvm $ dalvikvm Dalvik VM requires a class name
$ date -s yyyyMMdd.HHmmss
$ dbus-daemon
No configuration file specified.
dbus-daemon [--version] [--session] [--system] [--config-file=FILE] [--print-add
ress[=DESCRIPTOR]] [--print-pid[=DESCRIPTOR]] [--fork] [--nofork] [--introspect
dd
debug_tool
debuggerd
$ dexopt Usage: don't use this
$ df output 
/dev: 319124K total, 0K used, 319124K available (block size 4096)
/system: 558668K total, 398176K used, 160492K available (block size 4096)
/data: 1178068K total, 259136K used, 918932K available (block size 4096)
/cache: 294628K total, 42992K used, 251636K available (block size 4096)
/devlog: 21100K total, 15980K used, 5120K available (block size 4096)
/mnt/asec: 319124K total, 0K used, 319124K available (block size 4096)
/app-cache: 8192K total, 5540K used, 2652K available (block size 4096)
/mnt/sdcard: 7763968K total, 277088K used, 7486880K available (block size 32768)
/mnt/secure/asec: Permission denied
/mnt/asec/com.RunnerGames.game.YooNinja_Lite-1: 6236K total, 5012K used, 1224K a
vailable (block size 4096)
/mnt/asec/com.glu.android.gunbros_free-1: 4164K total, 2104K used, 2060K availab
le (block size 4096)
dhcpcd 
dmesg
dumpcrash
dumpstate
dumpsys
dvz
fillup
flash_image
getevent
getprop
hciattach
hcid
$ hd usage: hd [-b base] [-c coun] [-r delay] file
hostapd
hostapd_cli
htclogkernel
id
ifconfig
iftop
$ input usage: input [text|keyevent]
       input text <string>
       input keyevent <event_code>
id
$ insmod usage: insmod <module.o>
installd
ioctl
itr
kill
linker
ln
$ log USAGE: log [-p priorityChar] [-t tag] me
ssage priorityChar should be one of: v,d,i,w,e
logcat
logwrapper
ls
lsmod
mediaserver
mkdir
mkdosfs
mount
$ monkey usage: monkey [-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] ...]
             [-c MAIN_CATEGORY [-c MAIN_CATEGORY] ...]
             [--ignore-crashes] [--ignore-timeouts]
             [--ignore-security-exceptions]
             [--monitor-native-crashes] [--ignore-native-crashes]
             [--kill-process-after-error] [--hprof]
             [--pct-touch PERCENT] [--pct-motion PERCENT]
             [--pct-trackball PERCENT] [--pct-syskeys PERCENT]
             [--pct-nav PERCENT] [--pct-majornav PERCENT]
             [--pct-appswitch PERCENT] [--pct-flip PERCENT]
             [--pct-anyevent PERCENT]
             [--pkg-blacklist-file PACKAGE_BLACKLIST_FILE]
             [--pkg-whitelist-file PACKAGE_WHITELIST_FILE]
             [--wait-dbg] [--dbg-no-events]
             [--setup scriptfile] [-f scriptfile [-f scriptfile] ...]
             [--port port]
             [-s SEED] [-v [-v] ...]
             [--throttle MILLISEC] [--randomize-throttle]
             COUNT
mountd
$ mv USAGE: mv <source...> <destination>
netcfg
netstat 
$ notify Usage: notify [-m eventmask] [-c count] [-p] [-v verbosity] path [path ...]
ping
playmp3
$ pm usage: pm [list|path|install|uninstall]
       pm list packages [-f]
       pm list permission-groups
       pm list permissions [-g] [-f] [-d] [-u] [GROUP]
       pm list instrumentation [-f] [TARGET-PACKAGE]
       pm list features
       pm path PACKAGE
       pm install [-l] [-r] [-t] [-i INSTALLER_PACKAGE_NAME] [-s] [-f] PATH
       pm uninstall [-k] PACKAGE
       pm enable PACKAGE_OR_COMPONENT
       pm disable PACKAGE_OR_COMPONENT
       pm setInstallLocation [0/auto] [1/internal] [2/external]
 
The list packages command prints all packages.  Options:
  -f: see their associated file.
 
The list permission-groups command prints all known
permission groups.
 
The list permissions command prints all known
permissions, optionally only those in GROUP.  Options:
  -g: organize by group.
  -f: print all information.
  -s: short summary.
  -d: only list dangerous permissions.
  -u: list only the permissions users will see.
 
The list instrumentation command prints all instrumentations,
or only those that target a specified package.  Options:
  -f: see their associated file.
 
The list features command prints all features of the system.
 
The path command prints the path to the .apk of a package.
 
The install command installs a package to the system.  Options:
  -l: install the package with FORWARD_LOCK.
  -r: reinstall an exisiting app, keeping its data.
  -t: allow test .apks to be installed.
  -i: specify the installer package name.
  -s: install package on sdcard.
  -f: install package on internal flash.
 
The uninstall command removes a package from the system. Options:
  -k: keep the data and cache directories around.
after the package removal.
 
The enable and disable commands change the enabled state of
a given package or component (written as "package/class").
 
The getInstallLocation command gets the current install location
  0 [auto]: Let system decide the best location
  1 [internal]: Install on internal device storage
  2 [external]: Install on external media
 
The setInstallLocation command changes the default install location
  0 [auto]: Let system decide the best location
  1 [internal]: Install on internal device storage
  2 [external]: Install on external media
printenv
ps
$ qemudqemud: permission denied
$ radiooptions
Usage: radiooptions [option] [extra_socket_args]
           0 - RADIO_RESET,
           1 - RADIO_OFF,
           2 - UNSOL_NETWORK_STATE_CHANGE,
           3 - QXDM_ENABLE,
           4 - QXDM_DISABLE,
           5 - RADIO_ON,
           6 apn- SETUP_PDP apn,
           7 - DEACTIVE_PDP,
           8 number - DIAL_CALL number,
           9 - ANSWER_CALL,
           10 - END_CALL
           11 rsp -  FAKE_UNSOL
           12 num_of_rsp rsp -  FAKE_UNSOL_EXT,
           13 command - UNIAT,
: Unknown error: 0
reboot
renice
rild
rm
rmdir
rmmod
route
schedtop
sdptool
sdutil
sendevent
service
servicemanager
setconsole
setprop
sh
sleep
smd
ssltest
start
stop
surfaceflinger
svc
sync
system_server
telnetd
toolbox
top
umount
vmstat
watchprops
wipe
wlan_loader
wpa_cli
wpa_supplicant

Die verfügbaren Befehle sind allerdings stark davon abhängig, wie viele von ihnen in die ROM implementiert wurden. Grundsätzlich kann man sagen, das StockROMs entgegen den CustomROMs deutlich weniger Funktionen bieten.

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127.