我知道當我運行命令時
chmod +x filename
bash 將使我的檔案成為可執行檔。將檔案的體系結構改為可執行檔到底會發生什麼事?即核心如何知道這個檔案是可執行的?
只是想鍛鍊我的書呆子肌肉。
答案1
文件的“架構”沒有改變– 由您來確保其格式正確。也就是說,文件已經需要是有效的 ELF 二進位文件,或具有有效標頭的腳本#!
,或您的特定核心可識別的其他內容(例如 a.out 或 MZ/PE)。
所做chmod
的只是在檔案的權限中設定一點,告訴核心使用者是允許來執行這個檔案。它可以充當一個小的安全屏障,並防止某些類型的事故。 (請注意,+x
這裡是 的簡寫ugo+x
;它是一個權限位,就像讀/寫一樣。)
如果您在核心無法識別的檔案上設定 +x,它只會從exec
系統呼叫傳回錯誤代碼。 (請注意,某些 shell 對此有特殊處理 - 如果內核報告“無法識別的格式”,shell 將嘗試將該檔案解釋為腳本內部#!
,因為這就是shellscript 之前的工作方式發明了.)
答案2
文件的內容根本沒有改變。為典型 Unix 設計的檔案系統將支援儲存有關每個檔案的資訊。這通常稱為文件的“元數據”。
這就是為什麼您在某些檔案系統上不會得到類似的結果。也就是說,FAT 沒有設計用於儲存與 Unix 權限相關的資料的內建空間,而且 Unix 通常在安裝此類檔案系統磁碟區時會透過使用特殊參數來解決這個問題。因此,通常 FAT 磁碟機上的所有檔案都具有相同的權限,如安裝時指定的。 (我希望其他檔案系統(例如 ISO9660)也有類似的行為,儘管這通常是不可寫的。)在以這種方式安裝的磁碟區上,使用chmod +x
實際上不會改變任何內容。
簡而言之,核心知道這一點的方式是透過檢查檔案系統驅動程式。對於為 Unix 設計的典型檔案系統,此驅動程式支援讀取儲存 Unix 樣式權限的位置。
chmod 只是更改驅動器上的這些位置。