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