詳解linux中的文件權限識別及修改
一、文件權限認識
在 Linux 系統(tǒng)中,一切皆文件,目錄也是一種文件形式叫目錄文件,它們的屬性主要包含: 索引節(jié)點(inode),類型、權限屬性、鏈接數(shù)、所歸屬的用戶和用戶組、最近修改時間
等內(nèi)容。如下為根目錄下目錄:
$ ls -lih total 60K 263121 lrwxrwxrwx 1 root root 7 Jun 2 2017 bin -> usr/bin 263122 dr-xr-xr-x 2 root root 4.0K Dec 7 2017 boot 1 drwxr-xr-x 5 root root 360 Aug 11 14:36 dev 1315847 drwxr-xr-x 1 root root 4.0K Aug 11 14:36 etc 263621 drwxr-xr-x 5 root root 4.0K Nov 29 2019 home 264862 lrwxrwxrwx 1 root root 7 Jun 2 2017 lib -> usr/lib 264863 lrwxrwxrwx 1 root root 9 Jun 2 2017 lib64 -> usr/lib64 264864 drwx------ 2 root root 4.0K Jun 2 2017 lost+found 264865 drwxr-xr-x 2 root root 4.0K Dec 13 2015 media 264866 drwxr-xr-x 2 root root 4.0K Dec 13 2015 mnt 264867 drwxr-xr-x 3 root root 4.0K Nov 29 2019 opt 1 dr-xr-xr-x 373 root root 0 Aug 11 14:36 proc 4851238 dr-xr-x--- 1 root root 4.0K Dec 11 2019 root 4851241 drwxr-xr-x 1 root root 4.0K Feb 14 11:17 run 264881 lrwxrwxrwx 1 root root 8 Jun 2 2017 sbin -> usr/sbin 264882 drwxr-xr-x 2 root root 4.0K Dec 13 2015 srv 1 dr-xr-xr-x 13 root root 0 Aug 11 14:36 sys 4851264 drwxrwxrwx 1 root root 4.0K Feb 14 11:17 tmp 4851265 drwxr-xr-x 1 root root 4.0K Nov 29 2019 usr 4852397 drwxr-xr-x 1 root root 4.0K Jun 4 2019 var
1.1、索引節(jié)點
在 Linux 文件系統(tǒng)中,每個文件都有一個用于標識和管理它的唯一索引節(jié)點號(inode number)。索引節(jié)點位于文件系統(tǒng)的元數(shù)據(jù)區(qū)域,包含了文件的所有元數(shù)據(jù)信息,例如文件的所有者、權限、大小、創(chuàng)建時間、修改時間、訪問時間等。
索引節(jié)點號是一個唯一的數(shù)字,用于標識一個文件。在 Linux 文件系統(tǒng)中,每個文件和目錄都有一個唯一的索引節(jié)點號,這個號碼在文件系統(tǒng)中是唯一的。
使用如下命令查看文件目錄索引節(jié)點:
$ ls -i total 12528 266890 locale-archive # 266890 即為文件locale-archive的索引節(jié)點
一個文件可以有多個硬鏈接(hard link),每個硬鏈接都有一個不同的文件名,但它們共享同一個索引節(jié)點號。因此,通過硬鏈接可以讓多個文件名指向同一個物理文件。
硬鏈接和軟鏈接
硬鏈接(Hard Link)是指多個文件名指向同一個物理文件的鏈接。多個硬鏈接共享同一個索引節(jié)點號(inode number),因此它們在文件系統(tǒng)中的位置相同,且沒有任何區(qū)別。每個硬鏈接都是一個完整的文件名,都可以作為原始文件名使用,并且都可以對文件進行讀寫操作。
符號鏈接(Symbolic Link,也稱軟鏈接)是指一個特殊類型的文件,它包含了指向另一個文件的路徑名。符號鏈接本身是一個文件,其中包含的路徑名指向另一個文件。當訪問符號鏈接時,實際上是訪問鏈接所指向的文件。與硬鏈接不同,符號鏈接指向的是文件名,而不是物理文件。
硬鏈接和符號鏈接的主要區(qū)別如下:
- 硬鏈接只能鏈接同一文件系統(tǒng)中的文件,而符號鏈接可以跨越文件系統(tǒng)。
- 硬鏈接會共享同一個索引節(jié)點,因此它們必須指向同一個物理文件,而符號鏈接可以指向任意文件或目錄。
- 刪除原始文件對硬鏈接沒有任何影響,因為它們共享同一個索引節(jié)點,而刪除原始文件會導致符號鏈接失效。
示例如下:
# 新建文件file.txt, 寫入“Hello World!” $ vim file.txt # 分別對file.txt 建立硬鏈接和軟鏈接 $ ln file.txt hard_file.txt $ ln -s file.txt soft_file.txt # 與硬鏈接區(qū)別在于加 -s $ ll total 8 -rw-r--r-- 2 root root 13 Aug 11 16:35 file.txt -rw-r--r-- 2 root root 13 Aug 11 16:35 hard_file.txt lrwxrwxrwx 1 root root 8 Aug 11 16:36 soft_file.txt -> file.txt # 查看文件內(nèi)容 $ cat file.txt Hello World! $ cat hard_file.txt Hello World! $ cat soft_file.txt # 有文章說符號鏈接無法查看內(nèi)容,只是顯示文件名,這里無法確認 Hello World! # 刪除原始文件后查看文件內(nèi)容 $ rm -rf file.txt $ cat hard_file.txt Hello World! $ cat soft_file cat: soft_file: No such file or directory
1.2、類型
1.2.1、普通文件:
-
代表普通文件,如下:
$ ll /etc/passwd -rw-r--r-- 1 root root 1690 Aug 14 04:46 /etc/passwd
1.2.2、目錄文件
d
代表目錄文件,如下:
$ ll /home/ drwx------ 3 admin admin 4096 Mar 21 10:32 admin
1.2.3、塊設備文件
b
代表目錄文件,如下:
brw-rw---- 1 root disk 253, 0 Nov 30 2022 vda brw-rw---- 1 root disk 253, 1 Nov 30 2022 vda1 brw-rw---- 1 root disk 253, 2 Nov 30 2022 vda2 brw-rw---- 1 root disk 253, 16 Nov 30 2022 vdb
在Linux系統(tǒng)中,塊設備文件是一種特殊的文件類型,用于訪問磁盤、光盤等塊設備。塊設備文件通常以 /dev/sdX
或 /dev/hdX
的形式存在,其中X表示驅(qū)動器的字母編號,從a開始遞增。例如, /dev/sda
表示系統(tǒng)中的第一個硬盤, /dev/sdb
表示系統(tǒng)中的第二個硬盤,以此類推。
塊設備文件是一種原始的設備文件,可以直接讀寫設備的扇區(qū)數(shù)據(jù)。在Linux系統(tǒng)中,塊設備驅(qū)動程序會把塊設備映射到文件系統(tǒng)中,從而使用戶可以通過文件系統(tǒng)來管理磁盤。
塊設備文件通常被用于分區(qū)、格式化、掛載、卸載硬盤等操作。例如,通過fdisk命令可以對塊設備文件進行分區(qū)操作,使用mkfs命令可以對分區(qū)進行格式化,使用mount和umount命令可以將文件系統(tǒng)掛載到塊設備上,并在不需要訪問文件系統(tǒng)時將其卸載。
1.2.4、字符設備文件
c
代表字符設備文件,如下:
crw-rw-rw- 1 root tty 5, 0 Aug 4 14:25 tty crw--w---- 1 root tty 4, 0 Nov 30 2022 tty0 crw--w---- 1 root tty 4, 1 Nov 30 2022 tty1 crw--w---- 1 root tty 4, 10 Nov 30 2022 tty10
在Linux系統(tǒng)中,字符設備文件是一種特殊的文件類型,用于訪問字符設備,例如鍵盤、鼠標、串口等。字符設備文件通常以 /dev/ttyX
或 /dev/ttySX
的形式存在,其中X表示設備的編號。
與塊設備文件不同,字符設備文件以字符為單位進行讀寫,而不是以塊為單位。因此,字符設備文件通常用于處理流數(shù)據(jù),例如文本文件、串口數(shù)據(jù)等。字符設備文件具有緩存機制,可以提高文件讀寫速度,并且支持隨機訪問。
在Linux系統(tǒng)中,字符設備文件的操作方式與普通文件類似,可以使用open、read、write、ioctl等系統(tǒng)調(diào)用來訪問設備。例如,使用cat命令可以讀取鍵盤輸入的字符,使用echo命令可以向串口發(fā)送數(shù)據(jù)。
1.2.5、符號鏈接文件
l
代表符號鏈接文件,如下:
lrwxrwxrwx. 1 root root 7 Nov 11 2020 python -> python2 lrwxrwxrwx. 1 root root 9 Nov 11 2020 python2 -> python2.7 lrwxrwxrwx 1 root root 16 Nov 11 2020 python2-config -> python2.7-config lrwxrwxrwx. 1 root root 9 Apr 12 2022 python3 -> python3.6
1.2.6、管道文件
p
代表管道文件,如下:
prw------- 1 root root 0 Nov 30 2022 dmeventd-client prw------- 1 root root 0 Nov 30 2022 dmeventd-server
管道文件是一種特殊的文件類型,用于進程之間的通信。管道文件又被稱為命名管道文件(Named pipe),與普通文件不同的是,管道文件不能用于存儲數(shù)據(jù),而是用于流式傳輸數(shù)據(jù)。
管道文件可以通過mkfifo命令創(chuàng)建,并且可以使用rm命令刪除。管道文件的創(chuàng)建和刪除不會影響到已經(jīng)存在的進程,但是如果所有進程都關閉了管道文件,那么管道文件也會被刪除。
在Linux系統(tǒng)中,管道文件通常用于進程之間的數(shù)據(jù)傳輸,例如通過管道將一個進程的輸出直接傳遞給另一個進程的輸入,從而實現(xiàn)數(shù)據(jù)處理。例如,可以使用以下命令將一個進程的輸出傳遞給另一個進程:
$ command1 | command2
這樣,command1的輸出將被傳遞給command2的輸入,從而實現(xiàn)數(shù)據(jù)處理。
1.2.7、套接字文件
s
代表套接字文件,如下:
srwxr-xr-x 1 root root 0 Apr 12 16:43 dockershim.sock srw-rw---- 1 root docker 0 Jul 27 16:47 docker.sock
在Linux系統(tǒng)中,套接字文件是一種特殊的文件類型,用于進程之間的網(wǎng)絡通信。套接字文件通常以文件路徑的形式存在,例如 /var/run/docker.sock
。
套接字文件可以被多個進程共享,因此可以用于實現(xiàn)進程之間的通信和協(xié)調(diào)。在Linux系統(tǒng)中,套接字文件通常用于實現(xiàn)網(wǎng)絡服務,例如Web服務器、數(shù)據(jù)庫服務器等。
套接字文件的創(chuàng)建和使用需要借助 Socket API
,這是一組用于網(wǎng)絡編程的系統(tǒng)調(diào)用。在Socket API中,可以使用 socket、bind、listen、accept
等函數(shù)來創(chuàng)建和操作套接字文件。
套接字文件還可以分為兩種類型:流套接字(Stream socket)和數(shù)據(jù)報套接字(Datagram socket)。流套接字是一種面向連接的套接字,用于可靠的傳輸數(shù)據(jù)。數(shù)據(jù)報套接字是一種無連接的套接字,用于快速傳輸小型數(shù)據(jù)包。
總之,套接字文件是Linux系統(tǒng)中非常重要的文件類型,用于進程之間的網(wǎng)絡通信和協(xié)調(diào)。了解套接字文件的工作原理和使用方法,對于系統(tǒng)管理員和開發(fā)人員來說都是非常重要的。
1.3、權限
文件權限以 3 位為一組,分成 3 組,分別表示文件所有者的權限,文件所有者所屬組的權限及其他用戶的權限。
權限與數(shù)字對應關系表:
數(shù)字 | 符號 | 權限 |
---|---|---|
0 | — | 沒有權限 |
1 | –x | 執(zhí)行 |
2 | -w- | 寫入 |
3 | -wx | 寫入和執(zhí)行 |
4 | r– | 讀取 |
5 | r-x | 讀取和執(zhí)行 |
6 | rw- | 讀取和寫入 |
7 | rwx | 讀取、寫入和執(zhí)行 |
1.4、鏈接數(shù)
鏈接數(shù)表示指向該文件的硬鏈接數(shù)量。當一個新的硬鏈接被創(chuàng)建時,文件的鏈接數(shù)會自動增加,當硬鏈接被刪除時,鏈接數(shù)會相應減少。
例如,如果有一個名為 file.txt 的文件,并創(chuàng)建了兩個硬鏈接 link1 和 link2,那么該文件的鏈接數(shù)就是 3(原始文件名 file.txt 和兩個硬鏈接 link1 和 link2)。
鏈接數(shù)是 Linux 文件系統(tǒng)中一個重要的概念,它有以下幾個作用:
1)確定文件是否可以被刪除
鏈接數(shù)為 0 表示沒有任何硬鏈接指向該文件,該文件可以被刪除。
2)確定文件是否可以被修改
只有文件的所有硬鏈接都被刪除之后,才能對文件進行修改。在硬鏈接存在的情況下,修改任何一個鏈接都會影響到其他鏈接。
3)確定文件是否可以被重命名
如果一個文件有多個硬鏈接,重命名其中一個硬鏈接會影響到其他硬鏈接。因此,只有當文件的所有硬鏈接都被刪除后,才能將該文件重命名。
4)確定文件占用的磁盤空間
鏈接數(shù)的值等于文件的硬鏈接數(shù)加 1,其中加 1 表示文件本身所占用的空間。因此,當一個文件有多個硬鏈接時,它實際上只占用了一次磁盤空間。
如何查看文件鏈接數(shù)
ls -l
$ ls -l total 4 -rw-r--r-- 1 root root 5 Aug 14 14:11 test.txt # 其中鏈接數(shù)為 1
stat
命令
stat test.txt File: ‘test.txt' Size: 5 Blocks: 8 IO Block: 4096 regular file Device: 2000d8h/2097368d Inode: 1315730 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2023-08-14 14:11:57.865926283 +0800 Modify: 2023-08-14 14:11:57.865926283 +0800 Change: 2023-08-14 14:11:57.865926283 +0800 Birth: -
二、修改文件權限
2.1、 chmod 命令
2.1.1、數(shù)字方式
使用數(shù)字方式時,每個權限都由三個數(shù)字表示,分別代表所有者、所屬組和其他用戶的權限。結(jié)合1.3,使用命令 chmod 700 file.txt
,給文件file.txt 加權限為 rwx------
2.1.2、符號方式
可以使用 +
或 -
來添加或刪除權限,通過 u
、 g
和 o
分別表示所有者、所屬組和其他用戶。
$ chmod u+rw file.txt # 此命令以為著給所有者增加讀寫權限,所屬組合其他用戶權限不變。
2.2、 chown 命令
chown 命令用于修改文件的所有者。它可以通過用戶名或用戶 ID 指定新的所有者。
$ chown admin test.py $ ll | grep test.py -rw-r--r-- 1 admin root 1997 Jun 27 16:59 test.py
2.3、 chgrp 命令
chgrp 命令用于修改文件的所屬組。它可以通過組名或組 ID 指定新的所屬組。
$ chgrp admin test.py $ ll | grep test.py -rw-r--r-- 1 admin admin 1997 Jun 27 16:59 test.py
2.4、 umask 命令
Linux 操作系統(tǒng)中,umask 命令用于設置新建文件或目錄的默認權限。umask 命令是用戶級別的命令,通過該命令可以設置當前用戶的 umask 值,即默認權限掩碼。
umask 值是三個八進制數(shù)的形式,如 022,每個數(shù)字分別表示文件權限掩碼的三個位的值。其中,第一個數(shù)字表示新建文件的權限掩碼的所有者部分,第二個數(shù)字表示所屬組部分,第三個數(shù)字表示其他用戶部分。
默認情況下,umask 值通常為 022,即新建文件的默認權限為 -rw-r--r--
,新建目錄的默認權限為 drwxr-xr-x
。
例如,當 umask 值為 002 時,新建文件的默認權限為 -rw-rw-r--
,新建目錄的默認權限為 drwxrwxr-x
。
umask 值可以使用 umask 命令進行修改,該命令的語法如下:
$ umask [mode]
其中,mode 參數(shù)可以是一個八進制數(shù)或者一個符號模式。如果沒有指定 mode 參數(shù),則 umask 命令將會顯示當前的 umask 值
$ umask 0022
和chmod類似,也可以使用符號模式設置默認權限,如果要將默認權限掩碼設置為 -rwxr-xr-x
,那么可以使用以下命令:
$ umask u=rwx,g=rx,o=rx
上述命令中,u 表示所有者,g 表示所屬組,o 表示其他用戶,= 表示設置權限。因此,u=rwx 表示設置所有者的權限為可讀可寫可執(zhí)行,g=rx 表示設置所屬組的權限為可讀可執(zhí)行,o=rx 表示設置其他用戶的權限為可讀可執(zhí)行。
需要注意的是,umask 值是在當前會話中設置的,它不會影響已經(jīng)存在的文件或目錄的權限,只會影響新建文件或目錄的默認權限。
如果要永久修改 umask 值,可以將其添加到 shell 配置文件中,如 ~/.bashrc、~/.bash_profile 或 /etc/profile
等。
總之,umask 命令用于設置新建文件或目錄的默認權限掩碼。umask 值是三個八進制數(shù)的形式,可以使用八進制數(shù)或符號模式進行修改。默認情況下,umask 值通常為 022。
到此這篇關于詳解linux中的文件權限識別及修改的文章就介紹到這了,更多相關linux文件權限內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
shell腳本快速檢查192.168.1網(wǎng)段ip是否在用的方法
該Shell腳本通過并發(fā)ping命令檢查192.168.1網(wǎng)段中哪些IP地址正在使用,腳本定義了網(wǎng)絡段、超時時間和并行掃描數(shù)量,并使用不同顏色的日志區(qū)分在線和離線的IP地址,本文介紹shell腳本快速檢查192.168.1網(wǎng)段ip是否在用,感興趣的朋友一起看看吧2025-01-01Linux中的service命令與systemctl命令有何區(qū)別
在Linux中,service?和?systemctl?是兩個至關重要且極其相似的命令,它們?nèi)绱讼嗨疲灾劣谌藗兒苋菀紫胫浪鼈冎g有何不同,是否可以互換使用,下面我們就來看看之前的區(qū)別到底有哪些吧2023-08-08Linux Shell 生成隨機數(shù)和隨機字符串的方法示例
這篇文章主要介紹了Linux Shell 生成隨機數(shù)和隨機字符串的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-02-02shell腳本一鍵同時推送代碼至github和gitee的解決辦法
這篇文章主要介紹了shell腳本一鍵同時推送代碼至github和gitee的解決辦法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09Shell腳本中判斷輸入?yún)?shù)個數(shù)的方法
這篇文章主要介紹了Shell腳本中判斷輸入?yún)?shù)個數(shù)的方法,使用內(nèi)置變量$#即可實現(xiàn)判斷輸入了多少個參數(shù),需要的朋友可以參考下2014-10-10