Source-Changes-HG archive

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

[src/trunk]: src/bin/ln Replace ours with the FreeBSD version; it is more ver...



details:   https://anonhg.NetBSD.org/src/rev/a40c71661360
branches:  trunk
changeset: 353123:a40c71661360
user:      christos <christos%NetBSD.org@localhost>
date:      Thu Apr 20 21:50:50 2017 +0000

description:
Replace ours with the FreeBSD version; it is more versatile and handles
errors better (does not remove files if it is going to fail when -f).

diffstat:

 bin/ln/ln.1 |  198 +++++++++++++++++++++++++++++----
 bin/ln/ln.c |  353 +++++++++++++++++++++++++++++++++++++++++------------------
 2 files changed, 415 insertions(+), 136 deletions(-)

diffs (truncated from 751 to 300 lines):

diff -r 1b3ac85dd64f -r a40c71661360 bin/ln/ln.1
--- a/bin/ln/ln.1       Thu Apr 20 20:34:24 2017 +0000
+++ b/bin/ln/ln.1       Thu Apr 20 21:50:50 2017 +0000
@@ -1,5 +1,5 @@
-.\"    $NetBSD: ln.1,v 1.26 2016/08/10 17:38:39 sevan Exp $
-.\"
+.\" $NetBSD: ln.1,v 1.27 2017/04/20 21:50:50 christos Exp $
+.\"-
 .\" Copyright (c) 1980, 1990, 1993
 .\"    The Regents of the University of California.  All rights reserved.
 .\"
@@ -14,7 +14,7 @@
 .\" 2. Redistributions in binary form must reproduce the above copyright
 .\"    notice, this list of conditions and the following disclaimer in the
 .\"    documentation and/or other materials provided with the distribution.
-.\" 3. Neither the name of the University nor the names of its contributors
+.\" 4. Neither the name of the University nor the names of its contributors
 .\"    may be used to endorse or promote products derived from this software
 .\"    without specific prior written permission.
 .\"
@@ -31,41 +31,94 @@
 .\" SUCH DAMAGE.
 .\"
 .\"    @(#)ln.1        8.2 (Berkeley) 12/30/93
+.\" $FreeBSD: head/bin/ln/ln.1 244791 2012-12-28 22:06:33Z gjb $
 .\"
-.Dd August 10, 2016
+.Dd April 20, 2017
 .Dt LN 1
 .Os
 .Sh NAME
-.Nm ln
-.Nd make links
+.Nm ln ,
+.Nm link
+.Nd link files
 .Sh SYNOPSIS
 .Nm
-.Op Fl fhinsv
+.Op Fl L | Fl P | Fl s Op Fl F
+.Op Fl f | iw
+.Op Fl hnv
 .Ar source_file
 .Op Ar target_file
 .Nm
-.Op Fl fhinsv
-.Ar source_file ... target_dir
+.Op Fl L | Fl P | Fl s Op Fl F
+.Op Fl f | iw
+.Op Fl hnv
+.Ar source_file ...
+.Ar target_dir
+.Nm link
+.Ar source_file Ar target_file
 .Sh DESCRIPTION
 The
 .Nm
-utility creates a new directory entry (linked file) which has the
-same modes as the original file.
+utility creates a new directory entry (linked file) for the file name
+specified by
+.Ar target_file .
+The
+.Ar target_file
+will be created with the same file modes as the
+.Ar source_file .
 It is useful for maintaining multiple copies of a file in many places
 at once without using up storage for the
 .Dq copies ;
 instead, a link
 .Dq points
 to the original copy.
-There are two types of links: hard links and symbolic links.
+There are two types of links; hard links and symbolic links.
 How a link
 .Dq points
-to a file is one of the differences between a hard or symbolic link.
+to a file is one of the differences between a hard and symbolic link.
 .Pp
 The options are as follows:
 .Bl -tag -width flag
+.It Fl F
+If the target file already exists and is a directory, then remove it
+so that the link may occur.
+The
+.Fl F
+option should be used with either
+.Fl f
+or
+.Fl i
+options.
+If none is specified,
+.Fl f
+is implied.
+The
+.Fl F
+option is a no-op unless
+.Fl s
+option is specified.
+.It Fl L
+When creating a hard link to a symbolic link,
+create a hard link to the target of the symbolic link.
+This is the default.
+This option cancels the
+.Fl P
+option.
+.It Fl P
+When creating a hard link to a symbolic link,
+create a hard link to the symbolic link itself.
+This option cancels the
+.Fl L
+option.
 .It Fl f
-Unlink any already existing file, permitting the link to occur.
+If the target file already exists,
+then unlink it so that the link may occur.
+(The
+.Fl f
+option overrides any previous
+.Fl i
+and
+.Fl w
+options.)
 .It Fl h
 If the
 .Ar target_file
@@ -95,24 +148,26 @@
 .Fl h ,
 for compatibility with other
 .Nm
-implementations, namely GNU coreutils.
+implementations.
 .It Fl s
 Create a symbolic link.
 .It Fl v
 Cause
 .Nm
 to be verbose, showing files as they are processed.
+.It Fl w
+Warn if the source of a symbolic link does not currently exist.
 .El
 .Pp
-By default
+By default,
 .Nm
 makes
 .Em hard
 links.
 A hard link to a file is indistinguishable from the original directory entry;
-any changes to a file are effective independent of the name used to reference
+any changes to a file are effectively independent of the name used to reference
 the file.
-Hard links may not normally refer to directories and may not span file systems.
+Directories may not be hardlinked, and hard links may not span file systems.
 .Pp
 A symbolic link contains the name of the file to
 which it is linked.
@@ -132,7 +187,7 @@
 Given one or two arguments,
 .Nm
 creates a link to an existing file
-.Ar source_file  .
+.Ar source_file .
 If
 .Ar target_file
 is given, the link has that name;
@@ -141,7 +196,7 @@
 otherwise it is placed in the current directory.
 If only the directory is specified, the link will be made
 to the last component of
-.Ar source_file  .
+.Ar source_file .
 .Pp
 Given more than two arguments,
 .Nm
@@ -149,6 +204,97 @@
 .Ar target_dir
 to all the named source files.
 The links made will have the same name as the files being linked to.
+.Pp
+When the utility is called as
+.Nm link ,
+exactly two arguments must be supplied,
+neither of which may specify a directory.
+No options may be supplied in this simple mode of operation,
+which performs a
+.Xr link 2
+operation using the two passed arguments.
+.Sh EXAMPLES
+Create a symbolic link named
+.Pa /home/src
+and point it to
+.Pa /usr/src :
+.Pp
+.Dl # ln -s /usr/src /home/src
+.Pp
+Hard link
+.Pa /usr/local/bin/fooprog
+to file
+.Pa /usr/local/bin/fooprog-1.0 :
+.Pp
+.Dl # ln /usr/local/bin/fooprog-1.0 /usr/local/bin/fooprog
+.Pp
+As an exercise, try the following commands:
+.Bd -literal -offset indent
+# ls -i /bin/[
+11553 /bin/[
+# ls -i /bin/test
+11553 /bin/test
+.Ed
+.Pp
+Note that both files have the same inode; that is,
+.Pa /bin/[
+is essentially an alias for the
+.Xr test 1
+command.
+This hard link exists so
+.Xr test 1
+may be invoked from shell scripts, for example, using the
+.Li "if [ ]"
+construct.
+.Pp
+In the next example, the second call to
+.Nm
+removes the original
+.Pa foo
+and creates a replacement pointing to
+.Pa baz :
+.Bd -literal -offset indent
+# mkdir bar baz
+# ln -s bar foo
+# ln -shf baz foo
+.Ed
+.Pp
+Without the
+.Fl h
+option, this would instead leave
+.Pa foo
+pointing to
+.Pa bar
+and inside
+.Pa foo
+create a new symlink
+.Pa baz
+pointing to itself.
+This results from directory-walking.
+.Pp
+An easy rule to remember is that the argument order for
+.Nm
+is the same as for
+.Xr cp 1 :
+The first argument needs to exist, the second one is created.
+.Sh COMPATIBILITY
+The
+.Fl h ,
+.Fl i ,
+.Fl n ,
+.Fl v
+and
+.Fl w
+options are non-standard and their use in scripts is not recommended.
+They are provided solely for compatibility with other
+.Nm
+implementations.
+.Pp
+The
+.Fl F
+option is a
+.Fx
+extension and should not be used in portable scripts.
 .Sh SEE ALSO
 .Xr link 2 ,
 .Xr lstat 2 ,
@@ -162,12 +308,12 @@
 utility conforms to
 .St -p1003.2-92 .
 .Pp
-The
-.Fl v
-option is an extension to
-.St -p1003.2-92 .
+The simplified
+.Nm link
+command conforms to
+.St -susv2 .
 .Sh HISTORY
-A
+An
 .Nm
-utility appeared in
+command appeared in
 .At v1 .
diff -r 1b3ac85dd64f -r a40c71661360 bin/ln/ln.c
--- a/bin/ln/ln.c       Thu Apr 20 20:34:24 2017 +0000
+++ b/bin/ln/ln.c       Thu Apr 20 21:50:50 2017 +0000
@@ -1,6 +1,6 @@
-/* $NetBSD: ln.c,v 1.35 2011/08/29 14:38:30 joerg Exp $ */
+/*     $NetBSD: ln.c,v 1.36 2017/04/20 21:50:50 christos Exp $ */
 
-/*



Home | Main Index | Thread Index | Old Index