2017年3月15日 星期三

Linux 的連結和 Windows 的 mklink

不管是Linux 還 Windows ,連結檔的容量都是很小的

Linux

ln [-s] 已有的檔案或目錄名稱 檔案或目錄名稱

硬連結

    語法:ln <目的> <來源>
    1.將一個檔案硬連結和多個檔案以後,假設是5個,刪除其中1~4個不會影響本來的檔案
    2.只能是同一個檔案系統
    3.inode 一樣
    4.只能操作檔案
    5.ls -l 查看時,第一個並不是L,是-

軟連結

    語法:ln -s <目的> <來源>
    1.目的檔案若被刪除,則來源會出現錯誤
    2.可跨越不同的檔案系統
    3.inode 不同
    4.ls -l 查看時,是 L
    5.-s = --symbolic

還有一個參數 f,意思是如果目的檔已經有了,會先刪除再新增



Windows

以下是用Windows 7 的實驗,必需有管理的權限來操作,而且來源的檔案或目錄不可存在
mklink [/H /S /J] 檔案或目錄名稱 已有的檔案或目錄名稱

先切換到想連結的地方,然後如下操作

硬連結(Hard)

    語法:mklink -h <來源> <目的>
    1.只對檔案有效,如果目的為目錄,會出現「存取被拒」
    2.也只能在同個槽才行,如 C 槽不能到 D 槽

軟連結(Symbolic/Soft)

    語法:
        針對檔案:mklink <來源> <目的>,如果目的為目錄會成功,但沒作用,無意義
        針對目錄:mklink -d <來源> <目的>,如果目的為檔案會成功,但點下去會報錯,無意義

NTFS 連結(Junction)

    故名思義,檔案系統是NTFS才可使用,在X槽按右鍵-->屬性的一般活頁標籤可看到
    但只能使用在目錄
    語法:mklink -j <來源> <目的>,目的為檔案會成功,但點下去會報錯,無意義

軟連結的目錄和 NTFS 連結的差異

1.右鍵屬性時,軟連結會多一個 Shortcut 的活頁標籤

2.使用 dir 指令時,軟連結是<SYMLINK>,NTFS 連結是<JUNCTION>

3.複製時不同,將這兩個連結複製到其他的目錄後
    .軟連結只有原本的目錄才可以連
    .NTFS 連結無法複製,複製完後到目的資料夾貼上時,沒有作用

4.移動時不同,將這兩個連結剪下到其他的目錄貼上後
    .軟連結真的會移動,也可連結
    .NTFS 連結會複製一份到新的目錄,原本的還可以連結,但複製後的不行
    ※注意 NTFS 連結還會將原本目錄的所有檔案、目錄全部移動到新的目錄,造成原本的目錄 是空的情形,此時所有連結裡面都是空的



2 則留言:

  1. 不好意思,一直有個問題,但到現在爬了很多文章還是沒找到解決方法

    Unity這個程式無法選擇安裝位置,默認就是裝到C槽,然而我現在的C槽是容量較小的SSD固態硬碟,因此為了減少C槽容量的減少我有上網爬過文章,但卻碰上了一點錯誤

    https://www.itread01.com/content/1542623649.html

    主要錯誤出現在我輸入完第二行的mklink那行後出現了"存取被拒絕"

    一直都找不到原因,爬文也上網爬過了,始終沒有解決方法,實在是很頭痛

    爬著爬著看到你這篇文章,不曉得講的是不是同一個東西?(完全是這方面外行)

    回覆刪除
  2. 不好意思,我現在才看到有人留言,google 居然沒有通知(XD),
    首先 Unity 我沒有裝過,如果照你給我的這個連結,用的是 -j,是 NTFS 的軟連結,
    只能是目錄,或者你真的是沒有權限,要對來源和目的資料夾有相應的權限才行(右鍵內容/安全性)

    回覆刪除