Linux文件屬性及類型
1.Linux系統文件屬性
Linux系統中文件或目錄的屬性主要包括:文件或目錄的索引節點(inode)、類型、權限屬性、鏈接數、所歸屬的用戶和用戶組、最近修改時間等內容;在 Linux 中我們可以使用 ll 或者 ls –l 命令來顯示一個文件的屬性以及文件所屬的用戶和組,如:
d rwxr-xr-x. 4 root root 71 Mar 25 19:01 one
- rw-r--r--. 1 root root 119 Mar 25 03:42 shi.txt
1| 2 |3|4| 5 | 6 | 7 | 8 | 9
在 Linux 中第一列字符代表這個文件是目錄、文件或鏈接文件等等。
- 當為 d 則是目錄(directory)
- 當為 - 則是普通文件;
- 若是 l 則表示為鏈接文檔(Link File);
- 若是 b 則是設備文件(block塊設備文件)和存儲相關的設備,舉例:硬盤,U盤,磁盤分區
- 若是 c 則表示為設備文件(char字符設備文件)和字符相關的設備,舉例:打印機,終端
- 若是 s 則表示為socket安全套接字文件,網絡編程
- 若是 p 則表示為pipe管道文件,父進程與子進程之間的通信文件
第二列字符表示用戶權限
- r 代表可讀(read)
- w 代表可寫(write)
- x 代表可執行(execute)
- -該權限位上沒有權限
第四列指該文件的硬鏈接數
第五列文件或目錄所屬的用戶(屬主)
chown:更改文件屬主
語法:
chown [–R] 屬主名 文件名
第六列文件或目錄所屬的用戶所歸屬的組;
chgrp:更改文件屬組
語法:
chgrp [-R] 屬組名 文件名
-R:遞歸更改文件屬組,就是在更改某個目錄文件的屬組時,如果加上-R的參數,那么該目錄下的所有文件的屬組都會更改。
第七列文件或目錄的大小;
其中大小默認單位為字節,想要轉換儲存單位可以用命令 ls -h
第八列文件或目錄的修改時間
這里的時間是該文件的最后被更新(包括文件創建、內容更新、文件名更新等),可用如下命令查看文件的修改,訪問,創建的時間
stat + 文件名.
第九列實際的文件名或目錄名
2.文件類型查看命令file
語法:
file [選項] 文件...
舉例:
[root@localhost ~]# file pikachupikachu: JPEG image data, JFIF standard 1.01
root@localhost ~]# file /dev/sda/dev/sda: block speci
[root@localhost ~]# file /dev/pts/0/dev/pts/0: character speci
注意: Linux文件擴展名不代表任何含義, 僅僅是為了運維人員便於識別
3.系統鏈接文件
在Linux中,一個文件數據可分為兩大類:數據和元數據
- 數據:泛指普通文件中的實際數據
- 元數據:用來描述一個文件的特征的系統數據
在Linux中,一個文件的存儲也會被分為兩部分:inode和block
- inode:用來存儲文件的元數據
- block:用來存儲文件的真實數據,一個block空間是4k
ext4 文件系統會把分區主要分為兩大部分(暫時不提超級塊):小部分用於保存文件的 inode (i 節點)信息;剩余的大部分用於保存 block 信息。
inode 的默認大小為 128 Byte,用來記錄文件的權限(r、w、x)、文件的所有者和屬組、文件的大小、文件的狀態改變時間(ctime)、文件的最近一次讀取時間(atime)、文件的最近一次修改時間(mtime)、文件的數據真正保存的 block 編號。每個文件需要占用一個 inode。大家如果仔細查看,就會發現 inode 中是不記錄文件名的,那是因為文件名記錄在文件所在目錄的 block 中。
block 的大小可以是 1KB、2KB、4KB,默認為 4KB。block 用於實際的數據存儲,如果一個 block 放不下數據,則可以占用多個 block。例如,有一個 10KB 的文件需要存儲,則會占用 3 個 block,雖然最后一個 block 不能占滿,但也不能再放入其他文件的數據。這 3 個 block 有可能是連續的,也有可能是分散的。
由此,我們可以知道以下 2 個重要的信息:
1.每個文件都獨自占用一個 inode,文件內容由 inode 的記錄來指向;
2.如果想要讀取文件內容,就必須借助目錄中記錄的文件名找到該文件的 inode,才能成功找到文件內容所在的 block 塊;
查看磁盤空間命令
查看磁盤空間命令:
df
選項:
-h:human人類可讀
-i:查看inode空間
舉例:
查看磁盤的block:
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 1.2G 18G 7% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.6M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 473M 119M 355M 25% /boot
tmpfs 98M 0 98M 0% /run/user/0
查看磁盤的inode:
[root@localhost ~]# df -hi
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 9.3M 29K 9.3M 1% /
devtmpfs 119K 373 119K 1% /dev
tmpfs 122K 1 122K 1% /dev/shm
tmpfs 122K 700 121K 1% /run
tmpfs 122K 16 122K 1% /sys/fs/cgroup
/dev/sda1 238K 326 238K 1% /boot
tmpfs 122K 1 122K 1% /run/user/0
4.硬鏈接與軟連接
Linux系統引入了兩種鏈接:
-
硬鏈接(hard link)
-
軟鏈接(又叫:符號鏈接即soft link或symbolic lin)
軟連接:
軟鏈接相當於windows的快捷方式,軟鏈接文件會將inode指向源文件的block
- 當我們訪問這個軟鏈接文件時,其實就是在訪問源文件的本身
- 那么當我們對一個文件創建多個軟鏈接時,其實就是多個inode指向同一個block
- 那么當我們刪除軟鏈接文件時,其實只是刪除了一個inode的指向,並不會對源文件造成影響。
- 如果我們刪除的是源文件,那么該文件的所有軟鏈接文件都會失效
顯示iNode編號命令
ls -i
創建軟鏈接文件命令:
ln -s 源文件 鏈接文件的位置
一個文件創建多個軟連接:
[root@localhost ~]# ln -s /root/1.txt /tmp/
[root@localhost ~]# ll /tmp/
total 196
lrwxrwxrwx 1 root root 11 Mar 2910:54 1.txt -> /root/1.tx
[root@localhost ~]# ln -s /root/1.txt /tmp/2.txt
[root@localhost ~]# ll /tmp/
total 196
lrwxrwxrwx 1 root root 11 Mar 2910:54 1.txt -> /root/1.txt
lrwxrwxrwx 1 root root 11 Mar 2910:55 2.txt -> /root/1.txt
軟鏈接的應用場景
-
軟件升級
-
代碼發布
-
不方便移動的目錄
-
數據回滾
-
程序讀取
硬鏈接:
若一個inode號對應多個文件名,則稱這些文件為硬鏈接。換句話說,硬鏈接就是同一個文件使用了多個別名
特性
-
硬鏈接文件,不會受到原文件的影響
-
所有硬鏈接文件的inode號與源文件相同
-
修改一個文件,其他文件都會改變
-
不允許給目錄創建硬鏈接5.默認情況下,新創建的目錄,有兩個硬鏈接,一個是目錄本身,一個是該目錄下的.目錄
1)創建命令不同
軟鏈接:ln -s
硬鏈接:ln
2)目錄不能創建硬鏈接,並且硬鏈接不可以跨越系統的分區,軟鏈接可以
3)硬鏈接文件與源文件inode相同,軟鏈接文件與源文件inode不同
4)刪除軟鏈接文件,對源文件無影響,但是刪除軟鏈接源文件對軟鏈接文件有影響
5)刪除硬鏈接文件,對源文件也無影響,並且刪除源文件,對硬鏈接文件也無影響
拓展:企業面試題
當前磁盤空間還剩余500G,但是就無法往里面寫入數據,報錯,磁盤空間滿了
回答:
1.首先磁盤存儲被划分為兩塊
inode:存儲文件的元數據
block:存儲文件的真實數據
2.在問題當中剩余500G,這500G指的是block
3.應該是inode被占滿了
4.這種情況,一般是系統中,小文件太多導致的
5.找到系統中的小文件(沒用的),並刪除