[Bug 194308] New: The man page for ln(1) is extremely confusing
bugzilla-noreply at freebsd.org
bugzilla-noreply at freebsd.org
Sat Oct 11 20:43:22 UTC 2014
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=194308
Bug ID: 194308
Summary: The man page for ln(1) is extremely confusing
Product: Documentation
Version: Latest
Hardware: Any
OS: Any
Status: Needs Triage
Severity: Affects Many People
Priority: ---
Component: Documentation
Assignee: freebsd-doc at FreeBSD.org
Reporter: scratch65535 at att.net
I don't think the terminology being used could be more confusing unless someone
worked at it. I know that I don't use ln enough for the calling sequence to
stick in my mind, so I always have to go research it elsewhere because if I
read the man page I know less when I'm done than when I started.
My proposed rewrite (details may be incorrect because I *really* cannot
understand it as written and haven't the time to experiment)
SYNOPSIS
ln [-L | -P | -s [-F]] [-f | -iw] [-hnv] real_file [new_alias]
ln [options] real_file0 ... real_fileN dir_name
link (no options allowed) real_file new_hard_alias
DESCRIPTION
The ln utility allows you to create aliased links to a file or a directory.
("Alias" here does not refer to the aliases in, e.g., csh, though they serve a
similar purpose)
Aliases are useful for 2 main purposes: (a) accessing some file or directory
from multiple locations; (b) getting around space or performance limitations by
moving a file/subtree to a bigger/faster device while appearing to keep it in
the same place.
There are 2 types of link alias: hard and soft/symbolic.
Hard links are the default. They are identical to regular directory entries
(inodes) except that they usually point to some file outside the current
directory. But they cannot point at a directory itself, and they cannot point
into a different filesystem.
Soft/symbolic links are a tiny fraction slower (they involve reading the link
to find out where real_file is). But they can point to a directory, and they
can point into a different filesystem.
Both kinds of link are created with the same file modes as the real file. The
name used for the alias/link need not be the same as the name of the real file.
The options are as follows, and if you use contradictory options, the
last one given will be the one that takes effect.
-F Not used by itself or for hard links.
-Fsf (default if you just specify -Fs) Deletes any existing file/directory with
the chosen name and recreates it as a soft link. It will not warn you.
-Fsi If the name you want to use for the new soft link (it need not be the same
as the name of the real file) is already in use where you want to put it, ln
will complain to stderr that it already exists and ask whether you want to
delete it. If you respond 'y' or 'Y', it will delete the file (which may be a
directory and its contents) and create the new soft link. If the name refers
to a directory, don't respond 'y'/'Y' unless you've saved off the directory's
contents or you know you don't care about them. It will not warn you again.
-Fsw Complains if the real file doesn't exist, and stops without creating the
soft link.
-L If real_file is actually a soft link, this option creates a hard link to the
real real_file. This is the default.
-P If real_file is actually a soft link, this option creates a hard link to the
soft link, and the soft link continues to point to the real_file.
-h If the alias exists and is a symbolic link, do not follow
it to the real_file. This is most useful with the -f option, to
replace a symlink
which may point to a directory.
-n Same as -h, for compatibility with other ln implementations.
-s Create a soft/symbolic link.
-v Cause ln to be verbose, showing files as they are processed.
-w Warn if the real_file of a symbolic link does not currently
exist.
An open(2) on a soft link opens the real_file. A stat(2) returns information
about the real_file. An lstat(2) returns information about the soft
alias/link, and a readlink(2) will read the contents of the soft alias/link.
Given one name, ln creates a link to that real_file using the same name
for the alias.
Given two names, ln creates a link to that real_file using the alias name
given UNLESS the second name refers to a directory, in which case the new alias
will have the same name as real_file and will be put into that directory.
I have no idea what this means -> If only the directory is specified, the link
will be made to the last component of real_file.
When the utility is called as link, exactly two arguments must be sup-
plied, neither of which may specify a directory. No options may be sup-
plied in this simple mode of operation, which creates a hard link from
alias to real_file.
EXAMPLES
Make /home/src point to the /usr/src subtree (directory):
# ln -s /usr/src /home/src
Hard link /usr/local/bin/short_alias to
/usr/local/bin/real_file_with_some_long_name:
# ln /usr/local/bin/real_file_with_some_long_name
/usr/local/bin/short_alias
As an exercise, try the following commands:
# ls -i /bin/[
11553 /bin/[
# ls -i /bin/test
11553 /bin/test
Note that both files have the same inode; that is, /bin/[ is
essentially
an alias for the test(1) command. This hard link exists so test(1)
may
be invoked from shell scripts, for example, using the if [ ]
construct.
In the next example, the second call to ln removes the original foo
and
creates a replacement pointing to baz:
# mkdir bar baz
# ln -s bar foo
# ln -shf baz foo
Without the -h option, this would instead leave foo pointing to bar and
inside foo create a new symlink baz pointing to itself. This results
from directory-walking.
An easy rule to remember is that the argument order for ln is the
same as
for cp(1): The first argument needs to exist (real_file), the second
one is created (the_alias).
--
You are receiving this mail because:
You are the assignee for the bug.
More information about the freebsd-doc
mailing list