bug-coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Difference in ln/ln -s semantics


From: Eric Blake
Subject: Re: Difference in ln/ln -s semantics
Date: Wed, 11 Feb 2009 21:29:41 -0700
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.19) Gecko/20081209 Thunderbird/2.0.0.19 Mnenhy/0.7.6.666

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

According to Vitali Lovich on 2/3/2009 12:30 PM:
> How about for symlinks: "When creating symbolic links, each TARGET path
> will be resolved relative to the parent directory of the symbolic link
> when it is accessed" below the "When creating hard links, each TARGET
> must exist." text.
> 
> Is it too sutble that this may be a problem for relative paths?  "ln"
> man page already contains a link to the symlink man page - but it's
> probably unlikely that someone using the tool is going to bother looking
> at the system call behind it.

How about the following patch?  I've pushed it to the next branch, to make
it easier to review.

- --
Don't work too hard, make some time for fun as well!

Eric Blake             address@hidden
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Cygwin)
Comment: Public key at home.comcast.net/~ericblake/eblake.gpg
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkmTpbUACgkQ84KuGfSFAYC9RQCgy2yyUt5mgfu3sHVIuHUSfJmG
no4An0uZPww/cgLMZpuZkp0fcIc2sYSx
=CMlD
-----END PGP SIGNATURE-----
From 022889a4575390b656abf89b0e8f43ef03c1cc00 Mon Sep 17 00:00:00 2001
From: Eric Blake <address@hidden>
Date: Wed, 11 Feb 2009 21:09:09 -0700
Subject: [PATCH] ln: add details to --help text

* src/ln.c (usage): Mention more about symlink properties.
* doc/coreutils.texi (ln invocation): Likewise.
* THANKS: Update.
Reported by Vitali Lovich.

Signed-off-by: Eric Blake <address@hidden>
---
 THANKS             |    1 +
 doc/coreutils.texi |   25 ++++++++++++++++++++++++-
 src/ln.c           |    6 ++++--
 3 files changed, 29 insertions(+), 3 deletions(-)

diff --git a/THANKS b/THANKS
index da1fc15..a3f9801 100644
--- a/THANKS
+++ b/THANKS
diff --git a/doc/coreutils.texi b/doc/coreutils.texi
index c3a1164..57497e9 100644
--- a/doc/coreutils.texi
+++ b/doc/coreutils.texi
@@ -8689,9 +8689,32 @@ ln invocation
 reading, writing, and so on) are passed the symbolic link file, the
 kernel automatically @dfn{dereferences} the link and operates on the
 target of the link.  But some operations (e.g., removing) work on the
-link file itself, rather than on its target.  @xref{Symbolic Links,,,
+link file itself, rather than on its target.  The owner, group, and
+mode of a symlink are not significant to file access performed through
+the link.  @xref{Symbolic Links,,,
 libc, The GNU C Library Reference Manual}.

+Symbolic links can contain arbitrary strings; a @dfn{dangling symlink}
+occurs when the string in the symlink does not resolve to a file.
+There are no restrictions against creating dangling symbolic links.
+There are trade-offs to using absolute or relative symlinks.  An
+absolute symlink always points to the same file, even if the directory
+containing the link is moved.  However, if the symlink is visible from
+more than one machine (such as on a networked file system), the file
+pointed to might not always be the same.  A relative symbolic link is
+resolved in relation to the directory that contains the link, and is
+often useful in referring to files on the same device without regards
+to what name that device is mounted on when accessed via networked
+machines.
+
+When creating a relative symlink in a different location than the
+current directory, the resolution of the symlink will be different
+than the resolution of the same string from the current directory.
+Therefore, many users prefer to first change directories to the
+location where the relative symlink will be created, so that
+tab-completion or other file resolution will find the same target as
+what will be placed in the symlink.
+
 The program accepts the following options.  Also see @ref{Common options}.

 @table @samp
diff --git a/src/ln.c b/src/ln.c
index 2dc5628..d0f9266 100644
--- a/src/ln.c
+++ b/src/ln.c
@@ -1,5 +1,5 @@
 /* `ln' program to create links between files.
-   Copyright (C) 1986, 1989-1991, 1995-2008 Free Software Foundation, Inc.
+   Copyright (C) 1986, 1989-1991, 1995-2009 Free Software Foundation, Inc.

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -359,7 +359,9 @@ In the 1st form, create a link to TARGET with the name 
LINK_NAME.\n\
 In the 2nd form, create a link to TARGET in the current directory.\n\
 In the 3rd and 4th forms, create links to each TARGET in DIRECTORY.\n\
 Create hard links by default, symbolic links with --symbolic.\n\
-When creating hard links, each TARGET must exist.\n\
+When creating hard links, each TARGET must exist.  Symbolic links\n\
+can hold arbitrary text; if later resolved, a relative link is\n\
+interpreted in relation to its parent directory.\n\
 \n\
 "), stdout);
       fputs (_("\
-- 
1.6.1.2


reply via email to

[Prev in Thread] Current Thread [Next in Thread]