通常情况下,ls -la
会把这个给我,但我猜 CentOS 不一样。我需要验证符号链接是否存在。
答案1
如果你的意思是“这个链接实际上是否指向一个文件?”,(我认为你确实是这么想的,因为:
if [[ -e "$file" ]]; then echo it is there; fi
如果只是想测试文件是否是符号链接,那么:
if [[ -h "$file" ]]; then echo it is a link; fi
这是针对 Bash 量身定制的,并不是最便携的方式。还有一点小知识,使用双括号语法时不需要引号。
如果您想搜索断开的链接,请使用find -L . -type l
。
如果你只是希望 ls 能够再次使用不同的颜色来标记断开的链接,可以尝试一下eval $(dircolors)
答案2
如果您要验证您已经知道可以使用的文件。此外,文件还可用于识别文件对象的类型:
[akula@jasonlawer ~]$ file /var/www/html/2001914
/var/www/html/2001914: symbolic link to `/tickets/rhev/2001914.zip_FILES/'
如果它是作为软件包的一部分提供的,那么最简单的方法就是使用 RPM 来验证软件包
[akula@jasonlawer ~]$ rpm -V httpd
答案3
您可以使用
if [[ -f `readlink filename` ]]; then
....
fi
readlink 命令返回符号链接的目标。-f 测试该文件是否存在。请注意 ` 字符,它不是 " 或 '。它可以帮助您执行内部 bash 命令,就像 SQL 系统中的内部查询一样。