ln是linux中又一個非常重要命令,它的功能是為某一個文件在另外一個位置建立一個同步的鏈接.當我們需要在不同的目錄,用到相同的文件時,我們不需要在每一個需要的目錄下都放一個必須相同的文件,我們只要在某個固定的目錄,放上該文件,然后在 其它的目錄下用ln命令鏈接(link)它就可以,不必重復的占用磁盤空間。
1.命令格式:
ln [參數][源文件或目錄][目標文件或目錄]
2.命令功能:
Linux文件系統中,有所謂的鏈接(link),
我們可以將其視為檔案的別名,而鏈接又可分為兩種 :
硬鏈接(hard link)與軟鏈接(symbolic link),
硬鏈接的意思是一個檔案可以有多個名稱,
而軟鏈接的方式則是產生一個特殊的檔案,該檔案的內容是指向另一個檔案的位置。
硬鏈接是存在同一個文件系統中,而軟鏈接卻可以跨越不同的文件系統。
軟連接:
1.軟鏈接,以路徑的形式存在。類似於Windows操作系統中的快捷方式 2.軟鏈接可以 跨文件系統 ,硬鏈接不可以 3.軟鏈接可以對一個不存在的文件名進行鏈接 4.鏈接可以對目錄進行鏈接 軟鏈接就相當於windows的的快捷方式,使用場景: 1.在文件系統中多處共享同一個較大文件時,使用軟鏈接就可以避免創建多個副本。 2.維護動態庫文件的版本時,使用軟鏈接,在升級庫文件后,只需修改軟鏈接的源文件,而使用該庫的程序則不需要修改。 使用原文件的絕對路徑創建的軟鏈接,不會隨着軟鏈接路徑改動而失效!所以建議使用原文件絕對路徑創建軟鏈接。這時候的軟鏈接才算得上是真正意義上相當於Windows的快捷方式,一旦生成處處可用
硬鏈接
1.硬鏈接,以文件副本的形式存在。但不占用實際空間。 2.不允許給目錄創建硬鏈接 3.硬鏈接只有在同一個文件系統中才能創建 4.硬鏈接說白了是一個指針,指向文件索引節點,系統並不為它重新分配inode。源文件和硬鏈接文件都是指向同一塊磁盤空間的!通過使用硬鏈接可達到備份數據(實際是備份節點)的效果!
注意:
第一,ln命令會保持每一處鏈接文件的同步性,也就是說,不論你改動了哪一處,其它的文件都會發生相同的變化; 第二,ln的鏈接又分軟鏈接和硬鏈接兩種, 軟鏈接就是ln –s 源文件 目標文件,它只會在你選定的位置上生成一個文件的鏡像,不會占用磁盤空間, 硬鏈接 ln 源文件 目標文件,沒有參數-s, 它會在你選定的位置上生成一個和源文件大小相同的文件, 無論是軟鏈接還是硬鏈接,文件都保持同步變化。 ln指令用在鏈接文件或目錄,如同時指定兩個以上的文件或目錄, 且最后的目的地是一個已經存在的目錄,則會把前面指定的所有文件或目錄復制到該目錄。 若同時指定多個文件或目錄,且最后的目的地並非是一個已存在的目錄,則會出現錯誤信息。
3.命令參數:
必要參數 | 描述 |
---|---|
-b | 刪除,覆蓋以前建立的鏈接 |
-d | 允許超級用戶制作目錄的硬鏈接 |
-f | 強制執行 |
-i | 交互模式,文件存在則提示用戶是否覆蓋 |
-n | 把符號鏈接視為一般目錄 |
-s | 軟鏈接(符號鏈接) |
-v | 顯示詳細的處理過程 |
選擇參數 | 描述 |
---|---|
-S | “-S<字尾備份字符串> ”或 “--suffix=<字尾備份字符串>” |
-V | “-V<備份方式>”或“--version-control=<備份方式>” |
--help | 顯示幫助信息 |
--version | 顯示版本信息 |
4.常用示例
1.給2018.log創建一個名為link2018的軟連接
命令:
ln -s 2018.log link2018
輸出:
zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ ls 2018.log zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ ln -s 2018.log link2018 zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ ls 2018.log link2018 zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ ll 總用量 12 drwxrwxr-x 3 zbk zbk 4096 10月 23 11:53 ./ drwxrwxr-x 6 zbk zbk 4096 10月 19 18:22 ../ -rw-r--r-- 1 zbk zbk 0 10月 23 11:53 2018.log drwxrwxr-x 2 zbk zbk 4096 10月 18 17:42 .idea/ lrwxrwxrwx 1 zbk zbk 8 10月 23 11:53 link2018 -> 2018.log
說明:
2.為2018.log創建硬鏈接ln2018,2018.log與ln2018的各項屬性相同
修改源文件2018.log內容,其軟硬鏈接內容均會同步修改
zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ cat ln2018 我是log zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ cat 2018.log 我是log zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ vim 2018.log zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ cat 2018.log 我是log1 zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ cat ln2018 我是log1 zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ cat link2018 我是log1
3.接上面兩示例,連接完畢后,刪除和重建鏈接源文件
演示如下:
zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ ls 2018.log link2018 ln2018 zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ ll 總用量 20 drwxrwxr-x 3 zbk zbk 4096 10月 23 12:04 ./ drwxrwxr-x 6 zbk zbk 4096 10月 19 18:22 ../ -rw-r--r-- 2 zbk zbk 11 10月 23 12:04 2018.log drwxrwxr-x 2 zbk zbk 4096 10月 18 17:42 .idea/ lrwxrwxrwx 1 zbk zbk 8 10月 23 12:00 link2018 -> 2018.log -rw-r--r-- 2 zbk zbk 11 10月 23 12:04 ln2018 zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ rm -rf 2018.log zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ ll 總用量 16 drwxrwxr-x 3 zbk zbk 4096 10月 23 12:57 ./ drwxrwxr-x 6 zbk zbk 4096 10月 19 18:22 ../ drwxrwxr-x 2 zbk zbk 4096 10月 18 17:42 .idea/ lrwxrwxrwx 1 zbk zbk 8 10月 23 12:00 link2018 -> 2018.log -rw-r--r-- 1 zbk zbk 11 10月 23 12:04 ln2018 zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ touch 2018.log zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ ll 總用量 16 drwxrwxr-x 3 zbk zbk 4096 10月 23 12:57 ./ drwxrwxr-x 6 zbk zbk 4096 10月 19 18:22 ../ -rw-r--r-- 1 zbk zbk 0 10月 23 12:57 2018.log drwxrwxr-x 2 zbk zbk 4096 10月 18 17:42 .idea/ lrwxrwxrwx 1 zbk zbk 8 10月 23 12:00 link2018 -> 2018.log -rw-r--r-- 1 zbk zbk 11 10月 23 12:04 ln2018 zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ vim 2018.log zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ cat 2018.log 2018log日志 zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ cat link2018 2018log日志 zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ cat ln2018 我是log1 zbk@zbk-virtual-machine:~/PycharmProjects/my_test$
說明:
- 源文件被刪除后,並沒有影響硬鏈接文件;軟鏈接文件在centos系統下不斷的閃爍,提示源文件已經不存在
- 重建源文件后,軟鏈接不在閃爍提示,說明已經鏈接成功,找到了鏈接文件系統;重建后,硬鏈接文件並沒有受到源文件影響,硬鏈接文件的內容還是保留了刪除前源文件的內容,說明硬鏈接已經失效
4.將文件鏈接到目錄中
演示如下:
zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ ls 2018.log link2018 ln2018 zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ mkdir test zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ ls 2018.log link2018 ln2018 test zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ ln 2018.log test zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ ls 2018.log link2018 ln2018 test zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ cd test/ zbk@zbk-virtual-machine:~/PycharmProjects/my_test/test$ ls 2018.log zbk@zbk-virtual-machine:~/PycharmProjects/my_test/test$ vi 2018.log zbk@zbk-virtual-machine:~/PycharmProjects/my_test/test$ cat 2018.log 2018log日志,加1 zbk@zbk-virtual-machine:~/PycharmProjects/my_test/test$ cd .. zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ ls 2018.log link2018 ln2018 test zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ cat 2018.log 2018log日志,加1 zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ ll 總用量 24 drwxrwxr-x 4 zbk zbk 4096 10月 23 13:31 ./ drwxrwxr-x 7 zbk zbk 4096 10月 23 13:30 ../ -rw-r--r-- 2 zbk zbk 19 10月 23 13:32 2018.log drwxrwxr-x 2 zbk zbk 4096 10月 18 17:42 .idea/ lrwxrwxrwx 1 zbk zbk 8 10月 23 12:00 link2018 -> 2018.log -rw-r--r-- 1 zbk zbk 11 10月 23 12:04 ln2018 drwxr-xr-x 2 zbk zbk 4096 10月 23 13:32 test/ zbk@zbk-virtual-machine:~/PycharmProjects/my_test$
說明:
在test目錄中創建了2018.log的硬鏈接,修改test目錄中的2018.log文件,同時也會同步到源文件
5.給目錄創建軟連接
命令:
ln -sv 源目錄 目標目錄
演示如下:
zbk@zbk-virtual-machine:~/PycharmProjects$ ll 總用量 28 drwxrwxr-x 7 zbk zbk 4096 10月 23 13:30 ./ drwxr-xr-x 23 zbk zbk 4096 10月 23 13:32 ../ drwxr-xr-x 9 zbk zbk 4096 10月 22 15:25 FreshOnline/ drwxrwxr-x 6 zbk zbk 4096 10月 19 19:07 FreshOnline_env/ drwxrwxr-x 4 zbk zbk 4096 10月 23 13:31 my_test/ drwxrwxr-x 4 zbk zbk 4096 10月 23 11:52 py3_test/ drwxr-xr-x 2 zbk zbk 4096 10月 23 13:30 test/ zbk@zbk-virtual-machine:~/PycharmProjects$ ln -sv /home/zbk/PycharmProjects/my_test /home/zbk/PycharmProjects/test '/home/zbk/PycharmProjects/test/my_test' -> '/home/zbk/PycharmProjects/my_test' zbk@zbk-virtual-machine:~/PycharmProjects$ ll 總用量 28 drwxrwxr-x 7 zbk zbk 4096 10月 23 13:30 ./ drwxr-xr-x 23 zbk zbk 4096 10月 23 13:32 ../ drwxr-xr-x 9 zbk zbk 4096 10月 22 15:25 FreshOnline/ drwxrwxr-x 6 zbk zbk 4096 10月 19 19:07 FreshOnline_env/ drwxrwxr-x 4 zbk zbk 4096 10月 23 13:31 my_test/ drwxrwxr-x 4 zbk zbk 4096 10月 23 11:52 py3_test/ drwxr-xr-x 2 zbk zbk 4096 10月 23 13:38 test/ zbk@zbk-virtual-machine:~/PycharmProjects$ cd my_test/ zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ ls 2018.log link2018 ln2018 test zbk@zbk-virtual-machine:~/PycharmProjects/my_test$ cd .. zbk@zbk-virtual-machine:~/PycharmProjects$ ls FreshOnline FreshOnline_env my_test py3_test test zbk@zbk-virtual-machine:~/PycharmProjects$ cd test/ zbk@zbk-virtual-machine:~/PycharmProjects/test$ ls my_test zbk@zbk-virtual-machine:~/PycharmProjects/test$ cd my_test zbk@zbk-virtual-machine:~/PycharmProjects/test/my_test$ ls 2018.log link2018 ln2018 test zbk@zbk-virtual-machine:~/PycharmProjects/test/my_test$ cd .. zbk@zbk-virtual-machine:~/PycharmProjects/test$ ls my_test zbk@zbk-virtual-machine:~/PycharmProjects/test$ ll 總用量 8 drwxr-xr-x 2 zbk zbk 4096 10月 23 13:38 ./ drwxrwxr-x 7 zbk zbk 4096 10月 23 13:30 ../ lrwxrwxrwx 1 zbk zbk 32 10月 23 13:38 my_test -> /home/zbk/PycharmProjects/my_test/
說明:
- 目錄只能創建軟鏈接
- 目錄創建鏈接必須用絕對路徑,相對路徑創建會不成功,會提示:符號連接的層數過多 這樣的錯誤
- 使用原文件的絕對路徑創建的軟鏈接,不會隨着軟鏈接路徑改動而失效!所以建議使用原文件絕對路徑創建軟鏈接。這時候的軟鏈接才算得上是真正意義上相當於Windows的快捷方式,一旦生成處處可用
- 在鏈接目標目錄中修改文件都會在源文件目錄中同步變化