## 鏈接的概念
[TOC]
在linux系統中,鏈接可以分為兩種:
一種被稱為硬鏈接(Hard Link);
另一種被稱為軟連接或者符號連接(Symbolic Link)。在默認不帶參數情況下,執行ln命令創建的鏈接是硬鏈接。
### 硬鏈接
硬鏈接是指通過索引節點來進行鏈接。在Linux的文件系統中,保存在磁盤分區中的文件不管是什么類型都會給它分配一個編號,這個編號被稱為索引節點編號(Inode Index)或Inode。
在Linux系統中,多個文件名指向同一索引節點(Inode)是正常且允許的。一般這種連接就稱為硬鏈接。硬鏈接的左右之一是允許一個文件擁有多個有效的路徑名,這樣用戶就可以就愛能力硬鏈接到重要的文件,以防止“誤刪”源數據,那么為什么給文件建立了硬鏈接就會防止數據誤刪除呢?
因為文件系統的原理是只要文件的索引節點(Inode Index)還有一個以上的鏈接(僅僅刪除了該文件指向)只刪除其中一個鏈接并不影響索引節點本身和其他的鏈接(即數據文件實體并未刪除),只有當最后一個連接被刪除后,此時如果有新數據要存儲到硬盤時,被刪除文件的數據塊及目錄的鏈接才會被釋放,空間被新數據占用覆蓋。此時,數據就再也無法找回了
也就是說,在linux中,刪除文件的條件是與之相關的所有硬鏈接文件均被刪除。
### 軟連接
軟連接又是也被稱為符號連接(Symbolic Link)軟連接文件就類似與Windows系統中的快捷方式,它實際上是一個特殊的文件,在軟連接中,軟連接文件實際上就是一個文本文件,這個文件中包含有軟鏈接指向另一個文件的文職信息內容,因此,通過訪問這個“快捷方式”就可以迅速定位到軟鏈接所指向的源文件實體。
## 實例
### 新增軟、硬鏈接
~~~
[root@office6_5 /test/luo]
# touch luofile #創建luofile文件
[root@office6_5 /test/luo]
# ln luofile luofile_hard_link # 創建硬鏈接
[root@office6_5 /test/luo]
# ln -s luofile luofile_soft_link # 創建軟連接
[root@office6_5 /test/luo]
# ls -li # 查看列表inode信息
總用量 0
24387 -rw-r--r-- 2 root root 0 10月 19 23:16 luofile
24387 -rw-r--r-- 2 root root 0 10月 19 23:16 luofile_hard_link ### 硬鏈接的inode信息和源文件一致
24388 lrwxrwxrwx 1 root root 7 10月 19 23:18 luofile_soft_link -> luofile
~~~
* * * * *
~~~
[root@office6_5 /test/luo]
# mkdir luodir
[root@office6_5 /test/luo]
# ln luodir luodir_hard_link
ln: "luodir": 不允許將硬鏈接指向目錄
[root@office6_5 /test/luo]
# ln -s luodir luodir_soft_link
[root@office6_5 /test/luo]
# ls -lih
總用量 4.0K
24389 drwxr-xr-x 2 root root 4.0K 10月 19 23:21 luodir
24387 -rw-r--r-- 2 root root 0 10月 19 23:16 luofile
24387 -rw-r--r-- 2 root root 0 10月 19 23:16 luofile_hard_link
24388 lrwxrwxrwx 1 root root 7 10月 19 23:18 luofile_soft_link -> luofile
24390 lrwxrwxrwx 1 root root 6 10月 19 23:22 luodir_soft_link -> luodir
~~~
>[danger] `ln` 命令不能對目錄創建硬鏈接,但可以對目錄創建軟連接,對于目錄的軟連接也是生產場景常用的功能。
### 刪除軟、硬鏈接
~~~
[root@office6_5 /test/luo]
# echo "this is a file" >> luofile # 給源文件中寫入內容
[root@office6_5 /test/luo]
# cat luofile # 查看源文件內容
this is a file
[root@office6_5 /test/luo]
# cat luofile_hard_link # 查看硬鏈接內容
this is a file
[root@office6_5 /test/luo]
# cat luofile_soft_link # 查看軟鏈接內容
this is a file
[root@office6_5 /test/luo]
# rm -f luofile # 刪除源文件
[root@office6_5 /test/luo]
# ls -lrti
總用量 8
24388 lrwxrwxrwx 1 root root 7 10月 19 23:18 luofile_soft_link -> luofile # 軟連接由于刪除了源文件已經不存在報錯了
24389 drwxr-xr-x 2 root root 4096 10月 19 23:21 luodir
24390 lrwxrwxrwx 1 root root 6 10月 19 23:22 luodir_soft_link -> luodir
24387 -rw-r--r-- 1 root root 15 10月 19 23:30 luofile_hard_link
[root@office6_5 /test/luo]
# cat luofile_hard_link # 硬鏈接還存在
this is a file
[root@office6_5 /test/luo]
# cat luofile_soft_link # 軟連接已經不存在
cat: luofile_soft_link: 沒有那個文件或目錄
~~~
#### 軟、硬鏈接總結
通過上面的測試可以看出:
1 當源文件的軟連接和硬鏈接同時存在時,刪除軟連接對源文件和硬鏈接無影響;
2 當源文件的軟連接和硬鏈接同時存在時,刪除硬連接對源文件和硬鏈接無影響;
3 當源文件的軟連接和硬鏈接同時存在時刪除原始文件`luofile`后,硬鏈接`luofile_hard_link`不受影響,但軟連接文件`luofile_soft_link`失效(紅底,白色文字閃爍狀)。
#### 關于目錄的鏈接
1. 對于目錄。不可以創建硬鏈接,但可以創建軟連接
2. 對于目錄的軟鏈接是生產場景運維中常用的技巧。
### 軟連接的使用案例
在編譯apache軟件時,編譯路徑呆著版本號`/usr/local/apache2.2.26`(為了區分版本號,因此路徑比較長),而在訪問目錄時有希望簡便,此時就可以通過建立一個簡單的軟鏈接路徑文件 `ln -s /usr/local/apache2.2.26 /usr/local/apache`來達到簡便的目的。
### 硬鏈接的使用案例
硬件存儲的快照功能或者為備份數據創建多個硬鏈接,防止誤刪除數據。
- Linux的安裝
- Linux的軟件安裝管理
- Linux零碎的命令
- 了解ssh
- 系統調優及安全設置
- Linux系統中的硬鏈接和軟連接
- Linux文件和目錄的屬性及權限
- 命令總結
- 文件目錄管理命令
- cat
- cd
- cp
- ls
- mkdir
- mv
- rm
- touch
- vi
- 硬件檢測內核shell命令
- echo
- alias
- dd
- diff
- date
- grep(重要)
- head
- rpm
- sed(重要)
- tree
- unalias
- yum
- seq
- su
- less
- more
- tail
- awk(重要)
- pwd
- history
- whoami
- find(重要)
- which
- vimdiff
- sudo
- wget
- ln
- chmod
- chown
- vim常用技巧
- scp
- 工作場景應用總結
- 自動刪除n天前日志
- 刪除一個目錄下的所有文件但保留一個文件
- Linux軟件安裝
- php安裝(apache版本)
- vsftpd安裝
- git安裝
- python安裝
- LNMP安裝
- LAMP安裝I
- LAMP安裝II
- svn安裝
- svn在Linux下的命令操作
- svn鉤子簡介
- svn代碼上傳流程
- Crond介紹
- sersync應用指南
- 其他
- 小結一
- 系統調優重新整理tmp
- linux禁止root用戶直接登錄sshd并修改默認端口