每當我建立或複製幾個 shell 檔案到 USB 儲存裝置時,我就無法讓它們可執行。
如果我建立test.sh,它的預設檔案權限將為644,但是當我執行時
chmod 777 測試.sh
沒有錯誤報告並且echo $?
也返回“0”。但仍然ls -l
顯示權限為644
,我無法執行它./test.sh
答案1
是的,如果您的裝置使用不支援此類權限設定(例如 VFAT)的檔案系統進行格式化,則可能會發生這種情況。在這些情況下,umask 是根據 fstab(或熱插拔等效項)中的設定動態建立的。
很可能請參閱 man mount 以了解詳細資訊。例如,對於 VFAT,我們發現:
脂肪的安裝選項
uid=值 和 gid=值
設定所有文件的擁有者和群組。 (預設:當前進程的uid和gid。)
umask=值
設定umask(不存在的權限的位元遮罩)。預設是當前進程的umask。該值以八進制給出。
ETC。
答案2
看起來您的檔案系統安裝了該noexec
選項,該選項禁止在該檔案系統上執行程序,就像權限中的所有執行位元都未設定一樣。如果您使用user
掛載選項(或某些使用者介面在背景使用它),則noexec
打開,除非您使用 明確將其關閉exec
。
大多數 USB 記憶棒使用 MSDOS 衍生的 VFAT 檔案系統,該系統沒有權限的概念。您只能在掛載檔案系統時指定權限位,且這些權限適用於該檔案系統上的所有檔案。
如果您沒有執行腳本的權限,請明確呼叫解釋器:
sh /media/stick/test.sh
對於動態連結的二進位文件,呼叫動態連結器。
/lib/ld-linux.so.2 /media/stick/myprog