मैं एसडी कार्ड पर फ़ाइल के लिए निष्पादन की अनुमति क्यों नहीं दे सकता?


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 # 

मैं एसडी कार्ड पर फ़ाइल के लिए निष्पादन की अनुमति क्यों नहीं दे सकता?

$ 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 फ़ाइल अनुमतियों का समर्थन नहीं करता है। एमआईटी के प्रोफेसरों में से एक से यह लिनक्स एफएक्यू प्रविष्टि इसे थोड़ा समझाती है, और यह भी बताती है कि आप डिवाइस के अनुमति मोड को बदलने के लिए माउंट विकल्पों का संभावित रूप से उपयोग कैसे कर सकते हैं (इसके लिए रूट की आवश्यकता होगी, और डिवाइस पर सभी फ़ाइलों / फ़ोल्डरों को प्रभावित करें) । इसके अलावा, एंड्रॉइड में एसडी कार्ड को -noexecफ्लैग के साथ डिफ़ॉल्ट रूप से माउंट किया गया है ।

निष्पादित बिट के लिए आप शायद एक umask के साथ रिमूव करना चाहते हैं 0000, क्योंकि umask अनिवार्य रूप से उन अनुमतियों का एक बाइनरी नहीं है (इसलिए umask 0000कहते हैं कि किसी भी अनुमतियों को बाहर न करें , उन सभी को अनुमति दें)। अनटाइटेड, लेकिन इसे अस्थायी रूप से करना कुछ इस तरह से होगा:

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

माउंट बिंदु /mnt/sdcardको आपके डिवाइस के आधार पर कुछ अलग से बदलने की आवश्यकता हो सकती है। फिर, हालांकि, मेरा मानना mountहै कि इसके लिए आपके पास रूट अनुमतियाँ हैं।


मैं आपके दिए गए आदेश का उपयोग करके रिमाउंट करने की कोशिश करता हूं, लेकिन असफल रहा, कृपया मेरे प्रश्न का पूरक देखें।
विक्टर एस

कृपया मेरे प्रश्न का अद्यतन देखें।
विक्टर एस

1
@VictorS: ऐसा लगता है कि आपके पास आंतरिक और बाहरी दोनों एसडी कार्ड हैं। आंतरिक एक ही तरह से व्यवहार नहीं किया जाता है, और मुझे नहीं पता कि क्या कोई तरीका है जिसे आप चाहते हैं कि अनुमतियों के साथ फिर से मुहिम शुरू की जाए। वैकल्पिक रूप से, हालांकि, आप sh को आमंत्रित करके अपनी स्क्रिप्ट निष्पादित कर सकते हैं sh usb0config.sh:।
एल्डररैथिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.