Linux上的符號連結是一個非常棒的特性,但是它們可能會斷開並指向任何東西。下面是如何找到斷開的符號連結,檢查它們,並在需要時從系統中刪除它們。
符號連結,也稱為“軟連結”和“符號連結”,是一種可以指向檔案和目錄的快捷方式。符號連結看起來就像檔案管理器視窗中的常規檔案或目錄。它還顯示為終端視窗中的檔案列表中的一個條目。符號連結指向的檔案或目錄可以位於檔案系統樹中的任何位置。
例如,假設您的主目錄中有一個名為“dave link”的符號連結,它指向一個名為“text”的檔案-檔案.txt“位於檔案系統樹的其他位置。在符號連結上使用的命令將自動應用於它所指向的檔案。如果您嘗試在符號連結上使用cat或less,您將實際看到“text”的內容-檔案.txt“檔案。
標準Linux安裝包含許多符號連結。即使你沒有自己建立任何東西,作業系統也會使用它們。應用程式安裝例程通常使用符號連結指向可執行檔案。軟體更新後,二進位制檔案將替換為新版本,只要新檔名與舊檔名相同,所有符號連結都將繼續工作。
透過在根目錄中使用ls,我們可以很容易地看到一些符號連結。有些條目在我們的ubuntu20.10測試機上以不同的顏色顯示,它們以淺藍色顯示。
我們鍵入以下內容:
ls /我們可以使用-l(longlisting)選項進行更深入的研究。我們鍵入以下命令來檢視所有“lib”條目和單個“bin”條目:
ls -l /lib* /bin每行的開頭都有一個“l”,表示該專案是一個符號連結。“->”後面的文字顯示符號連結所指向的內容。在我們的示例中,目標是所有目錄。
所有者、組和其他人的許可權列為讀、寫和執行。這些是預設的假條目。它們並不反映符號連結指向的物件的實際許可權。目標檔案或目錄上的許可權優先,並由檔案系統授予。
當符號連結所指向的檔案被刪除或移動到另一個位置時,符號連結將被破壞(或掛起)。如果應用程式的解除安裝例程不能正常工作,或者在它完成之前被中斷,則可能會留下斷開的符號連結。
如果有人在不知道符號連結指向它的情況下手動刪除檔案,那麼這些符號連結將不再工作。它們就像路標指向一個被推土機推平的城鎮。
在當前目錄中使用一個名為“hello”的符號連結可以很容易地看到這種行為。我們鍵入以下內容,使用ls檢視:
ls -l它指向一個名為“bin”的目錄中名為“htg”的程式。如果我們“執行”符號連結,它將為我們執行程式:
./hello我們現在可以透過直接執行程式來檢查是否發生了這種情況:
../bin/htg正如所料,我們得到了同樣的答覆。刪除程式檔案:
rm ../bin/htg現在,當我們檢視符號連結時,我們看到它以紅色列出,因為Linux知道它已損壞。它還告訴我們以前的情況,這樣我們就可以替換檔案,重新編譯程式,或者做任何必要的事情來修復符號連結。
請注意,如果嘗試執行symlink,則得到的錯誤引用的是symlink名稱,而不是symlink指向的程式的名稱。
我們鍵入以下內容:
./hello大多數find的現代版本都有xtype(擴充套件型別)選項,這簡化了查詢斷開的符號連結的過程。我們將使用帶有xtype的l標誌來告訴它搜尋連結。按如下方式使用find和xtype,不帶任何其他型別標誌,強制xtype返回斷開的連結:
find . -xtype l在我們的測試主目錄中執行這個命令會發現很多斷開的符號連結。請注意,預設情況下,搜尋是遞迴的,因此它會自動搜尋所有子目錄。
如我們所料,我們故意破壞的“你好”符號已經列出。另一個符號連結與Firefox瀏覽器相關,其餘的與snap相關。
如果我們使用-l(lines)選項將輸出透過wc,我們可以計算行數,這與計算斷開的符號連結相同。
我們鍵入以下內容:
find . -xtype l | wc -l我們被告知我們有24個符號連結被破壞,沒有任何意義。
在衝入並刪除所有斷開的符號連結之前,請檢視find命令的結果。看看是否有任何損壞符號連結的有效原因。
有時,符號連結可能是問題所在,而不是目標檔案。如果符號連結建立不正確,它可能什麼都沒有指向,但真正的目標是存在的。在這種情況下,重新建立符號連結將是解決方法。
也有可能是一個明顯損壞的符號連結被用作其他東西,例如檔案鎖的指示器或其他go/no-go指示器。Firefox做到了這一點;這就是我們列表中的第一個符號連結。不過,我們的測試機器上沒有使用Firefox,所以刪除它是安全的。
也有可能目標只是週期性地出現,這是特定軟體的預期(和期望)行為。可能目標檔案是從另一臺機器或雲複製的,它執行它的功能,然後再次被刪除,結果在下一個週期被另一個程式替換。
斷開的符號連結也可能是軟體安裝失敗的徵兆。在這種情況下,不應刪除符號連結,而應手動修復它或重複安裝。
修復了需要保留的斷開連結後,重複該命令執行搜尋。然後,搜尋結果中應該沒有固定的符號連結。
為了安全起見,最好將符號連結刪除限制在自己的目錄中。在以根目錄或系統目錄執行這些命令時要格外小心。
-exec(execute)選項對查詢搜尋結果執行命令。我們將使用rm刪除每個斷開的符號連結。當find發現每個斷開的符號連結時,{}字串被替換為每個斷開符號連結的名稱。
我們必須使用分號(;)來終止希望-exec執行的命令列表。我們將使用反斜槓(\)來“轉義”分號,因此它被視為find命令的一部分,而不是Bash應該執行的操作。
我們鍵入以下內容:
find . -xtype l -exec rm {} \;我們返回到命令提示符,沒有任何跡象表明發生了什麼事。為了驗證已刪除斷開的連結,我們重複該命令以查詢它們,如下所示:
find . -xtype l沒有任何匹配結果,這意味著已刪除斷開的符號連結。
同樣,在執行刪除符號連結的命令之前,請務必花時間檢視符號連結列表。您可以透過執行命令在適當的目錄中刪除任何您不確定的內容來避免刪除它們。
例如,在上面,我們可以在“.snap”目錄中執行命令,然後手動刪除單獨的“hello”符號連結。這會使Firefox鎖符號連結保持不變。
...就是為您準備的。我們將簡要詳細地討論損壞的軟體包,如何檢查系統是否包含損壞的軟體包,以及如何正確地重新安裝它們。 ...
... 今天我們將介紹在哪裡可以找到Safari擴充套件,如何安裝它們,如何更新它們,以及如何禁用或解除安裝您不再需要的任何擴充套件。 ...
... 讓我們看看什麼是符號連結,如何在Linux以及macOS和Windows上建立符號連結,為什麼需要這種特殊型別的快捷方式,等等。 ...
...流媒體裝置的資訊,你還應該看看我們的文章,詳細介紹如何加速你的亞馬遜Fire Stick以及如何在亞馬遜Fire Stick上安裝滑鼠。 ...
...改其目錄,您可以控制他們可以訪問哪些命令。下面介紹如何在Linux上設定受限shell。 受限炮彈 受限shell不是另一個shell。這是標準外殼的另一種模式。Bash、Korn、Fish和其他shell都可以在受限shell模式下啟動。在本文中,我們將...
...,而且您不必記住一組晦澀難懂的命令列選項。 相關:如何使用ls命令列出Linux上的檔案和目錄 快速比較 讓我們使用ls給出一個長列表(-l選項),其中包含人類可讀的檔案大小(-h選項): ls -lh ana.h 從左到右,ls提供的資訊是...
...在shell中的,因此Bash不必費勁地查詢這些命令。 但是Bash如何定位其他命令、程式和外部獨立二進位制檔案呢?Bash使用路徑,實際上是一組路徑,每個路徑指向一個目錄。然後,它在每個目錄中搜索與您試圖執行的命令或程式匹...