Bash 指令碼例項:獲取符號連結的目標位置

夢共裡醉發表於2023-01-26
我們都熟悉   中的符號連結,通常稱為符號連結或軟連結,符號連結是指向任何檔案系統中的另一個檔案或目錄的特定檔案。

本文將介紹 Linux 中符號連結的基礎知識,並建立一個簡單的 bash  來獲取符號連結的目標位置。

符號連結的型別

主要有兩種型別的符號連結,即:

硬連結:硬連結是指向檔案系統中的檔案或目錄的直接指標。硬連結只能在與目標檔案相同的檔案系統中建立。

軟連線:軟連結是檔案或目錄的間接快捷方式,可以存在於檔案系統中的任何位置。軟連結可以指向不同檔案系統中的檔案。

如何建立符號連結

要在 Linux 中建立符號連結,我們使用  ln  。執行不帶選項的 會建立指向指定目標檔案的硬連結。

ln 命令的一般語法是:

ln [OPTIONS]

如要建立軟連結,需要新增  -s 選項:

ln -s [OPTION]
例項一:建立檔案的軟連線

以下命令在我們的主目錄中建立指向 /var/log/audit/audit.log檔案的軟連結:

[root@localhost ~]# ln -s /var/log/audit/audit.log ~/audit.log

Bash 指令碼例項:獲取符號連結的目標位置Bash 指令碼例項:獲取符號連結的目標位置

例項二:建立目錄的軟連線

以下命令在我們的主目錄中建立指向 /var/log目錄的軟連結:

[root@localhost ~]# ln -s /var/log ~/log

Bash 指令碼例項:獲取符號連結的目標位置Bash 指令碼例項:獲取符號連結的目標位置

如何刪除符號連結

要刪除符號連結,我們使用命令  unlink 後跟要刪除的符號連結的路徑。

[root@localhost ~]# unlink ~/log

下圖可看到,log的快捷方式沒有了。
Bash 指令碼例項:獲取符號連結的目標位置Bash 指令碼例項:獲取符號連結的目標位置
注意:如果刪除目標檔案或目錄,請記得刪除符號連結,因為符號連結不會隨著檔案的刪除而刪除。

如何獲取符號連結的目標檔案或目錄

每個符號連結都會指向一個目標檔案或目錄(除非損壞)。要獲取符號連結的目標檔案/目錄,我們使用 readlink命令顯示符號連結的目標。

例如,要獲取我們在前面部分中建立的  audit.log 檔案的目標,我們可以執行以下操作:

[root@localhost ~]# readlink ~/audit.log 
/var/log/audit/audit.log
獲取符號連結的 Bash 

我們可以建立一個簡單的 bash 指令碼,該指令碼接受路徑並列出所有符號連結及其目標檔案或目錄:

[root@localhost ~]# vim symlink.sh 
#!/bin/bash
read -p "Provide the directory to evaluate: " target_dir
cd $target_dir
links=$(find . -maxdepth 1 -type l -ls | awk '{print $11}')
for link in $links
do
    echo "$link -> $(readlink $link)"
done

Bash 指令碼例項:獲取符號連結的目標位置Bash 指令碼例項:獲取符號連結的目標位置
該指令碼首先詢問使用者要獲取的目錄。然後,指令碼轉到提供的目錄並找到目錄中的所有符號連結,並將輸出傳遞給 awk命令。

awk 輸出並定位符號連結,並將它們儲存到一個名為 links 的變數中。

然後我們建立一個迴圈,抓取links變數中的每個連結,並使用  readlink 命令獲取它們的目標位置。

最後,顯示符號連結和目標目錄。下面是一個示例輸出:

[root@localhost ~]# ./symlink.sh 
Provide the directory to evaluate: /etc
./rc.local -> rc.d/rc.local
./redhat-release -> centos-release
./system-release -> centos-release
./init.d -> rc.d/init.d
./rc0.d -> rc.d/rc0.d
./rc1.d -> rc.d/rc1.d
./rc2.d -> rc.d/rc2.d
./rc3.d -> rc.d/rc3.d
./rc4.d -> rc.d/rc4.d
./rc5.d -> rc.d/rc5.d
./rc6.d -> rc.d/rc6.d
./localtime -> ../usr/share/zoneinfo/Asia/Shanghai
./mtab -> ../proc/self/mounts
./yum.conf -> dnf/dnf.conf
./grub2.cfg -> ../boot/grub2/grub.cfg

Bash 指令碼例項:獲取符號連結的目標位置Bash 指令碼例項:獲取符號連結的目標位置

總結

本文介紹瞭如何在 Linux 中使用符號連結的基礎知識。然後我們建立了一個簡單的指令碼來查詢指定目錄中的符號連結並顯示它們的源和目標位置。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31524109/viewspace-2932972/,如需轉載,請註明出處,否則將追究法律責任。

相關文章