You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

复制到SD卡后Shell脚本属性变更且执行失败问题求助

解决Ubuntu 16.04中SD卡脚本权限丢失&执行失败的问题

你遇到的这个情况确实和SD卡的格式化格式直接相关,咱们来一步步理清原因和解决办法:

为什么会出现权限变更&执行失败?

Ubuntu桌面默认用的是ext4这类原生支持Linux权限系统的文件系统,所以你在桌面创建脚本后设置的chmod +x可执行权限能被正常存储和识别。但SD卡常用的FAT32、exFAT格式是为Windows/移动设备设计的,完全不支持Unix/Linux的权限位机制——当你把脚本复制到这类SD卡时,系统根本没法保存你原来设置的可执行权限,只能给文件套上一套默认的无执行权限属性,自然就跑不起来了。

两种可行的解决办法

方案1:临时绕过权限限制直接运行

不用动SD卡格式,直接调用Shell解释器来执行脚本就行。比如你的脚本叫test_script.sh,进入SD卡目录后运行:

bash test_script.sh
# 如果脚本开头用的是#!/bin/sh,也可以用
sh test_script.sh

这种方式不需要脚本本身有可执行权限,只要解释器能读取文件内容就可以正常运行。

方案2:格式化SD卡为支持Linux权限的文件系统

如果需要长期在SD卡上运行脚本,建议把SD卡换成Linux原生支持的文件系统:

  • ext4(推荐):完全兼容Linux权限,性能稳定,但Windows下默认无法直接读取(需要第三方工具)
  • NTFS:可以在Windows和Linux之间共用,也支持权限,但需要配置挂载参数

格式化ext4的步骤:

  1. 先备份SD卡上的所有数据(格式化会清空全部内容)
  2. 卸载SD卡:
    sudo umount /media/你的用户名/SD卡挂载目录
    
  3. lsblk命令找到SD卡的设备名(比如/dev/sdb1,别和系统硬盘搞混!)
  4. 执行格式化命令:
    sudo mkfs.ext4 /dev/sdb1
    
  5. 重新挂载SD卡,之后复制过去的脚本就能正常保留可执行权限了。

用NTFS实现跨系统兼容:

如果需要SD卡同时在Windows和Linux用,格式化NTFS后,编辑/etc/fstab添加挂载参数来保留权限:

/dev/sdb1 /media/SD_CARD ntfs-3g defaults,umask=0022,fmask=0133 0 0

替换其中的/dev/sdb1为你的SD卡设备名,/media/SD_CARD为挂载目录,保存后重新挂载即可。

内容的提问来源于stack exchange,提问作者Ron

火山引擎 最新活动