1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257
|
<!--startcut ======================================================= -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<META NAME="generator" CONTENT="lgazmail v1.3E.t">
<TITLE>The Answer Gang 65: How can you do a recursive search to find broken symbolic links?</TITLE>
</HEAD><BODY BGCOLOR="#FFFFFF" TEXT="#000000"
LINK="#3366FF" VLINK="#A000A0">
<!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
<P> <hr>
<CENTER>
<!-- *** BEGIN navbar *** -->
<!-- *** END navbar *** -->
</CENTER>
</p>
<P> <hr> <P>
<!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
<center>
<H1><A NAME="answer">
<img src="../../gx/dennis/qbubble.gif" alt="(?)"
border="0" align="middle">
<font color="#B03060">The Answer Gang</font>
<img src="../../gx/dennis/bbubble.gif" alt="(!)"
border="0" align="middle">
</A></H1>
<BR>
<H4>By Jim Dennis, Ben Okopnik, Dan Wilder, Breen, Chris, and the Gang,
the Editors of Linux Gazette...
and You!
<br>Send questions (or interesting answers) to
<a href="mailto:linux-questions-only@ssc.com">linux-questions-only@ssc.com</a>
</H4>
<p><em><font color="#990000">There is no guarantee that your questions
here will <b>ever</b> be answered. You can be published anonymously
- just let us know!
</font></em></p>
</center>
<p><hr><p>
<!-- endcut ======================================================= -->
<!-- begin 5 -->
<H3 align="left"><img src="../../gx/dennis/qbubble.gif"
height="50" width="60" alt="(?) " border="0"
>How can you do a recursive search to find broken symbolic links?</H3>
<p><strong>From bandido
</strong></p>
<p align="right"><strong>Answered By Ben Okopnik, Faber Fedor, Mike Orr
<br></strong></p>
<P><STRONG><IMG SRC="../../gx/dennis/qbub.gif" ALT="(?)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
I found the odd broken link after a few upgrades, and was wondering how
can I hunt down any other such beasties, 'ls' doesn't have any suitable
way to delimit, and poking about in man pages for find etc made me quite
nautious.
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
> [Faber]
Perhaps you should take some Dramamine.
<IMG SRC="../../gx/dennis/smily.gif" ALT=":-)"
height="24" width="20" align="middle"> The man pages are you friend. If you do a "man find" and then type "<TT>/link</TT>" (that will do a search on the word link) you'll find all kinds of references to the work "link" (the owrk "link" will be highlighted). Scroll down a couple of pages and you'll find the "type" option.
</BLOCKQUOTE>
<BLOCKQUOTE>
So, to find all the links on your system, you would type
</BLOCKQUOTE>
<blockquote><code><font color="#000033"><br> find / -type l
</font></code></blockquote>
<BLOCKQUOTE>
Simple, no?
<IMG SRC="../../gx/dennis/smily.gif" ALT=":-)"
height="24" width="20" align="middle">
</BLOCKQUOTE>
<BLOCKQUOTE><IMG SRC="../../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
> [Ben]
No. The querent was asking how to find <EM>broken</EM> links, not all links.
</BLOCKQUOTE>
<BLOCKQUOTE>
What's needed here is the "symlinks" program, written by Mark Lord. It will
find and classify all the links, hard and soft, in the filesystem. If you
want to see all the dangling (i.e., broken) links on your system, just
type
</BLOCKQUOTE>
<blockquote><code><font color="#000033"><br>symlinks -r / | grep ^dangling # Recursive search starting from /
</font></code></blockquote>
<BLOCKQUOTE>
If you want to delete all the broken ones, just enter
</BLOCKQUOTE>
<blockquote><code><font color="#000033"><br>symlinks -dr / # Recurse and delete broken links starting from /
</font></code></blockquote>
<BLOCKQUOTE>
For me personally, this wouldn't work too well. I use dangling links as
placeholders; as an example, I've disabled NFS during the boot procedure by
"breaking" the symlink in "<TT>/etc/rc2.d</TT>":
</BLOCKQUOTE>
<blockquote><code><font color="#000033"><br>S19nfs-common -> ../init.d/nfs-common # Original link
<br>
<br>S19nfs-common -> ../init.d/nfs-commonXXX # Dangling!
</font></code></blockquote>
<BLOCKQUOTE>
If I should need to restore NFS, a 5-second fix will do it, without having
to figure out what directory the link should go into, where in the process
it should load (as determined by the number after the 'S'), or where it
should point.
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../../gx/dennis/qbub.gif" ALT="(?)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
Thank you Ben, and others, a google search found "symlinks", although it
only appears to be available for <A HREF="http://www.debian.org/">Debian</A>.
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
> [Ben]
You could use the "alien" utility to convert it, or simply go to Debian's
page for "symlinks" -
</BLOCKQUOTE>
<BLOCKQUOTE>
<<A HREF="http://packages.debian.org/stable/utils/symlinks.html>"
>http://packages.debian.org/stable/utils/symlinks.html></A>;
</BLOCKQUOTE>
<BLOCKQUOTE>
They always provide a link to the tarball from which the package was made,
and you can compile it yourself. <grin> I <EM>like</EM> Debian. A lot.
</BLOCKQUOTE>
<BLOCKQUOTE><IMG SRC="../../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
> [Mike]
Or, if you don't have the symlinks program available:
</BLOCKQUOTE>
<blockquote><pre>( find / -type l | xargs file ) | grep 'broken symbolic link'
</pre></blockquote>
<P><STRONG><IMG SRC="../../gx/dennis/qbub.gif" ALT="(?)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
The symlinnks prog worked a charm, indeed ot cleaned up everything nicely,
changing absolute to relative links too, lovely.
</STRONG></P>
<P><STRONG>
The real issue, is my rampant stupidity, since after downloading symlinks,
lo and behold, I discovered it is part of Mandrake 7.2 which I use.
</STRONG></P>
<P><STRONG>
I had pissed about pouring over man pages trying to find out how to
delimit a search to find the buggers, only to discover my salvation
was close at hand.
</STRONG></P>
<P><STRONG>
I have received several TAG replies, and I must say the 1st was within
45 minutes. Astounding
<IMG SRC="../../gx/dennis/smily.gif" ALT=":)"
height="24" width="20" align="middle">
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
> [Heather]
I'll say it's astounding. Some people don't get answers for
weeks... if at all...
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../../gx/dennis/qbub.gif" ALT="(?)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
Keep it up guys.
</STRONG></P>
<P><STRONG>
--
Merp!
</STRONG></P>
<!-- end 5 -->
<!--startcut ======================================================= -->
<P> <hr> </p>
<!-- *** BEGIN copyright *** -->
<H5 align="center">This page edited and maintained by the Editors
of <I>Linux Gazette</I>
<a href="http://www.linuxgazette.com/copying.html"
>Copyright ©</a> 2001
<BR>Published in issue 65 of <I>Linux Gazette</I> April 2001</H5>
<H6 ALIGN="center">HTML script maintained by
<A HREF="mailto:star@starshine.org">Heather Stern</a> of
Starshine Technical Services,
<A HREF="http://www.starshine.org/">http://www.starshine.org/</A>
</H6>
<!-- *** END copyright *** -->
<P> <hr>
<!-- begin tagnav ::::::::::::::::::::::::::::::::::::::::::::::::::-->
<p align="center">
<table width="100%" border="0"><tr>
<td align="right" valign="center"
><IMG ALT="" SRC="../../gx/navbar/left.jpg"
WIDTH="14" HEIGHT="45" BORDER="0" ALIGN="middle" border="0"
><A HREF="..//"
><IMG SRC="../../gx/navbar/toc.jpg" align="middle"
ALT="[ Table Of Contents ]" border="0"></A
><A HREF="../lg_answer65.html"
><IMG SRC="../../gx/dennis/answertoc.jpg" align="middle"
ALT="[ Answer Guy Current Index ]" border="0"></A></td>
<td align="center" valign="center"><A HREF="../lg_answer65.html#greeting"><img align="middle"
src="../../gx/dennis/smily.gif" alt="greetings" border="0"></A>
<A HREF="1.html">1</A>
<A HREF="2.html">2</A>
<A HREF="3.html">3</A>
<A HREF="4.html">4</A>
<A HREF="5.html">5</A>
<A HREF="6.html">6</A>
<A HREF="7.html">7</A>
<A HREF="8.html">8</A>
<A HREF="9.html">9</A>
<A HREF="10.html">10</A>
<A HREF="11.html">11</A>
<A HREF="12.html">12</A>
<A HREF="13.html">13</A>
<A HREF="14.html">14</A>
<A HREF="15.html">15</A>
<A HREF="16.html">16</A>
<A HREF="17.html">17</A>
<A HREF="18.html">18</A>
<A HREF="19.html">19</A>
<A HREF="20.html">20</A>
<A HREF="21.html">21</A>
<A HREF="22.html">22</A>
<A HREF="23.html">23</A>
<A HREF="24.html">24</A>
<A HREF="25.html">25</A>
<A HREF="26.html">26</A>
<A HREF="27.html">27</A>
<A HREF="28.html">28</A>
<A HREF="29.html">29</A></td>
<td align="left" valign="center"><A HREF="../../tag/kb.html"
><IMG SRC="../../gx/dennis/answerpast.jpg" align="middle"
ALT="[ Index of Past Answers ]" border="0"></A
><IMG ALT="" SRC="../../gx/navbar/right.jpg" align="middle"
WIDTH="14" HEIGHT="45" BORDER="0"></td></tr></table>
</p>
<!-- end tagnav ::::::::::::::::::::::::::::::::::::::::::::::::::::-->
<P> <hr>
<CENTER>
<!-- *** BEGIN navbar *** -->
<!-- *** END navbar *** -->
</CENTER>
</p>
<!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
</BODY></HTML>
<!--endcut ========================================================= -->
|