2019年4月23日 星期二

Linux Shell Scripting: 符號連結檔案的存在判斷 Link Exist or Linked Target Exist ?


最近因為工作上的需求,接觸到不少 Linux Shell 相關的系統應用,其中遇到了一個蠻值得注意的細節,就是在使用 test 指令 (或是中括號 [] ) 來製作判斷可能為符號連結 (symbolic link) 的位置,該『檔名』是否存在時,若只單獨考慮 exist (-e) 或是 is link (-L) 判斷條件是不夠的,必須同時使用兩者才能正確判斷。

為了釐清兩者的關係,在這裡做了個小實驗
## 新增一個普通檔案 "normalfile123"
$ touch "normalfile123"
$ if [ -e "normalfile123" ]; then echo "TRUE"; else echo "FALSE"; fi
TRUE
$ if [ -L "normalfile123" ]; then echo "TRUE"; else echo "FALSE"; fi
FALSE

## 不存在的檔名 "notexisting1234" 
$ if [ -e "notexisting1234" ]; then echo "TRUE"; else echo "FALSE"; fi
FALSE
$ if [ -L "notexisting1234" ]; then echo "TRUE"; else echo "FALSE"; fi
FALSE

## 建立指向 "normalfile123" 的符號連結 "link123"
$ ln -s "link123" "normalfile123"
$ if [ -e "link123" ]; then echo "TRUE"; else echo "FALSE"; fi
TRUE
$ if [ -L "link123"  ]; then echo "TRUE"; else echo "FALSE"; fi
TRUE

## 刪除 "normalfile123" ;使符號連結 "link123" 成為無效連結
$ rm "normalfile123"
$ if [ -e "link123" ]; then echo "TRUE"; else echo "FALSE"; fi
FALSE
$ if [ -L "link123"  ]; then echo "TRUE"; else echo "FALSE"; fi
TRUE

實驗中得到的結果:

存在的普通檔案 不存在的檔名 有效符號連結 無效符號連結
-e True False True False
-L False False True True
-e or -L True False True True

結果其實不難推測得到,在讀寫 Symbolic Link 類型的檔案時,系統預設是直接看到連結指向的檔案而非連結本身,就連在使用 C++ 的標準函式庫 fopen() 讀寫檔案時也一樣,因此在開發上若遇到符號連結務必多加留意。

參考資料:

2018年8月5日 星期日

RTL8188 迷你無線網卡在 Raspberry Pi Raspbian 上開啟 AP-Mode 紀錄

今天心血來潮,把之前在某機器人王國清倉大拍賣時撿到的 Raspberry Pi Model B+ 接上在Openlab.Taipei 撿到的 netcore NW337 迷你無線網卡,打算來架個實驗 AP 。



這張 netcore NW337 迷你無線網卡是使用瑞昱的 RTL8188EUS 晶片,之前用過 RTL8188CU 這顆晶片的小網卡,或許是因為比較早期的產品,相容性比這顆 RTL8188EUS 好許多,不過隨著作業系統的更新,現在的 Windows 10 和最新版的 Raspbian ( Kernel 4.14.52+ ) 也支援 RTL8188EUS Station Mode的隨插即用。因為螃蟹卡公司的官方網站在產品資訊的提供相當有限,所以 RTL8188 系列的詳細差異列表可以到 devWiki 查閱。

2018年4月28日 星期六

AVR-TransistorTester: LCR-T4 元件測試儀電源改造紀錄

AVR-TransistorTester是一個由德國原作Markus Frejek 在 mikrocontroller.net上發表,目前由  Karl-Heinz Kübbeler 繼續維護的開放專案,主要在於使用 MCU 搭配精簡的電路做出多功能、精確的電子元件測試儀。除了能測試基本的被動元件之外,更可以測試出多種電晶體、二極體等主動元件的通用參數。官方的程式碼中還附有頻率產生器、 PWM 脈波產生器、計頻器、 UART 輸出或是電壓表等炫砲功能。我最推崇的是官方韌體最新版本中的電容量測校正功能,經過校正之後,在pF等級的電容測試,測到的可以精準落在高精度溫度補償電容的誤差範圍內,對於做通訊類的實驗是非常實用的。不僅如此,官方的文件更是詳盡到幾乎每種測試功能都有錯誤率分析的統計圖表,測試流程圖與等校模型應有盡有。軟體的部分使用make建置,方便使用者對針對自己的硬體進行客製化,程式碼中註解也很完整,讓初次使用的新手可以很快速的入門。

2016年9月8日 星期四

[Blender] 好用的 Network Renderer

上次這麼瘋狂的用Blender也是N年之前的事了,更新到最新的2.7發現新功能多了好多,以前覺得很強但是還在 Testing 的 addons 現在也都進入 Stable 版。今天就來介紹這個以前就覺得很屌的功能:
Network Renderer
用起來相當簡單,主要功能就是把另一台或多台能跑 Blender 的電腦當作 Render Farm 服務,

2015年5月21日 星期四

簡易伺服馬達測試器555 Timer Servo Tester

工欲善其事,必先利其器。

今年年初,Openlab.Taipei啟動了口丁蛋蛋 (honki's egg) 計畫,展出的場地正好在高雄兒美館。身為一位來自高雄的熱血小志工,就有義務在蛋蛋們有難的時候進行一個即刻救援的任務…

2015年5月11日 星期一

我的74系列二進位石英鐘 74XX Based Crystal Binary Clock

去年(大一下)的時候,因緣際會下加入了班上同學創的小小讀書會。原本一開始聚會方向大致在分享自己高中時代學習的心路歷程,後來系主任告訴我們學校有鼓勵學生進行自主學習計畫的比賽。報名後才開始找到了讀書會的新目標:
製作一個二進制鐘

2014年12月31日 星期三

「曼哈頓式電路」 Manhattan-style Circuit Construction

看過我前幾篇文章的朋友可能會發現,我先前製作的電路板不是用美工刀雕刻就是買現成的洞洞板。這時,你可能會有疑問:
為何不去洗板子呢?