詳解linux中的文件權(quán)限識別及修改
一、文件權(quán)限認(rèn)識
在 Linux 系統(tǒng)中,一切皆文件,目錄也是一種文件形式叫目錄文件,它們的屬性主要包含: 索引節(jié)點(inode),類型、權(quán)限屬性、鏈接數(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 var1.1、索引節(jié)點
在 Linux 文件系統(tǒng)中,每個文件都有一個用于標(biāo)識和管理它的唯一索引節(jié)點號(inode number)。索引節(jié)點位于文件系統(tǒng)的元數(shù)據(jù)區(qū)域,包含了文件的所有元數(shù)據(jù)信息,例如文件的所有者、權(quán)限、大小、創(chuàng)建時間、修改時間、訪問時間等。
索引節(jié)點號是一個唯一的數(shù)字,用于標(biāo)識一個文件。在 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ū)別。每個硬鏈接都是一個完整的文件名,都可以作為原始文件名使用,并且都可以對文件進(jìn)行讀寫操作。
符號鏈接(Symbolic Link,也稱軟鏈接)是指一個特殊類型的文件,它包含了指向另一個文件的路徑名。符號鏈接本身是一個文件,其中包含的路徑名指向另一個文件。當(dāng)訪問符號鏈接時,實際上是訪問鏈接所指向的文件。與硬鏈接不同,符號鏈接指向的是文件名,而不是物理文件。
硬鏈接和符號鏈接的主要區(qū)別如下:
- 硬鏈接只能鏈接同一文件系統(tǒng)中的文件,而符號鏈接可以跨越文件系統(tǒng)。
- 硬鏈接會共享同一個索引節(jié)點,因此它們必須指向同一個物理文件,而符號鏈接可以指向任意文件或目錄。
- 刪除原始文件對硬鏈接沒有任何影響,因為它們共享同一個索引節(jié)點,而刪除原始文件會導(dǎo)致符號鏈接失效。
示例如下:
# 新建文件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)容,只是顯示文件名,這里無法確認(rèn) 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、塊設(shè)備文件
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)中,塊設(shè)備文件是一種特殊的文件類型,用于訪問磁盤、光盤等塊設(shè)備。塊設(shè)備文件通常以 /dev/sdX 或 /dev/hdX 的形式存在,其中X表示驅(qū)動器的字母編號,從a開始遞增。例如, /dev/sda 表示系統(tǒng)中的第一個硬盤, /dev/sdb 表示系統(tǒng)中的第二個硬盤,以此類推。
塊設(shè)備文件是一種原始的設(shè)備文件,可以直接讀寫設(shè)備的扇區(qū)數(shù)據(jù)。在Linux系統(tǒng)中,塊設(shè)備驅(qū)動程序會把塊設(shè)備映射到文件系統(tǒng)中,從而使用戶可以通過文件系統(tǒng)來管理磁盤。
塊設(shè)備文件通常被用于分區(qū)、格式化、掛載、卸載硬盤等操作。例如,通過fdisk命令可以對塊設(shè)備文件進(jìn)行分區(qū)操作,使用mkfs命令可以對分區(qū)進(jìn)行格式化,使用mount和umount命令可以將文件系統(tǒng)掛載到塊設(shè)備上,并在不需要訪問文件系統(tǒng)時將其卸載。
1.2.4、字符設(shè)備文件
c 代表字符設(shè)備文件,如下:
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)中,字符設(shè)備文件是一種特殊的文件類型,用于訪問字符設(shè)備,例如鍵盤、鼠標(biāo)、串口等。字符設(shè)備文件通常以 /dev/ttyX 或 /dev/ttySX 的形式存在,其中X表示設(shè)備的編號。
與塊設(shè)備文件不同,字符設(shè)備文件以字符為單位進(jìn)行讀寫,而不是以塊為單位。因此,字符設(shè)備文件通常用于處理流數(shù)據(jù),例如文本文件、串口數(shù)據(jù)等。字符設(shè)備文件具有緩存機制,可以提高文件讀寫速度,并且支持隨機訪問。
在Linux系統(tǒng)中,字符設(shè)備文件的操作方式與普通文件類似,可以使用open、read、write、ioctl等系統(tǒng)調(diào)用來訪問設(shè)備。例如,使用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
管道文件是一種特殊的文件類型,用于進(jìn)程之間的通信。管道文件又被稱為命名管道文件(Named pipe),與普通文件不同的是,管道文件不能用于存儲數(shù)據(jù),而是用于流式傳輸數(shù)據(jù)。
管道文件可以通過mkfifo命令創(chuàng)建,并且可以使用rm命令刪除。管道文件的創(chuàng)建和刪除不會影響到已經(jīng)存在的進(jìn)程,但是如果所有進(jìn)程都關(guān)閉了管道文件,那么管道文件也會被刪除。
在Linux系統(tǒng)中,管道文件通常用于進(jìn)程之間的數(shù)據(jù)傳輸,例如通過管道將一個進(jìn)程的輸出直接傳遞給另一個進(jìn)程的輸入,從而實現(xiàn)數(shù)據(jù)處理。例如,可以使用以下命令將一個進(jìn)程的輸出傳遞給另一個進(jìn)程:
$ 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)中,套接字文件是一種特殊的文件類型,用于進(jìn)程之間的網(wǎng)絡(luò)通信。套接字文件通常以文件路徑的形式存在,例如 /var/run/docker.sock 。
套接字文件可以被多個進(jìn)程共享,因此可以用于實現(xiàn)進(jìn)程之間的通信和協(xié)調(diào)。在Linux系統(tǒng)中,套接字文件通常用于實現(xiàn)網(wǎng)絡(luò)服務(wù),例如Web服務(wù)器、數(shù)據(jù)庫服務(wù)器等。
套接字文件的創(chuàng)建和使用需要借助 Socket API ,這是一組用于網(wǎng)絡(luò)編程的系統(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)中非常重要的文件類型,用于進(jìn)程之間的網(wǎng)絡(luò)通信和協(xié)調(diào)。了解套接字文件的工作原理和使用方法,對于系統(tǒng)管理員和開發(fā)人員來說都是非常重要的。
1.3、權(quán)限
文件權(quán)限以 3 位為一組,分成 3 組,分別表示文件所有者的權(quán)限,文件所有者所屬組的權(quán)限及其他用戶的權(quán)限。

權(quán)限與數(shù)字對應(yīng)關(guān)系表:
| 數(shù)字 | 符號 | 權(quán)限 |
|---|---|---|
| 0 | — | 沒有權(quán)限 |
| 1 | –x | 執(zhí)行 |
| 2 | -w- | 寫入 |
| 3 | -wx | 寫入和執(zhí)行 |
| 4 | r– | 讀取 |
| 5 | r-x | 讀取和執(zhí)行 |
| 6 | rw- | 讀取和寫入 |
| 7 | rwx | 讀取、寫入和執(zhí)行 |
1.4、鏈接數(shù)
鏈接數(shù)表示指向該文件的硬鏈接數(shù)量。當(dāng)一個新的硬鏈接被創(chuàng)建時,文件的鏈接數(shù)會自動增加,當(dāng)硬鏈接被刪除時,鏈接數(shù)會相應(yīng)減少。
例如,如果有一個名為 file.txt 的文件,并創(chuàng)建了兩個硬鏈接 link1 和 link2,那么該文件的鏈接數(shù)就是 3(原始文件名 file.txt 和兩個硬鏈接 link1 和 link2)。
鏈接數(shù)是 Linux 文件系統(tǒng)中一個重要的概念,它有以下幾個作用:
1)確定文件是否可以被刪除
鏈接數(shù)為 0 表示沒有任何硬鏈接指向該文件,該文件可以被刪除。
2)確定文件是否可以被修改
只有文件的所有硬鏈接都被刪除之后,才能對文件進(jìn)行修改。在硬鏈接存在的情況下,修改任何一個鏈接都會影響到其他鏈接。
3)確定文件是否可以被重命名
如果一個文件有多個硬鏈接,重命名其中一個硬鏈接會影響到其他硬鏈接。因此,只有當(dāng)文件的所有硬鏈接都被刪除后,才能將該文件重命名。
4)確定文件占用的磁盤空間
鏈接數(shù)的值等于文件的硬鏈接數(shù)加 1,其中加 1 表示文件本身所占用的空間。因此,當(dāng)一個文件有多個硬鏈接時,它實際上只占用了一次磁盤空間。
如何查看文件鏈接數(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: -
二、修改文件權(quán)限
2.1、 chmod 命令
2.1.1、數(shù)字方式
使用數(shù)字方式時,每個權(quán)限都由三個數(shù)字表示,分別代表所有者、所屬組和其他用戶的權(quán)限。結(jié)合1.3,使用命令 chmod 700 file.txt ,給文件file.txt 加權(quán)限為 rwx------
2.1.2、符號方式
可以使用 + 或 - 來添加或刪除權(quán)限,通過 u 、 g 和 o 分別表示所有者、所屬組和其他用戶。
$ chmod u+rw file.txt # 此命令以為著給所有者增加讀寫權(quán)限,所屬組合其他用戶權(quán)限不變。
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 命令用于設(shè)置新建文件或目錄的默認(rèn)權(quán)限。umask 命令是用戶級別的命令,通過該命令可以設(shè)置當(dāng)前用戶的 umask 值,即默認(rèn)權(quán)限掩碼。
umask 值是三個八進(jìn)制數(shù)的形式,如 022,每個數(shù)字分別表示文件權(quán)限掩碼的三個位的值。其中,第一個數(shù)字表示新建文件的權(quán)限掩碼的所有者部分,第二個數(shù)字表示所屬組部分,第三個數(shù)字表示其他用戶部分。
默認(rèn)情況下,umask 值通常為 022,即新建文件的默認(rèn)權(quán)限為 -rw-r--r-- ,新建目錄的默認(rèn)權(quán)限為 drwxr-xr-x 。
例如,當(dāng) umask 值為 002 時,新建文件的默認(rèn)權(quán)限為 -rw-rw-r-- ,新建目錄的默認(rèn)權(quán)限為 drwxrwxr-x 。
umask 值可以使用 umask 命令進(jìn)行修改,該命令的語法如下:
$ umask [mode]
其中,mode 參數(shù)可以是一個八進(jìn)制數(shù)或者一個符號模式。如果沒有指定 mode 參數(shù),則 umask 命令將會顯示當(dāng)前的 umask 值
$ umask 0022
和chmod類似,也可以使用符號模式設(shè)置默認(rèn)權(quán)限,如果要將默認(rèn)權(quán)限掩碼設(shè)置為 -rwxr-xr-x ,那么可以使用以下命令:
$ umask u=rwx,g=rx,o=rx
上述命令中,u 表示所有者,g 表示所屬組,o 表示其他用戶,= 表示設(shè)置權(quán)限。因此,u=rwx 表示設(shè)置所有者的權(quán)限為可讀可寫可執(zhí)行,g=rx 表示設(shè)置所屬組的權(quán)限為可讀可執(zhí)行,o=rx 表示設(shè)置其他用戶的權(quán)限為可讀可執(zhí)行。
需要注意的是,umask 值是在當(dāng)前會話中設(shè)置的,它不會影響已經(jīng)存在的文件或目錄的權(quán)限,只會影響新建文件或目錄的默認(rèn)權(quán)限。
如果要永久修改 umask 值,可以將其添加到 shell 配置文件中,如 ~/.bashrc、~/.bash_profile 或 /etc/profile 等。
總之,umask 命令用于設(shè)置新建文件或目錄的默認(rèn)權(quán)限掩碼。umask 值是三個八進(jìn)制數(shù)的形式,可以使用八進(jìn)制數(shù)或符號模式進(jìn)行修改。默認(rèn)情況下,umask 值通常為 022。
到此這篇關(guān)于詳解linux中的文件權(quán)限識別及修改的文章就介紹到這了,更多相關(guān)linux文件權(quán)限內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
shell結(jié)構(gòu)化命令if-then-else語句
在Shell腳本編程中,if-then-else語句提供了基于條件執(zhí)行不同命令的能力,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-11-11
shell腳本快速檢查192.168.1網(wǎng)段ip是否在用的方法
該Shell腳本通過并發(fā)ping命令檢查192.168.1網(wǎng)段中哪些IP地址正在使用,腳本定義了網(wǎng)絡(luò)段、超時時間和并行掃描數(shù)量,并使用不同顏色的日志區(qū)分在線和離線的IP地址,本文介紹shell腳本快速檢查192.168.1網(wǎng)段ip是否在用,感興趣的朋友一起看看吧2025-01-01
Linux中的service命令與systemctl命令有何區(qū)別
在Linux中,service?和?systemctl?是兩個至關(guān)重要且極其相似的命令,它們?nèi)绱讼嗨?,以至于人們很容易想知道它們之間有何不同,是否可以互換使用,下面我們就來看看之前的區(qū)別到底有哪些吧2023-08-08
Linux Shell 生成隨機數(shù)和隨機字符串的方法示例
這篇文章主要介紹了Linux Shell 生成隨機數(shù)和隨機字符串的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-02-02
shell腳本一鍵同時推送代碼至github和gitee的解決辦法
這篇文章主要介紹了shell腳本一鍵同時推送代碼至github和gitee的解決辦法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09
Shell腳本中判斷輸入?yún)?shù)個數(shù)的方法
這篇文章主要介紹了Shell腳本中判斷輸入?yún)?shù)個數(shù)的方法,使用內(nèi)置變量$#即可實現(xiàn)判斷輸入了多少個參數(shù),需要的朋友可以參考下2014-10-10

