加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

Linux下軟鏈接的使用技巧

07/13 10:55
1796
閱讀需 10 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

軟鏈接概述

軟鏈接是Linux下常用的一種共享文件方式、目錄的方式,這種方式類似于Windows下的快捷方式。一般一個文件或者目錄在不同的路徑都需要的時候,可以通過創(chuàng)建軟鏈接的方式來共享,這樣系統(tǒng)下面只有一份源文件、目錄。另外,巧用軟鏈接,可以大大增加應(yīng)用程序的可移植性。

軟鏈接創(chuàng)建與刪除

軟鏈接創(chuàng)建與刪除比較簡單,使用ln命令創(chuàng)建鏈接文件,格式如下:

1ln??-s??[源文件或目錄]??[目標(biāo)文件或目錄]

示例:
建立一個指向/usr/local/www的軟鏈接到/tmp下面:

1$:?ln?-s?/usr/local/www?/tmp/www
2$:?ls?/tmp/www?-l
3$:?lrwxrwxrwx?1?fens?????fens???????14?9月??12?08:56?www?->?/usr/local/www

刪除軟鏈接:

1rm?/tmp/www?

注意:刪除的時候,如果是目錄,結(jié)尾時,不要加“/”,不然會把指向的目錄給刪掉!

軟鏈接使用技巧

共享目錄文件

一般做嵌入式Linux開發(fā),linux的虛擬機都會安裝好多平臺的交叉編譯器,這些編譯器可能會用到一些庫,庫在使用的時候,需要將頭文件放到編譯器的路徑下面,這樣程序編譯的時候,會自動找到頭文件,這里以boost庫為例。
下面是我的虛擬機里:

1drwxr-xr-x?12?1007?users?4.0K?7月??18??2019?arm-himix200-linux
2drwxr-xr-x??9?root?root??4.0K?1月??24??2017?arm-hisiv300-linux
3drwxr-xr-x?10??520???520?4.0K?5月???5??2019?arm-hisiv500-linux
4drwxr-xr-x?10??520???520?4.0K?6月???9?10:30?arm-hisiv600-linux

boost庫由于85%的模塊只需要引用頭文件就可以使用,所以使用也比較方便,不用編譯;所以庫文件也比較大,在每一種編譯器下都會使用,通過建軟鏈接的方式共享文件,也減少了磁盤空間占用,下面是我建立的軟鏈接:

 1$ls?arm-himix200-linux/target/usr/include/boost?-l
 2lrwxrwxrwx?1?root?root?10?7月??19??2018?arm-himix200-linux/target/usr/include/boost?->?/opt/boost
 3
 4$ls?arm-hisiv300-linux/target/usr/include/boost?-l
 5lrwxrwxrwx?1?root?root?10?5月??12??2018?arm-hisiv300-linux/target/usr/include/boost?->?/opt/boost
 6
 7$ls?arm-hisiv500-linux/target/usr/include/boost?-l
 8lrwxrwxrwx?1?root?root?10?7月??30??2019?arm-hisiv500-linux/target/usr/include/boost?->?/opt/boost
 9
10$ls?arm-hisiv600-linux/target/usr/include/boost?-l
11lrwxrwxrwx?1?root?root?10?7月??30??2019?arm-hisiv600-linux/target/usr/include/boost?->?/opt/boost
統(tǒng)一設(shè)備文件名,增強應(yīng)用程序可移植性

不同平臺的嵌入式Linux下,可能設(shè)備文件名、GPIO編號不一樣,比如有的平臺下,串口設(shè)備名稱為:ttySxx, 有的則是ttyAMAxx;這個產(chǎn)品的運行指示燈是gpio51控制,另一個產(chǎn)品是gpio32等。

所以不同平臺的應(yīng)用程序中要么加編譯開關(guān),宏定義來區(qū)分不同平臺的設(shè)備文件名稱,這樣會導(dǎo)致代碼臃腫,可讀性查,不同平臺需要不同編譯開關(guān),容易出錯。

而使用軟鏈接可以很好的解決這一問題,可以自己創(chuàng)建一個dev目錄(位置自己定),我習(xí)慣和應(yīng)用程序放在同級目錄下。
然后將這些設(shè)備文件用軟鏈接來統(tǒng)一名稱如:

平臺1:

 1$?cd?/usr/local/dev
 2$?ln?-s?/dev/ttyS1?./com1
 3$?ln?-s?/dev/ttyS2?./com2
 4$?ln?-s?/dev/ttyS3?./com3
 5$?ln?-s?/sys/class/leds/led_orange/brightness?./runLed
 6$?ln?-s?/sys/class/gpio/gpio211/value?./powerLed
 7$?ls?-l
 8#忽略我錯誤的時間
 9lrwxrwxrwx?1?fens?fens?10?1月???1??2000?com1?->?/dev/ttyS1
10lrwxrwxrwx?1?fens?fens?10?1月???1??2000?com2?->?/dev/ttyS2
11lrwxrwxrwx?1?fens?fens?11?1月???1??2000?com3?->?/dev/ttyS3
12lrwxrwxrwx 1 fens fens 29 1月?? 1  2000 power ->?/sys/class/gpio/gpio211/value
13lrwxrwxrwx 1 fens fens 37 1月?? 1  2000 runLed ->?/sys/class/gpio/gpio212/value

平臺2:

 1$?cd?/usr/local/dev
 2$?ln?-s?/dev/ttyAMA1?./com1
 3$?ln?-s?/dev/ttyAMA2?./com2
 4$?ln?-s?/dev/ttyAMA3?./com3
 5$?ln?-s?/sys/class/leds/led_orange/brightness?./runLed
 6$?ln?-s?/sys/class/gpio/gpio211/value?./powerLed
 7$?ls?-l
 8#忽略我錯誤的時間
 9lrwxrwxrwx?1?fens?fens?10?1月???1??2000?com1?->?/dev/ttyAMA1?
10lrwxrwxrwx?1?fens?fens?10?1月???1??2000?com2?->?/dev/ttyAMA2
11lrwxrwxrwx?1?fens?fens?11?1月???1??2000?com3?->?/dev/ttyAMA3
12lrwxrwxrwx 1 fens fens 29 1月?? 1  2000 power ->?/sys/class/gpio/gpio41/value
13lrwxrwxrwx 1 fens fens 37 1月?? 1  2000 runLed ->?/sys/class/gpio/gpio42/value

這樣只需要增加一個創(chuàng)建軟鏈接的腳本,在系統(tǒng)啟動的時候調(diào)用一下,就可以解決不同平臺設(shè)備文件不一樣的問題,應(yīng)用程序不用修改,驅(qū)動也不用改。

微信公眾號:fensnote

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險等級 參考價格 更多信息
MOCD207R2M 1 Fairchild Semiconductor Corporation Transistor Output Optocoupler, 2-Element, 2500V Isolation, LEAD FREE, PLASTIC, SOIC-8
$1.16 查看
DS24B33S+T&R 1 Maxim Integrated Products EEPROM, 4KX1, Serial, CMOS, PDSO8, 0.208 INCH, ROHS COMPLIANT, SOP-8
$2.75 查看
AFBR-5715APZ 1 Broadcom Limited Transceiver, 830nm Min, 860nm Max, 1250Mbps(Tx), LC Connector, Panel Mount, ROHS COMPLIANT
暫無數(shù)據(jù) 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

專注嵌入式Linux應(yīng)用開發(fā),C/C++技術(shù)交流;Qt編程技術(shù)交流。