Linux 檔案屬性及詳細操作

HammerZe發表於2021-12-14

Linux 檔案屬性

image

檔案屬性資訊組成

圖示如下:

image

  • 檔案索引屬性資訊-inode
  • 檔案型別許可權資訊
  • 檔案連結屬性資訊-硬連結個數
  • 檔案屬主屬性資訊-檔案所有者
  • 檔案屬組屬性資訊-檔案所屬組
  • 檔案大小屬性資訊-最小單位位元組(大小、kb)
  • 檔案修改時間資訊
  • 檔名稱資訊說明-檔名

檔案屬性概念說明

  1. inode 編號

    Linux系統中檔案的唯一編號,就相當於身份證號

image


  1. 常見檔案型別
檔案型別 對應字元
普通檔案 f/-
資料夾 d
連結檔案 l
裝置檔案 b:磁碟檔案 / c:字元檔案
套接字檔案(socket) s
管道檔案 p

圖示如下:

image


  • 檔案型別檢視方法

    file 檔案資訊:

    • 配置檔案---.conf
    • 日誌檔案---.log
    • 指令碼檔案---.sh
    • 指令碼檔案---.py

    注意不能以顏色判斷檔案型別,如果關閉顏色引數呢?

image

image

這樣一種顏色的時候在檔案多的時候很難判斷是什麼型別!


檔案軟硬連結說明

  • 命令:ln
    • 引數:-s --- 軟連線
    • 不加引數建立的是硬連結
  • 格式1:ln [原檔案路徑] [硬連結檔案路徑]
  • 格式2:ln -s [原檔案路徑] [軟連結檔案路徑]

圖示:

image


硬連結

硬連結好比商場的出口,商場有多個出口,就相當於多個介面去操作檔案,硬連結直接指向index node編號,當檔案修改時候,硬連結產生的檔案也修改,他們的inode編號相同

# 建立硬連結
[root@localhost ~]# ln /root/test /root/test01

image


ps:修改原檔案或者硬連結產生的檔案都是對原檔案的修改!


軟連結

相當於Windows中的快捷方式,主要用來指向對應檔案的路徑。

# 建立軟連線
[root@localhost ~]# ln -s /root/test /root/test02

image


驗證軟連結是指向路徑,刪除原檔案觀察

[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

image


補充知識

  • 如何真正刪除一個檔案:

  • 刪除檔案的底層邏輯:
    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

讀取檔案原理圖

  1. 檔案首先儲存在硬碟上,檔案最小的單位是塊(block),塊由扇區(sector)組成,塊一般大小為4kb,連續8個扇區組成一個塊
  2. 硬碟的最小儲存單位扇區(sector),每個扇區儲存512位元組
  3. 作業系統讀取硬碟資料:一次性讀取一塊資料
  • 讀取檔案流程

    以讀取/etc/passwd檔案內容為例

image

Linux檔案系統

Linux檔案系統可以簡單分為inode tabledata area,inode table中存有inode,檔案系統通常會將檔案的許可權與屬性放置到inode中,至於實際內容則放置到data block區塊中,還有一個超級區塊(superblock)會記錄整個檔案系統的整體資訊。

  • 檔案的後設資料 :許可權(rwx)與屬性(擁有者、群組、時間引數、大小等)
  • 檔案的資料:實際記錄檔案的內容 若檔案太大時,會佔用多個block
  • 檔案系統的整體資訊:inode/block的總量使用量剩餘量, 以及檔案系統的格式與相關資訊等
inode block superblock
記錄檔案的後設資料 記錄檔案的資料 記錄檔案系統的整體資訊

圖示:

image


檔案使用者和使用者組

使用者:相當於賬號,例如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
  • 命令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/

image


【待續】

相關文章