Ubuntu nói rằng Bash bash: ./program Quyền bị từ chối [đóng]


205

Tôi đang chạy Ubuntu trên máy tính 1 và máy tính 2. Tôi đã biên dịch chương trình C ++ trên máy tính 1 và tôi có thể thực hiện nó từ thiết bị đầu cuối bằng cách sử dụng ./program_name. Nó chạy tốt

Tuy nhiên, khi tôi cố gắng làm điều này trên máy tính 2, nó báo: bash: ./program_name: permission denied

Có gì sai và tôi có thể làm gì về nó?


7
Bạn có quyền để thực thi progam_name?
fedorqui 'SO ngừng làm hại'

1
Làm thế nào bạn có được chương trình từ máy tính 1 đến máy tính 2? Bạn đã sao chép mã thực thi hoặc biên dịch lại mã nguồn? Đầu ra của lệnh Ls -l chương trình tên là gì?
Eric Postpischil

2
Điều này dường như không đúng chủ đề đối với SO, bởi vì nó không phải là về lập trình mà là quản lý quyền trên Linux
nijansen

4
thửbash program_name
Nadjib Mami

9
Tôi đã viết một .shtập tin. Nó từ chối thực hiện với thông báo lỗi này. Tôi muốn nói rằng đây chắc chắn là về chủ đề cho StackOverflow. Tôi đã đề cử mở lại.
ArtOfWarfare

Câu trả lời:


391

chmod u+x program_name. Sau đó thực hiện nó.

Nếu điều đó không hiệu quả, hãy sao chép chương trình từ thiết bị USB sang ổ đĩa gốc trên hệ thống. Sau đó chmod u+x program_namevào bản sao cục bộ và thực hiện điều đó.

Các hệ thống tương tự Unix và Unix thường sẽ không thực thi chương trình trừ khi được đánh dấu với sự cho phép thực thi. Cách bạn sao chép tệp từ hệ thống này sang hệ thống khác (hoặc gắn âm lượng ngoài) có thể đã tắt quyền thực thi (như một tính năng an toàn). Lệnh chmod u+x namethêm quyền cho người dùng sở hữu tệp để thực thi nó.

Lệnh đó chỉ thay đổi các quyền liên quan đến tệp; nó không thay đổi các điều khiển bảo mật liên quan đến toàn bộ âm lượng. Nếu đó là các điều khiển bảo mật trên ổ đĩa đang can thiệp vào việc thực thi (ví dụ: một noexectùy chọn có thể được chỉ định cho một ổ đĩa trong fstabtệp Unix , nói rằng không cho phép thực thi quyền đối với các tệp trên ổ đĩa), thì bạn có thể lặp lại âm lượng với các tùy chọn để cho phép thực hiện. Tuy nhiên, sao chép tệp vào ổ đĩa cục bộ có thể là một giải pháp nhanh hơn và dễ dàng hơn.


3
Tôi đã từng nghĩ điều này chỉ xảy ra trên các phân vùng riêng không phải Unix / Linux như FAT32, và sẽ không xảy ra /tmp. Hóa ra tmpfs của tôi /tmpgặp vấn đề tương tự, và tôi phải sao chép tệp thực thi vào một ổ đĩa gốc thực sự, tức là thư mục nhà của tôi ~ trong một phân vùng ext4.
RayLuo

13
Tôi, đã gặp phải vấn đề này ngày hôm nay, vì vậy tôi STFW, kết quả tìm kiếm đầu tiên có màu tím, có nghĩa là tôi đã đọc nó trước đó. "Đó là một dấu hiệu đầy hứa hẹn", tôi tự nói với chính mình, và sau đó nhấp vào kết quả tìm kiếm đó. Nó đưa tôi đến trang này, câu trả lời này không hoạt động trong trường hợp của tôi, và cuối cùng là bình luận ở trên mà hoạt động. Và sau đó tôi nhận thấy bình luận đó được viết bởi tôi, 2 tháng trước. Wow, thật là một cuộc sống.
RayLuo

5
Xin lỗi vì cõng trên Q / A này ... xin vui lòng nghĩ rằng có lẽ noexec có trong fstab gắn ổ đĩa mà không có bất kỳ đặc quyền thực thi nào ... "Tôi nghe nói rằng" một số người "đã mất khá nhiều thời gian để tìm kiếm nó. ..
Simon Opelt

1
@Webman: chmodlàm cho một sự thay đổi lâu dài. Nếu các quyền thay đổi sau khi bạn sử dụng chmodđể kích hoạt chúng, thì một cái gì đó khác đang thay đổi chúng. . Tôi có thể trả lời ngay bây giờ.)
Eric Postpischil

2
@SimonOpelt "người khác" rất biết ơn
Matt Jacobsen

32

Thử cái này:

sudo chmod +x program_name
./program_name 

Cảm ơn lời khuyên của bạn. Tôi đã thử nó - nhưng bây giờ nó báo bash: ./program_name không thể thực thi tệp nhị phân
Kian

Có thể bởi vì máy tính 2 là 32 bit và máy tính 1 là 64 bit? Tôi đoán có lẽ tôi chỉ nên biên dịch nó trên máy tính 2. Cảm ơn bạn đã giúp đỡ mọi người.
Kian

Có, nếu bạn biên dịch một số chương trình trong 64 bit và cố gắng thực thi trong hệ thống 32 bit, không hoạt động. bạn cần biên dịch lại mã nguồn trên máy tính 2.
Vitor Villar

sudonói chung là không cần thiết, trừ khi chương trình nằm trong một thư mục mà bạn không có quyền ghi (trong trường hợp đó, bạn đã cài đặt nó ở đâu ngay từ đầu?)
tripleee 21/10/19

10

Âm thanh như bạn không có cờ thực thi được đặt trên quyền của tệp, hãy thử:

chmod u+x program_name
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.