軟鏈接概述
軟鏈接是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的虛擬機(jī)都會安裝好多平臺的交叉編譯器,這些編譯器可能會用到一些庫,庫在使用的時候,需要將頭文件放到編譯器的路徑下面,這樣程序編譯的時候,會自動找到頭文件,這里以boost庫為例。
下面是我的虛擬機(jī)里:
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è)備文件名,增強(qiáng)應(yīng)用程序可移植性
不同平臺的嵌入式Linux下,可能設(shè)備文件名、GPIO編號不一樣,比如有的平臺下,串口設(shè)備名稱為:ttySxx, 有的則是ttyAMAxx;這個產(chǎn)品的運(yù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