#The Android Shell
Een “shell” is een programma dat luistert naar toetsenbordinvoer van een gebruiker en acties uitvoert volgens de instructies van de gebruiker. Android toestellen worden geleverd met een eenvoudig shell programma. Dit shell programma is meestal niet gedocumenteerd. Omdat veel mensen er nieuwsgierig naar zijn, dacht ik, ik schrijf er wat documentatie voor.
Currently this documentation is incomplete, sorry!
##Gemeenschappelijke problemen
De ingebouwde shell heeft een zeer beperkte foutafhandeling. Als u een commando verkeerd typt, zegt hij “permission denied”, ook al is het echte probleem dat hij het commando niet kon vinden:
$ dirdir: permission denied <---- this is a misleading error message, should say 'dir: not found'$ ls... listing of current directory
#De PATH-variabele
De Android-shell zal elk programma uitvoeren dat hij in zijn PATH vindt. Het PATH is een door dubbele punten (‘:’) gescheiden lijst van mappen. U kunt erachter komen wat uw shell’s PATH is ingesteld met behulp van de ingebouwde echo commando:
$ echo $PATH/data/local/bin:/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin
Afhankelijk van uw shell, kunt u een ander resultaat te zien krijgen.
#Ingebouwde commando’s
Elke shell heeft een paar ingebouwde commando’s. Enkele veel voorkomende ingebouwde commando’s zijn:
- echo — drukt tekst af naar stdout.
- set — stelt shell variabelen in
- export — maakt shell variabelen beschikbaar voor command-line programma’s
- cd — wijzig de huidige directory.
- pwd — drukt de naam van de huidige directory af.
#CommandsOm uit te vinden welke commando’s u tot uw beschikking heeft, gebruikt u het “ls” commando op elk van de directories in de PATH variabele.
##Vind documentatie voor de Android commando’s.
Veel van de Android commando’s zijn gebaseerd op standaard Linux (of bsd) commando’s. Als u nieuwsgierig bent naar een commando, kunt u soms leren hoe het werkt door het gebruik van de “man” commando op een desktop Linux of OSX (Apple Macintosh) computer. De Linux- of OSX-versie van het commando kan in details verschillen, maar veel van de documentatie zal nog steeds van toepassing zijn op de Android-versie van het commando.
Een andere bron van documentatie voor mensen die geen Linux- of OSX-machine bij de hand hebben, is om een webbrowser te gebruiken en met een zoekmachine op het web te zoeken naar de tekst: “man Linux command-name”.
##Lijst van commando’s
Hieronder volgt een lijst van de commando’s die aanwezig zijn op een Nexus S telefoon waarop een Android 2.3.3 “user-debug” build draait. Veel van deze commando’s zijn niet aanwezig op een “gebruiker” telefoon. (Ze ontbreken op een “gebruiker” telefoon omdat ze specifiek zijn voor het ontwikkelen of debuggen van het Android besturingssysteem.)
$ ls /data/local/bin/data/local/bin: No such file or directory
Merk op dat er standaard geen /data/local/bin directory is. U kunt deze directory maken met de “mkdir” opdracht als u wilt.
$ ls /sbinopendir failed, Permission denied
De /sbin directory bestaat, maar u heeft geen toestemming om deze te openen. Je hebt root toegang nodig. Als u een ontwikkelaarstelefoon hebt, of op een andere manier root-toegang tot uw telefoon hebt, kunt u zien wat er in deze directory staat.
$ su# ls /sbinueventdadbd# exit$
Merk op dat de shell prompt verandert van een ‘$’ in een ‘#’ om aan te geven dat u root-toegang hebt.
Merk ook op dat geen van de /sbin commando’s nuttig zijn voor de shell — de adb en ueventd bestanden zijn ‘daemon’ programma’s die worden gebruikt om het Android Debugger “adb” programma te implementeren dat wordt gebruikt door ontwikkelaars.
$ ls /vendor/bingpsdpvrsrvinit
Vendor/bin is waar apparaatleveranciers apparaat-specifieke uitvoerbare bestanden kunnen plaatsen. Deze bestanden zijn van een Nexus S.
$ ls /system/sbin/system/sbin: No such file or directory
Deze directory bestaat niet op een Nexus S.
$ ls /system/binam
am is de Android Activity Manager. Het wordt gebruikt om Android activiteiten (b.v. applicaties) te starten en te stoppen vanaf de commandoregel. Typ am op zichzelf om een lijst met opties te krijgen.
amixaplay
Command line audio file player.
app_processapplypatch
Gebruikt om patches toe te passen op android files.
arec
Command line audio recorder.
audioloopbluetoothd
BlueTooth daemon
bmgr
Backup manager – type commando zelf om documentatie te krijgen.
bootanimation
Tekent de boot animatie. Het kan zijn dat u uw telefoon moet resetten om hieruit te komen.
brcm_patchram_plusbugreportcat
Kopieer de inhoud van een bestand naar de standaarduitvoer.
chmod
Verander de modus van een bestand (bijv. of het kan worden gelezen of geschreven.)
chown
De eigenaar van een bestand wijzigen.
cmp
Vergelijk twee bestanden byte-voor-te
dalvikvm
De dalvik virtuele machine. (Wordt gebruikt om Android applicaties te draaien.)
date
Print de huidige datum en tijd
dbus-daemondd
Converteer en kopieer een bestand. Kopieert standaard in naar standaard out.
debuggerddexoptdf
Geeft aan hoeveel ruimte er vrij is op verschillende bestandssystemen op uw apparaat.
dhcpcddmesgdnsmasqdumpstatedumpsysdvzfsck_msdosgdbservergeteventgetpropgziphciattachhdidifconfig
Toont de huidige configuratie van netwerk interfaces (IP, MAC adres etc)
iftop
Toont de huidige processen die gebruik maken van de netwerk interfaces (top, maar dan voor netwerken)
imeinputinsmodinstalldioctlioniceiptables
Beheer de firewall
keystorekeystore_clikill
Signalen naar processen sturen.
linkerln
Gebruikt om een bestandssysteem link op te zetten.
loglogcat
Print het Android runtime log.
logwrapperls
Lijst bestanden.
lsmodlsofmake_ext4fsmediaservermkdir
Maak een directory.
monkey
Een programma dat willekeurige gebeurtenissen zendt, gebruikt om applicaties te testen. (Alsof een aapje met het apparaat speelt.)
mountmtpdmv
Verplaats een bestand van de ene directory naar de andere. (Alleen op hetzelfde bestandssysteem. Gebruik “cat a > b” om een bestand tussen bestandssystemen te kopiëren.
nandreadndcnetcfgnetdnetstatnewfs_msdosnotifyomx_testspandpingpmpppdprintenvps
Lijst actieve processen.
qemu-propsqemudracoonradiooptionsreboot
Herstart het apparaat.
recordrenicerildrm
Verwijder een bestand.
rmdir
Verwijder een directory.
rmmodroutertp_testrun-asschedtestschedtopsdcardsdptoolsendeventserviceservicemanagersetconsolesetpropsetup_fsshshowleasesleepsmdstagefrightstart
Start de Android runtime.
stop
Stopt de Android-runtime.
surfaceflingersvcsyncsystem_servertctestid3toolboxtop
Laat zien welke processen momenteel de meeste CPU-tijd gebruiken.
umountuptime
Print hoe lang uw apparaat al draait sinds het voor het laatst is opgestart.
vdcvmstatvoldwatchpropswipewpa_cliwpa_supplicant$ ls /system/xbinadd-property-tagbtoolcheck-lost+founddexdumpdhdutilhcidumplatencytoplibrankopcontroloprofiledprocmemprocrankrawbuscp
Het programma voor het veilig kopiëren van bestanden. (Wordt gebruikt om bestanden over het netwerk te kopiëren.)
showmapshowslabsqlite3
Gebruikt om SQLite databases te beheren.
strace
System trace command – gebruik om te zien welke systeem aanroepen een programma maakt.
su
Start een shell met root privileges.
#Versies van de Android Shell
- Android 1.0 gebruikte een shell die geen tab completion of history editing had.
- Android 2.3 voegde history editing toe. U kunt bijvoorbeeld de pijltjes omhoog/omlaag gebruiken om eerdere commando’s te bewerken.
#Andere shells
#Busybox
Busybox is een programma dat een shell bevat en een set command line utilities. Zoek in Android Market naar “Busybox” en je zou een aantal versies moeten vinden die je kunt installeren. De Busybox-shell bevat tabcompletering en geschiedenisbewerking. Sommige versies van Busybox voor Android vereisen niet dat u uw telefoon rooten.
#Debian hulpprogramma’s
U kunt de volledige Debian shell en hulpprogramma’s installeren. (Debian is een populaire desktop Linux distributie.) Ik ken de details niet, en het kan een “gewortelde” telefoon vereisen. Zoek op het web naar “Debian Android install”.
#Custom ROMs
Sommige custom ROMs komen met hun eigen shells en hulpprogramma’s. Als u een aangepaste ROM gebruikt, controleer dan de documentatie om uit te vinden wat er beschikbaar is.