如何在 /sdcard 上执行一个文件?

19

我正在尝试在已经root的Nexus 4上运行sqlite3。我已经将可执行文件推送到了/sdcard,但是无法执行它。我的Android版本是4.3,使用SuperSU 1.45获得root权限。

文件内容如下:

-rw-rw-r-- root     sdcard_rw    36860 2013-09-30 17:29 sqlite3

到目前为止:

  • chmod 777 sqlite3 没有任何作用
  • File.setExecutable() 返回 false (但 File.exists() 返回 true)。

是否有更好的方法来做这件事?


你尝试过显式调用 "chmod +x database.sqlite" 吗? - Carlos
chmod +x 在 Android 上不起作用。我得到了“错误模式”。顺便说一下,我将 sqlite3 复制到 /data/local 以使其工作。它只能在 /sdcard 中工作。 - Barry Fruitman
3个回答

22

SD卡通常格式化为FAT32,并以所有文件不可执行的方式挂载。 Nexus 4上的SD卡目录是模拟的,但系统仍会阻止其中任何文件被标记为可执行文件。您需要将文件移出SD卡以标记它为可执行文件。


6
看起来 /data/local/tmp 在大多数 Android 安装中可用(但不包括 FireTV :( ..) - nmr
3
根据/init.rc文件的内容,由于安全原因,“/data/local/tmp”文件夹应始终为空。不要在“/data/local/tmp”中放置任何文件或目录。然而,“/data/local”似乎是一个安全的存储文件的地方。 - user2141741

5

我知道这是一个老问题。 但我想提供另一种解决方法,通过在sdcard中创建.img文件,然后将其挂载到/data/目录下。

嗯,我知道这很冗余,但至少它可以作为一个解决办法,如果你的内部磁盘空间不足。

以下是一些指令,如有需要。

  1. 使用adb shell连接到您的设备,
  2. 进入/sdcard目录(每个设备的挂载点可能不同)
  3. dd if=/dev/zero of=<your-new>.img bs=1M count=0 seek=2048。这将创建一个名为<your-new>.img的新映像文件,将seek值更改为所需大小(例如2048 = 2GB)。如果没有dd,请先尝试安装busybox,然后从dd切换到busybox dd
  4. 格式化<yout-new>.img,我使用的是ext2格式。例如:mke2fs -F ubuntunew.img
  5. <your-new>.img挂载到/data。例如:mount -o loop /sdcard/<your-new>.img /data/<your-mount-point>。如果未安装mount命令,请使用busybox

好了,就这些。

参考:

https://forum.xda-developers.com/showthread.php?t=2743108 https://linuxonandroid.uservoice.com/knowledgebase/articles/74683-how-to-i-give-linux-more-space


3

chmod 777对sqlite3没有作用...

chmod +x不起作用...会出现“错误的模式”。

“错误的模式”是由于x++x等造成的。记住,这是八进制。尝试:

chmod 0777 sqlite3

而 Yuichi 可能是正确的 - /mnt/sdcard 很可能被挂载为 noexec


1
操作不允许。 - Dr.jacky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接