Readlink

解釋 readlink 命令的選項

  • March 4, 2017

readlink有人可以用簡單的語言向我解釋以下命令選項:

  -f, --canonicalize
     canonicalize  by  following  every symlink in every component of
     the given name recursively; all  but  the  last  component  must
     exist

  -e, --canonicalize-existing
     canonicalize  by  following  every symlink in every component of
     the given name recursively, all components must exist

  -m, --canonicalize-missing
     canonicalize by following every symlink in  every  component  of
     the  given  name recursively, without requirements on components
     existence

我認為這是不言自明的,所以我真的不知道對你來說聽起來模棱兩可的部分……讓我們看一個例子:

–規範化

$ mkdir /tmp/realdir
$ mkdir /tmp/subdir
$ ln -s /tmp/realdir /tmp/subdir/link
$ cd /tmp

$ readlink -f ./subdir/link/nonexistentdir/
/tmp/realdir/nonexistentdir

$ readlink -f ./subdir/link/nonexistentfile.txt
/tmp/realdir/nonexistentfile.txt

無論選項是什麼,都readlink將: - 將相對路徑轉換為絕對路徑 - 將符號連結名稱轉換為真實路徑

正如您在上面看到的,使用-f,readlink並不關心這條路徑的最後一部分(此處nonexistentfile.txt)是否存在。

如果此路徑的另一部分不存在,readlink則不會輸出任何內容,並且返回程式碼不同於 0(這意味著發生了錯誤)。看:

$ readlink -f /tmp/fakedir/foo.txt
$ echo $?
1

–canonicalize-existing

如果您嘗試相同的操作-e

$ readlink -e ./subdir/link
/tmp/realdir

$ readlink -e ./subdir/link/nonexistentfile.txt
$ echo $?
1

使用-e,如果任何路徑組件不存在,readlink將不輸出任何內容,並且返回程式碼不同於 0。

–canonicalize-缺失

-m選項是相反的-e。不會進行任何測試來檢查 path 的組件是否存在:

$ readlink -m ./subdir/link/fakedir/fakefile
/tmp/realdir/fakedir/fakefile

$ ln -s /nonexistent /tmp/subdir/brokenlink

$ readlink -m ./subdir/brokenlink/foobar
/nonexistent/foobar

引用自:https://unix.stackexchange.com/questions/202855