linux文件和目錄的屬性詳解

1.Linux文件

#概述

#1.linux裏一切皆爲文件
#2.Linux系統中的文件或目錄的屬性主要包括:inode(索引節點)、文件類型、權限屬性、鏈接數、所屬用戶和用戶組、最近修改時間等內容

 

#例如:執行ls -lhi ,會出現10列內容

[root@cots3 ~]# ls -lhi
total 28K
33865597 -rw-r--r--  1 root root  104 Feb 29 09:43 1.txt
33865598 -rw-r--r--  1 root root   13 Feb 29 09:44 2.txt
33619589 -rwxr-xr-x  1 root root  187 Mar  2 23:44 3.sh

#10列內容講解

第一列:inode索引節點編號(唯一的,像人的身份證)
第二列:文件類型及權限(共10個字符,第一字符爲類型,後9個爲文件權限)
第三列:硬鏈接數
第四列:文件或目錄所屬的用戶
第五列:文件或目錄所屬的組
第六列:文件或目錄的大小
第七、八、九列:時間戳
第十列:實際的文件或目錄名

#上圖

 

2.文件屬性詳細講解

2.1索引節點:inode

#概述

#1.indoe,中文意思是索引節點(index node)。在每個Linux存儲設置或存儲設備的分區被格式化爲ext4文件系統之後,一般會生成兩個部分,第一部分時inode,第二部分時block

#
2.block是真正用來存儲實際數據的,例照片,視頻等普通文件數據 inode是用來存儲這些數據的屬性信息(也就是ls -l的結果),inode屬性信息包括不限於文件大小、屬主(用戶)、歸屬的用戶組、文件權限、文件類型、修改時間,但是inode裏面不包含文件名
#
3.inode除了記錄文件屬性的信息外,還會爲每個文件信息索引,操作系統就會根據inode的值最快的找到相對應的文件實體

 

#讀文件的過程

文件名>inode>block
#讀文件的時候首先找到文件名,然後找到文件的inode,文件許可後就可以看block數據了

#例子:

# 比如一本書,整本書就相當於一塊磁盤或分區,書的前幾頁目錄就相當於inode。每一頁的文字、圖片相當於一個block

 

#擴展:Linux組成

#Linux文件系統由三分部組成:文件名,inode,block(真正存數據)  

 

#使用stat命令查看inode信息

#stat:顯示文件和文件系統狀態

[root@cots3 ~]# stat /etc/passwd
  File: ‘/etc/passwd’
  Size: 1032          Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 17042355    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-03-04 03:37:21.549000201 -0500
Modify: 2020-02-29 20:50:57.126146678 -0500
Change: 2020-02-29 20:50:57.126146678 -0500
 Birth: -

#查看目錄的inode號

[root@cots3 ~]# ls -di /etc/
16777281 /etc/

 

#inode的大小

#inode也會消耗硬盤空間,所以硬盤格式化的時候,操作系統自動將硬盤分成兩個區域

一個是數據區,存放文件數據;另一個是inode區(inode table),存放inode所包含的信息

 

#查看磁盤空間是否滿了,由inode是否滿了和block是否滿了決定的,任何一個滿了,都無法存放東西

#磁盤滿的特徵(no space on device left)

 

#查看每個硬盤分區的inode總數和已經使用的數量,可以使用df命令

[root@cots3 ~]# df -i
Filesystem               Inodes IUsed   IFree IUse% Mounted on
/dev/mapper/centos-root 8910848 33678 8877170    1% /
devtmpfs                 230105   396  229709    1% /dev
tmpfs                    233163     1  233162    1% /dev/shm
tmpfs                    233163   723  232440    1% /run
tmpfs                    233163    16  233147    1% /sys/fs/cgroup
/dev/sda1                524288   327  523961    1% /boot
tmpfs                    233163     1  233162    1% /run/user/0

#查看磁盤的使用量

[root@cots3 ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   17G  2.2G   15G  13% /
devtmpfs                 899M     0  899M   0% /dev
tmpfs                    911M     0  911M   0% /dev/shm
tmpfs                    911M  9.5M  902M   2% /run
tmpfs                    911M     0  911M   0% /sys/fs/cgroup
/dev/sda1               1014M  142M  873M  14% /boot
tmpfs                    183M     0  183M   0% /run/user/0

 

#擴展:linux中ctime,mtime,atime的區別

ctime: 改變時間(change time)
mtime:修改時間(modification time)
改變和修改之間的區別在於是改文件的屬性還是更改它的內容。chmod a-w myfile,那麼這是一個改變
  echo foo >> myfile,那麼這是一個修改
改變是文件的索引節點發生了改變;修改是文本本身的內容發生了變化

atime: 訪問時間(access time)
訪問時間是文件最後一次被讀取的時間。因此閱讀一個文件會更新它的訪問時間,但是它的改變時間和修改時間並沒有變

ls -lc filename   列出文件的ctime
ls -lu filename   列出文件atime
ls -l  fimename   列出文件的mtime

 

#inode和block的小結

有關inode的小結
      1、磁盤被分區並格式化爲ext4文件系統後會生成一定數量的inode和block
      2、inode稱爲索引節點,它的作用是存放文件的屬性信息以及作爲文件的索引(指向文件的實體)
      3、ext3/ext4文件系統的block存放的是文件的是實際內容
      4、inode是磁盤上的一塊存儲空間,非啓動分區inode默認大小256字節
      5、inode的表現是形式一串數字,不同的文件對應的inode(一串數字)在文件系統裏是唯一的
      6、inode節點號相同的文件,互爲硬鏈接文件,可以認爲是一個文件的不同入口
      7、ext3/ext4文件系統下,一個文件被創建後至少要佔用一個inode和一個block
      8、ext3/ext4文件系統下,正常一個文件佔用且只能佔用一個inode(相當於人和身份證)
      9、block是用來存儲實際數據的,每個block的大小一般有1K、2K、4K幾種,其中引導分區等爲1K,其他普通分區多爲4K
     10、查看inode的大小和總量: 
     11、查看inode的總量和使用量命令 df -i
     12、查看文件的inode信息方法
     13、如何生成及指定inode大小
                   格式化命令:mkfs.ext4 -b 2048 -l 256 /dev/sdb

有關block的知識小結
      1、磁盤讀取數據是按block爲單位讀取的
      2、一個文件可能佔用多個block,但是每讀取一個block就會消耗一次磁盤I/O
      3、如果要提升磁盤IO性能,那麼就要儘可能一次性讀取數據儘量的多
      4、一個block只能存放一個文件的內容,無論內容有多小,如果block默認是4K大小,那麼存放一個1K的文件,剩餘3K就不能存放別的文件,只能浪費了
      5、block並非越大越好,block太大對於存放小文件就會浪費磁盤空間,例如:1000K的文件,block大小爲4K,佔用250個Block,如果block默認爲1K,則需要佔1000個block,訪問效率誰更高? 當然是4K那個。消耗IO分別爲250和1000次
      6、根據業務需求,確定默認的block大小,如果是大文件(大於16K) 一般設置block大一點,小文件(小於1K)一般設置block小一點
       7、block太大,例如4K,文件都是0.1K的,太浪費磁盤空間,但是訪問性能高
       8、block太小,例如1K,文件都是1000K的,消耗大量磁盤IO
       9、block大小設置也是格式化分區時候確定的,命令mkfs.ext4 -b 2048 -l 256 /dev/sdb (-b 是block大小,-i是inode大小)
       10、一般企業裏文件都會比較大,(一般大於4K).block設置大一些會提升磁盤訪問效率
      11、ext3/ext4文件系統,一般設置爲4K   
View Code

 

2.2.文件類型

#概述: 在linux系統中,可以說一切(包括目錄、普通文件、設備文件等)皆爲文件。文件類型包含有普通文件、目錄、字符設備文件、塊設備文件、符號鏈接文件、管道文件等等

 

#在ls -l 顯示文件屬性內容後,第一列的第一個字符就是用來區分文件類型的

 

 #類型種類

d(directory) :    #表示一個目錄
-(regular file):  #表示一個普通文件
l(link):           #表示一個符合鏈接文件
b(block):         #表示塊設備和其他外圍設備,是特殊類型的文件
c(character):     #表示字符設備文件
s(socket):        #表示socket文件
p(name pipe):     #表示管道文件

#查找文件類型參數命令 find /-type b/p/c

#例子:

#查找管道文件
[root@cots3 ~]# find / -type p
/run/dmeventd-client
/run/dmeventd-server
/run/systemd/inhibit/1.ref
/run/systemd/sessions/1.ref
/run/systemd/initctl/fifo
#查找塊設備文件
[root@cots3 ~]# find / -type b
/dev/dm-1
/dev/dm-0
/dev/sr0
/dev/sda2
/dev/sda1
/dev/sda

 

#普通文件(regular file)

[root@cots3 ~]# ls -l 1.txt 
-rw-r--r-- 1 root root 104 Feb 29 09:43 1.txt

#可以通過ls -l來查看hosts的屬性,可以看到第一列內容-rw-r--r--,值得注意的是第一個符號是-(英文字符減號),在linux中,以這樣的字符開頭的文件就表示普通文件
這些文件一般都是用相關的應用程序或系統命令創建。比如touch、cp、tar、echo、cat、>、>> 等工具命令。普通文件的刪除方式可以使用rm命令

 

#普通文件(regular file):第一個屬性爲“-”, 按照文件內容,又大略可以分爲 :

1、純文本文件(asell ):文件內容可以直接讀到數據,例如:字母、數字等,可以用cat命令讀文件,比如配置文件幾乎都是這種類型的
2、二進制文件(binary):linux中的命令程序就是屬於這種格式。例如cat命令就是一個二進制文件
3、數據格式文件(data):有些程序在運行的過程中會讀取某些特定格式的文件,那些特定格式的文件可以被稱爲數據文件

 

#數據格式的例子:
例如linux在用戶登錄時,都會將登陸的數據記錄在/var/log/wtmp(last命令的數據庫文件)那個文件內,該文件是一個數據文件,通過last命令讀出來(last 查看用戶登錄信息)。cat命令會讀出亂碼,因爲他屬於一種特殊格式的文件。lastlog(/var/log/lastlog)

 

 

#兩圖命令講解
  last:查看用戶登錄信息 。 /var/log/wtmp 數據文件
  lastlog:顯示最近登陸的用戶信息。 /var/log/lsatlog數控文件

 

#字符設備或塊設備文件
#如果進入/dev/目錄,列一下文件。會看到類似如下的內容:

[root@cots3 ~]# ls -la /dev/tty
crw-rw-rw- 1 root tty 5, 0 Mar  4 22:07 /dev/tty

可以看到/dev/tty的屬性是crw-rw-rw-。注意前面第一個字符是c,這表示字符設備文件。字符設備就是串行端口的接口設備

 

#再看下面這個

[root@cots3 ~]# ls -la /dev/sda
brw-rw---- 1 root disk 8, 0 Mar  4 22:07 /dev/sda

可以看到/dev/sda的屬性brw-rw-----,注意前面的第一個字符是b。這表示塊設備,塊設備就是存儲數據供系統及程序訪問的接口設備。如硬盤、光驅等都屬於塊設備

創建一個字符設備
mknod oldbiy c 5 1
c 指字符設備
5 是該設備在majorh中定義的標記
1 表示第一個子設備

 

#鏈接文件

find /etc/ -type l | xargs ls -l 查看/etc下的鏈接文件

 2.3.鏈接數

在linux系統中,鏈接可分爲兩種:
  一種爲硬鏈接(hard link),另一種爲軟鏈接或符號鏈接(symblic link or soft link)。
  ln這個命令就是創建鏈接文件的,在默認不帶參數的情況下,執行ln命令創建的是硬鏈接。
  如果使用ln -s創建鏈接則爲軟鏈接

#創建的格式

硬鏈接:ln 源文件 目標文件
軟鏈接:ln -s 源文件 目標文件 (目標文件不能事先存在)

#硬鏈接

定義:
    1、 硬鏈接是指通過索引節點(inode)來進行鏈接。
    2、在linux文件系統中,多個文件名指向同一個索引節點(inode)是正常且允許的。這種情況的文件就稱爲硬鏈接。
         提示:硬鏈接文件就相當於文件的另一個入口,另一個通道。
    3、硬鏈接的作用之一:
         是允許一個文件擁有多個有效路徑名(多個入口),這樣用戶就可以建立硬鏈接到重要的文件,以防止“誤刪”源數據)。
    4、爲什麼一個文件建立了硬鏈接就會防止數據誤刪呢?
        因爲文件系統(ext2)的原理是,
         只要文件的索引節點(index inode)還有一個以上的硬鏈接,只刪除其中一個硬鏈接(即僅僅刪除了該文件的鏈接指向)。並不影響索引節點本身和其它的鏈接(即數據文件實體並未被刪除),
         只有當文件的最後一個鏈接被刪除後,那個文件纔是被刪掉了

#硬鏈接的創建

[root@cots3 ~]# ln 1.txt 11.txt
[root@cots3 ~]# ls -lhi 1.txt 11.txt 
33865597 -rw-r--r-- 2 root root 104 Feb 29 09:43 11.txt
33865597 -rw-r--r-- 2 root root 104 Feb 29 09:43 1.txt

#硬鏈接知識總結

    1、具有相同inode節點號的多個文件是互爲硬鏈接文件
    2、刪除硬鏈接文件或者源文件任意之一,文件實體並未被刪除
    3、只有刪除了源文件及所有對應的硬鏈接文件,文件實體纔會被刪除
    4、當所有的硬鏈接文件及源文件被刪除後,在存放新的數據會佔用這個文件的空間,或者磁盤fsck檢查的時候,刪除的數據也會被系統回收
    5、硬鏈接文件就是文件的另一個入口,另一個通道(相當於教室的前門後門一樣)
    6、可以通過給文件設置硬鏈接文件,來防止重要文件被刪除
    7、通過執行命令“ln 源文件 硬鏈接文件”。即可完成創建硬鏈接
    8、硬鏈接是普通文件,因此可以用rm命令刪除
    9、對於靜態文件(沒有進程正調用的文件)來講,當對應硬鏈接數爲0(i_link),文件就被刪除,i_link的查看方法(ls -l 結果的第三列就是)
    10、創建時,不能跨分區
View Code

 

#軟鏈接

軟鏈接(soft link)也稱爲符號鏈接(symbolic link)。
linux裏的軟鏈接文件就類似於window系統中的快捷方式,
linux裏的軟鏈接文件實際上是一個特殊的文件,文件類型是l。

#軟鏈接的創建

[root@cots3 ~]# ln -s /tools/apache2.2.17/ /tools/apache
[root@cots3 ~]# ls -ld /tools/apache
lrwxrwxrwx 1 root root 20 Mar  5 00:00 /tools/apache -> /tools/apache2.2.17/

#軟鏈接知識總結

       1、軟鏈接類似window的快捷方式
       2、軟鏈接類似於一個文本文件,裏面存放的是源文件的路徑,指向源文件實體
       3、刪除源文件,軟鏈接文件依然存在,但是無法訪問指向的源文件路徑內容了
       4、失效的時候一般是白字紅底閃爍提示
       5、執行命令 "ln -s 源文件 軟鏈接文件",即可完成創建軟鏈接(目標不能存在)
       6、軟鏈接和源文件是不同類型的文件,也是不同的文件,inode好也不相同
       7、刪除軟鏈接文件的文件類型爲(l),可以用rm命令刪除
View Code

 

#擴展:Linux下文件刪除的原理

Linux是link的數量誺控制文件刪除的,只有當一個文件不存在任何link的時候,文件纔會被刪除,每個文件都有兩個link計數器:i_count和i_link

2.4.用戶和組

#linux多用戶多任務介紹:linux/unix是一個多用戶、多任務的操作系統,
#linux系統中用戶角色劃分:

linux系統中用戶是分角色的,對linux系統來說,用戶的角色是通過UID和GID識別的,特別是UID,在linux系統運維工作中,一個UID是唯一標識一個系統用戶的賬號(相當於我們的身份證)。
用戶名相當於我們的名字 UID (User ldentify) 中文用戶ID,相當於我們的身份證,在系統中是唯一的 GID (Group ldentify)中文組ID,相當於家庭或者學校

#用戶

#當我們使用linux時,需要以一個用戶的身份登入,一個進程也需要以一個用戶的身份運行,
 用戶限制使用者或進程可以使用、不可以使用哪些資源

用戶ID爲32位,從0開始,但是爲了和老式系統兼容 ,用戶ID限制在60000以下
用戶分爲以下三種:
-root用戶 (ID爲0的用戶爲root用戶) -系統用戶 (1-499-普通用戶 (500以上) 權限很小
系統中的文件都有一個所屬用戶及所屬組 使用id命令都可以顯示當前用戶的信息 使用passwd命令可以修改當前用戶密碼

 查看登陸的用戶
  命令whoami顯示當前用戶
  命令who顯示有哪些用戶已經登陸系統
  命令w顯示有哪些用戶已經登陸並且在幹什麼

 

相關文件

/ect/passwd -保存用戶信息
/ect/shadow -保存用戶密碼
/ect/group -保存組信息
/etc/gshadow -保存組的密碼信息

#/etc/passwd中每個字段的作用

 #/etc/shadow結構

 #創建、修改、刪除用戶

創建一個用戶
命令useradd用以創建一個新用戶
useradd+名字(如nash su)

這個命令會執行以下操作:
1.在/etc/passwd中添加用戶信息
2.如果使用passwd命令創建密碼,則將密碼加密保存在etc/shadow中
3.爲用戶建立一個新的家目錄/home/nash su
4.將/ect/skel中的文件複製到用戶的家目錄中
5.建立一個與用戶用戶名相同的組,新建用戶默認屬於這個同名組

命令useradd支持以下參數:
-d  家目錄
-s  登陸shell
-u  user id
g   主族
-D  附屬組(最多31個,用逗號分隔)
也可以通過直接修改/etc/passwd 的方式實現,但是不建議


修改用戶信息
命令usermod用來修改用戶信息
usermod+參數+你要修改的東西
usermod 參數  username

命令usermod支持以下參數
-l  新用戶名
-u 新userid
-d 用戶家目錄位置
-g 用戶所屬主組
-G 用戶所屬附屬組
-L 鎖定用戶使其不能登陸
-U 解除鎖定

刪除用戶
命令userdel用以刪除指定用戶:
userdel nash su     (保留用戶的家目錄)
userdel -r nash su   (同時刪除用戶的家目錄)
del是delete的簡寫
批量創建用戶:
     for i in{1..50}
    do
       useradd user$i
 done 
View Code

#用戶的相關文件

/etc/skel
/etc/login.defs 
/etc/default/useradd

#用戶組

幾乎所有操作系統都有組的概念,通過組,我們可以更加方便的歸類、管理用戶。一般來講,我們使用部門、職能或地理區域的分類方式來創建使用組。
一每個組有一個組ID
二.組信息保存在/etc/group中
三.每個用戶擁有一個主組,同時還可以擁有最多31個附屬組

創建、修改、刪除組
命令groupadd用以創建組:
      groupadd+組名
命令groupmod用以修改組信息:
      groupmod -n newname 原來的組name     修改組名
      groupmod -g newGid   oldGid           修改組ID
命令groupdel用以刪除組:
      groupdel +組名

2.5.文件大小

#給1.txt創建一個軟鏈接
[root@cots3 ~]# ln -s  1.txt aa.txt
[root@cots3 ~]# ls -l aa.txt 
lrwxrwxrwx 1 root root 5 Mar  4 23:29 aa.txt -> 1.txt

#提示:創建軟鏈接的時候,文件的大小不一樣

2.6.時間戳

#7、8、9三列是時間(默認是修改時間)

modify 修改 對應的是 -mtime 一般是修改文件內容時候改變
change 改變時間 -ctime 文件屬性改變
access 訪問時間 -atime 訪問文件內容時候改變

#演:時間的變化

[root@cots3 ~]# touch guo.txt
[root@cots3 ~]# stat guo.txt 
  File: ‘guo.txt’
  Size: 0             Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d    Inode: 33574991    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-03-04 23:26:28.523104035 -0500
Modify: 2020-03-04 23:26:28.523104035 -0500    #開始時間
Change: 2020-03-04 23:26:28.523104035 -0500    #開始時間
 Birth: -
[root@cots3 ~]# echo aa > guo.txt 
[root@cots3 ~]# stat guo.txt 
  File: ‘guo.txt’
  Size: 3             Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 33574991    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-03-04 23:26:28.523104035 -0500
Modify: 2020-03-04 23:26:41.455206922 -0500      #時間變了
Change: 2020-03-04 23:26:41.455206922 -0500      #時間變了
 Birth: -

#如果想要格式化屬性時間的話就使用

[root@cots3 ~]# ls -l --time-style=long-iso 1.txt 
-rw-r--r-- 1 root root 104 2020-02-29 09:43 1.txt

2.7.文件名

#文件名不在inode裏,而是在上級目錄的Block裏

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章