Wendy Chen
Wendy Chen

Reputation: 181

How can I run Linux commands on an Android device?

On some Android devices, in the ADB shell, I can only run echo, cd, ls. When I run:

tar -cvf //mnt/sdcard/BackUp1669/apk/test.tar /mnt/sdcard/test.apk

Or the command cp, it returns:

sh: tar: not found

Why can I not run these commands? Some devices support these commands. My end goal is to copy a file from the /data/data folder to SD card. I got su and I got the following code:

int timeout = 1000;
String command = "tar -cvf /" + Environment.getExternalStorageDirectory() + "/cp/"
        + packageName + ".tar" + " " + path;
DataOutputStream os = new DataOutputStream(process.getOutputStream());
BufferedReader is = new BufferedReader(new InputStreamReader(new DataInputStream(
        process.getInputStream())), 64);

String inLine;
try {
    StringBuilder sbCommand = new StringBuilder();
    sbCommand.append(command).append(" ");
    sbCommand.append("\n");
    os.writeBytes(command.toString());
    if (is != null) {
        for (int i = 0; i < timeout; i++) {
            if (is.ready())
                break;
            try {
                Thread.sleep(5);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        if (is.ready()) {
            inLine = is.readLine();
        } else {
        }
    }

} catch (IOException e) {
    e.printStackTrace();
}

It always stops in is.ready(), and when I changed it to process.waitfor() it also stopped. Why?

Upvotes: 12

Views: 47132

Answers (7)

Farid Abdi
Farid Abdi

Reputation: 99

You can install Termux app on your android device and run Linux command by using that app

Upvotes: 0

Don Giovanni
Don Giovanni

Reputation: 52

In reply to Igor Ganapolsky, You would have to have a database set up for locate.

Probably find would be adequate for your needs.

example:

find -name *.apk

Upvotes: -2

CorgiButt Studios
CorgiButt Studios

Reputation: 1

You can probably get this done by using a Terminal Emulator app. As you wrote above, I don't know how well DOS commands will work. But, a Terminal Emulator works without root.

Upvotes: 0

MahaRaja
MahaRaja

Reputation: 21

Install busybox, then type the command in the following format:

busybox [linux command]

You cannot use all the linux commands without busybox, because Android doesn't have all the binaries that are available in a standard linux operating system.

FYI, a binary is just a file that contains compiled code. A lot of the default binaries are stored in /system/bin/sh directory. All these commands like 'cp' 'ls' 'get' etc, are actually binaries. You can view them through:

ls -a /system/bin/sh

Hope this helps.

Upvotes: -1

onur g&#252;ng&#246;r
onur g&#252;ng&#246;r

Reputation: 715

If you have the binaries for your system, you can run anything on your system.

Saying that you have to understand that you have to find the binaries for tar.

Look here http://forum.xda-developers.com/showthread.php?t=872438

And possibly other places..

Upvotes: 2

Ben Weiss
Ben Weiss

Reputation: 17922

You can run Linux commands on Android. But there are usually just very few pre-installed. If you want to add more commands you might want to root your device and install busybox on it.

This is not for productive use within an application but can help you to work with your device.

Upvotes: 12

waqaslam
waqaslam

Reputation: 68177

As far as i know, the only way to run shell commands is:

Process proc = Runtime.getRuntime().exec("your command");

Upvotes: 14

Related Questions