linux ln命令

  • Hard Links:


剛剛說過,當系統要讀取某一個檔案的時候,就會先去讀inode table ,然後再根據 inode 的信息到 block area 去將數據取出來利用!而hard link 就是直接再建立一個 inode 連結到檔案放置的 block 區塊。也就是說,進行hard link 的時候,實際上,你的檔案內容不會改變,只是你在查詢的時候,利用原來的inode 與後來的 inode 均可被指定到該檔案放置的地點,因此兩個檔案的內容會是一樣的!所以讀取任何一個inode 的結果都是存取在同一個檔案的內容就是了。不過,這樣一來就有個問題啦,因爲inode 是會連結到 block 區域去的,而『目錄』本身僅消耗 inode 而已,那麼一來的話,hard link 不就不能 link 目錄啦?對的!沒錯! Hard link 有兩個最大的限制:
  1. 不能跨 filesystem ,因爲不同的 filesystem 有不同的inode table 嘛!

  2. 不能 link 目錄!


  • Symbolic Links


相對於 hard link , Symbolic link 可就好理解多了,基本上,他就是在建立一個獨立的檔案,而這個檔案會讓數據讀取指向他link 的那個檔案內容!由於只是利用檔案來做爲指向的動作,所以,當來源檔被刪除之後,symboliclink 的檔案會『開不了』,會一直說『無法開啓某檔案!』


所以,看樣子,似乎 hard link 比較安全,因爲即使某一個inode 被殺掉了,只要有任何一個 inode 存在,那麼該檔案就不會不見!不過,不幸的是,由於Hard Link 的限制太多了,包括無法做『目錄』的 link ,所以在用途上面是比較受限的!反而是Symbolic Link 的使用方向較廣喔!好了,說的天花亂墜,看您也差不多快要昏倒了!沒關係,實作一下就知道怎麼回事了!

特別留意,底下的案例中,我們是將系統的設定文件copy 到 /root/test 底下進行測試用的,請不要在 /etc/ 底下做,未來我們的工作目錄都會在/root/test 底下進行,這有個好處,是可以讓您清楚的知道,這是用來 test 用的啦!
語法:[root @test/root ]# ln [-s] [來源檔] [目的檔]
參數說明:
-s  :提供連結檔的連結!如果直接以 ln 不加任何參數的話,那麼就屬於 hard link囉!
範例:
[root @test/root]# mkdir test
[root @test/root]# cd test
[root @test/test]# cp /usr/bin/passwd .

0. 原本的信息:
[root @test/test]# ll
-rw-r--r--1root     root       13476 Jun 26 11:31 passwd
[root @test/test]# du -k<==查看該目錄下的佔用硬盤空間
20

1. Hard Link信息:
[root @test/test]# ln passwd passwd-hard
[root @test/test]# ll
total 32
-rw-r--r--2root     root       13476 Jun 26 11:31 passwd
-rw-r--r--2root     root       13476 Jun 26 11:31 passwd-hard
注意看,上面那個數字變成2 囉!這就是佔用掉 inodes 囉!
[root @test/test]# du -k
20  <==注意看,容量並沒有變大!因爲是link 檔案呀!

2. SymbolicLink 信息:
[root @test/test]# ln -s passwd passwd-soft; ll
-rw-r--r--   2 root     root       13476 Jun 26 11:31 passwd
-rw-r--r--   2 root     root       13476 Jun 26 11:31 passwd-hard
lrwxrwxrwx   1 root     root           6 Jun 26 11:37 passwd-sofe -> passwd
注意囉!該Symbolic Link 的檔案是有容量的呦!
注意囉, passwd-soft會指到另外一個檔案去,而且,最前面屬性顯示 l ,
此外,他是一個獨立的檔案!先殺掉passwd 後,我們分別 more 一下內容:

3. 用 more 來試試看是怎樣?!
[root @testtest]# rm passwd
rm: removeregular file `passwd'? y
[root @testtest]# more passwd-hard
………(正常顯示)
[root @testtest]# more passwd-soft
passwd-soft:No such file or directory

說明:
要注意囉!如果不加任何參數的話,那麼就是 Hard Link 囉!如同上面的情況,增加了hard link 之後,可以發現 link 那一欄屬性增加了!而如果這個時候砍掉 passwd會發生什麼事情呢?呵呵! passwd-hard 的內容還是會跟原來 passwd 相同,但是passwd-soft 就會找不到該檔案啦!就是這樣!瞭解了嗎?!還有,跟 cp 也不一樣呦!因爲雖然Hard Link 的檔案看起來是有容量的,但是基本上還是指向原來的檔案,所以囉,整體容量是沒有增大的啦!

而如果使用 -s 的參數時,就做成差不多是 Windows 底下的『快捷方式』的意思(SymbolicLink,較常用!)不過,需要特別注意的是, Linux 的 link 與 Windows 的快捷方式是不一樣的東西!舉個例子說,當你在Windows 建立一個快捷方式時,你可以在這個快捷方式內修改任何數據,而你的原始數據並不會跟着變!不過,當你修改Linux 下的 link 檔案時,則更動的其實是『原始檔』,呵呵,所以不論你的這個原始檔被連結到哪裏去,只要你修改了連結檔,呵呵!原始檔就跟着變囉!以上面爲例,由於你使用-s 的參數建立一個名爲 passwd-soft 的檔案,則你修改 passwd-soft 時,其內容與passwd 完全相同,並且,當你按下儲存之後,被改變的將是 passwd 這個檔案!

此外,如果你做了底下這樣的連結:
ln –s /bin /root/bin
那麼如果你進入 /root/bin 這個目錄下,『請注意呦!該目錄其實是 /bin 這個目錄,因爲你做了連結檔了!』所以,如果你進入/root/bin 這個剛剛建立的連結目錄,並且將其中的數據殺掉時,嗯! /bin 裏面的數據就通通不見了!這點請千萬注意!並不是/root 底下的資料都是 root 的!還需要注意一下該屬性才行!

基本上, Symbolic link 的用途比較廣,所以您要特別留意 symbolic link的用法呢!未來一定還會常常用到的啦!


lnlinux中又一個非常重要命令,它的功能是爲某一個文件在另外一個位置建立一個同不的鏈接,這個命令最常用的參數是-s,具體用法是:ln –s 源文件 目標文件。
  當我們需要在不同的目錄,用到相同的文件時,我們不需要在每一個需要的目錄下都放一個必須相同的文件,我們只要在某個固定的目錄,放上該文件,然後在其它的目錄下用ln命令鏈接(link)它就可以,不必重複的佔用磁盤空間。例如:ln –s /bin/less/usr/local/bin/less
  -s 是代號(symbolic)的意思。
  這裏有兩點要注意:第一,ln命令會保持每一處鏈接文件的同步性,也就是說,不論你改動了哪一處,其它的文件都會發生相同的變化;第二,ln的鏈接又軟鏈接和硬鏈接兩種,軟鏈接就是ln –s ** **,它只會在你選定的位置上生成一個文件的鏡像,不會佔用磁盤空間,硬鏈接ln ****,沒有參數-s, 它會在你選定的位置上生成一個和源文件大小相同的文件,無論是軟鏈接還是硬鏈接,文件都保持同步變化。
  如果你用ls察看一個目錄時,發現有的文件後面有一個@的符號,那就是一個用ln命令生成的文件,用ls –l命令去察看,就可以看到顯示的link的路徑了。
  指令詳細說明
  指令名稱 : ln
  使用權限 : 所有使用者
  使用方式 : ln [options] source dist,其中 option 的格式爲 :
  [-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}]
  [--help] [--version] [--]
  說明 : Linux/Unix 檔案系統中,有所謂的連結(link),我們可以將其視爲檔案的別名,而連結又可分爲兩種 : 硬連結(hardlink)與軟連結(symboliclink),硬連結的意思是一個檔案可以有多個名稱,而軟連結的方式則是產生一個特殊的檔案,該檔案的內容是指向另一個檔案的位置。硬連結是存在同一個檔案系統中,而軟連結卻可以跨越不同的檔案系統。
ln source dist 是產生一個連結(dist)到 source,至於使用硬連結或軟鏈結則由參數決定。
  不論是硬連結或軟鏈結都不會將原本的檔案複製一份,只會佔用非常少量的磁碟空間。
  -f : 鏈結時先將與 dist 同檔名的檔案刪除
  -d : 允許系統管理者硬鏈結自己的目錄
  -i : 在刪除與 dist 同檔名的檔案時先進行詢問
  -n : 在進行軟連結時,將 dist 視爲一般的檔案
  -s : 進行軟鏈結(symbolic link)
  -v : 在連結之前顯示其檔名
  -b : 將在鏈結時會被覆寫或刪除的檔案進行備份
  -S SUFFIX : 將備份的檔案都加上 SUFFIX 的字尾
  -V METHOD : 指定備份的方式
  --help : 顯示輔助說明
  --version : 顯示版本
  範例 :
  將檔案 yy 產生一個 symbolic link : zz
ln -s yy zz
  將檔案 yy 產生一個 hard link : zz
ln yy xx
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章