file_cmds-82.tar.gz
[apple/file_cmds.git] / ln / symlink.7
1 .\" Copyright (c) 1992, 1993, 1994
2 .\"     The Regents of the University of California.  All rights reserved.
3 .\"
4 .\" Redistribution and use in source and binary forms, with or without
5 .\" modification, are permitted provided that the following conditions
6 .\" are met:
7 .\" 1. Redistributions of source code must retain the above copyright
8 .\"    notice, this list of conditions and the following disclaimer.
9 .\" 2. Redistributions in binary form must reproduce the above copyright
10 .\"    notice, this list of conditions and the following disclaimer in the
11 .\"    documentation and/or other materials provided with the distribution.
12 .\" 3. All advertising materials mentioning features or use of this software
13 .\"    must display the following acknowledgement:
14 .\"     This product includes software developed by the University of
15 .\"     California, Berkeley and its contributors.
16 .\" 4. Neither the name of the University nor the names of its contributors
17 .\"    may be used to endorse or promote products derived from this software
18 .\"    without specific prior written permission.
19 .\"
20 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 .\" SUCH DAMAGE.
31 .\"
32 .\"     @(#)symlink.7   8.3 (Berkeley) 3/31/94
33 .\" $FreeBSD: src/bin/ln/symlink.7,v 1.25 2002/08/21 17:32:32 trhodes Exp $
34 .\"
35 .Dd March 31, 1994
36 .Dt SYMLINK 7
37 .Os
38 .Sh NAME
39 .Nm symlink
40 .Nd symbolic link handling
41 .Sh SYMBOLIC LINK HANDLING
42 Symbolic links are files that act as pointers to other files.
43 To understand their behavior, you must first understand how hard links
44 work.
45 A hard link to a file is indistinguishable from the original file because
46 it is a reference to the object underlying the original file name.
47 Changes to a file are independent of the name used to reference the
48 file.
49 Hard links may not refer to directories and may not reference files
50 on different file systems.
51 A symbolic link contains the name of the file to which it is linked,
52 i.e. it is a pointer to another name, and not to an underlying object.
53 For this reason, symbolic links may reference directories and may span
54 file systems.
55 .Pp
56 Because a symbolic link and its referenced object coexist in the file system
57 name space, confusion can arise in distinguishing between the link itself
58 and the referenced object.
59 Historically, commands and system calls have adopted their own link
60 following conventions in a somewhat ad-hoc fashion.
61 Rules for more a uniform approach, as they are implemented in this system,
62 are outlined here.
63 It is important that local applications conform to these rules, too,
64 so that the user interface can be as consistent as possible.
65 .Pp
66 Symbolic links are handled either by operating on the link itself,
67 or by operating on the object referenced by the link.
68 In the latter case,
69 an application or system call is said to
70 .Dq follow
71 the link.
72 Symbolic links may reference other symbolic links,
73 in which case the links are dereferenced until an object that is
74 not a symbolic link is found,
75 a symbolic link which references a file which doesn't exist is found,
76 or a loop is detected.
77 (Loop detection is done by placing an upper limit on the number of
78 links that may be followed, and an error results if this limit is
79 exceeded.)
80 .Pp
81 There are three separate areas that need to be discussed.
82 They are as follows:
83 .Pp
84 .Bl -enum -compact -offset indent
85 .It
86 Symbolic links used as file name arguments for system calls.
87 .It
88 Symbolic links specified as command line arguments to utilities that
89 are not traversing a file tree.
90 .It
91 Symbolic links encountered by utilities that are traversing a file tree
92 (either specified on the command line or encountered as part of the
93 file hierarchy walk).
94 .El
95 .Ss System calls.
96 The first area is symbolic links used as file name arguments for
97 system calls.
98 .Pp
99 Except as noted below, all system calls follow symbolic links.
100 For example, if there were a symbolic link
101 .Dq Li slink
102 which pointed to a file named
103 .Dq Li afile ,
104 the system call
105 .Dq Li open("slink" ...\&)
106 would return a file descriptor to the file
107 .Dq afile .
108 .Pp
109 There are nine system calls that do not follow links, and which operate
110 on the symbolic link itself.
111 They are:
112 .Xr lchflags 2 ,
113 .Xr lchmod 2 ,
114 .Xr lchown 2 ,
115 .Xr lstat 2 ,
116 .Xr lutimes 2 ,
117 .Xr readlink 2 ,
118 .Xr rename 2 ,
119 .Xr rmdir 2 ,
120 and
121 .Xr unlink 2 .
122 Because
123 .Xr remove 3
124 is an alias for
125 .Xr unlink 2 ,
126 it also does not follow symbolic links.
127 When
128 .Xr rmdir 2
129 is applied to a symbolic link, it fails with the error
130 .Er ENOTDIR .
131 .Pp
132 The owner and group of an existing symbolic link can be changed by
133 means of the
134 .Xr lchown 2
135 system call.
136 The flags, access permissions, owner/group and modification time of
137 an existing symbolic link can be changed by means of the
138 .Xr lchflags 2 ,
139 .Xr lchmod 2 ,
140 .Xr lchown 2 ,
141 and 
142 .Xr lutimes 2
143 system calls, respectively.
144 Of these, only the flags are used by the system;
145 the access permissions and ownership are ignored.
146 .Pp
147 The
148 .Bx 4.4
149 system differs from historical
150 .Bx 4
151 systems in that the system call
152 .Xr chown 2
153 has been changed to follow symbolic links.
154 The
155 .Xr lchown 2
156 system call was added later when the limitations of the new
157 .Xr chown 2
158 became apparent.
159 .Ss Commands not traversing a file tree.
160 The second area is symbolic links, specified as command line file
161 name arguments, to commands which are not traversing a file tree.
162 .Pp
163 Except as noted below, commands follow symbolic links named as command
164 line arguments.
165 For example, if there were a symbolic link
166 .Dq Li slink
167 which pointed to a file named
168 .Dq Li afile ,
169 the command
170 .Dq Li cat slink
171 would display the contents of the file
172 .Dq Li afile .
173 .Pp
174 It is important to realize that this rule includes commands which may
175 optionally traverse file trees, e.g. the command
176 .Dq Li "chown file"
177 is included in this rule, while the command
178 .Dq Li "chown -R file"
179 is not.
180 (The latter is described in the third area, below.)
181 .Pp
182 If it is explicitly intended that the command operate on the symbolic
183 link instead of following the symbolic link, e.g., it is desired that
184 .Dq Li "chown slink"
185 change the ownership of the file that
186 .Dq Li slink
187 is, whether it is a symbolic link or not, the
188 .Fl h
189 option should be used.
190 In the above example,
191 .Dq Li "chown root slink"
192 would change the ownership of the file referenced by
193 .Dq Li slink ,
194 while
195 .Dq Li "chown -h root slink"
196 would change the ownership of
197 .Dq Li slink
198 itself.
199 .Pp
200 There are four exceptions to this rule.
201 The
202 .Xr mv 1
203 and
204 .Xr rm 1
205 commands do not follow symbolic links named as arguments,
206 but respectively attempt to rename and delete them.
207 (Note, if the symbolic link references a file via a relative path,
208 moving it to another directory may very well cause it to stop working,
209 since the path may no longer be correct.)
210 .Pp
211 The
212 .Xr ls 1
213 command is also an exception to this rule.
214 For compatibility with historic systems (when
215 .Nm ls
216 is not doing a tree walk, i.e. the
217 .Fl R
218 option is not specified),
219 the
220 .Nm ls
221 command follows symbolic links named as arguments if the
222 .Fl H
223 or
224 .Fl L
225 option is specified,
226 or if the
227 .Fl F ,
228 .Fl d
229 or
230 .Fl l
231 options are not specified.  (The
232 .Nm ls
233 command is the only command where the
234 .Fl H
235 and
236 .Fl L
237 options affect its behavior even though it is not doing a walk of
238 a file tree.)
239 .Pp
240 The
241 .Xr file 1
242 command is also an exception to this rule.
243 The
244 .Xr file 1
245 command does not follow symbolic links named as argument by default.
246 The
247 .Xr file 1
248 command does follow symbolic links named as argument if
249 .Fl L
250 option is specified.
251 .Pp
252 The
253 .Bx 4.4
254 system differs from historical
255 .Bx 4
256 systems in that the
257 .Nm chown
258 and
259 .Nm chgrp
260 commands follow symbolic links specified on the command line.
261 .Ss Commands traversing a file tree.
262 The following commands either optionally or always traverse file trees:
263 .Xr chflags 1 ,
264 .Xr chgrp 1 ,
265 .Xr chmod 1 ,
266 .Xr cp 1 ,
267 .Xr du 1 ,
268 .Xr find 1 ,
269 .Xr ls 1 ,
270 .Xr pax 1 ,
271 .Xr rm 1 ,
272 .Xr tar 1
273 and
274 .Xr chown 8 .
275 .Pp
276 It is important to realize that the following rules apply equally to
277 symbolic links encountered during the file tree traversal and symbolic
278 links listed as command line arguments.
279 .Pp
280 The first rule applies to symbolic links that reference files that are
281 not of type directory.
282 Operations that apply to symbolic links are performed on the links
283 themselves, but otherwise the links are ignored.
284 .Pp
285 The command
286 .Dq Li "rm -r slink directory"
287 will remove
288 .Dq Li slink ,
289 as well as any symbolic links encountered in the tree traversal of
290 .Dq Li directory ,
291 because symbolic links may be removed.
292 In no case will
293 .Nm rm
294 affect the file which
295 .Dq Li slink
296 references in any way.
297 .Pp
298 The second rule applies to symbolic links that reference files of type
299 directory.
300 Symbolic links which reference files of type directory are never
301 .Dq followed
302 by default.
303 This is often referred to as a
304 .Dq physical
305 walk, as opposed to a
306 .Dq logical
307 walk (where symbolic links referencing directories are followed).
308 .Pp
309 As consistently as possible, you can make commands doing a file tree
310 walk follow any symbolic links named on the command line, regardless
311 of the type of file they reference, by specifying the
312 .Fl H
313 (for
314 .Dq half\-logical )
315 flag.
316 This flag is intended to make the command line name space look
317 like the logical name space.
318 (Note, for commands that do not always do file tree traversals, the
319 .Fl H
320 flag will be ignored if the
321 .Fl R
322 flag is not also specified.)
323 .Pp
324 For example, the command
325 .Dq Li "chown -HR user slink"
326 will traverse the file hierarchy rooted in the file pointed to by
327 .Dq Li slink .
328 Note, the
329 .Fl H
330 is not the same as the previously discussed
331 .Fl h
332 flag.
333 The
334 .Fl H
335 flag causes symbolic links specified on the command line to be
336 dereferenced both for the purposes of the action to be performed
337 and the tree walk, and it is as if the user had specified the
338 name of the file to which the symbolic link pointed.
339 .Pp
340 As consistently as possible, you can make commands doing a file tree
341 walk follow any symbolic links named on the command line, as well as
342 any symbolic links encountered during the traversal, regardless of
343 the type of file they reference, by specifying the
344 .Fl L
345 (for
346 .Dq logical )
347 flag.
348 This flag is intended to make the entire name space look like
349 the logical name space.
350 (Note, for commands that do not always do file tree traversals, the
351 .Fl L
352 flag will be ignored if the
353 .Fl R
354 flag is not also specified.)
355 .Pp
356 For example, the command
357 .Dq Li "chown -LR user slink"
358 will change the owner of the file referenced by
359 .Dq Li slink .
360 If
361 .Dq Li slink
362 references a directory,
363 .Nm chown
364 will traverse the file hierarchy rooted in the directory that it
365 references.
366 In addition, if any symbolic links are encountered in any file tree that
367 .Nm chown
368 traverses, they will be treated in the same fashion as
369 .Dq Li slink .
370 .Pp
371 As consistently as possible, you can specify the default behavior by
372 specifying the
373 .Fl P
374 (for
375 .Dq physical )
376 flag.
377 This flag is intended to make the entire name space look like the
378 physical name space.
379 .Pp
380 For commands that do not by default do file tree traversals, the
381 .Fl H ,
382 .Fl L
383 and
384 .Fl P
385 flags are ignored if the
386 .Fl R
387 flag is not also specified.
388 In addition, you may specify the
389 .Fl H ,
390 .Fl L
391 and
392 .Fl P
393 options more than once; the last one specified determines the
394 command's behavior.
395 This is intended to permit you to alias commands to behave one way
396 or the other, and then override that behavior on the command line.
397 .Pp
398 The
399 .Xr ls 1
400 and
401 .Xr rm 1
402 commands have exceptions to these rules.
403 The
404 .Nm rm
405 command operates on the symbolic link, and not the file it references,
406 and therefore never follows a symbolic link.
407 The
408 .Nm rm
409 command does not support the
410 .Fl H ,
411 .Fl L
412 or
413 .Fl P
414 options.
415 .Pp
416 To maintain compatibility with historic systems,
417 the
418 .Nm ls
419 command acts a little differently.  If you do not specify the
420 .Fl F ,
421 .Fl d
422 or
423 .Fl l
424 options,
425 .Nm ls
426 will follow symbolic links specified on the command line.  If the
427 .Fl L
428 flag is specified,
429 .Nm ls
430 follows all symbolic links,
431 regardless of their type,
432 whether specified on the command line or encountered in the tree walk.
433 .Sh SEE ALSO
434 .Xr chflags 1 ,
435 .Xr chgrp 1 ,
436 .Xr chmod 1 ,
437 .Xr cp 1 ,
438 .Xr du 1 ,
439 .Xr find 1 ,
440 .Xr ln 1 ,
441 .Xr ls 1 ,
442 .Xr mv 1 ,
443 .Xr pax 1 ,
444 .Xr rm 1 ,
445 .Xr tar 1 ,
446 .Xr lchflags 2 ,
447 .Xr lchmod 2 ,
448 .Xr lchown 2 ,
449 .Xr lstat 2 ,
450 .Xr lutimes 2 ,
451 .Xr readlink 2 ,
452 .Xr rename 2 ,
453 .Xr symlink 2 ,
454 .Xr unlink 2 ,
455 .Xr fts 3 ,
456 .Xr remove 3 ,
457 .Xr chown 8