Bash là một thông dịch viên; nó chấp nhận đầu vào và làm bất cứ điều gì nó muốn. Nó không cần phải chú ý đến bit thực thi. Trong thực tế, Bash là di động và có thể chạy trên các hệ điều hành và hệ thống tệp không có bất kỳ khái niệm nào về một bit thực thi.
Điều quan tâm về bit thực thi là kernel hệ điều hành. exec
Ví dụ, khi nhân Linux thực hiện một hệ thống tệp, nó sẽ kiểm tra xem hệ thống tệp không được gắn với một noexec
tùy chọn, nó sẽ kiểm tra bit thực thi của tệp chương trình và thực thi bất kỳ yêu cầu nào được áp đặt bởi các mô-đun bảo mật (như SELinux hoặc AppArmor).
Lưu ý rằng bit thực thi là một loại điều khiển khá tùy ý. Ví dụ, trên hệ thống Linux x86-64, bạn có thể bỏ qua xác minh của kernel đối với bit thực thi bằng cách gọi rõ ràng /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
là trình thông dịch :
cp /bin/ls /tmp/
chmod -x /tmp/ls
/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 /tmp/ls
Điều này hơi giống với việc tìm nguồn cung cấp mã nguồn Bash trong Bash, ngoại trừ đó ld.so
là trình thông dịch và mã mà nó thực thi là mã máy ở định dạng ELF.
chmod
có thể cho phép bạn đặt các quyền (bao gồm cả `x) với số bát phân cho một số manh mối về thời đại mà nó xuất phát. Tôi sẽ không ngạc nhiên nếu nó bắt đầu như một chỉ báo nhanh chóng và bẩn thỉu "đây là tệp nhị phân bạn có thể thực thi", từ những ngày trước khi cô ấy được phát minh, nhưng tôi không có bằng chứng nào về điều đó