Quyền bị từ chối
Để chạy tập lệnh, tập tin phải có tập quyền bit thực thi .
Để hiểu đầy đủ các quyền của tệp Linux, bạn có thể nghiên cứu tài liệu cho chmod
lệnh. chmod , viết tắt của chế độ thay đổi , là lệnh được sử dụng để thay đổi cài đặt quyền của tệp.
Để đọc tài liệu chmod cho hệ thống cục bộ của bạn, hãy chạy man chmod
hoặc info chmod
từ dòng lệnh. Sau khi đọc và hiểu, bạn sẽ có thể hiểu đầu ra của việc chạy ...
ls -l foo.sh
... sẽ liệt kê các quyền READ, WRITE và EXECUTE cho chủ sở hữu tệp, chủ sở hữu nhóm và những người khác không phải là chủ sở hữu tệp hoặc thành viên của nhóm mà tệp thuộc về (nhóm quyền cuối cùng đôi khi được đề cập đến là "thế giới" hoặc "khác")
Dưới đây là tóm tắt về cách khắc phục lỗi Lỗi từ chối cấp phép trong trường hợp của bạn.
$ ls -l foo.sh # Check file permissions of foo
-rw-r--r-- 1 rkielty users 0 2012-10-21 14:47 foo.sh
^^^
^^^ | ^^^ ^^^^^^^ ^^^^^
| | | | |
Owner| World | |
| | Name of
Group | Group
Name of
Owner
Chủ sở hữu đã đọc và ghi quyền truy cập rw nhưng - chỉ ra rằng quyền thực thi bị thiếu
Các chmod
sửa lệnh đó. (Nhóm và những người khác chỉ có quyền đọc được thiết lập trên tệp, họ không thể ghi vào tệp hoặc thực thi nó)
$ chmod +x foo.sh # The owner can set the executable permission on foo.sh
$ ls -l foo.sh # Now we see an x after the rw
-rwxr-xr-x 1 rkielty users 0 2012-10-21 14:47 foo.sh
^ ^ ^
foo.sh hiện có thể thực thi được khi có liên quan đến Linux.
Sử dụng kết quả sudo trong Lệnh không tìm thấy
Khi bạn chạy một lệnh bằng sudo bạn đang chạy nó một cách hiệu quả như là siêu người dùng hoặc root.
Lý do người dùng root không tìm thấy lệnh của bạn có khả năng là PATH
biến môi trường cho root không bao gồm thư mục foo.sh
nằm ở đâu . Do đó lệnh không được tìm thấy.
Biến môi trường PATH chứa danh sách các thư mục được tìm kiếm các lệnh. Mỗi người dùng đặt biến PATH của riêng họ theo nhu cầu của họ. Để xem những gì nó được thiết lập để chạy
env | grep ^PATH
Đây là một số đầu ra mẫu của việc chạy env
lệnh trên trước tiên với tư cách là người dùng thông thường và sau đó là người dùng root sử dụng sudo
rkielty@rkielty-laptop:~$ env | grep ^PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
rkielty@rkielty-laptop:~$ sudo env | grep ^PATH
[sudo] password for rkielty:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
Lưu ý rằng, mặc dù tương tự nhau, trong trường hợp này, các thư mục chứa trong PATH, người dùng không có đặc quyền (rki ERIC) và siêu người dùng không giống nhau .
Thư mục nơi foo.sh
cư trú không có trong biến PATH của người dùng root, do đó lệnh không tìm thấy lỗi.