C++プログラムを作成し、コンパイルしてa.outファイルを作成しました。ただし、実行しようとすると、許可が拒否されます。 Sudoを使用できることを読みましたが、Sudoを動作させることはできません。 Sudo "./a.out"のようなものを使用しますが、それも機能しません。
編集:
「./a.out」を試すと表示されるメッセージを次に示します。
bash: ./a.out: Permission denied
通常、g++
は作成されたファイルに実行許可を与えます。 -o
オプションを渡さない場合、ファイルの名前はa.out
になります。
ファイルに実行ビットが設定されていない2つの理由とその解決策:
mask value は0133のような値に設定され、実行ビットが設定されないようにします。解決策:許可を明示的に設定します。
chmod 755 a.out
fmask=0022
またはumask=0022
(fmask
を省略)でドライブをマウントします。詳細については、 マウントのマニュアルページ のfatのマウントオプションセクションを参照してください。実行ビットが設定されていないbashスクリプトの場合、bash file.sh
を実行できます。このような機能は、実行可能コンテンツを含むすべてのファイル(コンパイル済みファイルおよびShebang行#!/path/to/interpreter
セットを持つファイル)に存在します。実行ビットを設定せずにファイルを実行するには、特殊ファイル/lib/ld-linux.so.2
(または64ビットアプリケーションの場合は/lib/ld-linux-x86-64.so.2
)を使用して、このようなプログラムを実行します。
/lib/ld-linux-x86-64.so.2 a.out
.outは異常な拡張子です。通常、これは通常「トレース出力」ファイルを意味します。
コンパイルに使用している構文を確認してください
例えば.
gcc myfile.c /usr/lib/libsomelibrary.a -o outputfilename
または多分
g++ myfile.cpp -lm -o outputfilename
ファイルに実行可能ビットが設定されているかどうかを確認する必要があります
ls -l a.out
または、単に実行可能ビットを強制することができます
chmod +x a.out
その後、ファイルを実行できます
./a.out
または単に
a.out
また、おそらく出力ファイルがバイナリとして正しく書き込まれていることを確認する必要があります
つまり.
file a.out
これにより、ファイルの形式(スクリプトまたはバイナリ)が報告されます。
実行可能ファイルを実行できるユーザーを制限していない限り、rootとして実行する必要はほとんどありません。
ルートとしてコンパイルした場合(例:Sudo make)、または実行ファイルをルートとしてインストールしたMakefileがある場合、ログインしているユーザーとして許可を取り戻すことをお勧めします
つまり.
Sudo chown fred:fred a.out
つまり、「fred」をユーザーIDに置き換えます。
フォルダーをホームフォルダーにコピーするだけで機能します。外付けドライブなどで実行しようとしている可能性があります。
最初の答えのFATファイルシステムの回避策
「これは、FAT32フォーマットのフラッシュドライブにファイルを配置する場合に該当する可能性があります。解決策:(...)fmask = 0022またはumask = 0022(fmaskを省略)でドライブをマウントします。
通常は機能しません-umaskのデフォルトはほとんどが0022なので、これは何も変更しません。
ただし、別のマウントパラメータのデフォルトは、特にFATファイルシステムが非ルートユーザーとしてマウントされている場合、バイナリの実行を事実上禁止します:noexec
そのため、オプションexec
を指定してFAT形式のドライブをマウントするだけです。
Sudo mount -o exec /dev/sd.. /mountpoint
(これは通常、root、つまり「Sudo」として実行する必要があります)、そこからバイナリを直接実行できるはずです。