いくつかのシェル ファイルを作成または USB ストレージ デバイスにコピーしても、それらを実行可能にすることはできません。
test.shを作成すると、デフォルトのファイル権限は644になりますが、実行すると
chmod 777 テスト.sh
エラー報告はなく、echo $?
「0」を返します。しかし、ls -l
権限はまだ表示され644
、実行できません。./test.sh
答え1
はい、デバイスが VFAT などのそのような権限設定をサポートしていないファイルシステムでフォーマットされている場合に、この問題が発生する可能性があります。その場合、umask は fstab (またはホットプラグの同等のもの) の設定からオンザフライで作成されます。
詳細については、おそらく man mount を参照してください。たとえば、VFAT の場合は次のようになります。
fatのマウントオプション
uid=値とgid=値
すべてのファイルの所有者とグループを設定します。(デフォルト: 現在のプロセスの uid と gid)
umask=値
umask (存在しない権限のビットマスク) を設定します。デフォルトは現在のプロセスの umask です。値は 8 進数で指定します。
等
答え2
ファイルシステムが オプションでマウントされているようですがnoexec
、このオプションは、権限のすべての実行ビットが設定されていないかのように動作して、そのファイルシステム上でのプログラムの実行を禁止します。user
マウント オプションを使用する場合 (または一部のユーザー インターフェイスが内部でこのオプションを使用する場合)、noexec
で明示的にオフにしない限り、 はオンになりますexec
。
ほとんどの USB スティックは、アクセス許可の概念がない MSDOS 由来の VFAT ファイルシステムを使用します。アクセス許可ビットを指定できるのは、ファイルシステムをマウントするときだけで、これらのアクセス許可はそのファイルシステム上のすべてのファイルに適用されます。
スクリプトを実行する権限がない場合は、インタープリターを明示的に呼び出します。
sh /media/stick/test.sh
動的にリンクされたバイナリの場合は、動的リンカーを呼び出します。
/lib/ld-linux.so.2 /media/stick/myprog