| # Android's shell and utilities |
| |
| Since IceCreamSandwich Android has used |
| [mksh](https://www.mirbsd.org/mksh.htm) as its shell. Before then it used |
| [ash](https://en.wikipedia.org/wiki/Almquist_shell) (which actually |
| remained unused in the tree up to and including KitKat). |
| |
| Initially Android had a very limited command-line provided by its own |
| "toolbox" binary. Since Marshmallow almost everything is supplied by |
| [toybox](http://landley.net/toybox/) instead. |
| |
| We started moving a few of the more important tools to full |
| BSD implementations in JellyBean, and continued this work in |
| Lollipop. Lollipop was a major break with the past in many ways (LP64 |
| support and the switch to ART both having lots of knock-on effects around |
| the system), so although this was the beginning of the end of toolbox it |
| (a) didn't stand out given all the other systems-level changes and (b) |
| in Marshmallow we changed direction and started the move to toybox. |
| |
| Not everything is provided by toybox, though. For the bzip2 command-line tools |
| we use the ones that are part of the bzip2 distribution. The awk added in |
| Android P is Brian Kernighan's "one true" awk. |
| |
| The lists below show what tools were provided and where they came from in |
| each release starting with Gingerbread. This doesn't tell the full story, |
| because the toolbox implementations did have bugs fixed and options added |
| over the years. Gingerbread's rm, for example, supported `-r`/`-R` but not |
| `-f`. But this gives you an idea of what was available in any given release, |
| and how usable it was likely to be. |
| |
| Also note that in any given release `toybox` probably contains more |
| commands than there are symlinks for in `/system/bin`. You can get the |
| full list for a release by running `toybox` directly. |
| |
| |
| ## Android 2.3 (Gingerbread) |
| |
| BSD: cat dd newfs\_msdos |
| |
| toolbox: chmod chown cmp date df dmesg getevent getprop hd id ifconfig |
| iftop insmod ioctl ionice kill ln log ls lsmod lsof mkdir mount mv |
| nandread netstat notify printenv ps reboot renice rm rmdir rmmod route |
| schedtop sendevent setconsole setprop sleep smd start stop sync top |
| umount uptime vmstat watchprops wipe |
| |
| |
| ## Android 4.0 (IceCreamSandwich) |
| |
| BSD: cat dd newfs\_msdos |
| |
| toolbox: chmod chown cmp date df dmesg getevent getprop hd id ifconfig |
| iftop insmod ioctl ionice kill ln log ls lsmod lsof mkdir mount mv |
| nandread netstat notify printenv ps reboot renice rm rmdir rmmod route |
| schedtop sendevent setconsole setprop sleep smd start stop sync top |
| touch umount uptime vmstat watchprops wipe |
| |
| |
| ## Android 4.1-4.3 (JellyBean) |
| |
| BSD: cat cp dd du grep newfs\_msdos |
| |
| toolbox: chcon chmod chown clear cmp date df dmesg getenforce getevent |
| getprop getsebool hd id ifconfig iftop insmod ioctl ionice kill ln |
| load\_policy log ls lsmod lsof md5 mkdir mount mv nandread netstat notify |
| printenv ps reboot renice restorecon rm rmdir rmmod route runcon schedtop |
| sendevent setconsole setenforce setprop setsebool sleep smd start stop |
| sync top touch umount uptime vmstat watchprops wipe |
| |
| |
| ## Android 4.4 (KitKat) |
| |
| BSD: cat cp dd du grep newfs\_msdos |
| |
| toolbox: chcon chmod chown clear cmp date df dmesg getenforce getevent |
| getprop getsebool hd id ifconfig iftop insmod ioctl ionice kill ln |
| load\_policy log ls lsmod lsof md5 mkdir mkswap mount mv nandread netstat |
| notify printenv ps readlink renice restorecon rm rmdir rmmod route runcon |
| schedtop sendevent setconsole setenforce setprop setsebool sleep smd start |
| stop swapoff swapon sync top touch umount uptime vmstat watchprops wipe |
| |
| |
| ## Android 5.0 (Lollipop) |
| |
| BSD: cat chown cp dd du grep kill ln mv printenv rm rmdir sleep sync |
| |
| toolbox: chcon chmod clear cmp date df dmesg getenforce getevent getprop |
| getsebool hd id ifconfig iftop insmod ioctl ionice load\_policy log ls |
| lsmod lsof md5 mkdir mknod mkswap mount nandread netstat newfs\_msdos |
| nohup notify ps readlink renice restorecon rmmod route runcon schedtop |
| sendevent setenforce setprop setsebool smd start stop swapoff swapon |
| top touch umount uptime vmstat watchprops wipe |
| |
| |
| ## Android 6.0 (Marshmallow) |
| |
| BSD: dd du grep |
| |
| toolbox: df getevent iftop ioctl ionice log ls lsof mount nandread |
| newfs\_msdos ps prlimit renice sendevent start stop top uptime watchprops |
| |
| toybox: acpi basename blockdev bzcat cal cat chcon chgrp chmod chown |
| chroot cksum clear comm cmp cp cpio cut date dirname dmesg dos2unix echo |
| env expand expr fallocate false find free getenforce getprop groups |
| head hostname hwclock id ifconfig inotifyd insmod kill load\_policy ln |
| logname losetup lsmod lsusb md5sum mkdir mknod mkswap mktemp modinfo |
| more mountpoint mv netstat nice nl nohup od paste patch pgrep pidof |
| pkill pmap printenv printf pwd readlink realpath restorecon rm rmdir |
| rmmod route runcon sed seq setenforce setprop setsid sha1sum sleep sort |
| split stat strings swapoff swapon sync sysctl tac tail tar taskset tee |
| time timeout touch tr true truncate umount uname uniq unix2dos usleep |
| vmstat wc which whoami xargs yes |
| |
| |
| ## Android 7.0 (Nougat) |
| |
| BSD: dd grep |
| |
| toolbox: getevent iftop ioctl log nandread newfs\_msdos ps prlimit |
| sendevent start stop top |
| |
| toybox: acpi base64 basename blockdev bzcat cal cat chcon chgrp chmod |
| chown chroot cksum clear comm cmp cp cpio cut date df dirname dmesg |
| dos2unix du echo env expand expr fallocate false find flock free |
| getenforce getprop groups head hostname hwclock id ifconfig inotifyd |
| insmod ionice iorenice kill killall load\_policy ln logname losetup ls |
| lsmod lsof lsusb md5sum mkdir mknod mkswap mktemp modinfo more mount |
| mountpoint mv netstat nice nl nohup od paste patch pgrep pidof pkill |
| pmap printenv printf pwd readlink realpath renice restorecon rm rmdir |
| rmmod route runcon sed seq setenforce setprop setsid sha1sum sleep sort |
| split stat strings swapoff swapon sync sysctl tac tail tar taskset tee |
| time timeout touch tr true truncate tty ulimit umount uname uniq unix2dos |
| uptime usleep vmstat wc which whoami xargs xxd yes |
| |
| |
| ## Android 8.0 (Oreo) |
| |
| BSD: dd grep |
| |
| bzip2: bzcat bzip2 bunzip2 |
| |
| toolbox: getevent newfs\_msdos |
| |
| toybox: acpi base64 basename blockdev cal cat chcon chgrp chmod chown |
| chroot chrt cksum clear cmp comm cp cpio cut date df diff dirname dmesg |
| dos2unix du echo env expand expr fallocate false file find flock free |
| getenforce getprop groups gunzip gzip head hostname hwclock id ifconfig |
| inotifyd insmod ionice iorenice kill killall ln load\_policy log logname |
| losetup ls lsmod lsof lspci lsusb md5sum microcom mkdir mkfifo mknod |
| mkswap mktemp modinfo modprobe more mount mountpoint mv netstat nice |
| nl nohup od paste patch pgrep pidof pkill pmap printenv printf ps pwd |
| readlink realpath renice restorecon rm rmdir rmmod runcon sed sendevent |
| seq setenforce setprop setsid sha1sum sha224sum sha256sum sha384sum |
| sha512sum sleep sort split start stat stop strings swapoff swapon sync |
| sysctl tac tail tar taskset tee time timeout top touch tr true truncate |
| tty ulimit umount uname uniq unix2dos uptime usleep uudecode uuencode |
| vmstat wc which whoami xargs xxd yes zcat |
| |
| |
| ## Android 9.0 (Pie) |
| |
| BSD: dd grep |
| |
| bzip2: bzcat bzip2 bunzip2 |
| |
| one-true-awk: awk |
| |
| toolbox: getevent getprop newfs\_msdos |
| |
| toybox: acpi base64 basename blockdev cal cat chcon chgrp chmod chown |
| chroot chrt cksum clear cmp comm cp cpio cut date df diff dirname dmesg |
| dos2unix du echo env expand expr fallocate false file find flock fmt free |
| getenforce groups gunzip gzip head hostname hwclock id ifconfig inotifyd |
| insmod ionice iorenice kill killall ln load\_policy log logname losetup ls |
| lsmod lsof lspci lsusb md5sum microcom mkdir mkfifo mknod mkswap mktemp |
| modinfo modprobe more mount mountpoint mv netstat nice nl nohup od paste |
| patch pgrep pidof pkill pmap printenv printf ps pwd readlink realpath |
| renice restorecon rm rmdir rmmod runcon sed sendevent seq setenforce |
| setprop setsid sha1sum sha224sum sha256sum sha384sum sha512sum sleep |
| sort split start stat stop strings stty swapoff swapon sync sysctl tac |
| tail tar taskset tee time timeout top touch tr true truncate tty ulimit |
| umount uname uniq unix2dos uptime usleep uudecode uuencode vmstat wc |
| which whoami xargs xxd yes zcat |
| |
| |
| ## Android Q |
| |
| BSD: grep fsck\_msdos newfs\_msdos |
| |
| bzip2: bzcat bzip2 bunzip2 |
| |
| one-true-awk: awk |
| |
| toolbox: getevent getprop |
| |
| toybox: acpi base64 basename bc blkid blockdev cal cat chattr chcon chgrp |
| chmod chown chroot chrt cksum clear cmp comm cp cpio cut date dd df |
| diff dirname dmesg dos2unix du echo egrep env expand expr fallocate |
| false fgrep file find flock fmt free freeramdisk fsfreeze getconf |
| getenforce getfattr grep groups gunzip gzip head help hostname hwclock |
| i2cdetect i2cdump i2cget i2cset iconv id ifconfig inotifyd insmod |
| install ionice iorenice iotop kill killall ln load\_policy log logname |
| losetup ls lsattr lsmod lsof lspci lsusb makedevs md5sum microcom |
| mkdir mkfifo mknod mkswap mktemp modinfo modprobe more mount mountpoint |
| mv nbd-client nc netcat netstat nice nl nohup nproc nsenter od partprobe |
| paste patch pgrep pidof ping ping6 pivot\_root pkill pmap printenv |
| printf prlimit ps pwd pwdx readlink realpath renice restorecon rev |
| rfkill rm rmdir rmmod runcon sed sendevent seq setenforce setfattr |
| setprop setsid sha1sum sha224sum sha256sum sha384sum sha512sum sleep |
| sort split start stat stop strings stty swapoff swapon sync sysctl |
| tac tail tar taskset tee time timeout top touch tr traceroute traceroute6 |
| true truncate tty tunctl ulimit umount uname uniq unix2dos unlink |
| unshare uptime usleep uudecode uuencode uuidgen vconfig vmstat watch |
| wc which whoami xargs xxd yes zcat |