Tôi bối rối về việc thực thi quyền truy cập tập tin không hành xử như tôi mong đợi. Có lẽ vì kỳ vọng của tôi là sai. Dù sao:
Tôi có một tập tin kịch bản, để đơn giản chỉ cần gọi s
, nằm trong ~/bin
. Vì lợi ích của ví dụ này, tệp chỉ chứa các dòng sau:
#!/bin/zsh
echo "Test";
Rất đơn giản.
Tôi điều hướng đến ~/bin
thư mục, và chmod
các điều khoản của tập tin s
để 400
- tức là, chỉ đọc cho tôi mà thôi. Không có sự cho phép thực thi. Vì vậy, sau đó tôi thử thực thi kịch bản bằng cách nhập đường dẫn của nó, đưa ra điều này:
% ./s
zsh: permission denied: ./s
Càng xa càng tốt. Các tập tin không thể được thực thi do các quyền sai. Các quyền truy cập tối đa 500
(quyền thực thi được cấp) cũng hoạt động tốt - với các quyền này, tệp thực thi tốt:
% ./s
Test
Đây là tất cả như mong đợi. Nhưng sau đó tôi chmod
cho phép quay trở lại 400
(thực thi lại quyền), thử source
ing tệp và điều này xảy ra:
% source s
Test
Mặc dù quyền là 400
, kịch bản thực thi.
Vì vậy, đây là câu hỏi của tôi: tại sao ./s
thất bại (như nó nên) nhưng source s
thực thi bình thường? Điều này không đánh bại toàn bộ mục đích của sự cho phép thực thi?
Tại 400
quyền, sh s
và zsh s
cũng làm việc.
Tôi chắc chắn rằng tôi đang làm hoặc hiểu một cái gì đó sai lầm khủng khiếp ở đâu đó. Có thể ai đó điểm ra nơi với tôi, và giải thích sự khác biệt giữa ./s
, source s
, sh s
và zsh s
?