Ubuntu mengatakan "bash: ./program Izin ditolak" [ditutup]

207

Saya menjalankan Ubuntu pada komputer 1 dan komputer 2. Saya mengkompilasi program C ++ pada komputer 1, dan saya dapat menjalankannya dari terminal menggunakan ./program_name. Ini berjalan dengan baik.

Namun, ketika saya mencoba melakukan ini di komputer 2, dikatakan: bash: ./program_name: permission denied

Apa yang salah dan apa yang bisa saya lakukan?

Kian
sumber
7
Apakah Anda memiliki izin untuk dieksekusi progam_name?
fedorqui 'SO stop harming'
1
Bagaimana Anda mendapatkan program dari komputer 1 ke komputer 2? Apakah Anda menyalin yang dapat dieksekusi atau mengkompilasi ulang kode sumber? Apa output dari perintah "ls -l program_name"?
Eric Postpischil
2
Ini sepertinya bukan topik untuk SO, karena ini bukan tentang pemrograman tetapi manajemen hak di Linux
nijansen
4
cobabash program_name
Nadjib Mami
10
Saya menulis .shfile. Itu menolak untuk mengeksekusi dengan pesan kesalahan ini. Saya akan mengatakan ini pasti pada topik untuk StackOverflow. Saya telah dinominasikan untuk membuka kembali.
ArtOfWarfare

Jawaban:

392

chmod u+x program_name. Kemudian jalankan.

Jika tidak berhasil, salin program dari perangkat USB ke volume asli pada sistem. Kemudian chmod u+x program_namepada salinan lokal dan jalankan itu.

Sistem Unix dan Unix like umumnya tidak akan menjalankan program kecuali jika ditandai dengan izin untuk mengeksekusi. Cara Anda menyalin file dari satu sistem ke sistem lainnya (atau memasang volume eksternal) mungkin telah mematikan izin eksekusi (sebagai fitur keamanan). Perintah chmod u+x namemenambahkan izin untuk pengguna yang memiliki file untuk menjalankannya.

Perintah itu hanya mengubah izin yang terkait dengan file; itu tidak mengubah kontrol keamanan yang terkait dengan seluruh volume. Jika itu adalah kontrol keamanan pada volume yang mengganggu eksekusi (misalnya, noexecopsi dapat ditentukan untuk volume di fstabfile Unix , yang mengatakan tidak mengizinkan izin eksekusi untuk file pada volume), maka Anda dapat mengirim kembali volume dengan opsi untuk memungkinkan eksekusi. Namun, menyalin file ke volume lokal mungkin merupakan solusi yang lebih cepat dan mudah.

Eric Postpischil
sumber
3
Saya dulu berpikir ini hanya akan terjadi pada partisi asli non Unix / Linux seperti FAT32, dan tidak akan terjadi pada /tmp. Ternyata tmpfs saya /tmpmengalami masalah yang sama, dan saya harus menyalin file yang dapat dieksekusi ke volume asli asli, yaitu folder rumah saya ~ di partisi ext4.
RayLuo
13
Saya, mengalami masalah ini hari ini, jadi saya STFW, hasil pencarian pertama adalah dalam warna ungu, yang berarti saya pernah membacanya sebelumnya. "Itu adalah tanda yang menjanjikan", saya berbicara pada diri saya sendiri, dan kemudian mengklik hasil pencarian itu. Itu membawa saya ke halaman ini, jawaban yang tidak berfungsi dalam kasus saya, dan akhirnya komentar di atas yang berfungsi. Dan kemudian saya perhatikan bahwa komentar itu ditulis oleh saya, 2 bulan yang lalu. Wow, sungguh hidup.
RayLuo
5
Maaf untuk membonceng T / A ini ... mohon juga berpikir bahwa mungkin noexec berada di fstab yang memasang drive tanpa hak eksekusi apa pun ... "Saya mendengar" bahwa "beberapa orang" kehilangan sedikit waktu untuk mencari itu. ..
Simon Opelt
1
@ Webman: chmodmembuat perubahan yang tahan lama. Jika izin berubah setelah Anda gunakan chmoduntuk mengaktifkannya, maka ada hal lain yang mengubahnya. (Ini mungkin termasuk sesuatu yang lain menghapus file dan membuatnya kembali atau volume file sedang di-undount dan remounted. Jika volume sedang di-remount, ada cara untuk menentukan izin default untuk file pada volume eksternal, tetapi itu di luar ruang lingkup Saya bisa menjawab sekarang.)
Eric Postpischil
2
@SimonOpelt "orang lain" berterima kasih
Matt Jacobsen
32

Coba ini:

sudo chmod +x program_name
./program_name 
Vitor Villar
sumber
Terima kasih atas saranmu. Saya baru saja mencobanya - tetapi sekarang ia mengatakan bash: ./program_name tidak dapat mengeksekusi file biner
Kian
Mungkinkah karena komputer 2 adalah 32bit dan komputer 1 adalah 64bit? Saya kira mungkin saya harus mengkompilasinya di komputer 2. Terima kasih atas bantuan Anda semua.
Kian
Ya, jika Anda mengkompilasi beberapa program dalam 64 bit, dan mencoba mengeksekusi dalam sistem 32 bit, tidak berfungsi. Anda perlu mengkompilasi ulang kode sumber di komputer 2.
Vitor Villar
sudoumumnya tidak diperlukan, kecuali jika program tersebut berada dalam direktori di mana Anda tidak memiliki izin menulis (dalam hal ini, bagaimana Anda menginstalnya di sana?)
tripleee
10

Kedengarannya Anda tidak memiliki flag eksekusi yang ditetapkan pada izin file, coba:

chmod u+x program_name
Sam Roberts
sumber