Chạy tập lệnh trên mac lời nhắc "Quyền bị từ chối"


83

Tôi mới sử dụng mac và không quen với lệnh terminal, tôi đặt dvtcolorconvert.rbtệp vào thư mục gốc của ổ đĩa của mình, tập lệnh ruby ​​này có thể chuyển đổi chủ đề xcode 3 thành định dạng chủ đề xcode 4, đó là xxxxxxxx.dvtcolorthemeđịnh dạng.

Sau đó, chạy tập lệnh /dvtcolorconvert.rb ~/Themes/ObsidianCode.xccolorthemetrên thiết bị đầu cuối, nhưng nó luôn được nhắc " Quyền bị từ chối ".

có gì sai với cái này Bất kỳ ai có thể giúp tôi giải quyết vấn đề này? Cảm ơn.

Câu trả lời:


72

Vui lòng đọc toàn bộ câu trả lời trước khi cố gắng chạy với sudo

Thử chạy sudo /dvtcolorconvert.rb ~/Themes/ObsidianCode.xccolortheme

Lệnh sudo thực thi các lệnh theo sau nó với các đặc quyền 'superuser' hoặc 'root'. Điều này sẽ cho phép bạn thực thi hầu hết mọi thứ từ dòng lệnh. Điều đó nói rằng, ĐỪNG LÀM ĐIỀU NÀY! Nếu bạn đang chạy một tập lệnh trên máy tính của mình và không cần nó để truy cập vào các thành phần cốt lõi của hệ điều hành (tôi đoán bạn không phải vậy vì bạn đang gọi tập lệnh trên một cái gì đó bên trong thư mục chính của bạn (~ /)), thì nó sẽ chạy từ thư mục chính của bạn, tức là:

~/dvtcolorconvert.rb ~/Themes/ObsidianCode.xccolortheme

Di chuyển nó đến ~ / hoặc một thư mục con và thực thi từ đó. Bạn sẽ không bao giờ gặp vấn đề về quyền ở đó và sẽ không có nguy cơ nó truy cập hoặc sửa đổi bất kỳ thứ gì quan trọng đối với hệ điều hành của bạn.

Nếu vẫn gặp sự cố, bạn có thể kiểm tra quyền trên tệp bằng cách chạy ls -ltrong cùng thư mục với tập lệnh ruby. Bạn sẽ nhận được một cái gì đó như thế này:

$ ls -l  
total 13  
drwxr-xr-x    4 or019268 Administ    12288 Apr 10 18:14 TestWizard  
drwxr-xr-x    4 or019268 Administ     4096 Aug 27 12:41 Wizard.Controls  
drwxr-xr-x    5 or019268 Administ     8192 Sep  5 00:03 Wizard.UI  
-rw-r--r--    1 or019268 Administ     1375 Sep  5 00:03 readme.txt

Bạn sẽ nhận thấy rằng tệp readme.txt nói -rw-r--r--ở bên trái. Điều này cho thấy các quyền cho tệp đó. 9 ký tự từ bên phải có thể được chia thành các nhóm gồm 3 ký tự 'rwx' (đọc, viết, thực thi). Nếu tôi muốn thêm quyền thực thi vào tệp này, tôi sẽ thực thi chmod 755 readme.txtvà phần quyền đó sẽ trở thành rwxr-xr-x. Bây giờ tôi có thể thực thi tệp này nếu tôi muốn bằng cách chạy ./readme.txt(./ nói với bash để tìm trong thư mục hiện tại cho lệnh dự định thay vì tìm kiếm biến $ PATH).

schluchc ám chỉ việc xem trang người đàn ông cho chmod, hãy làm điều này bằng cách chạy man chmod. Đây là cách tốt nhất để lấy tài liệu về một lệnh nhất định,man <command>


Cảm ơn! Nhưng thư mục chính (~ /) ở đâu? Nó có nghĩa là máy tính để bàn?
Andy_24

echo ~Thông thường, shell có thể cho bạn biết điều đó /Users/$USER. Màn hình nền chỉ là một thư mục bên dưới đó. Unix GUIs ẩn thư mục chính khỏi chế độ xem, nhưng nó vẫn ở đó.
Henk Langeveld

1
Bạn có thể lấy đường dẫn đến thư mục chính của mình bằng cách chạy echo $HOME. Nó có thể trông giống như / Users / <tên người dùng> hoặc có thể là / Người dùng / <tên người dùng iTunes>
sean_m

@sean_m Cảm ơn bạn đã giải thích chi tiết, tôi đã biết điều đó.
Andy_24

Nhờ trả lời tuyệt vời
Faris Rayhan

243

Bạn đã cho mình quyền thực thi tập lệnh chưa?

Lệnh sau với tư cách là người dùng cấp cao sẽ thực hiện việc này cho bạn:

sudo chmod 755 'filename'

Để biết chi tiết, bạn nên đọc trang người đàn ông của chmod.


4
Đây phải là câu trả lời được chấp nhận. Rõ ràng, ngắn gọn và nó chỉ hoạt động.
dialex

3
Tôi đã sử dụng: sudo chmod 777 'filename'
Hemant Kaushik

@HemantKaushik chắc chắn, cả hai đều hoạt động nhưng bạn có biết sự khác biệt không?
hally9k

2
@ hally9k 777 cho phép mọi người sửa đổi tệp của bạn. Với 755, chỉ bạn và người dùng root mới có thể sửa đổi tệp để giữ cho tệp an toàn hơn.
Steve Breese

4

Trong trường hợp của tôi, tôi đã mắc một lỗi đánh máy ngu ngốc trong shebang.

Vì vậy, trong trường hợp ai đó có ngón tay mập mạp tình cờ gặp câu hỏi này:

Rất tiếc: #!/usr/local/bin ruby

Tôi muốn viết: #!/usr/bin/env ruby

Lỗi mơ hồ mà ZSH đưa ra đã gửi cho tôi đường dẫn sai:

ZSH: zsh: permission denied: ./foo.rb

Bash: bash: ./foo.rb: /usr/local/bin: bad interpreter: Permission denied


3

Bạn nên chạy tập lệnh dưới dạng 'superuser', chỉ cần thêm 'sudo' vào trước lệnh và nhập mật khẩu của bạn khi được nhắc.

Vì vậy, hãy thử:

sudo /dvtcolorconvert.rb ~/Themes/ObsidianCode.xccolortheme

Nếu cách này không hiệu quả, hãy thử điều chỉnh các quyền:

sudo chmod 755 /dvtcolorconvert.rb
sudo chmod 755 ~/Themes/ObsidianCode.xccolortheme

2
Oooh, không nhất thiết phải điều mà tôi muốn đề nghị trừ khi bạn đang darn chắc chắn kịch bản không thể làm tổn thương bất cứ điều gì.
paxdiablo


1

Kiểm tra các quyền trên tập lệnh Ruby của bạn (có thể không có quyền thực thi), tệp chủ đề và thư mục của bạn (trong trường hợp nó không thể đọc chủ đề hoặc cố gắng tạo các chủ đề khác trong đó) thư mục bạn đang ở trong khi chạy script (trong trường hợp nó tạo các tệp tạm thời trong thư mục hiện tại thì đúng hơn /tmp).

Bất kỳ một trong số chúng đều có thể khiến bạn đau buồn.

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.