Linux命令——ln命令創建和刪除軟、硬鏈接(6/29)


  ln命令用來為文件創建鏈接,連接類型分為硬鏈接和符號鏈接兩種,默認的連接類型是硬連接。如果要創建符號連接必須使用"-s"選項。
  用法:  ln  [options]  source  dist
添加鏈接使用ln命令

  1) -s          軟鏈接(符號鏈接)

      2) -v          顯示詳細的處理過程

      3) -d          允許超級用戶制作目錄的硬鏈接


用法:
#ln --help
用法:ln [選項]... 目標 [鏈接名]
或:ln [選項]... 目標... 目錄
或:ln [選項]... --target-directory=目錄 目標...
創建連至指定<目標>的鏈接,並可選擇性指定<鏈接名>。
如果沒有指定<鏈接名>,會在目前的目錄中創建一個和<目標>名稱一樣的鏈接。
當使用第二種格式而<目標>多於一個時,最后的參數必須是目錄;這樣會在指定的
<目錄>中分別創建連至每個<目標>的鏈接。默認會創建硬鏈接,若
使用 --symbolic 選項則創建符號鏈接。當創建硬鏈接時,每個<目標>都必須存
在。

長選項必須用的參數在使用短選項時也是必須的。
      --backup[=CONTROL]      make a backup of each existing destination file
-b                          like --backup but does not accept an argument
-d, -F, --directory         allow the superuser to attempt to hard link
                                directories (note: will probably fail due to
                                system restrictions, even for the superuser)
-f, --force                 remove existing destination files
-n, --no-dereference        如果目的地是一個鏈接至某目錄的符號鏈接,會將
                              該符號鏈接當作一般文件處理,先將該已存在的
                              鏈接備份或刪除
-i, --interactive           確認是否刪除目的地文件
-s, --symbolic              創建符號鏈接而不是硬鏈接
-S, --suffix=后綴           自行指定備份文件的<后綴>
      --target-directory=目錄 在指定<目錄>中創建鏈接
-v, --verbose               鏈接前先印出每個文件的名稱
      --help     顯示此幫助信息並離開
      --version 顯示版本信息並離開

備份文件的后綴為‘~’,除非以 --suffix 選項或是 SIMPLE_BACKUP_SUFFIX
環境變量指定。版本控制的方式可透過 --backup 選項或 VERSION_CONTROL 環境
變量來選擇。以下是可用的變量值:

none, off       不會進行備份 (即使使用了 --backup 選項)
numbered, t     備份文件會加上數字
existing, nil   若有數字的備份文件已經存在則使用數字,否則使用普通方式備份
simple, never   永遠使用普通方式備份

刪除鏈接時,直接用rm命令
例:

添加
ln -s /usr/jboss4.0.5.GA/ jboss
刪除
rm jboss
 
1 .  使用方式 :ln [option] source_file dist_file   (source_file是待建立鏈接文件的文件,dist_file是新創建的鏈接文件)
                    -f 建立時,將同檔案名刪除. 
                    -i 刪除前進行詢問. 
                    ln -s abc cde 建立abc 的軟連接 
                    ln abc cde 建立abc的硬連接,
ln -s findDir finDir_link        為目錄創建軟連接                   當源文件失效后,鏈接文件將失效。

  2)[root@localhost Documents]# ln newFile newLink          給文件創建硬鏈接

復制代碼
[root@localhost Documents]# ll
總用量 0
drwxr-xr-x. 2 root root 51 5月  21 07:10 NoPdir
drwxr-xr-x. 2 root root 51 5月  21 07:09 Pdir
[root@localhost Documents]# touch newFile             //創建文件
[root@localhost Documents]# ln -s newFile newLink_s   //創建文件符號鏈接
[root@localhost Documents]# ln newFile newLink        //創建文件硬鏈接
[root@localhost Documents]# ln -s Pdir PdirLink_s     //創建目錄符號鏈接
[root@localhost Documents]# ln Pdir PdirLink          //不允許創建目錄硬鏈接
ln: "Pdir": 不允許將硬鏈接指向目錄
[root@localhost Documents]# ll
總用量 0
-rw-r--r--. 2 root root  0 5月  27 06:18 newFile
-rw-r--r--. 2 root root  0 5月  27 06:18 newLink          
lrwxrwxrwx. 1 root root  7 5月  27 06:19 newLink_s -> newFile
drwxr-xr-x. 2 root root 51 5月  21 07:10 NoPdir
drwxr-xr-x. 2 root root 51 5月  21 07:09 Pdir
lrwxrwxrwx. 1 root root  4 5月  27 06:19 PdirLink_s -> Pdir
復制代碼

      創建的文件硬鏈接newLink與源文件newFile具有相同的權限,並且沒有箭頭。而文件軟鏈接newLink_s的權限要多得多,而且有指向符號。

      3)綜合實例,比較硬鏈接與符號鏈接的差別

復制代碼
[root@localhost Documents]# cat >newFile <<EOF
> This is original file!
> 
> I'm test the hard link and the symbol link!
> EOF                                                     //到這里新建一個文件
總用量 4
[root@localhost Documents]# ln -s newFile newFile_link_s
[root@localhost Documents]# ln newFile newFile_link
[root@localhost Documents]# rm newFile                   //刪除源文件
rm:是否刪除普通文件 "newFile"?y
[root@localhost Documents]# ll
總用量 4
-rw-r--r--. 1 root root 68 5月  27 06:30 newFile_link    
lrwxrwxrwx. 1 root root  7 5月  27 06:31 newFile_link_s -> newFile
drwxr-xr-x. 2 root root 51 5月  21 07:10 NoPdir
drwxr-xr-x. 2 root root 51 5月  21 07:09 Pdir
[root@localhost Documents]# cat newFile_link              //查看硬鏈接,完全不受影響,但符號鏈接已經失效
This is original file!

I'm test the hard link and the symbol link!
[root@localhost Documents]# cat >newFile <<EOF            再新建一個文件newFile   
> The Second Test!
> 
> EOF
[root@localhost Documents]# ll
總用量 8
-rw-r--r--. 1 root root 18 5月  27 06:33 newFile
-rw-r--r--. 1 root root 68 5月  27 06:30 newFile_link
lrwxrwxrwx. 1 root root  7 5月  27 06:31 newFile_link_s -> newFile   //符號鏈接已經恢復
drwxr-xr-x. 2 root root 51 5月  21 07:10 NoPdir
drwxr-xr-x. 2 root root 51 5月  21 07:09 Pdir
[root@localhost Documents]# cat newFile_link            //分別查看符號鏈接和硬鏈接發現硬鏈接內容不變,符號鏈接內容變為新建的文件內容了。
This is original file!

I'm test the hard link and the symbol link!
[root@localhost Documents]# cat newFile_link_s
The Second Test!
復制代碼

      4)[root@localhost Documents]# ln newFile ln_dir          在另一個目錄創建同名硬鏈接

復制代碼
[root@localhost Documents]# mkdir ln_dir
[root@localhost Documents]# ln newFile ln_dir
[root@localhost Documents]# cd ln_dir
[root@localhost ln_dir]# ll
總用量 4
-rw-r--r--. 2 root root 18 5月  27 06:33 newFile
復制代碼

      修改newFile硬鏈接目錄文件,也會導致源文件被修改。

      5)[root@localhost Documents]# ln -sv a.c ./Pdir           在指定目錄創建鏈接

復制代碼
[root@localhost Documents]# touch a.c
[root@localhost Documents]# ll
總用量 0
-rw-r--r--. 1 root root  0 5月  27 07:03 a.c
lrwxrwxrwx. 1 root root  6 5月  27 06:58 No_link -> NoPdir
drwxr-xr-x. 2 root root 51 5月  21 07:10 NoPdir
drwxr-xr-x. 2 root root 51 5月  21 07:09 Pdir
[root@localhost Documents]# ln -sv a.c ./Pdir
"./Pdir/a.c" -> "a.c"
[root@localhost Documents]# ln -sv a.c ./Pdir/b.c
"./Pdir/b.c" -> "a.c"
[root@localhost Documents]# ln -v a.c ./Pdir/c.c
"./Pdir/c.c" => "a.c"
[root@localhost Documents]# ls -l Pdir
總用量 8
lrwxrwxrwx. 1 root root   3 5月  27 07:04 a.c -> a.c
lrwxrwxrwx. 1 root root   3 5月  27 07:04 b.c -> a.c
-rw-r--r--. 2 root root   0 5月  27 07:03 c.c
-r--r--r--. 1 root root   0 5月  19 04:16 find
-rw-r--r--. 1 root root  85 5月  19 04:25 t3.txt
--w-------. 1 root root   0 5月  15 18:34 uText
-rw-r--r--. 1 root root 105 5月  21 06:35 vf
復制代碼

 

      (5)其他:

      擴展知識:

      Linux具有為一個文件起多個名字的功能,稱為鏈接。被鏈接的文件可以存放在相同的目錄下,但是必須有不同的文件名,而不用在硬盤上為同樣的數據重復備份。另外,被鏈接的文件也可以有相同的文件名,但是存放在不同的目錄下,這樣只要對一個目錄下的該文件進行修改,就可以完成對所有目錄下同名鏈接文件的修改。對於某個文件的各鏈接文件,我們可以給它們指定不同的存取權限,以控制對信息的共享和增強安全性。 文件鏈接有兩種形式,即硬鏈接和符號鏈接。
      硬鏈接:

      建立硬鏈接時,在另外的目錄或本目錄中增加目標文件的一個目錄項,這樣,一個文件就登記在多個目錄中。

      創建硬鏈接后,己經存在的文件的I節點號(Inode)會被多個目錄文件項使用。一個文件的硬鏈接數可以在目錄的長列表格式的第二列中看到,無額外鏈接的文件的鏈接數為l。 在默認情況下,ln命令創建硬鏈接。ln命令會增加鏈接數,rm命令會減少鏈接數。一個文件除非鏈接數為0,否則不會從文件系統中被物理地刪除。

      對硬鏈接有如下限制:

      1.不能對目錄文件做硬鏈接。

      2.不能在不同的文件系統之間做硬鏈接。就是說,鏈接文件和被鏈接文件必須位於同一個文件系統中。
      軟鏈接:

      符號鏈接也稱為軟鏈接,是將一個路徑名鏈接到一個文件。這些文件是一種特別類型的文件。事實上,它只是一個文本文件,其中包含它提供鏈接的另一個文件的路徑名,如圖中虛線箭頭所示。另一個文件是實際包含所有數據的文件。所有讀、寫文件內容的命令被用於符號鏈接時,將沿着鏈接方向前進來訪問實際的文件。

      與硬鏈接不同的是,符號鏈接確實是一個新文件,當然它具有不同的I節點號;而硬鏈接並沒有建立新文件。 符號鏈接沒有硬鏈接的限制,可以對目錄文件做符號鏈接,也可以在不同文件系統之間做符號鏈接。
      用ln -s命令建立符號鏈接時,源文件最好用絕對路徑名。這樣可以在任何工作目錄下進行符號鏈接。而當源文件用相對路徑時,如果當前的工作路徑與要創建的符號鏈接文件所在路徑不同,就不能進行鏈接。 符號鏈接保持了鏈接與源文件或目錄之間的區別: 刪除源文件或目錄,只刪除了數據,不會刪除鏈接。一旦以同樣文件名創建了源文件,鏈接將繼續指向該文件的新數據。 在目錄長列表中,符號鏈接作為一種特殊的文件類型顯示出來,其第一個字母是l。 符號鏈接的大小是其鏈接文件的路徑名中的字節數。


2. 軟鏈接與硬鏈接的區別(通俗): 
                    硬鏈接可認為是一個文件擁有兩個文件名;                     而軟鏈接則是系統新建一個鏈接文件,此文件指向其所要指的文件
 
                    此外,軟鏈接可對文件和文件夾。。而硬鏈接僅針對文件。

3. 軟鏈接與硬鏈接的區別(講解): 

Linux 軟連接與硬連接

對於一個文件來說,有唯一的索引接點與之對應,而對於一個索引接點號,卻可以有多個文件名與之對應。因此,在磁盤上的同一個文件可以通過不同的路徑去訪問該文件。注意在Linux下是一切皆文件的啊,文件夾、新加的硬盤 ...都可以看着文件來處理的啊。
    連接有軟連接和硬連接(hard link)之分的,軟連接(symbolic link)又叫符號連接。符號連接相當於Windows下的快捷方式。
    不可以對文件夾建立硬連接的,我們通常用的還是軟連接比較多。     
    
eg:
    ln -s source dist        # 建立軟連接
    ln source dist            # 建立硬連接


    軟鏈接實際上只是一段文字,里面包含着它所指向的文件的名字,系統看到軟鏈接后自動跳到對應的文件位置處進行處理;相反,硬聯接為文件開設一個新的目錄 項,硬鏈接與文件原有的名字是平權的,在Linux看來它們是等價的。由於這個原因,硬鏈接不能連接兩個不同文件系統上的文件。
(1)軟連接可以 跨文件系統 ,硬連接不可以 。實踐的方法就是用共享文件把windows下的 aa.txt文本文檔連接到linux下/root目錄 下 bb,cc . ln -s aa.txt /root/bb 連接成功 。ln aa.txt /root/bb 失敗 。
(2)關於 I節點的問題 。硬連接不管有多少個,都指向的是同一個I節點,會把 結點連接數增加,只要結點的連接數不是 0,文件就一直存在,不管你刪除的是源文件還是 連接的文件 。只要有一個存在 ,文件就 存在 (其實也不分什么源文件連接文件的 ,因為他們指向都是同一個 I節點)。 當你修改源文件或者連接文件任何一個的時候 ,其他的文件都會做同步的修改。軟鏈接不直接使用i節點號作為文件指針,而是使用文件路徑名作為指針。所以 刪除連接文件 對源文件無影響,但是刪除源文件,連接文件就會找不到要指向的文件 。軟鏈接有自己的inode,並在磁盤上有一小片空間存放路徑名.
(3)軟連接可以對一個不存在的文件名進行連接 。
(4)軟連接可以對目錄進行連接。
 
最后 刪除符號鏈接,有創建就有刪除
rm -rf   symbolic_name   注意不是rm -rf   symbolic_name/ 
軟鏈接:不可以刪除源文件,刪除源文件導致鏈接文件找不到,出現文件紅色閃爍
硬鏈接:可以刪除源文件,鏈接文件可以正常打開

(1)軟連接可以 跨文件系統 ,硬連接不可以 。 
實踐的方法就是用共享文件把windows下的 aa.txt文本文檔連接到linux下/root目錄 下 bb,cc . ln -s aa.txt 
/root/bb 連接成功 。ln aa.txt /root/bb 失敗 。

(2)關於 I節點的問題 。硬連接不管有多少個,都指向的是同一個I節點,會把 結點連接數增加 ,只要結點的連接數不是 0,文件就一直存在 ,不管你刪除的是

源文件還是 連接的文件 。只要有一個存在 ,文件就 存在 (其實也不分什么 源文件連接文件的 ,因為他們指向都是同一個 I節點)。 當你修改源文件或者連接文件

任何一個的時候 ,其他的 文件都會做同步的修改 。軟鏈接不直接使用i節點號作為文件指針,而是使用文件路徑名作為指針。所以 刪除連接文件 對源文件無影響,但

是 刪除 源文件,連接文件就會找不到要指向的文件 。軟鏈接有自己的inode,並在磁盤上有一小片空間存放路徑名.

(3)軟連接可以對一個不存在的文件名進行連接 。

(4)軟連接可以對目錄進行連接。

備注:I節點 :它是UNIX內部用於描述文件特性的數據結構.我們通常稱I節點為文件索引結點(信息結點).i節點 含有關於文件的大部分的重要信 息,包括文件數據塊在

磁盤上的地址.每一個I節點有它自己的標志號,我們稱為文件順序號.I節點包含的信息 1.文件類型 2.文件屬主關系 3.文件的訪問權限 4.文件的時間截.   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM