2

Normally, ls -la would give this to me but I guess CentOS is different. I need to verify that a symbolic link exists.

1
  • You mean if the file the symbolic link is pointing to exists ?
    – Dominik
    Mar 11, 2010 at 1:51

3 Answers 3

5

If you mean "Does the link actually point to a file?", (which I think you do because lthen:

if [[ -e "$file" ]]; then echo it is there; fi

If just want to test if the file is a symbolic link, than:

if [[ -h "$file" ]]; then echo it is a link; fi

This is tailored toward Bash, and not the most portable way. And as a little bit of trivia you don't need the quotes when using the double bracket syntax.

If you want to search for broken links than use find -L . -type l.

If you just want ls to work again with its different colors for broken links, have a go at eval $(dircolors)

0
1

If you're looking to verify a file you already know you can use. Additionally file can be used to identify the type of file object:

[akula@jasonlawer ~]$ file /var/www/html/2001914
/var/www/html/2001914: symbolic link to `/tickets/rhev/2001914.zip_FILES/'

If it was provided as part of a package though the easiest thing to do is just use RPM to verify the package using

[akula@jasonlawer ~]$ rpm -V httpd
1

you can use

if [[ -f `readlink filename` ]]; then
....
fi

readlink command returns target of the symbolic link. -f tests if that file exists. Be carefull about ` character, its not " or '. It helps you to execute inner bash command like a inner query in an sql system.

You must log in to answer this question.