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