Files
如何判斷軟連結的目標是目錄還是文件?
給定
ll
命令輸出如下#> ll lrwxrwxrwx ...
如何確定軟連結的目標是來自“lrwxrwxrwx”的目錄還是文件?
您可以使用
-F
ls 的參數來獲取:-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
零分隔的文件名。GNU
stat
更簡單:$ 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
改用吧。