Ubuntu บอกว่า“ bash: ./program ปฏิเสธการอนุญาต” [ปิด]


206

ผมใช้ Ubuntu บนเครื่องคอมพิวเตอร์ 1 เครื่องและคอมพิวเตอร์ 2. ฉันรวบรวมโปรแกรม C ++ ได้บนเครื่องคอมพิวเตอร์ 1 ./program_nameและฉันสามารถดำเนินการได้จากท่าเรือโดยใช้ มันทำงานได้ดี

อย่างไรก็ตามเมื่อฉันพยายามทำสิ่งนี้บนคอมพิวเตอร์ 2 มันบอกว่า: bash: ./program_name: permission denied

มีอะไรผิดปกติและฉันควรทำอย่างไร


7
คุณมีสิทธิ์ดำเนินการprogam_nameหรือไม่
fedorqui 'ดังนั้นหยุดทำอันตราย'

1
คุณได้รับโปรแกรมจากคอมพิวเตอร์ 1 ถึงคอมพิวเตอร์ 2 ได้อย่างไร คุณคัดลอกไฟล์ที่เรียกใช้งานได้หรือคอมไพล์ซอร์สโค้ดใหม่หรือไม่ ผลลัพธ์ของคำสั่ง“ ls -l program_name” คืออะไร?
Eric Postpischil

2
นี้น่าจะเป็นปิดหัวข้อสำหรับ SO เพราะมันไม่ได้เกี่ยวกับการเขียนโปรแกรม แต่สิทธิในการบริหารบน Linux
nijansen

4
ลองbash program_name
Nadjib Mami

10
ฉันเขียน.shไฟล์ มันปฏิเสธที่จะดำเนินการด้วยข้อความแสดงข้อผิดพลาดนี้ ฉันจะบอกว่านี่เป็นเรื่องแน่นอนสำหรับ StackOverflow ฉันได้รับการเสนอชื่อเพื่อเปิดใหม่
ArtOfWarfare

คำตอบ:


392

chmod u+x program_name. จากนั้นรันมัน

หากไม่ได้ผลให้คัดลอกโปรแกรมจากอุปกรณ์ USB ไปยังไดรฟ์ข้อมูลดั้งเดิมบนระบบ จากนั้นchmod u+x program_nameให้คัดลอกโลคัลและเรียกใช้งาน

โดยทั่วไประบบ Unix และ Unix จะไม่เรียกใช้งานโปรแกรมเว้นแต่ว่าจะมีการทำเครื่องหมายด้วยสิทธิ์ในการเรียกใช้งาน วิธีที่คุณคัดลอกไฟล์จากระบบหนึ่งไปยังอีกระบบหนึ่ง (หรือเชื่อมต่อกับไดรฟ์ข้อมูลภายนอก) อาจปิดการใช้งานการอนุญาต (เป็นคุณลักษณะด้านความปลอดภัย) คำสั่งchmod u+x nameเพิ่มสิทธิ์สำหรับผู้ใช้ที่เป็นเจ้าของไฟล์เพื่อดำเนินการ

คำสั่งนั้นเปลี่ยนสิทธิ์ที่เกี่ยวข้องกับไฟล์เท่านั้น จะไม่เปลี่ยนการควบคุมความปลอดภัยที่เกี่ยวข้องกับปริมาณทั้งหมด หากเป็นการควบคุมความปลอดภัยของไดรฟ์ข้อมูลที่รบกวนการทำงาน (ตัวอย่างเช่นnoexecอาจมีการระบุตัวเลือกสำหรับไดรฟ์ข้อมูลในfstabไฟล์Unix ซึ่งระบุว่าไม่อนุญาตให้เรียกใช้งานการดำเนินการสำหรับไฟล์ในโวลุ่ม) จากนั้นคุณสามารถ ด้วยตัวเลือกเพื่ออนุญาตการดำเนินการ อย่างไรก็ตามการคัดลอกไฟล์ไปยังโวลุ่มท้องถิ่นอาจเป็นวิธีที่เร็วและง่ายกว่า


3
ผมเคยคิดว่าเรื่องนี้จะเกิดขึ้นในพาร์ทิชันที่ไม่ใช่พื้นเมือง Unix / Linux เช่น FAT32, /tmpและจะไม่เกิดขึ้นใน ปรากฎว่า tmpfs ของฉัน/tmpมีปัญหาเดียวกันและฉันต้องคัดลอกไฟล์ปฏิบัติการลงในโวลุ่มดั้งเดิมที่แท้จริงนั่นคือโฟลเดอร์บ้านของฉัน ~ ในพาร์ติชั่น ext4
RayLuo

13
ฉันพบปัญหานี้ในวันนี้ดังนั้นฉันจึง STFW ผลการค้นหาแรกอยู่ในสีม่วงซึ่งหมายความว่าฉันเคยอ่านมาก่อน "นั่นเป็นสัญญาณที่ดี" ฉันพูดกับตัวเองแล้วคลิกผลการค้นหา มันนำฉันมาที่หน้านี้คำตอบนี้ไม่ทำงานในกรณีของฉันและในที่สุดความคิดเห็นข้างต้นก็ใช้งานได้ และจากนั้นฉันสังเกตเห็นว่าความคิดเห็นถูกเขียนโดยฉัน 2 เดือนที่ผ่านมา ว้าวชีวิตเป็นอย่างไร
RayLuo

5
ขออภัยที่ piggybacking ในคำถามนี้โปรดคิดว่าบางทีnoexecอาจอยู่ในfstabซึ่งติดตั้งไดรฟ์โดยไม่มีสิทธิ์ดำเนินการ ... "ฉันได้ยิน" ว่า "บางคน" เสียเวลาไปกับการมองหาสิ่งนั้น ..
Simon Opelt

1
@ Webman: chmodทำการเปลี่ยนแปลงที่คงทน หากการอนุญาตเปลี่ยนแปลงหลังจากที่คุณใช้chmodเพื่อเปิดใช้งานสิทธิ์จะมีการเปลี่ยนแปลงอย่างอื่น (ซึ่งอาจรวมถึงการลบไฟล์และสร้างไฟล์ใหม่หรือโวลุ่มที่ไฟล์กำลังถูกถอดออกและติดตั้งใหม่หากโวลุ่มนั้นกำลังถูกเมาต์อีกครั้งมีวิธีในการระบุสิทธิ์เริ่มต้นสำหรับไฟล์ในไดรฟ์ภายนอก ฉันสามารถตอบได้ในตอนนี้)
Eric Postpischil

2
@SimonOpelt "คนอื่น ๆ " ขอบคุณ
Matt Jacobsen

32

ลองสิ่งนี้:

sudo chmod +x program_name
./program_name 

ขอบคุณสำหรับคำแนะนำ. ฉันลองแล้ว - แต่ตอนนี้มันบอกว่า bash: ./program_name ไม่สามารถเรียกใช้ไฟล์ไบนารีได้
Kian

อาจเป็นเพราะคอมพิวเตอร์ 2 เป็น 32 บิตและคอมพิวเตอร์ 1 เป็น 64 บิต? ฉันเดาว่าบางทีฉันควรรวบรวมมันไว้ในคอมพิวเตอร์ 2 ขอบคุณสำหรับความช่วยเหลือจากทุกคน
Kian

ใช่ถ้าคุณรวบรวมโปรแกรมบางโปรแกรมใน 64 บิตและพยายามที่จะดำเนินการในระบบ 32 บิตจะไม่ทำงาน คุณต้องคอมไพล์ซอร์สโค้ดใหม่ในคอมพิวเตอร์ 2
Vitor Villar

sudoโดยทั่วไปไม่จำเป็นเว้นแต่ว่าโปรแกรมนั้นอยู่ในไดเรกทอรีที่คุณไม่ได้รับอนุญาตให้เขียน (ซึ่งในกรณีนี้คุณติดตั้งไว้ในที่แรกได้อย่างไร)
tripleee

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.