Ubuntuは「bash:./program Permission denied」と言っています[終了]


206

コンピューター1とコンピューター2でUbuntuを実行しています。コンピューター1でC ++プログラムをコンパイルしました./program_name。ターミナルからを使用して実行できます。それはうまくいきます。

ただし、これをコンピューター2で実行しようとすると、次のように表示されます。 bash: ./program_name: permission denied

何が問題で、どうすればよいですか?


7
実行する権限がありprogam_nameますか?
fedorqui 'SO stop harming' 2013

1
コンピュータ1からコンピュータ2にプログラムをどのように入手しましたか?実行可能ファイルをコピーしたか、ソースコードを再コンパイルしましたか?コマンド「ls -l program_name」の出力は何ですか?
Eric Postpischil 2013

2
Linuxでのプログラミングではなく権利の管理についてではないので、これはSOのトピックから外れているようです
nijansen

4
試してみるbash program_name
Nadjib Mami 2016

10
.shファイルを書きました。このエラーメッセージで実行を拒否しました。これは間違いなくStackOverflowのトピックです。再開を指名しました。
ArtOfWarfare 2016年

回答:


392

chmod u+x program_name。次に、それを実行します。

それが機能しない場合は、プログラムをUSBデバイスからシステムのネイティブボリュームにコピーします。次にchmod u+x program_name、ローカルコピーで実行します。

UnixおよびUnixライクなシステムは、一般に、実行の許可がマークされていない限り、プログラムを実行しません。あるシステムから別のシステムにファイルをコピーした方法(または外部ボリュームをマウントした方法)により、(安全機能として)実行権限がオフになっている可能性があります。このコマンドchmod u+x nameは、ファイルを所有するユーザーに実行を許可します。

このコマンドは、ファイルに関連付けられているアクセス許可のみを変更します。ボリューム全体に関連するセキュリティコントロールは変更されません。実行を妨げているのがボリュームのセキュリティ制御である場合(たとえば、noexecUnix fstabファイルのボリュームにオプションが指定されている可能性があり、ボリューム上のファイルの実行権限を許可しないように指示されている場合)、ボリュームを再マウントできます。実行を許可するオプション付き。ただし、ファイルをローカルボリュームにコピーすると、より速く簡単な解決策になる場合があります。


3
これは、FAT32などの非Unix / Linuxネイティブパーティションでのみ発生し、では発生しないと思っていました/tmp。私のtmpfs /tmpにも同じ問題があり、実際のネイティブボリューム(つまり、ext4パーティションのホームフォルダー〜)に実行可能ファイルをコピーする必要があることがわかりました。
RayLuo 2017年

13
私は今日この問題に遭遇したので、私はSTFWで、最初の検索結果が紫色になっています。つまり、以前にそれを読んだことがあります。「それは有望な兆候です」と私は話しかけ、その検索結果をクリックしました。それは私をこのページに連れて行ってくれました、私の場合にはうまくいかないこの答え、そして最後にうまくいく上記のコメント。それから、コメントが2か月前に私が書いたことに気づきました。うわー、なんという人生だ。
RayLuo 2017

5
このQ / Aに便乗して申し訳ありません...また、おそらくnoexecfstabにあり、実行権限なしでドライブをマウントしていると考えてください...「一部の人々」はそれを探すのにかなりの時間を失ったと聞きました。 ..
Simon Opelt 2017年

1
@Webman:chmod永続的な変更を行います。を使用chmodして権限を有効にした後で権限が変更された場合、他の何かが権限を変更しています。(これには、ファイルを削除して再作成するか、ファイルがマウント解除および再マウントされるボリュームが再作成されることが含まれる場合があります。ボリュームを再マウントする場合、外部ボリューム上のファイルにデフォルトのアクセス許可を指定する方法がありますが、これは範囲外です私は今答えることができます。)
Eric Postpischil 2018

2
@SimonOpelt「他の人々」は感謝しています
Matt Jacobsen

32

これを試して:

sudo chmod +x program_name
./program_name 

アドバイスありがとうございます。私はそれを試してみました-しかし今はbashと表示されています:./program_nameはバイナリファイルを実行できません
Kian

コンピュータ2が32ビットで、コンピュータ1が64ビットだからでしょうか。たぶん、コンピューター2でコンパイルすればいいのではないでしょうか。皆さんのご協力ありがとうございます。
キアン

はい、一部のプログラムを64ビットでコンパイルし、32ビットのシステムで実行しようとしても機能しません。コンピュータでソースコードを再コンパイルする必要があります2.
Vitor Villar

sudoプログラムが書き込み権限のないディレクトリにある場合を除いて、通常は必要ありません(その場合、そもそもどのようにそこにインストールしましたか?)
tripleee

10

ファイルのアクセス許可に実行フラグが設定されていないようです。次を試してください:

chmod u+x program_name
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.