Почему я не могу назначить права exec файлу на SD-карте?

10
shell@android:/sdcard/SW # ls -l
-rw-rw-r-- root     sdcard_rw      128 2012-09-22 11:42 usb0config.sh
shell@android:/sdcard/SW # chmod 777 usb0config.sh                             
shell@android:/sdcard/SW # ls -l
-rw-rw-r-- root     sdcard_rw      128 2012-09-22 11:42 usb0config.sh
shell@android:/sdcard/SW # 

Почему я не могу назначить права exec файлу на SD-карте?

$ adb shell su -c mount |grep -si sdcard
/dev/block/vold/179:97 /mnt/ext_sdcard vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0002,dmask=0002,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
tmpfs /mnt/ext_sdcard/.android_secure tmpfs ro,relatime,size=0k,mode=000 0 0
/dev/fuse /mnt/sdcard fuse rw,nosuid,nodev,relatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0


$ adb shell su -c "mount -t vfat -o umask=0000 /dev/fuse /mnt/sdcard"
mount: Block device required

Теперь, кажется, перемонтировать успешно.

$ adb shell su -c "mount -t vfat -o remount,umask=0000 /dev/fuse /mnt/sdcard"

но файлу пока нельзя назначить режим 777.

shell@android:/sdcard/Sw # ls -l
-rw-rw-r-- root     sdcard_rw      128 2012-09-22 11:42 usb0config.sh
shell@android:/sdcard/Sw # chmod 777 usb0config.sh                             
shell@android:/sdcard/Sw # ls -l
-rw-rw-r-- root     sdcard_rw      128 2012-09-22 11:42 usb0config.sh

Информация о монтировании не меняется по сравнению с предыдущей.

$ adb shell su -c mount |grep -si sdcard
/dev/block/vold/179:97 /mnt/ext_sdcard vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0002,dmask=0002,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
tmpfs /mnt/ext_sdcard/.android_secure tmpfs ro,relatime,size=0k,mode=000 0 0
/dev/fuse /mnt/sdcard fuse rw,relatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0
Виктор С
источник

Ответы:

15

Если вы не сделали что-то необычное с вашим устройством, SD-карта будет отформатирована как файловая система FAT, которая не поддерживает разрешения для файлов * nix. Эта запись часто задаваемых вопросов по Linux от одного из профессоров MIT объясняет это немного, а также объясняет, как вы можете использовать параметры монтирования для изменения режима разрешений устройства (однако для этого потребуется root, что повлияет на все файлы / папки на устройстве). , Также SD-карта в Android по умолчанию монтируется с -noexecфлажком.

Для бита exec вы, вероятно, захотите перемонтировать с помощью umask 0000, поскольку umask - это, по сути, двоичный файл НЕ из тех разрешений, которые вы хотите (поэтому umask 0000говорит, что не маскируйте никакие разрешения, разрешите их все). Непроверенный, но делать это временно было бы что-то вроде:

mount -t vfat -o umask=0000 /dev/your/sdcard/device /mnt/sdcard

Может потребоваться изменить точку монтирования /mnt/sdcardна что-то немного отличающееся в зависимости от вашего устройства. Опять же, я считаю, mountчто для этого вам необходимы права root.

eldarerathis
источник
Я пытаюсь перемонтировать, используя вашу команду дали, но не получилось, см. Дополнение моего вопроса.
Виктор С.
пожалуйста, смотрите обновление моего вопроса.
Виктор С
1
@VictorS: похоже, у вас есть как внутренняя, так и внешняя SD-карта. Внутренний не обрабатывается так же, и я не знаю, есть ли способ перемонтировать его с нужными вам разрешениями. С другой стороны , хотя, вы могли бы выполнить свой скрипт, вызывающим ш: sh usb0config.sh.
Эльдарератэ это