Files

如何判斷軟連結的目標是目錄還是文件?

  • January 23, 2015

給定ll命令輸出如下

#> ll
lrwxrwxrwx ...

如何確定軟連結的目標是來自“lrwxrwxrwx”的目錄還是文件?

您可以使用-Fls 的參數來獲取:

  -F, --classify
         append indicator (one of */=>@|) to entries

IE:

# ln -s videos Videos
# ls -l
lrwxrwxrwx. 1 guido guido    6 Jan 23 14:11 videos -> Videos
# ls -lF
lrwxrwxrwx. 1 guido guido    6 Jan 23 14:11 videos -> Videos/

無論如何,我建議您創建指向這樣的目錄的符號連結:

# ln -s Videos/ videos

在這種情況下,即使沒有分類選項,您也會得到尾部斜杠。

的輸出(ll我假設它是 的 shell 別名ls -l)在符號連結的模式/權限中不包含此資訊。在 Linux 上(symlink(2)):

   The  permissions  of  a  symbolic link are irrelevant; the ownership is
   ignored when following the link, but is checked when removal or  renam-
   ing  of  the  link is requested and the link is in a directory with the
   sticky bit (S_ISVTX) set.

除了在ls其他地方提出的建議之外,還有一些不那麼冗長的方法,並且適合編寫腳本。

file支持-L導致它遵循(取消引用)符號連結:

$ file /usr/local/bin/xzcat
/usr/local/bin/xzcat: symbolic link to `xz'

$ file -L /usr/local/bin/xzcat
/usr/local/bin/xzcat: ELF 32-bit LSB executable, [...]

$ file  /var/adm
/var/adm: symbolic link to `log'

$ file -L /var/adm   
/var/adm: directory

-L選項不是POSIX,但應該適用於任何當代 Linux 和 *BSD。它將遵循多個符號連結(ls沒有)。為了更強大的使用,它還支持各種輸出格式,例如file -L -b --mime-type /var/adm,以及-0零分隔的文件名。

GNUstat更簡單:

$ stat -c %F /var/adm
symbolic link

$ stat -L -c %F /var/adm
directory

-L選項的作用與 for 相同file,該-c %F選項指示stat僅輸出文件的類型,有關更多資訊,請參見stat(1)手冊頁。*BSDstat和 GNU 不太一樣stat,格式字元串不一樣,-f %HT改用吧。

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