日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux查看目录访问权限,Linux文件访问权限

發布時間:2025/3/15 linux 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux查看目录访问权限,Linux文件访问权限 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.設置用戶ID和設置組ID

1.實際用戶ID和實際組ID標識當前登錄的用戶。

2.有效用戶ID,有效組ID以及附加組ID決定了我們的文件訪問權限。

3.通常,有效用戶ID等于實際用戶ID,有效組ID等于實際組ID。但是可以在文件模式模式字中設置一個特殊標志,

將進程的有效用戶ID設置為文件所有者的用戶ID。分別設置用戶ID位和設置組ID位即可。方法如下:

chmod u+s filename 與 chmod g+s filename

二.文件的訪問權限

1.每個文件有9個訪問權限,可分為三類,u(所有者),g(組),o(其它),得到的方法,可以直接使用宏與st_mode得到,

也可以通過位運算獲得。

2.三類權限:(讀,寫,執行)

a.用名字打開任一類型文件時,隱含對當前目錄及其上級目錄都應具有執行權限,否則不能打開。

b.當一個目錄是我們要訪問文件的路徑名的一個組成部分時,對該目錄的執行權限使我們可通過該目錄,

也就是搜索該目錄,尋找一個特定的文件名。如果PATH環境變量指定了一個我們不具有執行權限的目錄,

那么shell決不會在該目錄找到可執行文件。

c.為了在一個目錄中創建一個新文件,必須對該目錄具有寫權限和執行權限。

d.為了刪除一個現有文件,必須對包含該文件的目錄具有寫權限和執行權限。對該文件本身不需要有讀,寫權限。

e.進程每次打開,創建或刪除一個文件時,內核就進行文件訪問權限測試:

1.若進程的有效用戶ID是0(超級用戶),則允許訪問,給予超級用戶對整個文件系統進行處理的最充分的自由。

2.若進程的有效用戶ID等于文件的所有者ID(即該進程擁有此文件),那么,若所有者適當的訪問權限位被設置,則允許訪問。

3.若進程的有效組ID或進程的附加組ID之一等于文件的組ID,那么,若組適當的訪問權限位被設置,則允許訪問,否則拒絕。

4.若其他用戶適當的訪問權限位被設置,則允許訪問,否則拒絕。

按順序執行以上四步。若進程擁有此文件,則按用戶訪問權限批準或拒絕該進程對文件的訪問——不查看組訪問權限。類似地,若進程

并不擁有該文件,單進程屬于某個適當的組,則按組訪問權限批準或拒絕該進程對文件的訪問——不查看其他用戶的訪問權限。

三.新文件和新目錄

1.權限問題:如果是文件,默認是以0666和umask按位相減得到文件各用戶的權限。如果是目錄,默認是0777和umask

按位相減得到。

2.所有權問題:新文件的用戶ID設置為進程的有效用戶ID。關于組ID,有兩種選擇:

a.新文件的組ID可以是進程的有效組ID。

b.新文件的組ID可以是它所在目錄的組ID。

四.access函數

作用:按實際用戶ID和實際組ID進行訪問權限測試。

頭文件:include

用法:int access(const char *pathname,int mode)

返回值:若成功則返回0,若出錯則返回-1。

mode:R_OK 測試讀權限;W_OK 測試寫權限;X_OK 測試執行權限;F_OK 測試文件是否存在。

五.chmod與fchmod函數

作用:更改現有文件的權限

頭文件:#include

用法:int chmod(const char *pathname,mode_t mode);

int fchmod(int filedes,mode_t mode);

返回值:若成功返回0,若出錯返回-1。

注意:為改變一個文件的權限位,進程的有效用戶ID必須等于文件的所有者ID,或者該進程必須具有超級用

戶權限。

六.文件截短函數truncate與ftruncate

作用:在文件尾端處截去一些數據以縮短文件。

頭文件:#include

用法:int truncate(const char *pathname,off_t length);

int ftruncate(int filedes,off_t length);

返回值:若成功返回0,否則返回-1。

注意:如果length 大于文件長度,則在文件末尾加'\0',并改變文件大小;若length 小于文件長度,

則在文件末尾截掉多出的部分。

七.文件系統(補充)

1.每個文件系統各自對它們的i節點編號,因此目錄項中的i節點編號數指向同一文件系統中相應的i節點,不能使

一個目錄項指向另一個文件系統的i節點。

2.當在不更換文件系統情況下為一個文件更名時,該文件的實際內容并未移動,只需構造一個指向現有i節點新目錄項

并解除與舊目錄項的鏈接。

八.link,unlink,remove函數

1.link:相當與創建一個現有文件的硬鏈接

頭文件:#include

用法:int link(const char *existingpath,const char *newpath)

返回值:如果newpath 存在則返回出錯-1,成功則為0。

注意:如果實現支持創建指向一個目錄的硬鏈接,那么也僅限于超級用戶才可以這樣做,

理由是這樣做可能在文件系統中形成循環,因此很多文件系統實現不允許對目錄的硬鏈接。

2.unlink:刪除一個現有的目錄項

頭文件:#include

用法:int unlink(const char *pathname);

返回值:成功返回0,否則-1。

注意:為了解除對文件的鏈接,必須對包含該目錄項的目錄具有寫和執行的權限。且必須具備

三個條件之一:擁有該文件;擁有該目錄;具有超級用戶特權。如果pathname是符號鏈接,

那么unlink刪除該符號鏈接,而不會刪除由該鏈接所引用的文件。給出符號鏈接名情況下,

沒有一個函數能刪除由該鏈接所引用的文件。

3.remove:解除對一個文件或目錄的鏈接。

頭文件:#include

用法:int remove(const char *pathname);

返回值:成功返回0,否則返回-1.

注意:對于文件,remove的功能與unlink相同。對于目錄,remove的功能與rmdir相同。

總結

以上是生活随笔為你收集整理的linux查看目录访问权限,Linux文件访问权限的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。