Permissions
gcc 如何處理文件權限?
創建的執行檔
gcc
具有執行權限-rwxrwxr-x
這與源文件具有的權限不同。
-rw-rw-r--
如何
gcc
設置這些權限?
有四件事介入以確定文件的權限。
- 當應用程序創建文件時,它會指定一組初始權限。這些初始權限作為創建文件的系統呼叫的參數傳遞(
open
對於正常文件、mkdir
目錄等)。- 權限被umask屏蔽,這是正在執行的程序的一個屬性。umask 表示從應用程序指定的權限中刪除的權限位。例如,一個 umask
022
刪除 group-write 和 other-write 權限。umask007
離開組寫入權限,但使文件完全禁止其他人訪問。- 權限可以通過訪問控制列表進一步修改。我不會在這篇文章中進一步討論這些。
- 應用程序可以
chmod
顯式呼叫以將權限更改為它想要的任何內容。擁有文件的使用者可以自由設置其權限。步驟 1 的一些流行的權限集選擇是:
- 666(即為所有人讀寫)用於正常文件。
- 對於必須保持私有的正常文件(例如電子郵件或臨時文件),需要 600(即讀寫,僅供所有者使用)。
- 777(即為所有人讀取、寫入和執行)用於目錄或可執行正常文件。
即使應用程序可以並且通常確實在文件創建權限中包含其他寫入權限,umask 也會導致文件不可讀。
在 gcc 的情況下,首先使用權限 666(被 umask 屏蔽)創建輸出文件,然後經過 chmod’ed 使其可執行。Gcc 可以直接創建執行檔,但不能:它僅在完成編寫文件時才使文件可執行,因此您不會冒險在程序不完整時開始執行程序。