軟鏈接和硬鏈接的應(yīng)用
- 軟鏈接又稱為符號(hào)鏈接:類似于快捷方式喝峦,存儲(chǔ)的是文件的絕對(duì)路徑饵撑。是另外一種文件剑梳,在硬盤上有獨(dú)立的區(qū)塊唆貌,訪問時(shí)替換自身路徑。
- 硬鏈接:與普通文件沒什么不同阻荒,inode 都指向同一個(gè)文件在硬盤中的區(qū)塊
由于 Linux 下的文件是通過索引節(jié)點(diǎn)(Inode)來識(shí)別文件挠锥,在 Linux 的文件系統(tǒng)中,保存在磁盤分區(qū)中的文件不管是什么類型都給它分配一個(gè)編號(hào)侨赡,稱為索引節(jié)點(diǎn)號(hào) (Inode Number)。在 Linux 中粱侣,多個(gè)文件名指向同一索引節(jié)點(diǎn)是存在的羊壹,所以硬連接指通過索引節(jié)點(diǎn)來進(jìn)行的連接,即每一個(gè)硬鏈接都是一個(gè)指向?qū)?yīng)區(qū)域的文件齐婴。
硬鏈接的作用是允許一個(gè)文件擁有多個(gè)有效路徑名油猫,這樣用戶就可以建立硬鏈接到重要文件,以防止“誤刪”的功能,由于對(duì)應(yīng)該目錄的索引節(jié)點(diǎn)有一個(gè)以上的連接柠偶,假設(shè)我們刪除了原始的 foo.txt 文件情妖,此時(shí)文件的內(nèi)容依然存在,所以只刪除一個(gè)連接并不影響索引節(jié)點(diǎn)本身和其它的連接诱担,只有當(dāng)最后一個(gè)鏈接被刪除后毡证,文件的數(shù)據(jù)塊及目錄的連接才會(huì)被釋放,也就是說蔫仙,文件才會(huì)被真正刪除
參考文檔:5 分鐘讓你明白“軟鏈接”和“硬鏈接”的區(qū)別
用到的地方
-
yarn workspace
, monorepo 的代碼倉庫中使用 yarn workspace 管理項(xiàng)目的方式, projectB 依賴 projectA料睛,會(huì)在根 node_modules 下創(chuàng)建一個(gè) projectA 的軟鏈接
指向本地的 projectA -
pnpm
:省內(nèi)存空間,只因?yàn)榘旬?dāng)前計(jì)算機(jī)所有的 npm 依賴都下載到一個(gè)地方摇邦,加入 projectA 用到了恤煞,會(huì)在 node_modules 下創(chuàng)建一個(gè)硬鏈接
指向?qū)嶋H這個(gè)包所以的地方。
-bit 組件
: node_modules/@bit 目錄下會(huì)有軟鏈
到 components/demo/zoo 的 my-test.demo.zoo施籍,這樣在業(yè)務(wù)代碼里就可以通過 @bit/my-test.demo.zoo 引入 Zoo 組件 -
npm link
: 只在/usr/local/lib/node_modules 里存的不是真實(shí)的文件居扒,而是存了一個(gè)快捷方式(即創(chuàng)建一個(gè)軟鏈接
),指向你當(dāng)前執(zhí)行 npm link 的目錄 -
npm run xxx
, 比如 npm i @vue/cli-service 會(huì)在 node_modules/.bin 目錄中創(chuàng)建 vue-cli-service 為名的可執(zhí)行文件丑慎。.bin 目錄不是任何一個(gè) npm 包喜喂,目錄下的文件,表示這是一個(gè)個(gè)軟鏈接立哑,打開文件可以看到文件頂部#!/usr/bin/env node
夜惭,表示這是一個(gè)腳本。
npm 腳本(npm scripts)的原理: 每當(dāng)執(zhí)行 npm run铛绰,就會(huì)自動(dòng)新建一個(gè) Shell诈茧,在這個(gè) Shell 里面執(zhí)行指定的腳本命令。npm run 新建的這個(gè) Shell捂掰,會(huì)將當(dāng)前目錄的 node_modules/.bin 子目錄加入 PATH 變量敢会,執(zhí)行結(jié)束后曾沈,再將 PATH 變量恢復(fù)原樣。當(dāng)前目錄的 node_modules/.bin 子目錄里面的所有腳本鸥昏,都可以直接用腳本名調(diào)用塞俱,而不必加上路徑。npm scripts 使用指南
參考文檔