『壹』 Linux軟鏈接和硬鏈接的區別之ln命令詳解
1. 先來了解一下Linux數據是如何保存和查詢的
對操作系統來說,數據分為兩種:1. 用戶數據 (user data) 2.元數據 (metadata)。用戶數據就是保存和記錄文件的內容。比如一個1M的ppt文件,500K的txt文件。這都屬於用戶數據。這個文件總有屬性吧,比如大小、修改時間、訪問時間、創建時間、存儲的位置(文件所在的inode)、文件創建者等等信息。這些屬性信息或者理解為匯總信息,我們稱它為元數據。一句話,用戶數據是文件的真實內容,而元數據則是匯總信息。
在 Linux 中,元數據中的 inode 號(inode 號即索引節點號)才是文件的唯一標識而非文件名。文件名僅是為了方便人們的記憶和使用,系統或程序通過 inode 號尋找正確的文件數據塊。
2. 查看文件對應的inode號
134474678 latest.tar.gz
linux查看文件對應的inode號
可以看出latest.tar.gz這個文件, inode 號是134474678,Linux查找讀寫該文件時,以為個inode號碼為標識,而不是文件名。文件名類似於網站域名,僅僅是方便人類記憶。
也就是說, inode134474678有一個硬鏈接,它就是latest.tar.gz。
3. 根據inode號查找對應的文件
那麼,問題來了,系統上有沒有第二個文件,它的inode號碼也是13447467。
使用find查找一下:
查找結果如下:
/root/latest.tar.gz
/root/latest2.tar.gz
linux根據inode號查找對應的文件
硬碟上真的有第二個文件它的inode號碼也是134474678,像這種情況,我們認為inode134474678有兩個硬鏈接。當然,這是本文作者提前准備好的。
為解決文件的共享使用,Linux 系統引入了兩種鏈接:硬鏈接 (hard link) 與軟鏈接(又稱符號鏈接,即 soft link 或 symbolic link)。鏈接為 Linux 系統解決了文件的共享使用,還帶來了隱藏文件路徑、增加許可權安全及節省存儲等好處。
4. 確認硬鏈接的數量
查看一下文件latest.tar.gz
輸出結果如下:
-rwxr-xr-x. 2 root root 8743850 Oct 11 15:00 latest.tar.gz
請留意輸出的結果中的數字2,表示該文件存在2個硬鏈接。
正常情況下,一個inode只有一個鏈接,如下例
輸出結果:
-rw-r--r--. 1 root root 9 Nov 21 11:39 abc.txt
請留意輸出的結果中的數字1,表示該文件只存在1個硬鏈接,默認情況下,文件都是只有一個硬鏈接的。
5. 查看軟鏈接
再來看一個文件
lrwxrwxrwx. 1 root root 15 Sep 26 15:57 /dev/stdout -> /proc/self/fd/1
linux查看軟鏈接
我們發現,/dev/stdout實際上指向另一個文件/proc/self/fd/1,這就是軟鏈接。類似於Windows系統上的快捷方式。
6. 軟鏈接與硬鏈接的區別
6.1 軟鏈接特點
6.2 硬鏈接特點
ln鏈接符原理如下:
Linux ln鏈接符原理圖
7. 創建文件的鏈接
Linux ln命令是一個非常重要而且常用命令,它用於為文件或者目錄創建鏈接。
7.1 創建軟鏈接
創建一個文件,用於演示軟鏈接。
創建軟鏈接示例:
檢查結果:
輸出文件屬性
lrwxrwxrwx. 1 root root 8 Nov 26 17:48 soft123.txt -> soft.txt
linux創建軟鏈接
可以看出這個文件指向當前目錄soft.txt,配置成功。7.2 創建硬鏈接
創建一個文件,用於演示硬鏈接。
創建硬鏈接,沒有使用選項
檢查結果:
輸出文件屬性:
-rw-r--r--. 2 root root 0 Nov 26 17:47 hard123.txt
linux創建硬鏈接
留意以上輸出數字2,表明該文件有2個副本。
8. 總結
ln命令可以創建文件的副本,也可以創建軟鏈接。
『貳』 2-18 Linux中的連接文件 --- 軟鏈接
Linux中的軟鏈接類似於windows中的快捷方式。
創建方式:ln -s oldfile newfile。
例:文件軟鏈接 (目錄軟鏈接也是一樣的操作方式)。
1、tmp 目錄下創建一個 test.txt 文件。
2、ln -s test.txt test,為 test.txt 文件創建一個名為 test 的軟鏈接。
3、ll 查看詳情會發現有一個藍色的 test --> test.txt (test 指向 test.txt)。同時文件類型是 l 開頭,l 是指鏈接文件的意思。
4、對軟鏈接文件進行 vim 操作。輸入This is ln -s test. :wq保存並退出。
5、通過cat test 和 cat test.txt 查看內容。得出的結果都是一樣的。既軟鏈接 test 和 test.txt 已經建立關聯,對 test 操作等於對 test.txt 操作。
tips:軟鏈接特點。
1、可以對不存在的文件創建軟鏈接。
tmp 目錄下除了 test 和 test.txt 並沒有其他文件。
此時 ln -s abc.txt t1,為不存在的 abc.txt 文件創建一個 t1 的軟鏈接。t1 軟鏈接是可以創建 的,只是由於沒有真實存在的 abc.txt 文件。通過 ll 查看詳情,系統會在 abc.txt 處用紅色閃 爍高光發出提示,意指abc.txt文件不存在。
此時,tmp 目錄下新建一個 abc.txt 文件,t1 軟鏈接到 abc.txt 文件就會正常。不會再有紅色 提示。
2、可以對文件 或者 目錄創建軟鏈接,目錄創建軟鏈接和文件創建軟鏈接流程一樣。
3、刪除軟鏈接,不會影響它的指向文件。
vim t1:編輯 t1 軟鏈接,輸入1 t1 的內容保存退出。
刪除 t1 軟鏈接,tmp 目錄下已沒有軟鏈接指向 abc.txt 文件。
此時,cat abc.txt 文件可以查看內容,也可以 vim abc.txt 增加 2 abc.txt 內容。證實了,刪 除軟鏈接,不會影響它的指向文件。
4、刪除了指向文件,該軟鏈接將變為無效連接。
當 t1 軟鏈接指向實際文件 abc.txt 的時候,t1是可以對 abc.txt 進行增刪改查操作的。若 rm - rf abc.txt 刪除了實質性的 abc.txt 文件後,t1 將不能做任何操作。失去了實質性文件而存在 的軟鏈接等同於創建一個空的軟鏈接效果一樣。
『叄』 linux環境下通過軟鏈接變更mysql數據存儲路徑
想要改變mysql數據存儲路徑的想法最初是在生產伺服器上mysql的數據放到了系統盤上,導致系統盤滿額,沒有足夠的內存交換空間而死機。
將mysql數據存儲到其他目錄下有兩種方法,方法一修改my.cnf配置文件,不過經過筆者通過網上的配置資料嘗試總是不成功,環境是在centos7下操作的。後來想到一個簡單的方法,通過linux的軟鏈接將實際數據放到另外的目錄裡面就可以了。
操作系統是centos7
mysql是通過二進制包裡面的rpm方式安裝的。相當於全自動了。
先關閉mysql
默認情況下,rpm安裝好的mysql會將數據放置在 /var/lib/mysql 目錄當中,我們像將數據遷移到/mnt/data目錄當中在terminal當中輸入:
mv命令會直接將 /var/lib/mysql 文件夾直接剪切到 /mnt/data 目錄當中。
這時我們需要回到/var/lib目錄當中,
在這個目錄當中建立軟鏈接。
軟鏈接相當於windows裡面創建目錄快捷方式是一樣的,這個時候你應該可以看到mysql文件夾回到了 /var/lib 目錄當中,要進去查看一下mysql的路徑是否和my.cnf一致。
這時候我們再啟動mysql
以上我們就將數據遷移到其他目錄下,並且還沒有修改和變更my.cnf文件。
『肆』 Linux下怎麼使用軟鏈接解決目錄轉移的問題
linux中設置軟鏈接如下:
只要在ln後面加上選項 –s,軟鏈接就建立了
[[email protected] test]# ls -il
總計 0
1491138 -rw-r–r– 1 root root 48 07-14 14:17 file1
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2hand
[[email protected] test]# ln -s file1 file1soft
[[email protected] test]# ls -il
『伍』 五分鍾讓你明白linux的軟鏈接和硬鏈接的用法
什麼是軟鏈接和硬鏈接,很多人對這個概念比較模糊,這里幫助你明白他們之間的區別和用法。
為解決文件的共享使用,Linux 系統引入了兩種鏈接:硬鏈接 (hard link) 與軟鏈接(又稱符號鏈接,即 soft link 或 symbolic link)。
在 Linux 中,元數據中的 inode 號(inode 號即索引節點號)才是文件的唯一標識而非文件名,文件內容要通過inode 號來尋找,就像交通指示牌一樣,指示著數據找尋的方向。
軟鏈接可以理解成快捷方式,和原文件的inode號不一樣。它和windows下的快捷方式的作用是一樣的,軟鏈接數據塊中記錄的亦是相對路徑指向。
硬鏈接和原文件對應一個inode,就是對應一個文件,可以理解成一個文件有幾個別名.
下面這張圖表明了他們之間的區別了。
這二張圖詳細的給出這二個文件的異同處。
1,軟鏈接可以理解成快捷方式,也清楚知道原文件在哪兒。它和windows下的快捷方式的作用是一樣的,和windows一樣,刪除源文件,快捷方式也用不了。
2,硬鏈接可以說做了一個備份,但並沒有增加空間,因為文件就一個,這種可以防止源文件刪除後不能使用的問題,但也有局限性,不能對目錄和跨文件系統使用。
相信通過上面的說明,你已經明白了二者之間的區別和用途了。
『陸』 Linux文件系統中硬鏈接和軟鏈接的區別
鏈接和軟鏈接的區別
1.原理上:
硬鏈接(hard link):文件A是文件B的硬鏈接,則A的目錄項中的inode節點號與B的目錄項中的inode節點號相同,即一個inode節點對應兩個不同的文件名,兩個文件名指向同一個文件,A和B對文件系統來說是完全平等的。如果刪除了其中一個,對另外一個沒有影響。每增加一個文件名,inode節點上的鏈接數增加一,每刪除一個對應的文件名,inode節點上的鏈接數減一,直到為0,inode節點和對應的數據塊被回收。註:文件和文件名是不同的東西,rm A刪除的只是A這個文件名,而A對應的數據塊(文件)只有在inode節點鏈接數減少為0的時候才會被系統回收。
軟鏈接(soft link):A是B的軟鏈接(A和B都是文件名),A的目錄項中的inode節點號與B的目錄項中的inode節點號不相同,A和B指向的是兩個不同的inode,繼而指向兩塊不同的數據塊。但是A的數據塊中存放的只是B的路徑名(可以根據這個找到B的目錄項)。A和B之間是「主從」關系,如果B被刪除了,A仍然存在(因為兩個是不同的文件),但指向的是一個無效的鏈接。
2.使用限制上:
硬鏈接:
a:不能對目錄創建硬鏈接,原因有幾種,最重要的是:文件系統不能存在鏈接環(目錄創建時的」..」除外,這個系統可以識別出來),存在環的後果會導致例如文件遍歷等操作的混亂(,pwd等命令的運作原理就是基於文件硬鏈接,順便一提,ls -l結果的第二列也是文件的硬鏈接數,即inode節點的鏈接數)
b:不能對不同的文件系統創建硬鏈接,即兩個文件名要在相同的文件系統下。
c:不能對不存在的文件創建硬鏈接,由原理即可知原因。
軟鏈接:
a.可以對目錄創建軟鏈接,遍歷操作會忽略目錄的軟鏈接。
b:可以跨文件系統
c:可以對不存在的文件創建軟鏈接,因為放的只是一個字元串,至於這個字元串是不是對於一個實際的文件,就是另外一回事了
3.命令
硬鏈接:ln 源文件名 鏈接名
軟鏈接:ln -s 源文件名 鏈接名
硬鏈接和軟鏈接的作用
硬鏈接:
硬連接的作用是允許一個文件擁有多個有效路徑名,這樣用戶就可以建立硬連接到重要文件,以防止「誤刪」的功能。只刪除一個連接並不影響節點本身和其它的連接,只有當最後一個連接被刪除後,文件的數據塊及目錄的連接才會被釋放。也就是說,文件真正刪除的條件是與之相關的所有硬連接文件均被刪除。
還有如果把鏈接名創建為一個以.開頭的隱藏文件,還能很好的隱藏自己的隱私(你們懂的..呵呵呵)。
軟鏈接:
軟鏈接又稱之為符號連接(Symbolic Link)。軟鏈接文件類似於Windows的快捷方式。它實際上是一個特殊的文件。在符號連接中,文件實際上是一個文本文件,其中包含的有另一文件的位置信息。