Linux 檔案屬性
檔案屬性資訊組成
圖示如下:
- 檔案索引屬性資訊-inode
- 檔案型別許可權資訊
- 檔案連結屬性資訊-硬連結個數
- 檔案屬主屬性資訊-檔案所有者
- 檔案屬組屬性資訊-檔案所屬組
- 檔案大小屬性資訊-最小單位位元組(大小、kb)
- 檔案修改時間資訊
- 檔名稱資訊說明-檔名
檔案屬性概念說明
-
inode 編號
Linux系統中檔案的唯一編號,就相當於身份證號
- 常見檔案型別
檔案型別 | 對應字元 |
---|---|
普通檔案 | f/- |
資料夾 | d |
連結檔案 | l |
裝置檔案 | b:磁碟檔案 / c:字元檔案 |
套接字檔案(socket) | s |
管道檔案 | p |
圖示如下:
-
檔案型別檢視方法
file 檔案資訊:
- 配置檔案---.conf
- 日誌檔案---.log
- 指令碼檔案---.sh
- 指令碼檔案---.py
注意不能以顏色判斷檔案型別,如果關閉顏色引數呢?
這樣一種顏色的時候在檔案多的時候很難判斷是什麼型別!
檔案軟硬連結說明
- 命令:ln
- 引數:-s --- 軟連線
- 不加引數建立的是硬連結
- 格式1:ln [原檔案路徑] [硬連結檔案路徑]
- 格式2:ln -s [原檔案路徑] [軟連結檔案路徑]
圖示:
硬連結
硬連結好比商場的出口,商場有多個出口,就相當於多個介面去操作檔案,硬連結直接指向index node編號,當檔案修改時候,硬連結產生的檔案也修改,他們的inode編號相同
# 建立硬連結
[root@localhost ~]# ln /root/test /root/test01
ps:修改原檔案或者硬連結產生的檔案都是對原檔案的修改!
軟連結
相當於Windows中的快捷方式,主要用來指向對應檔案的路徑。
# 建立軟連線
[root@localhost ~]# ln -s /root/test /root/test02
驗證軟連結是指向路徑,刪除原檔案觀察
[root@localhost ~]# rm -rf /root/test
[root@localhost ~]# ls
anaconda-ks.cfg test01 test02
[root@localhost ~]# ll -i
total 8
134319695 -rw-------. 1 root root 1691 Dec 9 19:03 anaconda-ks.cfg
134930018 -rw-r--r--. 1 root root 12 Dec 14 16:17 test01
135086254 lrwxrwxrwx. 1 root root 10 Dec 14 16:25 test02 -> /root/test
[root@localhost ~]# cat test01
chinaaaaaaa
[root@localhost ~]# cat test02
cat: test02: No such file or directory
補充知識
如何真正刪除一個檔案:
刪除檔案的底層邏輯:
1、刪除的是硬連結
2、判斷該檔案硬連結數是否為0
3、如果為0,則在磁碟中將其刪除
4、如果不為0,則只刪除一個硬連結
儲存資料相關-inode/block
inode:
inode用於存放的是檔案屬性、指標位置,主要在是在格式化建立檔案系統的時候誕生的,建立一個檔案至少佔用一個inode和一個block,在同一分割槽中,兩個檔案的inode號碼相同,兩個檔案互為硬連結。
- 展示inode資訊:
[root@localhost ~]# cd /etc/
[root@localhost etc]# ll -hi /etc/hosts
67109955 -rw-r--r--. 1 root root 158 Jun 7 2013 /etc/hosts
-
統計inode數目
- 命令:df -i
[root@localhost etc]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
devtmpfs 56934 334 56600 1% /dev
tmpfs 59949 1 59948 1% /dev/shm
tmpfs 59949 692 59257 2% /run
tmpfs 59949 16 59933 1% /sys/fs/cgroup
/dev/mapper/centos-root 52164608 77758 52086850 1% /
/dev/sda1 262144 326 261818 1% /boot
tmpfs 59949 1 59948 1% /run/user/0
block:
用於儲存資料-block塊資訊,儲存檔案資料資訊,主要在是在格式化建立檔案系統的時候誕生的;
block預設大小為4k,比較大的檔案,會佔用多個block
當檔案比較大的時候,磁碟放不下,會導致空間無法使用-顯示磁碟空間不足(no space left on device)
建立一個檔案至少佔用一個inode和一個block(非空檔案)
磁碟讀取資料按block為單位讀取的
讀取一個block會消耗一次磁碟I/O(input/output 磁碟讀寫)
- 命令:df
- 相關檔案:/etc/hosts
[root@localhost etc]# ll -hi /etc/hosts
67109955 -rw-r--r--. 1 root root 158 Jun 7 2013 /etc/hosts
[root@localhost etc]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 227736 0 227736 0% /dev
tmpfs 239796 0 239796 0% /dev/shm
tmpfs 239796 5624 234172 3% /run
tmpfs 239796 0 239796 0% /sys/fs/cgroup
/dev/mapper/centos-root 104278276 2636220 101642056 3% /
/dev/sda1 520868 134236 386632 26% /boot
tmpfs 47960 0 47960 0% /run/user/0
讀取檔案原理圖
- 檔案首先儲存在硬碟上,檔案最小的單位是
塊(block)
,塊由扇區(sector)
組成,塊一般大小為4kb
,連續8個扇區組成一個塊- 硬碟的最小儲存單位
扇區(sector)
,每個扇區儲存512位元組
- 作業系統讀取硬碟資料:一次性讀取一塊資料
-
讀取檔案流程
以讀取/etc/passwd檔案內容為例
Linux檔案系統
Linux檔案系統可以簡單分為
inode table
和data area
,inode table
中存有inode
,檔案系統通常會將檔案的許可權與屬性放置到inode
中,至於實際內容則放置到data block
區塊中,還有一個超級區塊(superblock)
會記錄整個檔案系統的整體資訊。
- 檔案的後設資料 :許可權(rwx)與屬性(擁有者、群組、時間引數、大小等)
- 檔案的資料:實際記錄檔案的內容 若檔案太大時,會佔用多個block
- 檔案系統的整體資訊:inode/block的總量、使用量、剩餘量, 以及檔案系統的格式與相關資訊等
inode | block | superblock |
---|---|---|
記錄檔案的後設資料 | 記錄檔案的資料 | 記錄檔案系統的整體資訊 |
圖示:
檔案使用者和使用者組
使用者:相當於賬號,例如root(超管使用者)
使用者組:某些具有相同屬性的賬號的集合
- 使用者分為系統使用者和普通使用者:
- uid在[0 - 999] 之間的使用者為系統使用者,一般用在啟動程式上,一般不需要登入系統,root不一定為超級管理員,uid=0的為超管
- uid在[1000+]的使用者為普通使用者,一般用在登入上
-
命令1:
-
新增使用者:useradd [使用者]
-
引數: -g :指定
存在
使用者組 -r :建立一個系統使用者
-M :不建立家目錄
-u :指定建立使用者ID
-
-
刪除使用者:userdel -r [使用者]
-
相關檔案:/etc/passwd
-
-
命令2:
- 新增使用者組:groupadd [組名]
- 引數 -g:指定使用者組的ID
- 刪除使用者組:groupdel [組名]
- 修改使用者組:usermod -g [組名] [使用者名稱]
- 相關檔案:/etc/group
- 新增使用者組:groupadd [組名]
-
命令3:id [使用者名稱] / [組名]
-
使用者檔案操作
# 檢視使用者詳情檔案
[root@localhost mail]# useradd hammer
[root@localhost mail]# cat /etc/passwd
# 格式如下
hammer:x:1000:1000:[使用者簡介]:/home/hammer:/bin/bash
使用者名稱 :hammer
密碼佔位符 :x
1000 :userid
1000 :組id
/home/hammer :家目錄
/bin/bash :預設的解析器
# 預設的解析器為bash
# 解析器的種類 (可以修改)
bash / sh / zsh
# sh和bash解析器切換
/bin/bash
/bin/sh
切換使用者
su - [使用者名稱]
su [使用者名稱]
# 在已存在的使用者組內新增使用者
# 通過指定組名新增
[root@localhost mail]# id hammer
uid=1000(hammer) gid=1000(hammer) groups=1000(hammer)
[root@localhost mail]# useradd wang -g hammer
[root@localhost mail]# id wang
uid=1001(wang) gid=1000(hammer) groups=1000(hammer)
# 通過指定組id新增
[root@localhost mail]# useradd -g li 1000
[root@localhost mail]# id li
uid=1002(li) gid=1000(hammer) groups=1000(hammer)
- 使用者組操作
[root@localhost mail]# groupadd hammer
[root@localhost mail]# cat /etc/group
hammer:x:1000:
hammer :組名
x :密碼佔位符
1000 :組id
使用者相關檔案
- 使用者的特徵資訊:/etc/passwd (掌握檔案各列資訊)
- 使用者的密碼資訊:/etc/shadow
- 使用者組特徵資訊:/etc/group
- 使用者組密碼資訊:/etc/gshadow
- 使用者家目錄預設隱藏檔案:/etc/skel/
【待續】