高級Linux運維工程師養成記-文件節點表和連結文件

2020-09-05 ittimeline


文件節點表結構和連結文件


文件元數據和節點表結構

inode表結構

之前在安裝作業系統時,將一塊硬碟分成了四個分區,每個分區有自己的編號(sda1,sda2,sda3,sda4,sda5)和目錄結構

[root@centos7 data] ls -i76 file10.log 68 file2.log 70 file4.log 72 file6.log 74 file8.log67 file1.log 69 file3.log 71 file5.log 73 file7.log 75 file9.log

每個分區的節點編號也是有限制的,例如/boot分區的可用節點是1048236

使用df -i 加分區路徑 可以查看分區的最大inode數

[root@centos7 data] cd /boot[root@centos7 boot] df -i /bootFilesystem Inodes IUsed IFree IUse% Mounted on/dev/sda1 1048576 341 1048235 1% /boot

如果磁碟的節點編號耗盡,那麼即使磁碟空間沒有滿,也無法再使用。

[root@centos7 boot] cd testdir/[root@centos7 testdir] echo file{1..130761}|xargs touchtouch: cannot touch &39;: No space left on device

本質原因是文件節點編號耗盡

[root@centos7 testdir] rm -rf /boot/testdir[root@centos7 boot] ll -i /datatotal 0140 -rw-r--r--. 1 root root 0 Aug 9 12:40 file10.log131 -rw-r--r--. 1 root root 0 Aug 9 12:40 file1.log132 -rw-r--r--. 1 root root 0 Aug 9 12:40 file2.log133 -rw-r--r--. 1 root root 0 Aug 9 12:40 file3.log134 -rw-r--r--. 1 root root 0 Aug 9 12:40 file4.log135 -rw-r--r--. 1 root root 0 Aug 9 12:40 file5.log136 -rw-r--r--. 1 root root 0 Aug 9 12:40 file6.log137 -rw-r--r--. 1 root root 0 Aug 9 12:40 file7.log138 -rw-r--r--. 1 root root 0 Aug 9 12:40 file8.log139 -rw-r--r--. 1 root root 0 Aug 9 12:40 file9.log

當在同一個分區下創建一個硬連結後連結數會增加

file1.log和file1.log.link的連結數都是2,硬連結的本質是同一個文件有多個文件名

[root@centos8 data] ll !*ll file1.log file1.log.link-rw-r--r--. 2 root root 0 Aug 9 12:40 file1.log-rw-r--r--. 2 root root 0 Aug 9 12:40 file1.log.link

當刪除file1.log時,硬連結文件不會受影響,但是連結數會遞減

[root@centos8 data] ll|grep file1.log.link -rw-r--r--. 1 root root 0 Aug 9 12:40 file1.log.link

文件夾不能創建硬連結

mv和inode

如果mv命令的目標和源在相同的文件系統分區時,用新的文件名創建新的目錄項,刪除就目錄條目對應舊的文件名,不影響inode表(除了時間戳)或磁碟上的數據位置:沒有數據被移動。

[root@centos7 data] ls -i test.txt 67 test.txt[root@centos7 data] mv test.txt parent/child/[root@centos7 data] ls -i parent/child/test.txt 67 parent/child/test.txt[root@centos7 data] ls -i /boot/test.txt 113 /boot/test.txt

軟連結和硬連結

文件連結類型-硬連結

硬連結實現一個文件可以有多個文件名

文件連結類型分為硬連結和軟連結,硬連結在使用過程中有些限制,只能在同一個分區的不同目錄下針對文件創建硬連結。
以/etc目錄下的fstab文件在/data/d1/d2/d3目錄下創建一個硬連結,然後查看兩個文件的詳細信息,發現文件完全一致。

ln即link的縮寫,用於創建連結,默認是創建硬連結。

創建硬連結時,目錄必須存在

[root@centos7 data] mkdir -p d1/d2/d3[root@centos7 data] ll !*ll f1 d1/d2/d3/f1-rw-r--r--. 2 root root 595 Aug 30 17:57 d1/d2/d3/f1-rw-r--r--. 2 root root 595 Aug 30 17:57 f1

既然硬連結是一個文件有多個文件名,那麼現在修改f1的內容

然後再查看/data/f1和/data/d1/d2/d3/f1的文件大小,發現大小一致

[root@centos7 data] rm f1rm: remove regular file 『f1』? y[root@centos7 data] Created by anaconda on Tue Aug 25 14:08:19 2020 Accessible filesystems, by reference, are maintained under &39; this si modify conentUUID=15c0ca95-1555-428d-a209-4af18a8e7dce / xfs defaults 0 0UUID=4623526f-cc6c-4bb9-bd20-728b2808d737 /boot xfs defaults 0 0UUID=ee8afba5-4d9b-4133-8861-863aa03e0d2d /data xfs defaults 0 0UUID=4e13f43c-57ae-4fa2-9640-54f4b92fb920 swap swap defaults 0 0[root@centos7 data] mkdir -p file1/fiel2/file3[root@centos7 data] ln f1 file1/fiel2/file3/f1[root@centos7 data] ln f1 /opt/f1ln: failed to create hard link 『/opt/f1』 => 『f1』: Invalid cross-device link

文件夾不能創建硬連結,因為可能發生文件夾嵌套


[root@centos7 data] rm -rf *[root@centos7 data] lltotal 4-rw-r--r--. 1 root root 595 Aug 30 19:03 f1[root@centos7 data] ll -itotal 467 -rw-r--r--. 1 root root 595 Aug 30 19:03 f168 lrwxrwxrwx. 1 root root 2 Aug 30 19:04 f1.link -> f1

如果刪除/data目錄下的f1文件,那麼f1.link指向的文件會報錯


f1.link



[root@centos7 data] lltotal 0lrwxrwxrwx. 1 root root 2 Aug 30 19:04 f1.link -> f1

當訪問f1.link文件時,此時會提示找不到文件或者目錄

[root@centos7 data] cp /etc/fstab f1[root@centos7 data] rm -rf *[root@centos7 data] mkdir -p d1/d2[root@centos7 data] ll d1/d2/f1.link lrwxrwxrwx. 1 root root 2 Aug 30 18:48 d1/d2/f1.link -> f1

相對於當前工作目錄創建的軟連結是錯誤的

正確的姿勢應該是這樣的

[root@centos7 data] cp /etc/fstab f1[root@centos7 data] ln -s ../../f1 d1/d2/f1.link[root@centos7 data] rm -rf *[root@centos7 data] ln -s d1 d1.link[root@centos7 data] ln -s /data/f1 /opt/f1.link[root@centos7 data] cd /usr/local/[root@centos7 local] ln -s mysql8.0.12/ mysql[root@centos7 local] rm -rf mysql[root@centos7 local] ln -s mysql8.0.13 mysql[root@centos7 local] touch mysql8.0.12/f1.txt[root@centos7 local] lltotal 0drwxr-xr-x. 2 root root 6 Apr 11 2018 bindrwxr-xr-x. 2 root root 6 Apr 11 2018 etcdrwxr-xr-x. 2 root root 6 Apr 11 2018 gamesdrwxr-xr-x. 2 root root 6 Apr 11 2018 includedrwxr-xr-x. 2 root root 6 Apr 11 2018 libdrwxr-xr-x. 2 root root 6 Apr 11 2018 lib64drwxr-xr-x. 2 root root 6 Apr 11 2018 libexeclrwxrwxrwx. 1 root root 11 Aug 30 19:30 mysql -> mysql8.0.13drwxr-xr-x. 2 root root 33 Aug 30 19:33 mysql8.0.12drwxr-xr-x. 2 root root 20 Aug 30 19:33 mysql8.0.13drwxr-xr-x. 2 root root 6 Apr 11 2018 sbindrwxr-xr-x. 5 root root 49 Aug 25 14:08 sharedrwxr-xr-x. 2 root root 6 Apr 11 2018 src[root@centos7 local] ll mysql8.0.13/total 0

如果刪除軟連結,連結文件是目錄,並且目錄下包含文件,但是刪除軟連結時連結名後不加上/,則不會刪除軟連結指向目錄下的文件,而刪除的是軟連結本身

[root@centos7 local] ll mysql8.0.12/total 0-rw-r--r--. 1 root root 0 Aug 30 19:33 f1.txt[root@centos7 local] ll mysql8.0.12/total 0-rw-r--r--. 1 root root 0 Aug 30 19:33 f1.txt[root@centos7 local]# lltotal 0drwxr-xr-x. 2 root root 6 Apr 11 2018 bindrwxr-xr-x. 2 root root 6 Apr 11 2018 etcdrwxr-xr-x. 2 root root 6 Apr 11 2018 gamesdrwxr-xr-x. 2 root root 6 Apr 11 2018 includedrwxr-xr-x. 2 root root 6 Apr 11 2018 libdrwxr-xr-x. 2 root root 6 Apr 11 2018 lib64drwxr-xr-x. 2 root root 6 Apr 11 2018 libexecdrwxr-xr-x. 2 root root 20 Aug 30 19:41 mysql8.0.12drwxr-xr-x. 2 root root 6 Aug 30 19:34 mysql8.0.13drwxr-xr-x. 2 root root 6 Apr 11 2018 sbindrwxr-xr-x. 5 root root 49 Aug 25 14:08 sharedrwxr-xr-x. 2 root root 6 Apr 11 2018 src

Linux中每個文件夾都有.和..用於表示當前目錄和上級目錄,因此創建文件夾時默認的連結數是2。


面試題-軟連結和硬連結的區別

  1. 本質不同:硬連結是同一個文件多個不同的名字,而軟連結是不同的文件,節點編號不一樣
  2. 硬連結不支持分區創建,而軟連結支持跨分區創建
  3. 硬連結不支持針對目錄創建,而軟連結支持
  4. 硬連結節點編號一樣,軟連結節點編號不一樣
  5. 硬連結是平等的,而軟連結是依賴原始文件
  6. 連結數的增長數不一樣,硬連結創建時連結數會增長,而軟連結的連結數不會增長。
  7. 軟連結的原始文件路徑相對於軟連結的相對路徑麼,而硬連結的原始路徑相對於當前工作目錄的相對路徑
  8. 軟連結的文件類型是軟連結,而硬連結的文件類型和原始文件的類型一致
  9. 硬連結不支持文件夾,軟連結支持文件夾
  10. 刪除源文件後,硬連結只是連結數減1,但是連結文件訪問不受影響,軟連結的連結文件無法訪問

由於連結接局限性太多,因此日常運維使用的還是軟連結

相關焦點

  • 高級Linux運維工程師養成記-Linux文件系統目錄結構
    Linux系統中的目錄和文件都是呈倒置的樹形結構以.開頭的文件表示隱藏文件,路徑使用/(左斜線)分隔。文件名區分大小寫(是否大小寫敏感和作業系統無關,而是和作業系統的文件系統有關) ,例如opt和OPT是不同的概念文件名最長為255個字節,包括路徑在內文件名最長為4095個字節。
  • 高級Linux運維工程師養成記-技術大綱
    高級Linux運維工程師養成記作業系統內核以及系統進程管理網絡通訊與Linux系統網絡安全常見網絡服務以及小型網際網路架構運維自動化部署與自動化實戰MySQL企業級實戰與MySQL集群架構基於Nginx的Web網站架構LNMP及文件存儲LVS
  • 高級Linux運維工程師養成記-如何遠程連接Linux
    其中root是Linux的管理員帳戶,類似Windows的Administrator,在生產環境使用root帳號時需要小心操作,因為他有自殺的能力(rm -rf /),在高級Linux運維工程師養成記系列中,沒有特殊說明都是使用root用戶操作,因為普通用戶的權限忒小,可能在執行某些命令時沒有權限執行。
  • 跟光磊學Linux運維-深入淺出Linux文件系統
    首先在windows系統中創建一個文件,文件內容為高級Linux運維工程師養成記然後使用cat命令查看content-utf8文件,沒有亂碼[root@centos7 data]# cat content-utf8.txt 高級Linux運維工程師養成記[root
  • 高級Linux運維工程師養成記-安裝UbuntuServer
    Desktop上也可以安裝Ubuntu,CentOS,Windows10使用虛擬機來虛擬硬體,調用宿主機的硬體資源來安裝和使用但是因為高級Linux運維工程師養成記後期會運行大量的服務,因此宿主機的硬體配置儘量不低於Intel i9 CPU+32G內存+512G固態磁碟。
  • 高級Linux運維工程師養成記-Linux文件管理命令實戰
    Linux不區分文件後綴,例如ls和ls.txt都是可執行文件,ls.txt是ls重命名來的,而雖然後綴是.txt,依然可以使用ls.txt來查看文件信息使用file 查看/bin/ls.txt時,顯示輸出該文件是可執行文件[root@centos7 data] ls.txt test.txt test.txt
  • 高級Linux運維工程師養成記-計算機基礎之淺談作業系統
    作業系統(Operating System)是一個通用目的的軟體程序,提供了硬體驅動(CPU、內存、音效卡、顯卡、網卡、印表機)、進程管理、內存管理、網絡管理、安全管理、文件管理等通用功能提供給系統軟體和應用軟體使用。作業系統介於應用軟體和計算機硬體之間,給應用軟體提供開發和運行平臺,同時管理和調度硬體資源。
  • 高級Linux運維工程師養成記-Linux起源與哲學思想
    GNU組件主要包含處理文件(gawk)、操作文本、管理進程的工具以及shell,gcc編譯器等等常見的應用程式包含不同的圖形化界面(KDE,GNOME,XFCE),運行於桌面端的Firefox,Chrome和運行於服務端Nginx,MySQL等等。
  • 高級Linux運維工程師養成記-定製安裝CentOS8.2
    但是因為高級Linux運維工程師養成記後期會運行大量的服務,因此宿主機的硬體配置儘量不低於Intel i9 CPU+32G內存+512G固態磁碟。Linux下載阿里雲官方鏡像站提供了Linux發行版的鏡像下載而Linux運維的應用場景主要是基於
  • Linux就該這麼學 一名Linux運維工程師養成記
    它的主要特性:Linux文件一切皆文件、完全開源免費、支持多用戶和多任務、同時還支持多種架構平臺、可靠的安全性、良好的穩定性、具有強大的網絡功能、多樣圖形界面;近幾年Linux系統慢慢吸引了不少人,正是由於它的強大,支撐著巨大的項目,並不斷影響著大多數人的生活。
  • 我的linux運維養成記
    沒有步入到現在這個時代之前,根本沒有聽說過linux,直到現在,到處都是linux服務、運維以及知識。大部分公司用來服務的就是linux結合資料庫來進行運維服務的。所以學好linux還是大可用。為什麼會出現linux,有windows布局可以了麼?
  • 高級Linux運維工程師養成記-Bash Shell特性
    Shell也是一種高級程序設計語言,支持選擇結構,分支結構,條件判斷,可以編寫Shell腳本實現自動化運維。,需要掌握一些Bash Shell常用的快捷鍵來提高運維的效率。標準輸入(STDIN)和標準輸出(STDOUT)可以被重定向到指定的文件,而非默認的當前終端。
  • 高級Linux運維工程師養成記-Linux常用基本命令
    /proc/cpuinfo都可以查看cpu信息,和lscpu不同的是cat /proc/cpuinfo 按照每核顯示cpu信息Intel(R) Core(TM) i9-8950HK CPU @ 2.90GHz 表示CPU型號和主頻,x86_64表示架構,支持32位和64位。
  • linux目錄結構和文件屬性管理
    在這裡我們所介紹的目錄是在linux系統中常見的目錄,不同廠商的linux有所差異,有的版本中會出現有額外作用的目錄,這個就需要具體問題具體對待了。四、目錄和設備節點我們已經知道目錄是用來存放文件的,不同的目錄存放的文件作用不同,那麼我們來看下設備節點是什麼?
  • 淺談Linux系統運維工程師必備技能
    一、什麼是運維工程師 相信讀者們必定聽說過linux,也聽說過運維工程師。那麼運維工程師是個什麼概念呢?運維工程師面對的最大挑戰是大規模集群的管理問題,如何管理好幾十萬臺伺服器上的服務,同時保障服務的高可用性,是運維工程師面臨的最大挑戰。在一些規模較大的公司(比如:Google、FaceBook、百度、阿里、騰訊等),運維工程師和系統管理員是有一定的區別: 系統管理員:主要負責機房網絡、伺服器等硬體基礎設施的運行和維護。
  • 高級Linux運維工程師養成記-深入理解Linux命令
    Linux命令的執行過程當運維人員在終端上輸入命令並回車後,後臺運行的shell程序會查找該命令所對應的可執行程序或者代碼,並分析後提交給內核分配資源將其運行起來。Linux命令格式Linux命令由命令[選項][參數]三部分組成,其中命令的選項和參數都是可選的命令是別名、外部命令或者內部命令選項用於啟用或者關閉命令的某個或者某些功能,選項有短選項和長選項兩種
  • linux文件系統,文件概述
    linux中,一切皆文件文件的類型普通文件,沒有特殊功能的文件,普通文本文件,二進位可執行文件,音視頻,都是普通文件目錄文件,目錄也是一種文件,目錄文件裡面放其他文件連結文件,專指軟連接,相當於windows的快捷方式設備文件
  • 資深linux運維工程師的經驗分享
    打開APP 資深linux運維工程師的經驗分享 工程師吳畏 發表於 2018-09-27 10:59:00 linux運維發展常見的就是下面兩條路線
  • linux基礎命令(文件操作/文件權限)
    文件操作常用命令Linux是一個一切皆文件的作業系統,不管是普通的文件、目錄、套接字等,在Linux中都是以文件的方式對待,雖然他們的類型不同,但linux對其提供的是同一套操作界面。切換工作目錄cd 目標工作路徑註:目標工作路徑可為絕對路徑也可為相對路徑切換工作目錄eg.
  • Linux文件和目錄的10項屬性
    公眾號:老油條IT記文件和目錄10項屬性目錄1:索引節點:inode2:文件類型3:連結數4:用戶5:組6:文件大小7.8.9:時間戳10:文件名1.Linux文件1.linux裡一切皆為文件例如:執行ls -lhi ,會出現10列內容[root@cots3 ~]10列內容講解第一列:inode索引節點編號(唯一的,像人的身份證)第二列:文件類型及權限(共10個字符,第一字符為類型,後9個為文件權限)