<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > 嵌入式Linux:文件訪(fǎng)問(wèn)權限

嵌入式Linux:文件訪(fǎng)問(wèn)權限

發(fā)布人:美男子玩編程 時(shí)間:2024-08-21 來(lái)源:工程師 發(fā)布文章

在 Linux 中,文件訪(fǎng)問(wèn)權限決定了哪些用戶(hù)和用戶(hù)組可以讀取、寫(xiě)入或執行文件。這些權限通過(guò)文件系統中的元數據來(lái)定義,并且可以使用多種工具進(jìn)行查看和更改。


每個(gè)文件和目錄都有三個(gè)不同的權限級別:

  • 所有者(Owner):文件或目錄的創(chuàng )建者。

  • 用戶(hù)組(Group):與文件或目錄相關(guān)聯(lián)的用戶(hù)組。

  • 其他用戶(hù)(Others):系統中的其他所有用戶(hù)。


每個(gè)級別都有三個(gè)權限:

  • 讀?。≧ead, r):允許讀取文件內容或列出目錄內容。

  • 寫(xiě)入(Write, w):允許修改文件內容或創(chuàng )建、刪除目錄中的文件。

  • 執行(Execute, x):允許執行文件(對于目錄,允許進(jìn)入該目錄)。


1


查看文件權限

使用 ls -l 命令可以查看文件和目錄的權限。例如:




$ ls -l-rw-r--r-- 1 user group 1234 Jan 1 12:34 example.txt

圖片


輸出的第一列包含 10 個(gè)字符,代表文件類(lèi)型和權限:

  • 第一個(gè)字符:文件類(lèi)型(- 表示普通文件,d 表示目錄,l 表示符號鏈接等)。

  • 后面九個(gè)字符:每組三個(gè)字符,分別表示所有者、組和其他用戶(hù)的權限。


在這個(gè)示例中,-rw-r--r-- 表示:

  • 所有者:rw-(讀和寫(xiě))

  • 用戶(hù)組:r--(只讀)

  • 其他用戶(hù):r--(只讀)


2


修改文件權限

使用 chmod 命令可以更改文件或目錄的權限。有兩種方式:符號表示法和八進(jìn)制表示法。


2.1、符號表示法

符號表示法使用 +、- 和 = 操作符來(lái)添加、移除或設置權限。


示例如下:













# 為所有者添加執行權限$ chmod u+x example.txt
# 為用戶(hù)組添加寫(xiě)權限$ chmod g+w example.txt
# 為其他用戶(hù)移除讀權限$ chmod o-r example.txt
# 為所有用戶(hù)設置讀取權限$ chmod a=r example.txt

2.2、八進(jìn)制表示法 

八進(jìn)制表示法使用三個(gè)八進(jìn)制數字來(lái)表示所有者、組和其他用戶(hù)的權限。


每個(gè)權限有一個(gè)相應的值:

  • 讀?。╮):4

  • 寫(xiě)入(w):2

  • 執行(x):1


示例如下:







# 設置所有者讀寫(xiě)執行,組讀執行,其他用戶(hù)只讀$ chmod 754 example.txt
# 設置所有用戶(hù)讀寫(xiě)執行權限$ chmod 777 example.txt

3


access函數

access 函數用于檢查調用進(jìn)程是否有權限訪(fǎng)問(wèn)指定的文件或目錄。它可以用來(lái)判斷一個(gè)文件是否存在,以及檢查讀、寫(xiě)、執行權限。


函數原型如下:





#include <unistd.h>
int access(const char *pathname, int mode);


參數說(shuō)明:

  • pathname:要檢查的文件或目錄的路徑。

  • mode:要檢查的權限,可以是以下常量的組合:

    • F_OK:檢查文件是否存在。

    • R_OK:檢查文件是否可讀。

    • W_OK:檢查文件是否可寫(xiě)。

    • X_OK:檢查文件是否可執行。


返回值:

  • 如果調用進(jìn)程具有指定的訪(fǎng)問(wèn)權限,則返回 0。

  • 如果調用進(jìn)程不具有指定的訪(fǎng)問(wèn)權限,或者出錯,則返回 -1,并設置 errno 以指示錯誤。


以下是一個(gè)示例程序,它使用 access 函數檢查文件的各種訪(fǎng)問(wèn)權限。










































#include <stdio.h>#include <unistd.h>
void check_access(const char *filepath) {    // 檢查文件是否存在    if (access(filepath, F_OK) == 0) {        printf("File %s exists.n", filepath);    } else {        printf("File %s does not exist.n", filepath);        return;    }
    // 檢查文件是否可讀    if (access(filepath, R_OK) == 0) {        printf("File %s is readable.n", filepath);    } else {        printf("File %s is not readable.n", filepath);    }
    // 檢查文件是否可寫(xiě)    if (access(filepath, W_OK) == 0) {        printf("File %s is writable.n", filepath);    } else {        printf("File %s is not writable.n", filepath);    }
    // 檢查文件是否可執行    if (access(filepath, X_OK) == 0) {        printf("File %s is executable.n", filepath);    } else {        printf("File %s is not executable.n", filepath);    }}
int main() {    const char *filepath = "example.txt";    check_access(filepath);    return 0;}


 注意事項:

  • access 函數是基于真實(shí)用戶(hù) ID 和組 ID 進(jìn)行檢查的,而不是有效用戶(hù) ID 和組 ID。

  • 由于文件權限可能會(huì )在檢查后立即變化,因此使用 access 來(lái)進(jìn)行安全性檢查時(shí)要格外小心。

  • 盡量避免在實(shí)際操作前僅用 access 檢查權限,而應該直接處理文件操作,并檢查返回值。


4


chmod函數

chmod 函數用于更改文件的訪(fǎng)問(wèn)權限。它可以修改文件的讀、寫(xiě)、執行權限。

函數原型如下:







#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>
int chmod(const char *pathname, mode_t mode);


 參數說(shuō)明:

  • pathname:要更改權限的文件或目錄的路徑。

  • mode:新的文件模式(權限),由一些按位或(OR)組合的位組成。常用的模式有:

    • S_IRUSR:文件所有者具有讀權限。

    • S_IWUSR:文件所有者具有寫(xiě)權限。

    • S_IXUSR:文件所有者具有執行權限。

    • S_IRGRP:文件組用戶(hù)具有讀權限。

    • S_IWGRP:文件組用戶(hù)具有寫(xiě)權限。

    • S_IXGRP:文件組用戶(hù)具有執行權限。

    • S_IROTH:其他用戶(hù)具有讀權限。

    • S_IWOTH:其他用戶(hù)具有寫(xiě)權限。

    • S_IXOTH:其他用戶(hù)具有執行權限。


這些常量可以通過(guò)按位或(|)組合在一起,形成一個(gè)完整的模式。


返回值:

  • 成功時(shí)返回 0。

  • 失敗時(shí)返回 -1,并設置 errno 以指示錯誤。


以下是一個(gè)示例程序,演示如何使用 chmod 函數更改文件的訪(fǎng)問(wèn)權限。

















#include <stdio.h>#include <sys/stat.h>
int main() {    const char *filepath = "example.txt";
    // 更改文件權限為所有者可讀可寫(xiě),組用戶(hù)和其他用戶(hù)只讀    if (chmod(filepath, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) == 0) {        printf("Changed permissions successfully.n");    } else {        perror("chmod");    }
    return 0;}


在這個(gè)示例中,chmod 函數被調用以更改文件 example.txt 的權限。新權限設置為:

  • 文件所有者具有讀(S_IRUSR)和寫(xiě)(S_IWUSR)權限。

  • 文件組用戶(hù)具有讀(S_IRGRP)權限。

  • 其他用戶(hù)具有讀(S_IROTH)權限。


文件權限是通過(guò)模式位的組合來(lái)指定的。常用的模式位有:

  • S_IRUSR (0400):文件所有者讀權限。

  • S_IWUSR (0200):文件所有者寫(xiě)權限。

  • S_IXUSR (0100):文件所有者執行權限。

  • S_IRGRP (0040):文件組用戶(hù)讀權限。

  • S_IWGRP (0020):文件組用戶(hù)寫(xiě)權限。

  • S_IXGRP (0010):文件組用戶(hù)執行權限。

  • S_IROTH (0004):其他用戶(hù)讀權限。

  • S_IWOTH (0002):其他用戶(hù)寫(xiě)權限。

  • S_IXOTH (0001):其他用戶(hù)執行權限。


例如,S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH 組合了所有者的讀寫(xiě)權限和組用戶(hù)與其他用戶(hù)的讀權限,結果權限為 0644。


如果 chmod 成功,則返回 0,否則返回 -1,并在標準錯誤流中輸出錯誤信息。使用 perror 函數打印錯誤原因。


chmod 函數是一個(gè)強大的工具,可以方便地更改文件的訪(fǎng)問(wèn)權限。正確使用它可以提高系統的安全性和文件管理的效率。在使用時(shí),要注意權限的合理設置,以防止權限過(guò)高或過(guò)低帶來(lái)的安全隱患。常見(jiàn)錯誤如下:

  • EACCES:權限不足,無(wú)法更改文件權限。

  • EPERM:操作不被允許,例如試圖更改系統文件的權限。

  • ENOENT:指定的文件不存在。

  • ENOTDIR:指定的路徑中有不是目錄的部分。

*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞: 嵌入式 Linux

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>