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/
不使用useradd命令添加用戶
步驟如下:
# 添加用戶
vim /etc/passwd
test08:x:2001:2001:自建用戶:/home/test08:/bin/bash
# 添加組
vim /etc/group
test08:x:2001:
# 添加用戶密碼密碼
vim /etc/shadow
test08:$6h4j93wta/:18974:0:99999:7:::
# 添加用戶組密碼
vim /etc/gshadow
test08:!::
# 家目錄
mkdir test08
cp /etc/skel/.bash* /home/test08/
chown -R test08.test08 test08
chmod 700 test08/
【續:文件權限】