ln -s軟鏈接文件算文件嗎


場景:

開發A在windows環境下完成了開發,配置管理員cm搭建jenkins在centos環境下編譯,cm編譯失敗,但是開發A在他的windows環境下可以編譯過,最后發現是某幾個so文件的軟鏈接方式不一樣導致的,在linux上編譯,需要重新使用ln -s 來設置軟鏈接,此處,我們不關注windows是如何設置軟鏈接的。

此時比如/root/third/目錄下有文件:

libffpeg.so

libffpeg.so.12.11

其中libffpeg.so是軟鏈接,軟鏈接的原始文件是libffpeg.so.12.11,如果直接執行ln -s libffpeg.so.12.11 libffpeg.so 會直接報錯libffpeg.so已經存在,必須刪除以后才能執行成功,此時,shell腳本,我們會這樣寫:

#!/bin/sh
if [ -f libffpeg.so ] ; then
    rm libffpeg.so
    ln -s libffpeg.so.12.11 libffpeg.so
fi

你會發現這個if完全沒有執行,我們用的是 “ -f ”參數來判斷這個軟鏈接文件是否存在,那么軟鏈接文件是不是一個文件呢,其實軟鏈接文件不能說是一個文件,只能算一種符號鏈接,所以使用“-f ” 來判斷文件是不行的,應該使用 “ -L”來判斷指定的是否為符號鏈接,正確的寫法如下:

#!/bin/sh
if [  -L libffpeg.so ] ; then
    rm libffpeg.so
    ln -s libffpeg.so.12.11 libffpeg.so
fi

結果顯示如下:

 

參考 if的條件判斷如下:

-d :判斷指定的是否為目錄
-z:判斷指定的變量是否存在值
-f:判斷指定的是否為文件
-L:判斷指定的是否為符號鏈接
-r:判斷指定的是否可讀
-w:判斷指定的是否可寫
-x:判斷存在的對象是否可以執行
!:測試條件的否定符號 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM